made with requirebin
Last active
September 12, 2016 09:15
-
-
Save ahdinosaur/7d807a71278795e254630e9570c533b9 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var pull = require('pull-stream') | |
var paramap = require('pull-paramap') | |
var async = require('pull-async') | |
var xhr = require('xhr') | |
var urls = [ | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/agpl3.txt', | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/apache.txt', | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/mit.txt' | |
] | |
pull( | |
pull.values(urls), | |
paramap(function (url, next) { | |
pull( | |
async(cb => { | |
xhr(url, cb) | |
}), | |
pull.map(res => res.body), | |
pull.map(str => str.toUpperCase()), | |
pull.through(str => console.log(str)), | |
pull.drain(null, (err) => { | |
next(err, url) | |
}) | |
) | |
}), | |
pull.collect((err, out) => { | |
console.log('done', out) | |
}) | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
setTimeout(function(){ | |
;require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
'use strict' | |
module.exports = function pull (a) { | |
var length = arguments.length | |
if (typeof a === 'function' && a.length === 1) { | |
var args = new Array(length) | |
for(var i = 0; i < length; i++) | |
args[i] = arguments[i] | |
return function (read) { | |
if (args == null) { | |
throw new TypeError("partial sink should only be called once!") | |
} | |
// Grab the reference after the check, because it's always an array now | |
// (engines like that kind of consistency). | |
var ref = args | |
args = null | |
// Prioritize common case of small number of pulls. | |
switch (length) { | |
case 1: return pull(read, ref[0]) | |
case 2: return pull(read, ref[0], ref[1]) | |
case 3: return pull(read, ref[0], ref[1], ref[2]) | |
case 4: return pull(read, ref[0], ref[1], ref[2], ref[3]) | |
default: | |
ref.unshift(read) | |
return pull.apply(null, ref) | |
} | |
} | |
} | |
var read = a | |
if (read && typeof read.source === 'function') { | |
read = read.source | |
} | |
for (var i = 1; i < length; i++) { | |
var s = arguments[i] | |
if (typeof s === 'function') { | |
read = s(read) | |
} else if (s && typeof s === 'object') { | |
s.sink(read) | |
read = s.source | |
} | |
} | |
return read | |
} | |
},{}],2:[function(require,module,exports){ | |
'use strict' | |
var reduce = require('./reduce') | |
module.exports = function collect (cb) { | |
return reduce(function (arr, item) { | |
arr.push(item) | |
return arr | |
}, [], cb) | |
} | |
},{"./reduce":9}],3:[function(require,module,exports){ | |
'use strict' | |
var reduce = require('./reduce') | |
module.exports = function concat (cb) { | |
return reduce(function (a, b) { | |
return a + b | |
}, '', cb) | |
} | |
},{"./reduce":9}],4:[function(require,module,exports){ | |
'use strict' | |
module.exports = function drain (op, done) { | |
var read, abort | |
function sink (_read) { | |
read = _read | |
if(abort) return sink.abort() | |
//this function is much simpler to write if you | |
//just use recursion, but by using a while loop | |
//we do not blow the stack if the stream happens to be sync. | |
;(function next() { | |
var loop = true, cbed = false | |
while(loop) { | |
cbed = false | |
read(null, function (end, data) { | |
cbed = true | |
if(end = end || abort) { | |
loop = false | |
if(done) done(end === true ? null : end) | |
else if(end && end !== true) | |
throw end | |
} | |
else if(op && false === op(data) || abort) { | |
loop = false | |
read(abort || true, done || function () {}) | |
} | |
else if(!loop){ | |
next() | |
} | |
}) | |
if(!cbed) { | |
loop = false | |
return | |
} | |
} | |
})() | |
} | |
sink.abort = function (err, cb) { | |
if('function' == typeof err) | |
cb = err, err = true | |
abort = err || true | |
if(read) return read(abort, cb || function () {}) | |
} | |
return sink | |
} | |
},{}],5:[function(require,module,exports){ | |
'use strict' | |
function id (e) { return e } | |
var prop = require('../util/prop') | |
var drain = require('./drain') | |
module.exports = function find (test, cb) { | |
var ended = false | |
if(!cb) | |
cb = test, test = id | |
else | |
test = prop(test) || id | |
return drain(function (data) { | |
if(test(data)) { | |
ended = true | |
cb(null, data) | |
return false | |
} | |
}, function (err) { | |
if(ended) return //already called back | |
cb(err === true ? null : err, null) | |
}) | |
} | |
},{"../util/prop":29,"./drain":4}],6:[function(require,module,exports){ | |
'use strict' | |
module.exports = { | |
drain: require('./drain'), | |
onEnd: require('./on-end'), | |
log: require('./log'), | |
find: require('./find'), | |
reduce: require('./reduce'), | |
collect: require('./collect'), | |
concat: require('./concat') | |
} | |
},{"./collect":2,"./concat":3,"./drain":4,"./find":5,"./log":7,"./on-end":8,"./reduce":9}],7:[function(require,module,exports){ | |
'use strict' | |
var drain = require('./drain') | |
module.exports = function log (done) { | |
return drain(function (data) { | |
console.log(data) | |
}, done) | |
} | |
},{"./drain":4}],8:[function(require,module,exports){ | |
'use strict' | |
var drain = require('./drain') | |
module.exports = function onEnd (done) { | |
return drain(null, done) | |
} | |
},{"./drain":4}],9:[function(require,module,exports){ | |
'use strict' | |
var drain = require('./drain') | |
module.exports = function reduce (reducer, acc, cb) { | |
return drain(function (data) { | |
acc = reducer(acc, data) | |
}, function (err) { | |
cb(err, acc) | |
}) | |
} | |
},{"./drain":4}],10:[function(require,module,exports){ | |
'use strict' | |
module.exports = function count (max) { | |
var i = 0; max = max || Infinity | |
return function (end, cb) { | |
if(end) return cb && cb(end) | |
if(i > max) | |
return cb(true) | |
cb(null, i++) | |
} | |
} | |
},{}],11:[function(require,module,exports){ | |
'use strict' | |
//a stream that ends immediately. | |
module.exports = function empty () { | |
return function (abort, cb) { | |
cb(true) | |
} | |
} | |
},{}],12:[function(require,module,exports){ | |
'use strict' | |
//a stream that errors immediately. | |
module.exports = function error (err) { | |
return function (abort, cb) { | |
cb(err) | |
} | |
} | |
},{}],13:[function(require,module,exports){ | |
'use strict' | |
module.exports = { | |
keys: require('./keys'), | |
once: require('./once'), | |
values: require('./values'), | |
count: require('./count'), | |
infinite: require('./infinite'), | |
empty: require('./empty'), | |
error: require('./error') | |
} | |
},{"./count":10,"./empty":11,"./error":12,"./infinite":14,"./keys":15,"./once":16,"./values":17}],14:[function(require,module,exports){ | |
'use strict' | |
module.exports = function infinite (generate) { | |
generate = generate || Math.random | |
return function (end, cb) { | |
if(end) return cb && cb(end) | |
return cb(null, generate()) | |
} | |
} | |
},{}],15:[function(require,module,exports){ | |
'use strict' | |
var values = require('./values') | |
module.exports = function (object) { | |
return values(Object.keys(object)) | |
} | |
},{"./values":17}],16:[function(require,module,exports){ | |
'use strict' | |
var abortCb = require('../util/abort-cb') | |
module.exports = function once (value, onAbort) { | |
return function (abort, cb) { | |
if(abort) | |
return abortCb(cb, abort, onAbort) | |
if(value != null) { | |
var _value = value; value = null | |
cb(null, _value) | |
} else | |
cb(true) | |
} | |
} | |
},{"../util/abort-cb":28}],17:[function(require,module,exports){ | |
'use strict' | |
var abortCb = require('../util/abort-cb') | |
module.exports = function values (array, onAbort) { | |
if(!array) | |
return function (abort, cb) { | |
if(abort) return abortCb(cb, abort, onAbort) | |
return cb(true) | |
} | |
if(!Array.isArray(array)) | |
array = Object.keys(array).map(function (k) { | |
return array[k] | |
}) | |
var i = 0 | |
return function (abort, cb) { | |
if(abort) | |
return abortCb(cb, abort, onAbort) | |
if(i >= array.length) | |
cb(true) | |
else | |
cb(null, array[i++]) | |
} | |
} | |
},{"../util/abort-cb":28}],18:[function(require,module,exports){ | |
'use strict' | |
function id (e) { return e } | |
var prop = require('../util/prop') | |
module.exports = function asyncMap (map) { | |
if(!map) return id | |
map = prop(map) | |
var busy = false, abortCb, aborted | |
return function (read) { | |
return function next (abort, cb) { | |
if(aborted) return cb(aborted) | |
if(abort) { | |
aborted = abort | |
if(!busy) read(abort, cb) | |
else read(abort, function () { | |
//if we are still busy, wait for the mapper to complete. | |
if(busy) abortCb = cb | |
else cb(abort) | |
}) | |
} | |
else | |
read(null, function (end, data) { | |
if(end) cb(end) | |
else if(aborted) cb(aborted) | |
else { | |
busy = true | |
map(data, function (err, data) { | |
busy = false | |
if(aborted) { | |
cb(aborted) | |
abortCb(aborted) | |
} | |
else if(err) next (err, cb) | |
else cb(null, data) | |
}) | |
} | |
}) | |
} | |
} | |
} | |
},{"../util/prop":29}],19:[function(require,module,exports){ | |
'use strict' | |
var tester = require('../util/tester') | |
var filter = require('./filter') | |
module.exports = function filterNot (test) { | |
test = tester(test) | |
return filter(function (data) { return !test(data) }) | |
} | |
},{"../util/tester":30,"./filter":20}],20:[function(require,module,exports){ | |
'use strict' | |
var tester = require('../util/tester') | |
module.exports = function filter (test) { | |
//regexp | |
test = tester(test) | |
return function (read) { | |
return function next (end, cb) { | |
var sync, loop = true | |
while(loop) { | |
loop = false | |
sync = true | |
read(end, function (end, data) { | |
if(!end && !test(data)) | |
return sync ? loop = true : next(end, cb) | |
cb(end, data) | |
}) | |
sync = false | |
} | |
} | |
} | |
} | |
},{"../util/tester":30}],21:[function(require,module,exports){ | |
'use strict' | |
var values = require('../sources/values') | |
var once = require('../sources/once') | |
//convert a stream of arrays or streams into just a stream. | |
module.exports = function flatten () { | |
return function (read) { | |
var _read | |
return function (abort, cb) { | |
if (abort) { //abort the current stream, and then stream of streams. | |
_read ? _read(abort, function(err) { | |
read(err || abort, cb) | |
}) : read(abort, cb) | |
} | |
else if(_read) nextChunk() | |
else nextStream() | |
function nextChunk () { | |
_read(null, function (err, data) { | |
if (err === true) nextStream() | |
else if (err) { | |
read(true, function(abortErr) { | |
// TODO: what do we do with the abortErr? | |
cb(err) | |
}) | |
} | |
else cb(null, data) | |
}) | |
} | |
function nextStream () { | |
_read = null | |
read(null, function (end, stream) { | |
if(end) | |
return cb(end) | |
if(Array.isArray(stream) || stream && 'object' === typeof stream) | |
stream = values(stream) | |
else if('function' != typeof stream) | |
stream = once(stream) | |
_read = stream | |
nextChunk() | |
}) | |
} | |
} | |
} | |
} | |
},{"../sources/once":16,"../sources/values":17}],22:[function(require,module,exports){ | |
'use strict' | |
module.exports = { | |
map: require('./map'), | |
asyncMap: require('./async-map'), | |
filter: require('./filter'), | |
filterNot: require('./filter-not'), | |
through: require('./through'), | |
take: require('./take'), | |
unique: require('./unique'), | |
nonUnique: require('./non-unique'), | |
flatten: require('./flatten') | |
} | |
},{"./async-map":18,"./filter":20,"./filter-not":19,"./flatten":21,"./map":23,"./non-unique":24,"./take":25,"./through":26,"./unique":27}],23:[function(require,module,exports){ | |
'use strict' | |
function id (e) { return e } | |
var prop = require('../util/prop') | |
module.exports = function map (mapper) { | |
if(!mapper) return id | |
mapper = prop(mapper) | |
return function (read) { | |
return function (abort, cb) { | |
read(abort, function (end, data) { | |
try { | |
data = !end ? mapper(data) : null | |
} catch (err) { | |
return read(err, function () { | |
return cb(err) | |
}) | |
} | |
cb(end, data) | |
}) | |
} | |
} | |
} | |
},{"../util/prop":29}],24:[function(require,module,exports){ | |
'use strict' | |
var unique = require('./unique') | |
//passes an item through when you see it for the second time. | |
module.exports = function nonUnique (field) { | |
return unique(field, true) | |
} | |
},{"./unique":27}],25:[function(require,module,exports){ | |
'use strict' | |
//read a number of items and then stop. | |
module.exports = function take (test, opts) { | |
opts = opts || {} | |
var last = opts.last || false // whether the first item for which !test(item) should still pass | |
var ended = false | |
if('number' === typeof test) { | |
last = true | |
var n = test; test = function () { | |
return --n | |
} | |
} | |
return function (read) { | |
function terminate (cb) { | |
read(true, function (err) { | |
last = false; cb(err || true) | |
}) | |
} | |
return function (end, cb) { | |
if(ended) last ? terminate(cb) : cb(ended) | |
else if(ended = end) read(ended, cb) | |
else | |
read(null, function (end, data) { | |
if(ended = ended || end) { | |
//last ? terminate(cb) : | |
cb(ended) | |
} | |
else if(!test(data)) { | |
ended = true | |
last ? cb(null, data) : terminate(cb) | |
} | |
else | |
cb(null, data) | |
}) | |
} | |
} | |
} | |
},{}],26:[function(require,module,exports){ | |
'use strict' | |
//a pass through stream that doesn't change the value. | |
module.exports = function through (op, onEnd) { | |
var a = false | |
function once (abort) { | |
if(a || !onEnd) return | |
a = true | |
onEnd(abort === true ? null : abort) | |
} | |
return function (read) { | |
return function (end, cb) { | |
if(end) once(end) | |
return read(end, function (end, data) { | |
if(!end) op && op(data) | |
else once(end) | |
cb(end, data) | |
}) | |
} | |
} | |
} | |
},{}],27:[function(require,module,exports){ | |
'use strict' | |
function id (e) { return e } | |
var prop = require('../util/prop') | |
var filter = require('./filter') | |
//drop items you have already seen. | |
module.exports = function unique (field, invert) { | |
field = prop(field) || id | |
var seen = {} | |
return filter(function (data) { | |
var key = field(data) | |
if(seen[key]) return !!invert //false, by default | |
else seen[key] = true | |
return !invert //true by default | |
}) | |
} | |
},{"../util/prop":29,"./filter":20}],28:[function(require,module,exports){ | |
module.exports = function abortCb(cb, abort, onAbort) { | |
cb(abort) | |
onAbort && onAbort(abort === true ? null: abort) | |
return | |
} | |
},{}],29:[function(require,module,exports){ | |
module.exports = function prop (key) { | |
return key && ( | |
'string' == typeof key | |
? function (data) { return data[key] } | |
: 'object' === typeof key && 'function' === typeof key.exec //regexp | |
? function (data) { var v = key.exec(data); return v && v[0] } | |
: key | |
) | |
} | |
},{}],30:[function(require,module,exports){ | |
var prop = require('./prop') | |
function id (e) { return e } | |
module.exports = function tester (test) { | |
return ( | |
'object' === typeof test && 'function' === typeof test.test //regexp | |
? function (data) { return test.test(data) } | |
: prop (test) || id | |
) | |
} | |
},{"./prop":29}],"pull-stream":[function(require,module,exports){ | |
'use strict' | |
var sources = require('./sources') | |
var sinks = require('./sinks') | |
var throughs = require('./throughs') | |
exports = module.exports = require('./pull') | |
for(var k in sources) | |
exports[k] = sources[k] | |
for(var k in throughs) | |
exports[k] = throughs[k] | |
for(var k in sinks) | |
exports[k] = sinks[k] | |
},{"./pull":1,"./sinks":6,"./sources":13,"./throughs":22}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsInB1bGwuanMiLCJzaW5rcy9jb2xsZWN0LmpzIiwic2lua3MvY29uY2F0LmpzIiwic2lua3MvZHJhaW4uanMiLCJzaW5rcy9maW5kLmpzIiwic2lua3MvaW5kZXguanMiLCJzaW5rcy9sb2cuanMiLCJzaW5rcy9vbi1lbmQuanMiLCJzaW5rcy9yZWR1Y2UuanMiLCJzb3VyY2VzL2NvdW50LmpzIiwic291cmNlcy9lbXB0eS5qcyIsInNvdXJjZXMvZXJyb3IuanMiLCJzb3VyY2VzL2luZGV4LmpzIiwic291cmNlcy9pbmZpbml0ZS5qcyIsInNvdXJjZXMva2V5cy5qcyIsInNvdXJjZXMvb25jZS5qcyIsInNvdXJjZXMvdmFsdWVzLmpzIiwidGhyb3VnaHMvYXN5bmMtbWFwLmpzIiwidGhyb3VnaHMvZmlsdGVyLW5vdC5qcyIsInRocm91Z2hzL2ZpbHRlci5qcyIsInRocm91Z2hzL2ZsYXR0ZW4uanMiLCJ0aHJvdWdocy9pbmRleC5qcyIsInRocm91Z2hzL21hcC5qcyIsInRocm91Z2hzL25vbi11bmlxdWUuanMiLCJ0aHJvdWdocy90YWtlLmpzIiwidGhyb3VnaHMvdGhyb3VnaC5qcyIsInRocm91Z2hzL3VuaXF1ZS5qcyIsInV0aWwvYWJvcnQtY2IuanMiLCJ1dGlsL3Byb3AuanMiLCJ1dGlsL3Rlc3Rlci5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHB1bGwgKGEpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nICYmIGEubGVuZ3RoID09PSAxKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuZ3RoKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICAgIGlmIChhcmdzID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInBhcnRpYWwgc2luayBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSFcIilcbiAgICAgIH1cblxuICAgICAgLy8gR3JhYiB0aGUgcmVmZXJlbmNlIGFmdGVyIHRoZSBjaGVjaywgYmVjYXVzZSBpdCdzIGFsd2F5cyBhbiBhcnJheSBub3dcbiAgICAgIC8vIChlbmdpbmVzIGxpa2UgdGhhdCBraW5kIG9mIGNvbnNpc3RlbmN5KS5cbiAgICAgIHZhciByZWYgPSBhcmdzXG4gICAgICBhcmdzID0gbnVsbFxuXG4gICAgICAvLyBQcmlvcml0aXplIGNvbW1vbiBjYXNlIG9mIHNtYWxsIG51bWJlciBvZiBwdWxscy5cbiAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSlcbiAgICAgIGNhc2UgMjogcmV0dXJuIHB1bGwocmVhZCwgcmVmWzBdLCByZWZbMV0pXG4gICAgICBjYXNlIDM6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0pXG4gICAgICBjYXNlIDQ6IHJldHVybiBwdWxsKHJlYWQsIHJlZlswXSwgcmVmWzFdLCByZWZbMl0sIHJlZlszXSlcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJlZi51bnNoaWZ0KHJlYWQpXG4gICAgICAgIHJldHVybiBwdWxsLmFwcGx5KG51bGwsIHJlZilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVhZCA9IGFcblxuICBpZiAocmVhZCAmJiB0eXBlb2YgcmVhZC5zb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZWFkID0gcmVhZC5zb3VyY2VcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcyA9IGFyZ3VtZW50c1tpXVxuICAgIGlmICh0eXBlb2YgcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVhZCA9IHMocmVhZClcbiAgICB9IGVsc2UgaWYgKHMgJiYgdHlwZW9mIHMgPT09ICdvYmplY3QnKSB7XG4gICAgICBzLnNpbmsocmVhZClcbiAgICAgIHJlYWQgPSBzLnNvdXJjZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWFkXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb2xsZWN0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHtcbiAgICBhcnIucHVzaChpdGVtKVxuICAgIHJldHVybiBhcnJcbiAgfSwgW10sIGNiKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciByZWR1Y2UgPSByZXF1aXJlKCcuL3JlZHVjZScpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29uY2F0IChjYikge1xuICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyBiXG4gIH0sICcnLCBjYilcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRyYWluIChvcCwgZG9uZSkge1xuICB2YXIgcmVhZCwgYWJvcnRcblxuICBmdW5jdGlvbiBzaW5rIChfcmVhZCkge1xuICAgIHJlYWQgPSBfcmVhZFxuICAgIGlmKGFib3J0KSByZXR1cm4gc2luay5hYm9ydCgpXG4gICAgLy90aGlzIGZ1bmN0aW9uIGlzIG11Y2ggc2ltcGxlciB0byB3cml0ZSBpZiB5b3VcbiAgICAvL2p1c3QgdXNlIHJlY3Vyc2lvbiwgYnV0IGJ5IHVzaW5nIGEgd2hpbGUgbG9vcFxuICAgIC8vd2UgZG8gbm90IGJsb3cgdGhlIHN0YWNrIGlmIHRoZSBzdHJlYW0gaGFwcGVucyB0byBiZSBzeW5jLlxuICAgIDsoZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgdmFyIGxvb3AgPSB0cnVlLCBjYmVkID0gZmFsc2VcbiAgICAgICAgd2hpbGUobG9vcCkge1xuICAgICAgICAgIGNiZWQgPSBmYWxzZVxuICAgICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgICAgY2JlZCA9IHRydWVcbiAgICAgICAgICAgIGlmKGVuZCA9IGVuZCB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYoZG9uZSkgZG9uZShlbmQgPT09IHRydWUgPyBudWxsIDogZW5kKVxuICAgICAgICAgICAgICBlbHNlIGlmKGVuZCAmJiBlbmQgIT09IHRydWUpXG4gICAgICAgICAgICAgICAgdGhyb3cgZW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKG9wICYmIGZhbHNlID09PSBvcChkYXRhKSB8fCBhYm9ydCkge1xuICAgICAgICAgICAgICBsb29wID0gZmFsc2VcbiAgICAgICAgICAgICAgcmVhZChhYm9ydCB8fCB0cnVlLCBkb25lIHx8IGZ1bmN0aW9uICgpIHt9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZighbG9vcCl7XG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYoIWNiZWQpIHtcbiAgICAgICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpXG4gIH1cblxuICBzaW5rLmFib3J0ID0gZnVuY3Rpb24gKGVyciwgY2IpIHtcbiAgICBpZignZnVuY3Rpb24nID09IHR5cGVvZiBlcnIpXG4gICAgICBjYiA9IGVyciwgZXJyID0gdHJ1ZVxuICAgIGFib3J0ID0gZXJyIHx8IHRydWVcbiAgICBpZihyZWFkKSByZXR1cm4gcmVhZChhYm9ydCwgY2IgfHwgZnVuY3Rpb24gKCkge30pXG4gIH1cblxuICByZXR1cm4gc2lua1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmZ1bmN0aW9uIGlkIChlKSB7IHJldHVybiBlIH1cbnZhciBwcm9wID0gcmVxdWlyZSgnLi4vdXRpbC9wcm9wJylcbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbmQgKHRlc3QsIGNiKSB7XG4gIHZhciBlbmRlZCA9IGZhbHNlXG4gIGlmKCFjYilcbiAgICBjYiA9IHRlc3QsIHRlc3QgPSBpZFxuICBlbHNlXG4gICAgdGVzdCA9IHByb3AodGVzdCkgfHwgaWRcblxuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZih0ZXN0KGRhdGEpKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYoZW5kZWQpIHJldHVybiAvL2FscmVhZHkgY2FsbGVkIGJhY2tcbiAgICBjYihlcnIgPT09IHRydWUgPyBudWxsIDogZXJyLCBudWxsKVxuICB9KVxufVxuXG5cblxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRyYWluOiByZXF1aXJlKCcuL2RyYWluJyksXG4gIG9uRW5kOiByZXF1aXJlKCcuL29uLWVuZCcpLFxuICBsb2c6IHJlcXVpcmUoJy4vbG9nJyksXG4gIGZpbmQ6IHJlcXVpcmUoJy4vZmluZCcpLFxuICByZWR1Y2U6IHJlcXVpcmUoJy4vcmVkdWNlJyksXG4gIGNvbGxlY3Q6IHJlcXVpcmUoJy4vY29sbGVjdCcpLFxuICBjb25jYXQ6IHJlcXVpcmUoJy4vY29uY2F0Jylcbn1cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxvZyAoZG9uZSkge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhKVxuICB9LCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uRW5kIChkb25lKSB7XG4gIHJldHVybiBkcmFpbihudWxsLCBkb25lKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBkcmFpbiA9IHJlcXVpcmUoJy4vZHJhaW4nKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZHVjZSAocmVkdWNlciwgYWNjLCBjYikge1xuICByZXR1cm4gZHJhaW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBhY2MgPSByZWR1Y2VyKGFjYywgZGF0YSlcbiAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgIGNiKGVyciwgYWNjKVxuICB9KVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb3VudCAobWF4KSB7XG4gIHZhciBpID0gMDsgbWF4ID0gbWF4IHx8IEluZmluaXR5XG4gIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgIGlmKGVuZCkgcmV0dXJuIGNiICYmIGNiKGVuZClcbiAgICBpZihpID4gbWF4KVxuICAgICAgcmV0dXJuIGNiKHRydWUpXG4gICAgY2IobnVsbCwgaSsrKVxuICB9XG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG4vL2Egc3RyZWFtIHRoYXQgZW5kcyBpbW1lZGlhdGVseS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW1wdHkgKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGNiKHRydWUpXG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuLy9hIHN0cmVhbSB0aGF0IGVycm9ycyBpbW1lZGlhdGVseS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZXJyb3IgKGVycikge1xuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGNiKGVycilcbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0ge1xuICBrZXlzOiByZXF1aXJlKCcuL2tleXMnKSxcbiAgb25jZTogcmVxdWlyZSgnLi9vbmNlJyksXG4gIHZhbHVlczogcmVxdWlyZSgnLi92YWx1ZXMnKSxcbiAgY291bnQ6IHJlcXVpcmUoJy4vY291bnQnKSxcbiAgaW5maW5pdGU6IHJlcXVpcmUoJy4vaW5maW5pdGUnKSxcbiAgZW1wdHk6IHJlcXVpcmUoJy4vZW1wdHknKSxcbiAgZXJyb3I6IHJlcXVpcmUoJy4vZXJyb3InKVxufVxuIiwiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluZmluaXRlIChnZW5lcmF0ZSkge1xuICBnZW5lcmF0ZSA9IGdlbmVyYXRlIHx8IE1hdGgucmFuZG9tXG4gIHJldHVybiBmdW5jdGlvbiAoZW5kLCBjYikge1xuICAgIGlmKGVuZCkgcmV0dXJuIGNiICYmIGNiKGVuZClcbiAgICByZXR1cm4gY2IobnVsbCwgZ2VuZXJhdGUoKSlcbiAgfVxufVxuXG5cbiIsIid1c2Ugc3RyaWN0J1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJylcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICByZXR1cm4gdmFsdWVzKE9iamVjdC5rZXlzKG9iamVjdCkpXG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG52YXIgYWJvcnRDYiA9IHJlcXVpcmUoJy4uL3V0aWwvYWJvcnQtY2InKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9uY2UgKHZhbHVlLCBvbkFib3J0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgaWYoYWJvcnQpXG4gICAgICByZXR1cm4gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpXG4gICAgaWYodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIF92YWx1ZSA9IHZhbHVlOyB2YWx1ZSA9IG51bGxcbiAgICAgIGNiKG51bGwsIF92YWx1ZSlcbiAgICB9IGVsc2VcbiAgICAgIGNiKHRydWUpXG4gIH1cbn1cblxuXG4iLCIndXNlIHN0cmljdCdcbnZhciBhYm9ydENiID0gcmVxdWlyZSgnLi4vdXRpbC9hYm9ydC1jYicpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsdWVzIChhcnJheSwgb25BYm9ydCkge1xuICBpZighYXJyYXkpXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIGlmKGFib3J0KSByZXR1cm4gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpXG4gICAgICByZXR1cm4gY2IodHJ1ZSlcbiAgICB9XG4gIGlmKCFBcnJheS5pc0FycmF5KGFycmF5KSlcbiAgICBhcnJheSA9IE9iamVjdC5rZXlzKGFycmF5KS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgIHJldHVybiBhcnJheVtrXVxuICAgIH0pXG4gIHZhciBpID0gMFxuICByZXR1cm4gZnVuY3Rpb24gKGFib3J0LCBjYikge1xuICAgIGlmKGFib3J0KVxuICAgICAgcmV0dXJuIGFib3J0Q2IoY2IsIGFib3J0LCBvbkFib3J0KVxuICAgIGlmKGkgPj0gYXJyYXkubGVuZ3RoKVxuICAgICAgY2IodHJ1ZSlcbiAgICBlbHNlXG4gICAgICBjYihudWxsLCBhcnJheVtpKytdKVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzeW5jTWFwIChtYXApIHtcbiAgaWYoIW1hcCkgcmV0dXJuIGlkXG4gIG1hcCA9IHByb3AobWFwKVxuICB2YXIgYnVzeSA9IGZhbHNlLCBhYm9ydENiLCBhYm9ydGVkXG4gIHJldHVybiBmdW5jdGlvbiAocmVhZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0IChhYm9ydCwgY2IpIHtcbiAgICAgIGlmKGFib3J0ZWQpIHJldHVybiBjYihhYm9ydGVkKVxuICAgICAgaWYoYWJvcnQpIHtcbiAgICAgICAgYWJvcnRlZCA9IGFib3J0XG4gICAgICAgIGlmKCFidXN5KSByZWFkKGFib3J0LCBjYilcbiAgICAgICAgZWxzZSByZWFkKGFib3J0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy9pZiB3ZSBhcmUgc3RpbGwgYnVzeSwgd2FpdCBmb3IgdGhlIG1hcHBlciB0byBjb21wbGV0ZS5cbiAgICAgICAgICBpZihidXN5KSBhYm9ydENiID0gY2JcbiAgICAgICAgICBlbHNlIGNiKGFib3J0KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICByZWFkKG51bGwsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgICBpZihlbmQpIGNiKGVuZClcbiAgICAgICAgICBlbHNlIGlmKGFib3J0ZWQpIGNiKGFib3J0ZWQpXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBidXN5ID0gdHJ1ZVxuICAgICAgICAgICAgbWFwKGRhdGEsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgICAgICAgYnVzeSA9IGZhbHNlXG4gICAgICAgICAgICAgIGlmKGFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBjYihhYm9ydGVkKVxuICAgICAgICAgICAgICAgIGFib3J0Q2IoYWJvcnRlZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmKGVycikgbmV4dCAoZXJyLCBjYilcbiAgICAgICAgICAgICAgZWxzZSBjYihudWxsLCBkYXRhKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cblxuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciB0ZXN0ZXIgPSByZXF1aXJlKCcuLi91dGlsL3Rlc3RlcicpXG52YXIgZmlsdGVyID0gcmVxdWlyZSgnLi9maWx0ZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbHRlck5vdCAodGVzdCkge1xuICB0ZXN0ID0gdGVzdGVyKHRlc3QpXG4gIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuICF0ZXN0KGRhdGEpIH0pXG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHRlc3RlciA9IHJlcXVpcmUoJy4uL3V0aWwvdGVzdGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWx0ZXIgKHRlc3QpIHtcbiAgLy9yZWdleHBcbiAgdGVzdCA9IHRlc3Rlcih0ZXN0KVxuICByZXR1cm4gZnVuY3Rpb24gKHJlYWQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCAoZW5kLCBjYikge1xuICAgICAgdmFyIHN5bmMsIGxvb3AgPSB0cnVlXG4gICAgICB3aGlsZShsb29wKSB7XG4gICAgICAgIGxvb3AgPSBmYWxzZVxuICAgICAgICBzeW5jID0gdHJ1ZVxuICAgICAgICByZWFkKGVuZCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgIGlmKCFlbmQgJiYgIXRlc3QoZGF0YSkpXG4gICAgICAgICAgICByZXR1cm4gc3luYyA/IGxvb3AgPSB0cnVlIDogbmV4dChlbmQsIGNiKVxuICAgICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgICAgc3luYyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgdmFsdWVzID0gcmVxdWlyZSgnLi4vc291cmNlcy92YWx1ZXMnKVxudmFyIG9uY2UgPSByZXF1aXJlKCcuLi9zb3VyY2VzL29uY2UnKVxuXG4vL2NvbnZlcnQgYSBzdHJlYW0gb2YgYXJyYXlzIG9yIHN0cmVhbXMgaW50byBqdXN0IGEgc3RyZWFtLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGF0dGVuICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgdmFyIF9yZWFkXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIGlmIChhYm9ydCkgeyAvL2Fib3J0IHRoZSBjdXJyZW50IHN0cmVhbSwgYW5kIHRoZW4gc3RyZWFtIG9mIHN0cmVhbXMuXG4gICAgICAgIF9yZWFkID8gX3JlYWQoYWJvcnQsIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlYWQoZXJyIHx8IGFib3J0LCBjYilcbiAgICAgICAgfSkgOiByZWFkKGFib3J0LCBjYilcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoX3JlYWQpIG5leHRDaHVuaygpXG4gICAgICBlbHNlIG5leHRTdHJlYW0oKVxuXG4gICAgICBmdW5jdGlvbiBuZXh0Q2h1bmsgKCkge1xuICAgICAgICBfcmVhZChudWxsLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgaWYgKGVyciA9PT0gdHJ1ZSkgbmV4dFN0cmVhbSgpXG4gICAgICAgICAgZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZWFkKHRydWUsIGZ1bmN0aW9uKGFib3J0RXJyKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IHdoYXQgZG8gd2UgZG8gd2l0aCB0aGUgYWJvcnRFcnI/XG4gICAgICAgICAgICAgIGNiKGVycilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgY2IobnVsbCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIG5leHRTdHJlYW0gKCkge1xuICAgICAgICBfcmVhZCA9IG51bGxcbiAgICAgICAgcmVhZChudWxsLCBmdW5jdGlvbiAoZW5kLCBzdHJlYW0pIHtcbiAgICAgICAgICBpZihlbmQpXG4gICAgICAgICAgICByZXR1cm4gY2IoZW5kKVxuICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkoc3RyZWFtKSB8fCBzdHJlYW0gJiYgJ29iamVjdCcgPT09IHR5cGVvZiBzdHJlYW0pXG4gICAgICAgICAgICBzdHJlYW0gPSB2YWx1ZXMoc3RyZWFtKVxuICAgICAgICAgIGVsc2UgaWYoJ2Z1bmN0aW9uJyAhPSB0eXBlb2Ygc3RyZWFtKVxuICAgICAgICAgICAgc3RyZWFtID0gb25jZShzdHJlYW0pXG4gICAgICAgICAgX3JlYWQgPSBzdHJlYW1cbiAgICAgICAgICBuZXh0Q2h1bmsoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iLCIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1hcDogcmVxdWlyZSgnLi9tYXAnKSxcbiAgYXN5bmNNYXA6IHJlcXVpcmUoJy4vYXN5bmMtbWFwJyksXG4gIGZpbHRlcjogcmVxdWlyZSgnLi9maWx0ZXInKSxcbiAgZmlsdGVyTm90OiByZXF1aXJlKCcuL2ZpbHRlci1ub3QnKSxcbiAgdGhyb3VnaDogcmVxdWlyZSgnLi90aHJvdWdoJyksXG4gIHRha2U6IHJlcXVpcmUoJy4vdGFrZScpLFxuICB1bmlxdWU6IHJlcXVpcmUoJy4vdW5pcXVlJyksXG4gIG5vblVuaXF1ZTogcmVxdWlyZSgnLi9ub24tdW5pcXVlJyksXG4gIGZsYXR0ZW46IHJlcXVpcmUoJy4vZmxhdHRlbicpXG59XG5cblxuXG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hcCAobWFwcGVyKSB7XG4gIGlmKCFtYXBwZXIpIHJldHVybiBpZFxuICBtYXBwZXIgPSBwcm9wKG1hcHBlcilcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhYm9ydCwgY2IpIHtcbiAgICAgIHJlYWQoYWJvcnQsIGZ1bmN0aW9uIChlbmQsIGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9ICFlbmQgPyBtYXBwZXIoZGF0YSkgOiBudWxsXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJldHVybiByZWFkKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIHVuaXF1ZSA9IHJlcXVpcmUoJy4vdW5pcXVlJylcblxuLy9wYXNzZXMgYW4gaXRlbSB0aHJvdWdoIHdoZW4geW91IHNlZSBpdCBmb3IgdGhlIHNlY29uZCB0aW1lLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub25VbmlxdWUgKGZpZWxkKSB7XG4gIHJldHVybiB1bmlxdWUoZmllbGQsIHRydWUpXG59XG4iLCIndXNlIHN0cmljdCdcblxuLy9yZWFkIGEgbnVtYmVyIG9mIGl0ZW1zIGFuZCB0aGVuIHN0b3AuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRha2UgKHRlc3QsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgdmFyIGxhc3QgPSBvcHRzLmxhc3QgfHwgZmFsc2UgLy8gd2hldGhlciB0aGUgZmlyc3QgaXRlbSBmb3Igd2hpY2ggIXRlc3QoaXRlbSkgc2hvdWxkIHN0aWxsIHBhc3NcbiAgdmFyIGVuZGVkID0gZmFsc2VcbiAgaWYoJ251bWJlcicgPT09IHR5cGVvZiB0ZXN0KSB7XG4gICAgbGFzdCA9IHRydWVcbiAgICB2YXIgbiA9IHRlc3Q7IHRlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gLS1uXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG5cbiAgICBmdW5jdGlvbiB0ZXJtaW5hdGUgKGNiKSB7XG4gICAgICByZWFkKHRydWUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgbGFzdCA9IGZhbHNlOyBjYihlcnIgfHwgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbmQsIGNiKSB7XG4gICAgICBpZihlbmRlZCkgICAgICAgICAgICBsYXN0ID8gdGVybWluYXRlKGNiKSA6IGNiKGVuZGVkKVxuICAgICAgZWxzZSBpZihlbmRlZCA9IGVuZCkgcmVhZChlbmRlZCwgY2IpXG4gICAgICBlbHNlXG4gICAgICAgIHJlYWQobnVsbCwgZnVuY3Rpb24gKGVuZCwgZGF0YSkge1xuICAgICAgICAgIGlmKGVuZGVkID0gZW5kZWQgfHwgZW5kKSB7XG4gICAgICAgICAgICAvL2xhc3QgPyB0ZXJtaW5hdGUoY2IpIDpcbiAgICAgICAgICAgIGNiKGVuZGVkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKCF0ZXN0KGRhdGEpKSB7XG4gICAgICAgICAgICBlbmRlZCA9IHRydWVcbiAgICAgICAgICAgIGxhc3QgPyBjYihudWxsLCBkYXRhKSA6IHRlcm1pbmF0ZShjYilcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY2IobnVsbCwgZGF0YSlcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG4vL2EgcGFzcyB0aHJvdWdoIHN0cmVhbSB0aGF0IGRvZXNuJ3QgY2hhbmdlIHRoZSB2YWx1ZS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGhyb3VnaCAob3AsIG9uRW5kKSB7XG4gIHZhciBhID0gZmFsc2VcblxuICBmdW5jdGlvbiBvbmNlIChhYm9ydCkge1xuICAgIGlmKGEgfHwgIW9uRW5kKSByZXR1cm5cbiAgICBhID0gdHJ1ZVxuICAgIG9uRW5kKGFib3J0ID09PSB0cnVlID8gbnVsbCA6IGFib3J0KVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbmQsIGNiKSB7XG4gICAgICBpZihlbmQpIG9uY2UoZW5kKVxuICAgICAgcmV0dXJuIHJlYWQoZW5kLCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIGlmKCFlbmQpIG9wICYmIG9wKGRhdGEpXG4gICAgICAgIGVsc2Ugb25jZShlbmQpXG4gICAgICAgIGNiKGVuZCwgZGF0YSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxudmFyIHByb3AgPSByZXF1aXJlKCcuLi91dGlsL3Byb3AnKVxudmFyIGZpbHRlciA9IHJlcXVpcmUoJy4vZmlsdGVyJylcblxuLy9kcm9wIGl0ZW1zIHlvdSBoYXZlIGFscmVhZHkgc2Vlbi5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pcXVlIChmaWVsZCwgaW52ZXJ0KSB7XG4gIGZpZWxkID0gcHJvcChmaWVsZCkgfHwgaWRcbiAgdmFyIHNlZW4gPSB7fVxuICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIGtleSA9IGZpZWxkKGRhdGEpXG4gICAgaWYoc2VlbltrZXldKSByZXR1cm4gISFpbnZlcnQgLy9mYWxzZSwgYnkgZGVmYXVsdFxuICAgIGVsc2Ugc2VlbltrZXldID0gdHJ1ZVxuICAgIHJldHVybiAhaW52ZXJ0IC8vdHJ1ZSBieSBkZWZhdWx0XG4gIH0pXG59XG5cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJvcnRDYihjYiwgYWJvcnQsIG9uQWJvcnQpIHtcbiAgY2IoYWJvcnQpXG4gIG9uQWJvcnQgJiYgb25BYm9ydChhYm9ydCA9PT0gdHJ1ZSA/IG51bGw6IGFib3J0KVxuICByZXR1cm5cbn1cblxuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwcm9wIChrZXkpIHtcbiAgcmV0dXJuIGtleSAmJiAoXG4gICAgJ3N0cmluZycgPT0gdHlwZW9mIGtleVxuICAgID8gZnVuY3Rpb24gKGRhdGEpIHsgcmV0dXJuIGRhdGFba2V5XSB9XG4gICAgOiAnb2JqZWN0JyA9PT0gdHlwZW9mIGtleSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2Yga2V5LmV4ZWMgLy9yZWdleHBcbiAgICA/IGZ1bmN0aW9uIChkYXRhKSB7IHZhciB2ID0ga2V5LmV4ZWMoZGF0YSk7IHJldHVybiB2ICYmIHZbMF0gfVxuICAgIDoga2V5XG4gIClcbn1cbiIsInZhciBwcm9wID0gcmVxdWlyZSgnLi9wcm9wJylcblxuZnVuY3Rpb24gaWQgKGUpIHsgcmV0dXJuIGUgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRlc3RlciAodGVzdCkge1xuICByZXR1cm4gKFxuICAgICdvYmplY3QnID09PSB0eXBlb2YgdGVzdCAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgdGVzdC50ZXN0IC8vcmVnZXhwXG4gICAgPyBmdW5jdGlvbiAoZGF0YSkgeyByZXR1cm4gdGVzdC50ZXN0KGRhdGEpIH1cbiAgICA6IHByb3AgKHRlc3QpIHx8IGlkXG4gIClcbn1cbiIsIid1c2Ugc3RyaWN0J1xuXG52YXIgc291cmNlcyAgPSByZXF1aXJlKCcuL3NvdXJjZXMnKVxudmFyIHNpbmtzICAgID0gcmVxdWlyZSgnLi9zaW5rcycpXG52YXIgdGhyb3VnaHMgPSByZXF1aXJlKCcuL3Rocm91Z2hzJylcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9wdWxsJylcblxuZm9yKHZhciBrIGluIHNvdXJjZXMpXG4gIGV4cG9ydHNba10gPSBzb3VyY2VzW2tdXG5cbmZvcih2YXIgayBpbiB0aHJvdWdocylcbiAgZXhwb3J0c1trXSA9IHRocm91Z2hzW2tdXG5cbmZvcih2YXIgayBpbiBzaW5rcylcbiAgZXhwb3J0c1trXSA9IHNpbmtzW2tdXG5cbiJdfQ== | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"pull-paramap":[function(require,module,exports){ | |
module.exports = function (map, width) { | |
var reading = false, abort | |
return function (read) { | |
var i = 0, j = 0, last = 0 | |
var seen = [], started = false, ended = false, _cb, error | |
function drain () { | |
if(_cb) { | |
var cb = _cb | |
if(error) { | |
_cb = null | |
return cb(error) | |
} | |
if(Object.hasOwnProperty.call(seen, j)) { | |
_cb = null | |
var data = seen[j]; delete seen[j]; j++ | |
cb(null, data) | |
if(width) start() | |
} else if(j >= last && ended) { | |
_cb = null | |
cb(true) | |
} | |
} | |
} | |
function start () { | |
started = true | |
if(ended) return drain() | |
if(reading || width && (i - width >= j)) return | |
reading = true | |
read(abort, function (end, data) { | |
reading = false | |
if(end) { | |
last = i; ended = end | |
drain() | |
} else { | |
var k = i++ | |
map(data, function (err, data) { | |
seen[k] = data | |
if(err) error = err | |
drain() | |
}) | |
if(!ended) | |
start() | |
} | |
}) | |
} | |
return function (_abort, cb) { | |
if(_abort) | |
read(ended = abort = _abort, function (err) { | |
if(cb) return cb(err) | |
}) | |
else { | |
_cb = cb | |
if(!started) start() | |
drain() | |
} | |
} | |
} | |
} | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hcCwgd2lkdGgpIHtcbiAgdmFyIHJlYWRpbmcgPSBmYWxzZSwgYWJvcnRcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZWFkKSB7XG4gICAgdmFyIGkgPSAwLCBqID0gMCwgbGFzdCA9IDBcbiAgICB2YXIgc2VlbiA9IFtdLCBzdGFydGVkID0gZmFsc2UsIGVuZGVkID0gZmFsc2UsIF9jYiwgZXJyb3JcblxuICAgIGZ1bmN0aW9uIGRyYWluICgpIHtcbiAgICAgIGlmKF9jYikge1xuICAgICAgICB2YXIgY2IgPSBfY2JcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBfY2IgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIGNiKGVycm9yKVxuICAgICAgICB9XG4gICAgICAgIGlmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlZW4sIGopKSB7XG4gICAgICAgICAgX2NiID0gbnVsbFxuICAgICAgICAgIHZhciBkYXRhID0gc2VlbltqXTsgZGVsZXRlIHNlZW5bal07IGorK1xuICAgICAgICAgIGNiKG51bGwsIGRhdGEpXG4gICAgICAgICAgaWYod2lkdGgpIHN0YXJ0KClcbiAgICAgICAgfSBlbHNlIGlmKGogPj0gbGFzdCAmJiBlbmRlZCkge1xuICAgICAgICAgIF9jYiA9IG51bGxcbiAgICAgICAgICBjYih0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnQgKCkge1xuICAgICAgc3RhcnRlZCA9IHRydWVcbiAgICAgIGlmKGVuZGVkKSByZXR1cm4gZHJhaW4oKVxuICAgICAgaWYocmVhZGluZyB8fCB3aWR0aCAmJiAoaSAtIHdpZHRoID49IGopKSByZXR1cm5cbiAgICAgIHJlYWRpbmcgPSB0cnVlXG4gICAgICByZWFkKGFib3J0LCBmdW5jdGlvbiAoZW5kLCBkYXRhKSB7XG4gICAgICAgIHJlYWRpbmcgPSBmYWxzZVxuICAgICAgICBpZihlbmQpIHtcbiAgICAgICAgICBsYXN0ID0gaTsgZW5kZWQgPSBlbmRcbiAgICAgICAgICBkcmFpbigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGsgPSBpKytcblxuICAgICAgICAgIG1hcChkYXRhLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICBzZWVuW2tdID0gZGF0YVxuICAgICAgICAgICAgaWYoZXJyKSBlcnJvciA9IGVyclxuICAgICAgICAgICAgZHJhaW4oKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZighZW5kZWQpXG4gICAgICAgICAgICBzdGFydCgpXG5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKF9hYm9ydCwgY2IpIHtcbiAgICAgIGlmKF9hYm9ydClcbiAgICAgICAgcmVhZChlbmRlZCA9IGFib3J0ID0gX2Fib3J0LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgaWYoY2IpIHJldHVybiBjYihlcnIpXG4gICAgICAgIH0pXG4gICAgICBlbHNlIHtcbiAgICAgICAgX2NiID0gY2JcbiAgICAgICAgaWYoIXN0YXJ0ZWQpIHN0YXJ0KClcbiAgICAgICAgZHJhaW4oKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4iXX0= | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"pull-async":[function(require,module,exports){ | |
module.exports = pullAsync | |
function pullAsync (continuable) { | |
var done | |
return function (abort, cb) { | |
if (abort) return cb(abort) | |
if (done) return cb(true) | |
continuable(function (err, data) { | |
done = true | |
cb(err, data) | |
}) | |
} | |
} | |
},{}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJtb2R1bGUuZXhwb3J0cyA9IHB1bGxBc3luY1xuXG5mdW5jdGlvbiBwdWxsQXN5bmMgKGNvbnRpbnVhYmxlKSB7XG4gIHZhciBkb25lXG4gIHJldHVybiBmdW5jdGlvbiAoYWJvcnQsIGNiKSB7XG4gICAgaWYgKGFib3J0KSByZXR1cm4gY2IoYWJvcnQpXG4gICAgaWYgKGRvbmUpIHJldHVybiBjYih0cnVlKVxuICAgIGNvbnRpbnVhYmxlKGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIGRvbmUgPSB0cnVlXG4gICAgICBjYihlcnIsIGRhdGEpXG4gICAgfSlcbiAgfVxufVxuIl19 | |
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
(function (global){ | |
if (typeof window !== "undefined") { | |
module.exports = window; | |
} else if (typeof global !== "undefined") { | |
module.exports = global; | |
} else if (typeof self !== "undefined"){ | |
module.exports = self; | |
} else { | |
module.exports = {}; | |
} | |
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzZWxmO1xufSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xufVxuIl19 | |
},{}],2:[function(require,module,exports){ | |
module.exports = isFunction | |
var toString = Object.prototype.toString | |
function isFunction (fn) { | |
var string = toString.call(fn) | |
return string === '[object Function]' || | |
(typeof fn === 'function' && string !== '[object RegExp]') || | |
(typeof window !== 'undefined' && | |
// IE8 and below | |
(fn === window.setTimeout || | |
fn === window.alert || | |
fn === window.confirm || | |
fn === window.prompt)) | |
}; | |
},{}],3:[function(require,module,exports){ | |
var isFunction = require('is-function') | |
module.exports = forEach | |
var toString = Object.prototype.toString | |
var hasOwnProperty = Object.prototype.hasOwnProperty | |
function forEach(list, iterator, context) { | |
if (!isFunction(iterator)) { | |
throw new TypeError('iterator must be a function') | |
} | |
if (arguments.length < 3) { | |
context = this | |
} | |
if (toString.call(list) === '[object Array]') | |
forEachArray(list, iterator, context) | |
else if (typeof list === 'string') | |
forEachString(list, iterator, context) | |
else | |
forEachObject(list, iterator, context) | |
} | |
function forEachArray(array, iterator, context) { | |
for (var i = 0, len = array.length; i < len; i++) { | |
if (hasOwnProperty.call(array, i)) { | |
iterator.call(context, array[i], i, array) | |
} | |
} | |
} | |
function forEachString(string, iterator, context) { | |
for (var i = 0, len = string.length; i < len; i++) { | |
// no such thing as a sparse string. | |
iterator.call(context, string.charAt(i), i, string) | |
} | |
} | |
function forEachObject(object, iterator, context) { | |
for (var k in object) { | |
if (hasOwnProperty.call(object, k)) { | |
iterator.call(context, object[k], k, object) | |
} | |
} | |
} | |
},{"is-function":2}],4:[function(require,module,exports){ | |
exports = module.exports = trim; | |
function trim(str){ | |
return str.replace(/^\s*|\s*$/g, ''); | |
} | |
exports.left = function(str){ | |
return str.replace(/^\s*/, ''); | |
}; | |
exports.right = function(str){ | |
return str.replace(/\s*$/, ''); | |
}; | |
},{}],5:[function(require,module,exports){ | |
var trim = require('trim') | |
, forEach = require('for-each') | |
, isArray = function(arg) { | |
return Object.prototype.toString.call(arg) === '[object Array]'; | |
} | |
module.exports = function (headers) { | |
if (!headers) | |
return {} | |
var result = {} | |
forEach( | |
trim(headers).split('\n') | |
, function (row) { | |
var index = row.indexOf(':') | |
, key = trim(row.slice(0, index)).toLowerCase() | |
, value = trim(row.slice(index + 1)) | |
if (typeof(result[key]) === 'undefined') { | |
result[key] = value | |
} else if (isArray(result[key])) { | |
result[key].push(value) | |
} else { | |
result[key] = [ result[key], value ] | |
} | |
} | |
) | |
return result | |
} | |
},{"for-each":3,"trim":4}],6:[function(require,module,exports){ | |
module.exports = extend | |
var hasOwnProperty = Object.prototype.hasOwnProperty; | |
function extend() { | |
var target = {} | |
for (var i = 0; i < arguments.length; i++) { | |
var source = arguments[i] | |
for (var key in source) { | |
if (hasOwnProperty.call(source, key)) { | |
target[key] = source[key] | |
} | |
} | |
} | |
return target | |
} | |
},{}],"xhr":[function(require,module,exports){ | |
"use strict"; | |
var window = require("global/window") | |
var isFunction = require("is-function") | |
var parseHeaders = require("parse-headers") | |
var xtend = require("xtend") | |
module.exports = createXHR | |
createXHR.XMLHttpRequest = window.XMLHttpRequest || noop | |
createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest | |
forEachArray(["get", "put", "post", "patch", "head", "delete"], function(method) { | |
createXHR[method === "delete" ? "del" : method] = function(uri, options, callback) { | |
options = initParams(uri, options, callback) | |
options.method = method.toUpperCase() | |
return _createXHR(options) | |
} | |
}) | |
function forEachArray(array, iterator) { | |
for (var i = 0; i < array.length; i++) { | |
iterator(array[i]) | |
} | |
} | |
function isEmpty(obj){ | |
for(var i in obj){ | |
if(obj.hasOwnProperty(i)) return false | |
} | |
return true | |
} | |
function initParams(uri, options, callback) { | |
var params = uri | |
if (isFunction(options)) { | |
callback = options | |
if (typeof uri === "string") { | |
params = {uri:uri} | |
} | |
} else { | |
params = xtend(options, {uri: uri}) | |
} | |
params.callback = callback | |
return params | |
} | |
function createXHR(uri, options, callback) { | |
options = initParams(uri, options, callback) | |
return _createXHR(options) | |
} | |
function _createXHR(options) { | |
if(typeof options.callback === "undefined"){ | |
throw new Error("callback argument missing") | |
} | |
var called = false | |
var callback = function cbOnce(err, response, body){ | |
if(!called){ | |
called = true | |
options.callback(err, response, body) | |
} | |
} | |
function readystatechange() { | |
if (xhr.readyState === 4) { | |
loadFunc() | |
} | |
} | |
function getBody() { | |
// Chrome with requestType=blob throws errors arround when even testing access to responseText | |
var body = undefined | |
if (xhr.response) { | |
body = xhr.response | |
} else { | |
body = xhr.responseText || getXml(xhr) | |
} | |
if (isJson) { | |
try { | |
body = JSON.parse(body) | |
} catch (e) {} | |
} | |
return body | |
} | |
var failureResponse = { | |
body: undefined, | |
headers: {}, | |
statusCode: 0, | |
method: method, | |
url: uri, | |
rawRequest: xhr | |
} | |
function errorFunc(evt) { | |
clearTimeout(timeoutTimer) | |
if(!(evt instanceof Error)){ | |
evt = new Error("" + (evt || "Unknown XMLHttpRequest Error") ) | |
} | |
evt.statusCode = 0 | |
return callback(evt, failureResponse) | |
} | |
// will load the data & process the response in a special response object | |
function loadFunc() { | |
if (aborted) return | |
var status | |
clearTimeout(timeoutTimer) | |
if(options.useXDR && xhr.status===undefined) { | |
//IE8 CORS GET successful response doesn't have a status field, but body is fine | |
status = 200 | |
} else { | |
status = (xhr.status === 1223 ? 204 : xhr.status) | |
} | |
var response = failureResponse | |
var err = null | |
if (status !== 0){ | |
response = { | |
body: getBody(), | |
statusCode: status, | |
method: method, | |
headers: {}, | |
url: uri, | |
rawRequest: xhr | |
} | |
if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE | |
response.headers = parseHeaders(xhr.getAllResponseHeaders()) | |
} | |
} else { | |
err = new Error("Internal XMLHttpRequest Error") | |
} | |
return callback(err, response, response.body) | |
} | |
var xhr = options.xhr || null | |
if (!xhr) { | |
if (options.cors || options.useXDR) { | |
xhr = new createXHR.XDomainRequest() | |
}else{ | |
xhr = new createXHR.XMLHttpRequest() | |
} | |
} | |
var key | |
var aborted | |
var uri = xhr.url = options.uri || options.url | |
var method = xhr.method = options.method || "GET" | |
var body = options.body || options.data || null | |
var headers = xhr.headers = options.headers || {} | |
var sync = !!options.sync | |
var isJson = false | |
var timeoutTimer | |
if ("json" in options) { | |
isJson = true | |
headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json") //Don't override existing accept header declared by user | |
if (method !== "GET" && method !== "HEAD") { | |
headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json") //Don't override existing accept header declared by user | |
body = JSON.stringify(options.json) | |
} | |
} | |
xhr.onreadystatechange = readystatechange | |
xhr.onload = loadFunc | |
xhr.onerror = errorFunc | |
// IE9 must have onprogress be set to a unique function. | |
xhr.onprogress = function () { | |
// IE must die | |
} | |
xhr.ontimeout = errorFunc | |
xhr.open(method, uri, !sync, options.username, options.password) | |
//has to be after open | |
if(!sync) { | |
xhr.withCredentials = !!options.withCredentials | |
} | |
// Cannot set timeout with sync request | |
// not setting timeout on the xhr object, because of old webkits etc. not handling that correctly | |
// both npm's request and jquery 1.x use this kind of timeout, so this is being consistent | |
if (!sync && options.timeout > 0 ) { | |
timeoutTimer = setTimeout(function(){ | |
aborted=true//IE9 may still call readystatechange | |
xhr.abort("timeout") | |
var e = new Error("XMLHttpRequest timeout") | |
e.code = "ETIMEDOUT" | |
errorFunc(e) | |
}, options.timeout ) | |
} | |
if (xhr.setRequestHeader) { | |
for(key in headers){ | |
if(headers.hasOwnProperty(key)){ | |
xhr.setRequestHeader(key, headers[key]) | |
} | |
} | |
} else if (options.headers && !isEmpty(options.headers)) { | |
throw new Error("Headers cannot be set on an XDomainRequest object") | |
} | |
if ("responseType" in options) { | |
xhr.responseType = options.responseType | |
} | |
if ("beforeSend" in options && | |
typeof options.beforeSend === "function" | |
) { | |
options.beforeSend(xhr) | |
} | |
xhr.send(body) | |
return xhr | |
} | |
function getXml(xhr) { | |
if (xhr.responseType === "document") { | |
return xhr.responseXML | |
} | |
var firefoxBugTakenEffect = xhr.status === 204 && xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror" | |
if (xhr.responseType === "" && !firefoxBugTakenEffect) { | |
return xhr.responseXML | |
} | |
return null | |
} | |
function noop() {} | |
},{"global/window":1,"is-function":2,"parse-headers":5,"xtend":6}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIm5vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2lzLWZ1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWhlYWRlcnMvbm9kZV9tb2R1bGVzL2Zvci1lYWNoL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3BhcnNlLWhlYWRlcnMvbm9kZV9tb2R1bGVzL3RyaW0vaW5kZXguanMiLCJub2RlX21vZHVsZXMvcGFyc2UtaGVhZGVycy9wYXJzZS1oZWFkZXJzLmpzIiwibm9kZV9tb2R1bGVzL3h0ZW5kL2ltbXV0YWJsZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB3aW5kb3c7XG59IGVsc2UgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbDtcbn0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgIG1vZHVsZS5leHBvcnRzID0gc2VsZjtcbn0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB7fTtcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbTV2WkdWZmJXOWtkV3hsY3k5bmJHOWlZV3d2ZDJsdVpHOTNMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3UVVGQlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTSXNJbVpwYkdVaU9pSm5aVzVsY21GMFpXUXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVdZZ0tIUjVjR1Z2WmlCM2FXNWtiM2NnSVQwOUlGd2lkVzVrWldacGJtVmtYQ0lwSUh0Y2JpQWdJQ0J0YjJSMWJHVXVaWGh3YjNKMGN5QTlJSGRwYm1SdmR6dGNibjBnWld4elpTQnBaaUFvZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnWENKMWJtUmxabWx1WldSY0lpa2dlMXh1SUNBZ0lHMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1oyeHZZbUZzTzF4dWZTQmxiSE5sSUdsbUlDaDBlWEJsYjJZZ2MyVnNaaUFoUFQwZ1hDSjFibVJsWm1sdVpXUmNJaWw3WEc0Z0lDQWdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQnpaV3htTzF4dWZTQmxiSE5sSUh0Y2JpQWdJQ0J0YjJSMWJHVXVaWGh3YjNKMGN5QTlJSHQ5TzF4dWZWeHVJbDE5IiwibW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdcblxuZnVuY3Rpb24gaXNGdW5jdGlvbiAoZm4pIHtcbiAgdmFyIHN0cmluZyA9IHRvU3RyaW5nLmNhbGwoZm4pXG4gIHJldHVybiBzdHJpbmcgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScgfHxcbiAgICAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHN0cmluZyAhPT0gJ1tvYmplY3QgUmVnRXhwXScpIHx8XG4gICAgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgIC8vIElFOCBhbmQgYmVsb3dcbiAgICAgKGZuID09PSB3aW5kb3cuc2V0VGltZW91dCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5hbGVydCB8fFxuICAgICAgZm4gPT09IHdpbmRvdy5jb25maXJtIHx8XG4gICAgICBmbiA9PT0gd2luZG93LnByb21wdCkpXG59O1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCdpcy1mdW5jdGlvbicpXG5cbm1vZHVsZS5leHBvcnRzID0gZm9yRWFjaFxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5cbmZ1bmN0aW9uIGZvckVhY2gobGlzdCwgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaXRlcmF0b3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2l0ZXJhdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpXG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGNvbnRleHQgPSB0aGlzXG4gICAgfVxuICAgIFxuICAgIGlmICh0b1N0cmluZy5jYWxsKGxpc3QpID09PSAnW29iamVjdCBBcnJheV0nKVxuICAgICAgICBmb3JFYWNoQXJyYXkobGlzdCwgaXRlcmF0b3IsIGNvbnRleHQpXG4gICAgZWxzZSBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKVxuICAgICAgICBmb3JFYWNoU3RyaW5nKGxpc3QsIGl0ZXJhdG9yLCBjb250ZXh0KVxuICAgIGVsc2VcbiAgICAgICAgZm9yRWFjaE9iamVjdChsaXN0LCBpdGVyYXRvciwgY29udGV4dClcbn1cblxuZnVuY3Rpb24gZm9yRWFjaEFycmF5KGFycmF5LCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgaSkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgYXJyYXlbaV0sIGksIGFycmF5KVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmb3JFYWNoU3RyaW5nKHN0cmluZywgaXRlcmF0b3IsIGNvbnRleHQpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIC8vIG5vIHN1Y2ggdGhpbmcgYXMgYSBzcGFyc2Ugc3RyaW5nLlxuICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHN0cmluZy5jaGFyQXQoaSksIGksIHN0cmluZylcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGZvckVhY2hPYmplY3Qob2JqZWN0LCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIGZvciAodmFyIGsgaW4gb2JqZWN0KSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgaykpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgb2JqZWN0W2tdLCBrLCBvYmplY3QpXG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHRyaW07XG5cbmZ1bmN0aW9uIHRyaW0oc3RyKXtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG5cbmV4cG9ydHMubGVmdCA9IGZ1bmN0aW9uKHN0cil7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyovLCAnJyk7XG59O1xuXG5leHBvcnRzLnJpZ2h0ID0gZnVuY3Rpb24oc3RyKXtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbn07XG4iLCJ2YXIgdHJpbSA9IHJlcXVpcmUoJ3RyaW0nKVxuICAsIGZvckVhY2ggPSByZXF1aXJlKCdmb3ItZWFjaCcpXG4gICwgaXNBcnJheSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGVhZGVycykge1xuICBpZiAoIWhlYWRlcnMpXG4gICAgcmV0dXJuIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHt9XG5cbiAgZm9yRWFjaChcbiAgICAgIHRyaW0oaGVhZGVycykuc3BsaXQoJ1xcbicpXG4gICAgLCBmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJvdy5pbmRleE9mKCc6JylcbiAgICAgICAgICAsIGtleSA9IHRyaW0ocm93LnNsaWNlKDAsIGluZGV4KSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICwgdmFsdWUgPSB0cmltKHJvdy5zbGljZShpbmRleCArIDEpKVxuXG4gICAgICAgIGlmICh0eXBlb2YocmVzdWx0W2tleV0pID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KHJlc3VsdFtrZXldKSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBbIHJlc3VsdFtrZXldLCB2YWx1ZSBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgKVxuXG4gIHJldHVybiByZXN1bHRcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IGV4dGVuZFxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gICAgdmFyIHRhcmdldCA9IHt9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldXG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgd2luZG93ID0gcmVxdWlyZShcImdsb2JhbC93aW5kb3dcIilcbnZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZShcImlzLWZ1bmN0aW9uXCIpXG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZShcInBhcnNlLWhlYWRlcnNcIilcbnZhciB4dGVuZCA9IHJlcXVpcmUoXCJ4dGVuZFwiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVhIUlxuY3JlYXRlWEhSLlhNTEh0dHBSZXF1ZXN0ID0gd2luZG93LlhNTEh0dHBSZXF1ZXN0IHx8IG5vb3BcbmNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCA9IFwid2l0aENyZWRlbnRpYWxzXCIgaW4gKG5ldyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QoKSkgPyBjcmVhdGVYSFIuWE1MSHR0cFJlcXVlc3QgOiB3aW5kb3cuWERvbWFpblJlcXVlc3RcblxuZm9yRWFjaEFycmF5KFtcImdldFwiLCBcInB1dFwiLCBcInBvc3RcIiwgXCJwYXRjaFwiLCBcImhlYWRcIiwgXCJkZWxldGVcIl0sIGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgIGNyZWF0ZVhIUlttZXRob2QgPT09IFwiZGVsZXRlXCIgPyBcImRlbFwiIDogbWV0aG9kXSA9IGZ1bmN0aW9uKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgICAgb3B0aW9ucyA9IGluaXRQYXJhbXModXJpLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICAgICAgICByZXR1cm4gX2NyZWF0ZVhIUihvcHRpb25zKVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGZvckVhY2hBcnJheShhcnJheSwgaXRlcmF0b3IpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdG9yKGFycmF5W2ldKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNFbXB0eShvYmope1xuICAgIGZvcih2YXIgaSBpbiBvYmope1xuICAgICAgICBpZihvYmouaGFzT3duUHJvcGVydHkoaSkpIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpbml0UGFyYW1zKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICB2YXIgcGFyYW1zID0gdXJpXG5cbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnNcbiAgICAgICAgaWYgKHR5cGVvZiB1cmkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHt1cmk6dXJpfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zID0geHRlbmQob3B0aW9ucywge3VyaTogdXJpfSlcbiAgICB9XG5cbiAgICBwYXJhbXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHJldHVybiBwYXJhbXNcbn1cblxuZnVuY3Rpb24gY3JlYXRlWEhSKHVyaSwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBvcHRpb25zID0gaW5pdFBhcmFtcyh1cmksIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgIHJldHVybiBfY3JlYXRlWEhSKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVYSFIob3B0aW9ucykge1xuICAgIGlmKHR5cGVvZiBvcHRpb25zLmNhbGxiYWNrID09PSBcInVuZGVmaW5lZFwiKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FsbGJhY2sgYXJndW1lbnQgbWlzc2luZ1wiKVxuICAgIH1cblxuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIGNiT25jZShlcnIsIHJlc3BvbnNlLCBib2R5KXtcbiAgICAgICAgaWYoIWNhbGxlZCl7XG4gICAgICAgICAgICBjYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrKGVyciwgcmVzcG9uc2UsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIGxvYWRGdW5jKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gICAgICAgIC8vIENocm9tZSB3aXRoIHJlcXVlc3RUeXBlPWJsb2IgdGhyb3dzIGVycm9ycyBhcnJvdW5kIHdoZW4gZXZlbiB0ZXN0aW5nIGFjY2VzcyB0byByZXNwb25zZVRleHRcbiAgICAgICAgdmFyIGJvZHkgPSB1bmRlZmluZWRcblxuICAgICAgICBpZiAoeGhyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBib2R5ID0geGhyLnJlc3BvbnNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBib2R5ID0geGhyLnJlc3BvbnNlVGV4dCB8fCBnZXRYbWwoeGhyKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSnNvbikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5KVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBib2R5XG4gICAgfVxuXG4gICAgdmFyIGZhaWx1cmVSZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgICAgICByYXdSZXF1ZXN0OiB4aHJcbiAgICAgICAgICAgIH1cblxuICAgIGZ1bmN0aW9uIGVycm9yRnVuYyhldnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRUaW1lcilcbiAgICAgICAgaWYoIShldnQgaW5zdGFuY2VvZiBFcnJvcikpe1xuICAgICAgICAgICAgZXZ0ID0gbmV3IEVycm9yKFwiXCIgKyAoZXZ0IHx8IFwiVW5rbm93biBYTUxIdHRwUmVxdWVzdCBFcnJvclwiKSApXG4gICAgICAgIH1cbiAgICAgICAgZXZ0LnN0YXR1c0NvZGUgPSAwXG4gICAgICAgIHJldHVybiBjYWxsYmFjayhldnQsIGZhaWx1cmVSZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyB3aWxsIGxvYWQgdGhlIGRhdGEgJiBwcm9jZXNzIHRoZSByZXNwb25zZSBpbiBhIHNwZWNpYWwgcmVzcG9uc2Ugb2JqZWN0XG4gICAgZnVuY3Rpb24gbG9hZEZ1bmMoKSB7XG4gICAgICAgIGlmIChhYm9ydGVkKSByZXR1cm5cbiAgICAgICAgdmFyIHN0YXR1c1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dFRpbWVyKVxuICAgICAgICBpZihvcHRpb25zLnVzZVhEUiAmJiB4aHIuc3RhdHVzPT09dW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvL0lFOCBDT1JTIEdFVCBzdWNjZXNzZnVsIHJlc3BvbnNlIGRvZXNuJ3QgaGF2ZSBhIHN0YXR1cyBmaWVsZCwgYnV0IGJvZHkgaXMgZmluZVxuICAgICAgICAgICAgc3RhdHVzID0gMjAwXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0dXMgPSAoeGhyLnN0YXR1cyA9PT0gMTIyMyA/IDIwNCA6IHhoci5zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gZmFpbHVyZVJlc3BvbnNlXG4gICAgICAgIHZhciBlcnIgPSBudWxsXG5cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gMCl7XG4gICAgICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICAgICAgICBib2R5OiBnZXRCb2R5KCksXG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogc3RhdHVzLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICAgIHJhd1JlcXVlc3Q6IHhoclxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycyl7IC8vcmVtZW1iZXIgeGhyIGNhbiBpbiBmYWN0IGJlIFhEUiBmb3IgQ09SUyBpbiBJRVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBwYXJzZUhlYWRlcnMoeGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyID0gbmV3IEVycm9yKFwiSW50ZXJuYWwgWE1MSHR0cFJlcXVlc3QgRXJyb3JcIilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCByZXNwb25zZSwgcmVzcG9uc2UuYm9keSlcbiAgICB9XG5cbiAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgfHwgbnVsbFxuXG4gICAgaWYgKCF4aHIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29ycyB8fCBvcHRpb25zLnVzZVhEUikge1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YRG9tYWluUmVxdWVzdCgpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgeGhyID0gbmV3IGNyZWF0ZVhIUi5YTUxIdHRwUmVxdWVzdCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5XG4gICAgdmFyIGFib3J0ZWRcbiAgICB2YXIgdXJpID0geGhyLnVybCA9IG9wdGlvbnMudXJpIHx8IG9wdGlvbnMudXJsXG4gICAgdmFyIG1ldGhvZCA9IHhoci5tZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCBcIkdFVFwiXG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHkgfHwgb3B0aW9ucy5kYXRhIHx8IG51bGxcbiAgICB2YXIgaGVhZGVycyA9IHhoci5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgdmFyIHN5bmMgPSAhIW9wdGlvbnMuc3luY1xuICAgIHZhciBpc0pzb24gPSBmYWxzZVxuICAgIHZhciB0aW1lb3V0VGltZXJcblxuICAgIGlmIChcImpzb25cIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIGlzSnNvbiA9IHRydWVcbiAgICAgICAgaGVhZGVyc1tcImFjY2VwdFwiXSB8fCBoZWFkZXJzW1wiQWNjZXB0XCJdIHx8IChoZWFkZXJzW1wiQWNjZXB0XCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgIGlmIChtZXRob2QgIT09IFwiR0VUXCIgJiYgbWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSB8fCBoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IChoZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpIC8vRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgYWNjZXB0IGhlYWRlciBkZWNsYXJlZCBieSB1c2VyXG4gICAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHJlYWR5c3RhdGVjaGFuZ2VcbiAgICB4aHIub25sb2FkID0gbG9hZEZ1bmNcbiAgICB4aHIub25lcnJvciA9IGVycm9yRnVuY1xuICAgIC8vIElFOSBtdXN0IGhhdmUgb25wcm9ncmVzcyBiZSBzZXQgdG8gYSB1bmlxdWUgZnVuY3Rpb24uXG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIElFIG11c3QgZGllXG4gICAgfVxuICAgIHhoci5vbnRpbWVvdXQgPSBlcnJvckZ1bmNcbiAgICB4aHIub3BlbihtZXRob2QsIHVyaSwgIXN5bmMsIG9wdGlvbnMudXNlcm5hbWUsIG9wdGlvbnMucGFzc3dvcmQpXG4gICAgLy9oYXMgdG8gYmUgYWZ0ZXIgb3BlblxuICAgIGlmKCFzeW5jKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSAhIW9wdGlvbnMud2l0aENyZWRlbnRpYWxzXG4gICAgfVxuICAgIC8vIENhbm5vdCBzZXQgdGltZW91dCB3aXRoIHN5bmMgcmVxdWVzdFxuICAgIC8vIG5vdCBzZXR0aW5nIHRpbWVvdXQgb24gdGhlIHhociBvYmplY3QsIGJlY2F1c2Ugb2Ygb2xkIHdlYmtpdHMgZXRjLiBub3QgaGFuZGxpbmcgdGhhdCBjb3JyZWN0bHlcbiAgICAvLyBib3RoIG5wbSdzIHJlcXVlc3QgYW5kIGpxdWVyeSAxLnggdXNlIHRoaXMga2luZCBvZiB0aW1lb3V0LCBzbyB0aGlzIGlzIGJlaW5nIGNvbnNpc3RlbnRcbiAgICBpZiAoIXN5bmMgJiYgb3B0aW9ucy50aW1lb3V0ID4gMCApIHtcbiAgICAgICAgdGltZW91dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgICAgICAgYWJvcnRlZD10cnVlLy9JRTkgbWF5IHN0aWxsIGNhbGwgcmVhZHlzdGF0ZWNoYW5nZVxuICAgICAgICAgICAgeGhyLmFib3J0KFwidGltZW91dFwiKVxuICAgICAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IoXCJYTUxIdHRwUmVxdWVzdCB0aW1lb3V0XCIpXG4gICAgICAgICAgICBlLmNvZGUgPSBcIkVUSU1FRE9VVFwiXG4gICAgICAgICAgICBlcnJvckZ1bmMoZSlcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0IClcbiAgICB9XG5cbiAgICBpZiAoeGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgICAgZm9yKGtleSBpbiBoZWFkZXJzKXtcbiAgICAgICAgICAgIGlmKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoa2V5KSl7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaGVhZGVycyAmJiAhaXNFbXB0eShvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhlYWRlcnMgY2Fubm90IGJlIHNldCBvbiBhbiBYRG9tYWluUmVxdWVzdCBvYmplY3RcIilcbiAgICB9XG5cbiAgICBpZiAoXCJyZXNwb25zZVR5cGVcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZVxuICAgIH1cblxuICAgIGlmIChcImJlZm9yZVNlbmRcIiBpbiBvcHRpb25zICYmXG4gICAgICAgIHR5cGVvZiBvcHRpb25zLmJlZm9yZVNlbmQgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVNlbmQoeGhyKVxuICAgIH1cblxuICAgIHhoci5zZW5kKGJvZHkpXG5cbiAgICByZXR1cm4geGhyXG5cblxufVxuXG5mdW5jdGlvbiBnZXRYbWwoeGhyKSB7XG4gICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09IFwiZG9jdW1lbnRcIikge1xuICAgICAgICByZXR1cm4geGhyLnJlc3BvbnNlWE1MXG4gICAgfVxuICAgIHZhciBmaXJlZm94QnVnVGFrZW5FZmZlY3QgPSB4aHIuc3RhdHVzID09PSAyMDQgJiYgeGhyLnJlc3BvbnNlWE1MICYmIHhoci5yZXNwb25zZVhNTC5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgPT09IFwicGFyc2VyZXJyb3JcIlxuICAgIGlmICh4aHIucmVzcG9uc2VUeXBlID09PSBcIlwiICYmICFmaXJlZm94QnVnVGFrZW5FZmZlY3QpIHtcbiAgICAgICAgcmV0dXJuIHhoci5yZXNwb25zZVhNTFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuIl19 | |
var pull = require('pull-stream') | |
var paramap = require('pull-paramap') | |
var async = require('pull-async') | |
var xhr = require('xhr') | |
var urls = [ | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/agpl3.txt', | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/apache.txt', | |
'https://raw.githubusercontent.com/terinjokes/gulp-license/master/licenses/mit.txt' | |
] | |
pull( | |
pull.values(urls), | |
paramap(function (url, next) { | |
pull( | |
async(cb => { | |
xhr(url, cb) | |
}), | |
pull.map(res => res.body), | |
pull.map(str => str.toUpperCase()), | |
pull.through(str => console.log(str)), | |
pull.drain(null, (err) => { | |
next(err, url) | |
}) | |
) | |
}), | |
pull.collect((err, out) => { | |
console.log('done', out) | |
}) | |
) | |
;}, 0) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"pull-stream": "3.4.5", | |
"pull-paramap": "1.1.6", | |
"pull-async": "1.0.0", | |
"xhr": "2.2.2" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- contents of this file will be placed inside the <body> --> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- contents of this file will be placed inside the <head> --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment