{
  "version": 3,
  "sources": [
    "../../../../../usr/local/lib/node_modules/browserify/node_modules/browser-pack/_prelude.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/Info.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/cameras/Camera.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/cameras/Controls.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/lights/TrackCameraLights.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/slider/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/components/utils/Stats.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/core/manifestToPoem.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/core/poem.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/core/renderer.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/core/routing.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/core/ui.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/demos/fungus/fungus.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/demos/treeGrowth/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/demos/treeGrowth/mesh.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/BloomPass.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/EffectComposer.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/FilmPass.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/MaskPass.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/RenderPass.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/ShaderPass.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/chromaticAberration/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/postprocessing/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/shaders/ConvolutionShader.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/shaders/CopyShader.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/shaders/FXAAShader.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/shaders/FilmShader.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/sound/mute.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/utils/ThreeConsole.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/utils/easing.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/utils/random.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/vendor/OrbitControls.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/vendor/Stats.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/vendor/StereoEffect.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/js/vendor/kd-tree/kdTree.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/manifests/1-seedling.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/manifests/2-fungus.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/manifests/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/crossroads/dist/crossroads.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/crossroads/node_modules/signals/dist/signals.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/eases/elastic-out.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/glslify/browser.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/glslify/simple-adapter.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/hasher/dist/js/hasher.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/hasher/node_modules/signals/dist/signals.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/insert-css/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/lerp/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/lib/clock.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/lib/loop.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._baseassign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._createassigner/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._isiterateecall/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash.restparam/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/raf/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-loop/node_modules/raf/node_modules/performance-now/lib/performance-now.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/lib/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._baseassign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._createassigner/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._isiterateecall/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash.restparam/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._arrayeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.foreach/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-manifests/node_modules/lodash.isobject/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/lib/colors.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/lib/menu.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/class-list/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/class-list/node_modules/indexof/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/insert-css/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._baseassign/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._baseassign/node_modules/lodash._basecopy/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._createassigner/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash._isiterateecall/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash._createassigner/node_modules/lodash.restparam/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.assign/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._arrayfilter/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basecallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basecallback/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basefilter/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash._basefilter/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.filter/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._arrayeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._baseeach/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.foreach/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/node_modules/lodash.isplainobject/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/node_modules/lodash.isplainobject/node_modules/lodash._basefor/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/node_modules/lodash.isplainobject/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/node_modules/lodash.isplainobject/node_modules/lodash.keysin/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.iselement/node_modules/lodash.isplainobject/node_modules/lodash.keysin/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._arraymap/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._basecallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._basecallback/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.map/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basecallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basecallback/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basecallback/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash._basefor/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.mapvalues/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.pairs/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.pairs/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.pairs/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.pairs/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.pairs/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._basecallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._basecallback/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash._basereduce/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.reduce/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basecallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basecallback/node_modules/lodash._baseisequal/node_modules/lodash.istypedarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basecallback/node_modules/lodash._bindcallback/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basecompareascending/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._baseeach/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._basesortby/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash._isiterateecall/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.sortby/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash._basecopy/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash._basetostring/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash._basevalues/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash._isiterateecall/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash._reinterpolate/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.escape/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.keys/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._getnative/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isarguments/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isarray/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.restparam/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-menu/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/class-list/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/class-list/node_modules/indexof/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/extend/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/node_modules/promise/core.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/node_modules/promise/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/node_modules/promise/node_modules/asap/asap.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/src/drivers/indexeddb.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/src/drivers/localstorage.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/src/drivers/websql.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/src/localforage.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/node_modules/localforage/src/utils/serializer.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/poem-mute/ui.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/three-glslify/index.js",
    "/Users/gregtatum/Google Drive/greg-sites/growth/node_modules/three-glslify/types.js",
    "/usr/local/lib/node_modules/browserify/node_modules/buffer/index.js",
    "/usr/local/lib/node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js",
    "/usr/local/lib/node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js",
    "/usr/local/lib/node_modules/browserify/node_modules/buffer/node_modules/is-array/index.js",
    "/usr/local/lib/node_modules/browserify/node_modules/events/events.js",
    "/usr/local/lib/node_modules/browserify/node_modules/process/browser.js"
  ],
  "names": [],
  "mappings": "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",
  "file": "generated.js",
  "sourceRoot": "",
  "sourcesContent": [
    "(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})",
    "var Info = function( poem, properties ) {\n\t\n\tvar originalTitle = document.title;\n\t\n\tvar $appendCredits = $( properties.appendCredits );\n\t\n\tif( properties.appendCredits ) $('.credits').append( $appendCredits );\n\tif( properties.title ) $(\"#info-title\").text( properties.title );\n\tif( properties.subtitle ) $(\"#info-subtitle\").text( properties.subtitle);\n\t\n\tif( properties.titleCss ) $(\"#info-title\").css( properties.titleCss );\n\tif( properties.subtitleCss ) $(\"#info-subtitle\").css( properties.subtitleCss );\n\t\n\tif( properties.arrowNextHref ) {\n\t\t$(\".arrow-next\").attr('href', properties.arrowNextHref );\n\t\t$(\".arrow-next\").show();\n\t} else {\n\t\t$(\".arrow-next\").hide();\n\t}\n\t\n\tif( properties.arrowPrevHref ) {\n\t\t$(\".arrow-prev\").attr('href', properties.arrowPrevHref );\n\t\t$(\".arrow-prev\").show();\n\t} else {\n\t\t$(\".arrow-prev\").hide();\n\t}\t\n\tif( properties.documentTitle ) document.title = properties.documentTitle;\n\t\n\tif( properties.showArrowNext ) $(\".arrow-next\").show();\n\n\t$(\"#info\").show();\n\t\n\tpoem.emitter.on('destroy', function() {\n\t\tdocument.title = originalTitle;\n\t\t$(\"#info-title\").text('');\t\t\n\t\t$(\"#info-subtitle\").text('');\n\t\t$(\"#info-title\").attr('style', '');\n\t\t$(\"#info-subtitle\").attr('style', '');\n\t\t$(\".arrow-next\").hide();\n\t\t$(\"#info\").hide();\n\t\t$appendCredits.remove();\n\t});\n\t\n};\n\nmodule.exports = Info;",
    "\n\nvar Camera = function( properties, scene, poemEmitter ) {\n\t\n\tvar config = _.extend({\n\t\tfov : 50,\n\t\tnear : 3,\n\t\tfar : 10000,\n\t\taspectRatio : window.innerWidth / window.innerHeight\n\t}, properties);\n\t\n\tthis.object = new THREE.PerspectiveCamera(\n\t\tconfig.fov,\n\t\tconfig.aspect,\n\t\tconfig.near,\n\t\tconfig.far\n\t);\n\t\n\tthis.object.position.x = _.isNumber( properties.x ) ? properties.x : 0;\n\tthis.object.position.y = _.isNumber( properties.y ) ? properties.y : 0;\n\tthis.object.position.z = _.isNumber( properties.z ) ? properties.z : 500;\n\t\n\tscene.add( this.object );\n\t\n\tpoemEmitter.on( 'resize', this.resize.bind(this) );\n\t\n};\n\nmodule.exports = Camera;\n\nCamera.prototype = {\n\t\n\tresize : function() {\n\t\tthis.object.aspect = window.innerWidth / window.innerHeight;\n\t\tthis.object.updateProjectionMatrix();\n\t}\n};",
    "var OrbitControls = require('../../vendor/OrbitControls');\n\nvar Controls = function( poem, properties ) {\n\t\n\tthis.poem = poem;\n\tthis.properties = properties;\n\n\tthis.controls = new OrbitControls( this.poem.camera.object, this.poem.canvas );\n\t\n\t_.extend( this.controls, properties );\n\t\n\tthis.poem.emitter.on( 'update', this.controls.update.bind( this.controls ) );\n\t\n};\n\nmodule.exports = Controls;\n",
    "var TrackCameraLights = function( poem, properties ) {\n\t\n\tthis.lights = [];\n\t\n\tvar ambient = new THREE.AmbientLight( 0x111111, 1, 0 );\n\t\tambient.position.set(0, 2000, 1000);\n\t\n\tvar front = new THREE.PointLight( 0xffffff, 0.3, 0 );\n\n\tvar rightFill = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\trightFill.position.set(3000, 2000, 5000);\n\t\n\tvar rimBottom = new THREE.PointLight( 0xffffff, 1, 0 );\n\t\trimBottom.position.set(-1000, -1000, -1000);\n\t\t\n\tvar rimBackLeft = new THREE.PointLight( 0xffffff, 2, 0 );\n\t\trimBackLeft.position.set(-700, 500, -1000);\n\t\n\tpoem.scene.add( ambient );\n\t// poem.camera.object.add( front );\n\tpoem.camera.object.add( rightFill );\n\tpoem.camera.object.add( rimBottom );\n\tpoem.camera.object.add( rimBackLeft );\n\t\n};\n\nmodule.exports = TrackCameraLights;\n\nTrackCameraLights.prototype = {\n\n};",
    "\nvar InsertCss = require('insert-css');\n\nvar internals = {\n\t\n\tid : 0,\n\t\n\tcreateElement : function( html, className ) {\n\t\tvar div = document.createElement('div');\n\t\tdiv.innerHTML = html;\n\t\treturn div.getElementsByClassName( className )[0]\n\t},\n\t\n\ttemplate : _.template( \"<div class='poem-slider <%= className %>'>\\n\\t<label class='poem-slider-message' for='poem-slider-<%- id %>'><%= message %></label>\\n\\t<div class='poem-slider-input-wrapper'>\\n\\t\\t<input\\n\\t\\t\\ttype='range'\\n\\t\\t\\tmin='<%- min %>'\\n\\t\\t\\tmax='<%- max %>'\\n\\t\\t\\tstep='<%- step %>'\\n\\t\\t\\tvalue='<%- value %>'\\n\\t\\t\\tclass='poem-slider-input'\\n\\t\\t\\tid='poem-slider-<%- id %>'\\n\\t\\t/>\\n\\t</div>\\n\\t<div class='poem-slider-cta-wrapper'>\\n\\t\\t<button class='poem-slider-cta'><%- callToAction %></button>\\n\\t</div>\\n</div>\" ),\n\t\n\tattachCss : _.once(function() {\n\t\tInsertCss( Buffer(\"LnBvZW0tc2xpZGVyIHsKICAgIHRvcDogNTAlOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTIuNSU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB3aWR0aDogNzUlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjsKICAgIHBhZGRpbmc6IDNlbTsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTI1MjU7CiAgICBib3gtc2hhZG93OiAycHggMnB4IDAgIzE4MTgxODsKICAgIGJvcmRlci1yYWRpdXM6IDAuMmVtOwp9Ci5wb2VtLXNsaWRlci1tZXNzYWdlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY29sb3I6ICM3QjdCN0I7CiAgICBmb250LXNpemU6IDEuMmVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGZvbnQtd2VpZ2h0OiAzMDA7Cn0KLnBvZW0tc2xpZGVyLWlucHV0LXdyYXBwZXIgewogICAgbWFyZ2luOiAxZW07Cn0KLnBvZW0tc2xpZGVyLWN0YS13cmFwcGVyIHsKfQoucG9lbS1zbGlkZXItY3RhIHsKCWJhY2tncm91bmQ6IG5vbmU7Cglib3JkZXI6IG5vbmU7Cgl0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXM7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNDQ4Q0NDOwoJZm9udC1zaXplOiAxLjRlbTsKCWNvbG9yOiAjMjIyOwoJcGFkZGluZzogMC4zZW0gMWVtOwoJYm9yZGVyLXJhZGl1czogMC4yZW07Cglib3gtc2hhZG93OiAwLjJlbSAwLjJlbSAwLjdlbSByZ2JhKDAsIDAsIDAsIDAuNDMpOwoJcG9zaXRpb246IHJlbGF0aXZlOwoJcGFkZGluZy1yaWdodDogMS45ZW07CgljdXJzb3I6IHBvaW50ZXI7Cgl0cmFuc2Zvcm06IHNjYWxlKDEpOwp9Ci5wb2VtLXNsaWRlci1jdGE6aG92ZXIgewoJYmFja2dyb3VuZC1jb2xvcjogIzUyQTJFQTsKCXRyYW5zZm9ybTogc2NhbGUoMS4wMyk7Cn0KLnBvZW0tc2xpZGVyLWlucHV0LXdyYXBwZXIgewogICAgbWFyZ2luOiA1JTsKfQoucG9lbS1zbGlkZXItY3RhOmFmdGVyIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgY29udGVudDogIiI7CiAgICB3aWR0aDogMDsKCWhlaWdodDogMDsKCWJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItd2lkdGg6IDAuNWVtIDAgMC41ZW0gMC42ZW07CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMyMjI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMC43ZW07CiAgICB0b3A6IDAuNDVlbTsKfQoucG9lbS1zbGlkZXItaW5wdXQgewogICAgd2lkdGg6IDEwMCU7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOjcwMHB4KSB7CgkucG9lbS1zbGlkZXIgewoJICAgIHdpZHRoOiA5MCU7CgkgICAgbGVmdDogNSU7CgkgICAgZm9udC1zaXplOiAwLjllbTsKCX0KfQ==\",\"base64\") )\n\t}),\n\t\n\thandleSubmitFn : function( config, poem, el ) {\n\t\t\n\t\treturn function() {\n\t\t\t\n\t\t\tvar number = Number( el.getElementsByClassName('poem-slider-input')[0].value )\n\t\t\n\t\t\tconfig.callback( poem, number)\n\t\t\n\t\t\tif( config.destroyOnSubmit ) {\n\t\t\t\tinternals.destroy( el )\n\t\t\t}\n\t\t\n\t\t\treturn false\n\t\t}\n\t},\n\t\n\tbootElement : function( config, poem ) {\n\t\t\n\t\tinternals.attachCss()\n\t\t\n\t\tvar html = internals.template( _.extend({\n\t\t\tid: internals.id++\n\t\t}, config))\n\t\t\n\t\tvar el = internals.createElement( html, \"poem-slider\" )\n\t\t\n\t\tel\t.getElementsByClassName('poem-slider-cta')[0]\n\t\t\t.addEventListener( 'click', internals.handleSubmitFn( config, poem, el ), false )\n\t\t\n\t\tconfig.targetEl.appendChild( el )\n\t\t\n\t\tpoem.emitter.on('destroy', _.partial( internals.destroy, el ) )\n\t},\n\t\n\tdestroy : function( el ) {\n\t\t\n\t\tif( el && el.parentElement ) {\n\t\t\tel.parentElement.removeChild( el )\n\t\t}\n\t}\n}\n\nmodule.exports = function slider( poem, properties ) {\n\t\n\tvar config = _.extend({\n\t\ttargetEl : document.body\n\t  , message : \"Adjust the Slider\"\n\t  , className : \"\"\n\t  , min: 1\n\t  , max: 10\n\t  , step: 1\n\t  , value: 5\n\t  , callToAction: \"Start\"\n  \t  , callback : function() { return false }\n\t}, properties)\n\t\n\tinternals.bootElement( config, poem )\n\t\n\treturn {}\n}",
    "var MrDoobStats = require('../../vendor/Stats');\n\nvar Stats = function( poem ) {\n\t\n\tthis.poem = poem;\n\t\n\tthis.stats = new MrDoobStats();\n\tthis.stats.domElement.style.position = 'absolute';\n\tthis.stats.domElement.style.top = '0px';\n\t$( this.poem.div ).append( this.stats.domElement );\n\t\n\tthis.poem.emitter.on( 'update', this.stats.update.bind( this.stats ) );\n\t\n};\n\nmodule.exports = Stats;",
    "var createManifestLoader = require('poem-manifests');\nvar EventEmitter = require('events').EventEmitter;\n\nvar _emitter = new EventEmitter();\nvar _loader = null;\n\nvar init = function( createPoemGraph, manifests ) {\n\t\t\n\t_loader = createManifestLoader( manifests, {\n\t\temitter : _emitter,\n\t\tgetGraph : function( manifest, slug ) {\treturn createPoemGraph( manifest, _emitter ); },\n\t\tglobalManifest : {}\n\t});\n\t\n\t_emitter.on('load', function( e ) {\n\t\twindow.poem = e.graph;\n\t});\n\t\n};\n\nvar load = function( slug ) {\n\treturn _loader.load( slug );\n};\n\nmodule.exports = {\n\tinit : init,\n\tload : load,\n\temitter : _emitter\n};\n",
    "var Camera = require('../components/cameras/Camera');\nvar renderer = require('./renderer');\nvar createLoop = require('poem-loop');\n\nvar _ratio = _.isNumber( window.devicePixelRatio ) ? window.devicePixelRatio : 1;\n\nvar createFog = function( scene, properties, cameraPositionZ ) {\n\t\n\tvar config = _.extend({\n\t\tcolor : 0x222222,\n\t\tnearFactor : 0.5,\n\t\tfarFactor : 2\n\t}, properties );\n\t\n\tscene.fog = new THREE.Fog(\n\t\tconfig.color,\n\t\tcameraPositionZ * config.nearFactor,\n\t\tcameraPositionZ * config.farFactor\n\t);\n\t\n};\n\nmodule.exports = function poem( manifest, loaderEmitter ) {\n\t\n\tvar config = _.extend({\n\t\tcamera : null,\n\t\tfog : null,\n\t\trenderer : null\n\t}, manifest.config);\n\t\n\tvar loop = createLoop();\n\tvar emitter = loop.emitter; // Steal the emitter for the poem\n\t\n\tvar scene = new THREE.Scene();\n\tvar camera = new Camera( config.camera, scene, emitter );\n\tcreateFog( scene, config.fog, camera.object.position.z );\n\t\n\trenderer( config.renderer, scene, camera.object, emitter );\n\t\n\tloaderEmitter.once( 'load', loop.start );\n\tloaderEmitter.on( 'unload', function() {\n\t\tloop.stop();\n\t\temitter.emit('destroy');\n\t});\n\t\n\treturn {\n\t\temitter : emitter,\n\t\tcanvas : $(\"canvas\")[0],\n\t\tscene : scene,\n\t\tratio : _ratio,\n\t\tcamera : camera,\n\t\t$div : $(\"#container\"),\n\t\tloop : loop,\n\t\tstart : loop.start,\n\t\tstop : loop.stop\n\t};\n\t\n};",
    "require('../postprocessing');\nrequire('../shaders/CopyShader');\nrequire('../shaders/FilmShader');\nrequire('../shaders/ConvolutionShader');\nrequire('../shaders/FXAAShader');\nvar chromaticAberrationShader = require('../postprocessing/chromaticAberration');\nvar StereoEffect = require('../vendor/StereoEffect');\n\n//Singletons\nvar _ratio = _.isNumber( window.devicePixelRatio ) ? window.devicePixelRatio : 1;\nvar _webGLRenderer = addRenderer();\nvar _renderer = _webGLRenderer;\nvar _rendererPass = new THREE.RenderPass();\nvar _composer = addEffectsComposer( _rendererPass );\n\nfunction addEffectsComposer( renderPass ) {\n\t\n\tvar bloom = new THREE.BloomPass( 1.5, 15, 16, 512 );\n\tvar copy = new THREE.ShaderPass( THREE.CopyShader );\n\tvar antialias = new THREE.ShaderPass( THREE.FXAAShader );\n\tvar chromaticAberration = new THREE.ShaderPass( chromaticAberrationShader );\n\t\n\tantialias.uniforms.resolution.value.set(\n\t\t1 / (window.innerWidth * _ratio),\n\t\t1 / (window.innerHeight * _ratio)\n\t);\n\tcopy.renderToScreen = true;\n\n\tvar composer = new THREE.EffectComposer( _renderer );\n\tcomposer.renderTarget1.setSize( window.innerWidth * _ratio, window.innerHeight * _ratio );\n\tcomposer.renderTarget2.setSize( window.innerWidth * _ratio, window.innerHeight * _ratio );\n\n\tcomposer.addPass( renderPass );\n\tcomposer.addPass( antialias );\n\t// composer.addPass( chromaticAberration );\n\tcomposer.addPass( bloom );\n\tcomposer.addPass( copy );\n\t\n\treturn composer;\n\t\n}\n\nfunction addSceneAndCameraToEffects( scene, camera ) {\n\t\n\t_rendererPass.scene = scene;\n\t_rendererPass.camera = camera;\n\t\n}\n\nvar newResizeHandler = (function() {\n\t\n\tvar handler;\n\tvar $window = $(window);\n\t\n\treturn function( camera ) {\n\t\t\n\t\tvar newHandler = function() {\n\t\t\t\n\t\t\t_renderer.setSize(\n\t\t\t\twindow.innerWidth,\n\t\t\t\twindow.innerHeight\n\t\t\t);\n\t\t\t\n\t\t\tcamera.aspect = window.innerWidth / window.innerHeight;\n\t\t\tcamera.updateProjectionMatrix();\n\t\t\t\n\t\t};\n\t\t\n\t\tif( handler ) {\n\t\t\t$(window).off('resize', handler);\n\t\t}\n\t\t\n\t\t$window.on('resize', newHandler);\n\t\tnewHandler();\n\t\thandler = newHandler;\n\t\t\n\t};\n\t\t\n})();\n\nfunction addRenderer() {\n\t\n\tvar renderer = new THREE.WebGLRenderer();\n\trenderer.setPixelRatio( _ratio );\n\trenderer.setSize(\n\t\twindow.innerWidth,\n\t\twindow.innerHeight\n\t);\n\tdocument.getElementById( 'container' ).appendChild( renderer.domElement );\n\t\t\n\treturn renderer;\n\t\n}\n\nfunction handleNewPoem( properties, scene, cameraObj, poemEmitter ) {\n\t\n\tvar config = _.extend({\n\t\tclearColor : 0x222222,\n\t\tuseEffects : false,\n\t\tuseVR : false\n\t}, properties);\n\t\n\t_webGLRenderer.setClearColor( config.clearColor );\n\t\n\tif( config.useVR ) {\n\t\t_renderer = new StereoEffect( _webGLRenderer );\n\t\t_renderer.separation = 10;\n\t\t// this.hideUI();\n\t} else {\n\t\t_renderer = _webGLRenderer;\n\t\t// this.showUI();\n\t}\n\t\n\taddSceneAndCameraToEffects( scene, cameraObj );\n\tnewResizeHandler( cameraObj );\n\t\n\tif( config.useEffects ) {\n\t\t_webGLRenderer.autoClear = false;\n\t\tpoemEmitter.on( 'draw', function() {\n\t\t\t_composer.render( scene, cameraObj );\n\t\t});\n\t} else {\n\t\t_webGLRenderer.autoClear = true;\n\t\tpoemEmitter.on( 'draw', function() {\n\t\t\t_renderer.render( scene, cameraObj );\n\t\t});\n\t}\n\t\n\treturn _renderer;\n}\n\nmodule.exports = handleNewPoem;",
    "var crossroads = require('crossroads');\nvar hasher = require('hasher');\nvar manifestToPoem = require('./manifestToPoem');\n\nvar _baseUrl = '/growth';\nvar _defaultLevel = \"1-seedling\";\n\nvar routing = {\n\t\n\tstart : function( Poem, manifests ) {\n\t\tmanifestToPoem.init( Poem, manifests );\n\t\t\n\t\tfunction parseHash( newHash, oldHash ){\n\t\t\tcrossroads.parse( newHash );\n\t\t}\n\t\t\n\t\tcrossroads.addRoute( '{name}',\trouting.loadUpALevel );\n\t\n\t\tcrossroads.addRoute( /.*/, function reRouteToMainTitlesIfNoMatch() {\n\t\t\thasher.replaceHash(_defaultLevel);\n\t\t});\n\t\tcrossroads.addRoute( '/', function reRouteToMainTitlesIfNoMatch() {\n\t\t\thasher.replaceHash(_defaultLevel);\n\t\t});\n\t\n\t\thasher.initialized.add(parseHash); // parse initial hash\n\t\thasher.changed.add(parseHash); //parse hash changes\n\t\thasher.init(); //start listening for history change\n\t\t\n\t},\n\t\n\tshowMainTitles : function() {\n\n\t\t_gaq.push( [ '_trackPageview', _baseUrl ] );\n\t\n\t\tmanifestToPoem.load( _defaultLevel );\t\t\n\n\t},\n\n\tloadUpALevel : function( levelName ) {\n\n\t\t_gaq.push( [ '_trackPageview', _baseUrl+'/#'+levelName ] );\n\t\tconsole.log(_baseUrl+'/#/'+levelName)\n\t\n\t\tvar levelFound = manifestToPoem.load( levelName );\n\t\n\t\tif( !levelFound ) {\n\t\t\tmanifestToPoem.load( _defaultLevel );\n\t\t}\n\t\t\n\t}\n\t\n};\n\nmodule.exports = routing;",
    "var poemMenu = require('poem-menu');\nvar\trouting\t= require('./routing');\nvar mute = require('../sound/mute');\nvar manifestToPoem = require('./manifestToPoem');\n\nwindow.mute = mute;\n\nfunction handlers( menu ) {\n\t\n\tvar poem;\n\n\tconsole.log('menu handlers');\n\tmanifestToPoem.emitter.on( 'load', function( e ) {\n\t\tpoem = e.graph;\n\t});\n\n\tmenu.emitter.on('close', function() {\n\t\tif( poem ) poem.start();\n\t});\n\n\tmenu.emitter.on('open', function() {\n\t\tif( poem ) poem.stop();\n\t});\n\t\n}\n\n//Start\n\nmodule.exports = function startUI( manifests ) {\n\t\n\tvar menu = poemMenu( manifests, {\n\t\ttop: \"Growth\",\n\t\tbottom : mute.el\n\t});\n\n\thandlers( menu );\n\t\n};",
    "var KdTree = require('../../vendor/kd-tree/kdTree').kdTree\nvar Ease = require('eases/elastic-out')\nvar Lerp = require('lerp')\n\nfunction _createBones ( mesh, config ) {\n\n\tvar bones = []\n\tvar bonesA = []\n\t\n\t//Unique list of vertices\n\tvar vertices = _.uniq( mesh.geometry.vertices, function( v ) {\n\t\treturn \"\" + v.x + v.y + v.z\n\t})\n\n\tvar prevBone = mesh;\n\tfor ( var i = 0; i < config.boneCount ; i ++ ) {\n\t\t\n\t\tvar boneA = new THREE.Bone()\n\t\tvar boneB = new THREE.Bone()\n\t\t\n\t\tvar index = _.random(0, vertices.length - 1)\n\t\tboneA.position.copy( vertices[index] )\n\t\tboneB.position.copy( vertices[index] ).normalize().multiplyScalar( config.radius / 10 )\n\t\t\n\t\tbonesA.push( boneA )\n\t\tbones.push( boneA )\n\t\tbones.push( boneB )\n\t\t\n\t\tmesh.add( boneA )\n\t\tboneA.add( boneB )\n\t\t\n\t\tvertices.splice( index, 1 )\n\t}\n\t\n\t_calculateSkinWeights( mesh.geometry, bonesA )\n\tvar skeleton = new THREE.Skeleton( bones )\n\t\n\tmesh.bind( skeleton )\n\tskeleton.calculateInverses()\n\tmesh.normalizeSkinWeights()\n\n\treturn bones;\n\n}\n\nfunction _calculateSkinWeights( geometry, allBones ) {\n\t\n\t_.each( geometry.vertices, function calculateSkinWeight( vertex ) {\n\t\t\n\t\tvar result = _.chain( allBones )\n\t\t\n\t\t\t.map(function( bone, index ) {\n\t\t\t\tvar distanceSq = vertex.distanceToSquared( bone.position )\n\t\t\t\tvar tuple = [bone, distanceSq, index]\n\t\t\t\treturn tuple\n\t\t\t})\n\t\t\t.sortBy(function( tuple ) {\n\t\t\t\treturn tuple[1]\n\t\t\t})\n\t\t\t.take(4)\n\t\t\t.map(function( tuple ) {\n\t\t\t\tvar bone       = tuple[0]\n\t\t\t\tvar distanceSq = tuple[1]\n\t\t\t\tvar i          = tuple[2]\n\t\t\t\t\n\t\t\t\treturn {\n\t\t\t\t\tbone : bone,\n\t\t\t\t\tdistance : distanceSq,\n\t\t\t\t\tindex : i\n\t\t\t\t}\n\t\t\t})\n\t\t\t.value()\n\t\t\n\t\tvar sum = _.sum( _.pluck(result, \"distance\") )\n\t\t\t\n\t\tgeometry.skinIndices.push( new THREE.Vector4(\n\t\t\t2 * result[0].index,\n\t\t\t2 * result[1].index,\n\t\t\t2 * result[2].index,\n\t\t\t2 * result[3].index\n\t\t));\n\n\t\tgeometry.skinWeights.push( new THREE.Vector4(\n\t\t\t// sum > 0 ? 1 - result[0].distance / sum : 0.25,\n\t\t\t// sum > 0 ? 1 - result[1].distance / sum : 0.25,\n\t\t\t// sum > 0 ? 1 - result[2].distance / sum : 0.25,\n\t\t\t// sum > 0 ? 1 - result[3].distance / sum : 0.25\n\t\t\t4/10,\n\t\t\t3/10,\n\t\t\t2/10,\n\t\t\t1/10\n\t\t));\n\t\t\n\t\t// geometry.skinIndices.push( new THREE.Vector4(0,0,0,0) );\n\t\t// geometry.skinWeights.push( new THREE.Vector4(1,0,0,0) );\n\t\t\n\t})\n}\n\nfunction _calculateSkinWeights2( geometry, allBones ) {\n\t\n\t_.each( geometry.vertices, function calculateSkinWeight( vertex ) {\n\t\t\n\t\tvar minValues = []\n\t\tvar minIndices = []\n\t\tvar pickCount = 4\n\t\t\n\t\t//Go through each bone\n\t\tfor( var i=0; i < allBones.length; i++ ) {\n\t\t\t\n\t\t\tvar bone = allBones[i]\n\t\t\tvar distanceSq = vertex.distanceToSquared( bone.position )\n\t\t\t\n\t\t\t//Check to see if this distance is smaller\n\t\t\tfor( var j=0; j < pickCount; j++ ) {\n\t\t\t\tif( distanceSq < minValues[j] ) {\n\t\t\t\t\t\n\t\t\t\t\tvar prevValue\n\t\t\t\t\tvar nextValue = minValues[j]\n\t\t\t\t\tminValues[j] = distanceSq\n\n\t\t\t\t\tvar prevIndex\n\t\t\t\t\tvar nextIndex = minIndices[j]\n\t\t\t\t\tminIndices[j] = distanceSq\n\n\t\t\t\t\tfor( j++; j < pickCount; j++ ) {\n\t\t\t\t\t\tprevValue = minValues[j]\n\t\t\t\t\t\tminValues[j] = nextValue\n\t\t\t\t\t\tnextValue = prevValue\n\n\t\t\t\t\t\tprevMin = minValues[j]\n\t\t\t\t\t\tminValues[j] = nextMin\n\t\t\t\t\t\tnextMin = prevMin\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar sum = _.sum(minValues)\n\t\t\n\t\t\tgeometry.skinIndices.push( new THREE.Vector4(\n\t\t\t\t2 * minIndices[0],\n\t\t\t\t2 * minIndices[1],\n\t\t\t\t2 * minIndices[2],\n\t\t\t\t2 * minIndices[3]\n\t\t\t));\n\n\t\t\tgeometry.skinWeights.push( new THREE.Vector4(\n\t\t\t\t4/10,\n\t\t\t\t3/10,\n\t\t\t\t2/10,\n\t\t\t\t1/10\n\t\t\t));\n\t\t\n\t\t}\n\t})\n}\n\nfunction _createMesh( poem, config ) {\n\n\t// var geometry = new THREE.SphereGeometry(\n\t// \tconfig.radius          // radius\n\t//   , config.widthSegments   // widthSegments\n\t//   , config.heightSegments  // heightSegments\n\t//   , 0                      // phiStart\n\t//   , Math.PI * 2            // phiLength\n\t//   , 0                      // thetaStart\n\t//   , config.thetaLength     // thetaLength\n\t// )\n\n\tvar geometry = new THREE.IcosahedronGeometry( config.radius, config.subdivisions )\n\t\n\tvar baseHue = Math.random()\n\t\t\n\tfunction generateColor( face, prop ) {\n\t\t\n\t\tvar vertIndex = face[prop]\n\t\tvar vert = geometry.vertices[ vertIndex ]\n\t\tvar unitHue = (config.radius + vert.y ) / (2 * config.radius)\n\t\tvar hue = (baseHue + unitHue * config.hueRange) % 1\n\t\tvar color = new THREE.Color().setHSL( hue, 0.5, 0.5 )\n\t\t\n\t\tface.vertexColors.push( color )\n\t}\n\t\n\tfor(var i=0; i < geometry.faces.length; i++) {\n\t\t\n\t\tgenerateColor( geometry.faces[i], \"a\" )\n\t\tgenerateColor( geometry.faces[i], \"b\" )\n\t\tgenerateColor( geometry.faces[i], \"c\" )\n\t\t\n\t}\n\t\n\tgeometry.colorsNeedUpdate = true\n\t\n\tvar material = new THREE.MeshPhongMaterial({\n\t\tskinning : true\n\t  , emissive : 0x000000\n\t  // , color : 0x224488\n\t  , color : 0xffffff\n\t  , wireframe : true\n\t  , vertexColors : THREE.VertexColors\n\t})\n\n\tvar mesh = new THREE.SkinnedMesh()\n\tmesh.geometry = geometry\n\tmesh.material = material \n\t\n\t// mesh.position.y -= config.radius * 0.2\n\t\n\tpoem.scene.add( mesh )\n\t\n\treturn mesh\n}\n\nfunction _updateGrowthFn( tree, bonePositions, config, current ) {\n\t\n\tvar x,y,z\n\t\n\treturn function updateGrowth(e) {\n\t\t\n\t\tcurrent.distance *= config.distanceGrowth\n\n\t\tfor( var i=0; i < bonePositions.length; i++ ) {\n\t\t\tvar bone = bonePositions[i]\n\t\t\t\n\t\t\tx = y = z = 0\n\t\t\t\n\t\t\tvar results = tree.nearest( bone, config.neighborsCount )\n\t\t\t\n\t\t\tfor( var j=0; j < results.length; j++ ) {\n\t\t\t\t\n\t\t\t\tvar nearest = results[j][0]\n\t\t\t\tvar distance = results[j][1]\n\t\t\t\t\n\t\t\t\tif( distance <= current.distance ) {\n\t\t\t\t\tx += ( bone.x - nearest.x ) * distance / current.distance\n\t\t\t\t\ty += ( bone.y - nearest.y ) * distance / current.distance\n\t\t\t\t\tz += ( bone.z - nearest.z ) * distance / current.distance\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif( results.length > 0 ) {\n\t\t\t\t\n\t\t\t\tx = x / results.length\n\t\t\t\ty = y / results.length\n\t\t\t\tz = z / results.length\n\t\t\t\t\n\t\t\t\tbone.x += config.moveSpeed * x\n\t\t\t\tbone.y += config.moveSpeed * Math.max(0, y)\n\t\t\t\tbone.z += config.moveSpeed * z\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t}\n}\n\nfunction _updateSmoothFn( bonePositions, boneNeighbors, config, current ) {\n\t\n\tvar bone = new THREE.Vector3()\n\tvar ptA = new THREE.Vector3()\n\tvar ptB = new THREE.Vector3()\n\tvar ptC = new THREE.Vector3()\n\tvar ptD = new THREE.Vector3()\n\t\n\tvar vScratch = new THREE.Vector3()\n\tvar normalA = new THREE.Vector3()\n\tvar normalB = new THREE.Vector3()\n\tvar normal = new THREE.Vector3()\n\t\n\tvar plane = new THREE.Plane()\n\t\n\treturn function updateSmooth() {\n\t\t\n\t\tfor( var i=0; i < bonePositions.length; i++ ) {\n\t\t\tvar bone = bonePositions[i]\n\t\t\tvar neighbors = boneNeighbors[i]\n\n\t\t\tptA = neighbors[0]\n\t\t\tptB = neighbors[1]\n\t\t\tptC = neighbors[2]\n\t\t\tptD = neighbors[3]\n\n\t\t\t// Calculate normals\n\t\t\tnormalA.subVectors( ptC, ptA ).cross( vScratch.subVectors( bone, ptA ) ).normalize()\n\t\t\tnormalB.subVectors( ptD, ptB ).cross( vScratch.subVectors( bone, ptB ) ).normalize()\n\t\t\t\n\t\t\t//Get averaged normals\n\t\t\tnormal.addVectors( normalA, normalB ).normalize()\n\t\t\t\n\t\t\tplane.setFromNormalAndCoplanarPoint( normal, bone )\n\t\t\t\n\t\t\tvar dA = plane.distanceToPoint( ptA )\n\t\t\tvar dB = plane.distanceToPoint( ptB )\n\t\t\tvar dC = plane.distanceToPoint( ptC )\n\t\t\tvar dD = plane.distanceToPoint( ptD )\n\t\t\t\n\t\t\t//Update the points\n\t\t\tneighbors[0].x -= normal.x * dA * config.smoothSpeed\n\t\t\tneighbors[0].y -= normal.y * dA * config.smoothSpeed\n\t\t\tneighbors[0].z -= normal.z * dA * config.smoothSpeed\n\t\t\tneighbors[1].x -= normal.x * dB * config.smoothSpeed\n\t\t\tneighbors[1].y -= normal.y * dB * config.smoothSpeed\n\t\t\tneighbors[1].z -= normal.z * dB * config.smoothSpeed\n\t\t\tneighbors[2].x -= normal.x * dC * config.smoothSpeed\n\t\t\tneighbors[2].y -= normal.y * dC * config.smoothSpeed\n\t\t\tneighbors[2].z -= normal.z * dC * config.smoothSpeed\n\t\t\tneighbors[3].x -= normal.x * dD * config.smoothSpeed\n\t\t\tneighbors[3].y -= normal.y * dD * config.smoothSpeed\n\t\t\tneighbors[3].z -= normal.z * dD * config.smoothSpeed\n\t\t}\n\t}\n}\n\nfunction _distance( a, b ) { return b.distanceTo(a) }\n\nfunction _getBonePositions( bones ) {\n\t\n\tvar bonesEven = _.filter( bones, function( bone, i ) {\n\t\treturn i % 2 === 0\n\t})\n\t\n\treturn _.pluck(bonesEven, \"position\")\n}\n\nfunction _addSkeletonHelper( poem, mesh ) {\n\tvar skeletonHelper = new THREE.SkeletonHelper( mesh );\n\tskeletonHelper.material.linewidth = 2;\n\tskeletonHelper.material.opacity = 0.3;\n\tskeletonHelper.material.transparent = true;\n\t\n\tpoem.scene.add( skeletonHelper )\n\t\n\tpoem.emitter.on('update', skeletonHelper.update.bind(skeletonHelper))\n}\n\nfunction _getBoneNeighbors( positions, tree ) {\n\t\n\treturn _.map( positions, function selectNearest( position ) {\n\t\t\n\t\tvar pointAndDistances = tree.nearest( position, 5 )\n\t\tvar points = _.map(pointAndDistances, function(tuple) {\n\t\t\treturn tuple[0]\n\t\t})\n\t\t\n\t\treturn _.filter(points, function(pt) {\n\t\t\treturn pt !== position\n\t\t})\n\t})\n}\n\nmodule.exports = function createFungus( poem, properties ) {\n\t\n\treturn function startGrowingFungus( number ) {\n\t\t\n\t\tvar $msg = $(\"<div class='preload-message'>Digital spores are seeding the ether...</div>\")\n\t\t$('#container').append(\t$msg )\n\t\t\n\t\tvar config = _.extend({\n\t\t\tradius          : 10\n\t\t  , neighborsCount  : 3\n\t\t  , nearestDistance : 10\n\t\t  , distanceGrowth  : 1.001\n\t\t  , moveSpeed       : 0.1\n\t\t  , rotationSpeed   : 0.0001\n\t\t  , subdivisions    : 7\n\t\t  // , widthSegments   : 40 * 2\n\t\t  // , heightSegments  : 10 * 2\n\t\t  , boneCount       : 400\n\t\t  , thetaLength     : Math.PI * 0.3\n\t\t  , smoothSpeed     : 0.005\n\t\t  , hueRange        : 0.2\n\t\t}, properties)\n\t\t\n\t\tconfig.subdivisions = Math.round(number * config.subdivisions)\n\t\tconfig.boneCount = Math.round(number * config.boneCount)\n\t\t\n\t\n\t\tvar current = {\n\t\t\tdistance : config.nearestDistance\n\t\t}\n\t\t\n\t\tsetTimeout(function deferredStartGrowingFungus() {\n\t\t\t\n\t\t\t// console.profile(\"blob\")\n\t\t\tvar mesh = _createMesh( poem, config )\n\t\t\tvar bones = _createBones( mesh, config )\n\t\t\tvar bonePositions = _getBonePositions( bones )\n\t\t\tvar tree = new KdTree( bonePositions, _distance, ['x','y','z'] )\n\t\t\tvar boneNeighbors = _getBoneNeighbors( bonePositions, tree )\n\n\t\t\t_addSkeletonHelper( poem, mesh )\n\n\t\t\tpoem.emitter.on('update', _updateGrowthFn( tree, bonePositions, config, current ) )\n\t\t\tpoem.emitter.on('update', _updateSmoothFn( bonePositions, boneNeighbors, config, current ) )\n\n\t\t\tvar accumulate = 1\n\t\t\tpoem.emitter.on('update', function(e) {\n\t\t\t\taccumulate += e.dt\n\t\t\t\tvar amt = 50\n\t\t\t\tmesh.position.y = 50 + amt + -amt * Ease( Math.min(1, accumulate / 10000) )\n\t\t\t\tmesh.rotation.y += e.dt * config.rotationSpeed\n\t\t\t})\n\t\t\t\n\t\t\t$msg.remove()\n\n\t\t\t// poem.emitter.once('update', function() {\n\t\t\t// \tconsole.profileEnd(\"blob\")\n\t\t\t// })\n\t\t\t\n\t\t}, 100)\n\t}\t\n\t\n\t\n}",
    "var Easing = require('../../utils/easing')\nvar GenerateTreeMesh = require('./mesh')\nvar Random = require('../../utils/random')\n\nvar internals = {\n\t\n\taddBaseSphere : function( scene ) {\n\t\n\t\tvar geometry = new THREE.SphereGeometry(100, 40, 5, 0, Math.PI * 2, 0, Math.PI * 0.3);\n\t\tvar material = new THREE.MeshBasicMaterial( {color: 0x333333, side:THREE.DoubleSide} );\n\t\tvar sphere = new THREE.Mesh( geometry, material );\n\t\tsphere.position.y = -99.5\n\t\tpoem.scene.add( sphere );\n\t},\n\t\n\ttravelTreeFn : function( rootBone, callback ) {\n\t\n\t\t// callback( bone, depth, sibling, iteration, maxDepth )\n\n\t\tvar iteration = 0\n\t\tvar maxDepth = 0\n\t\n\t\tfunction travel( arg, bone, cb, depth, sibling ) {\n\t\t\n\t\t\tcb( arg, bone, depth, sibling, iteration, maxDepth )\n\t\t\titeration++;\n\t\t\n\t\t\tfor( var i=0; i < bone.children.length; i++ ) {\n\t\t\t\ttravel( arg, bone.children[i], cb, depth+1, i )\n\t\t\t}\n\t\t}\n\t\n\t\ttravel( undefined, rootBone, function setMaxDepth( arg, bone, depth, ortho, iteration) {\n\t\t\tmaxDepth = Math.max( depth, maxDepth );\n\t\t}, 0, 0 )\n\t\n\t\treturn function start( arg ) {\n\t\t\titeration = 0;\n\t\t\ttravel( arg, rootBone, callback, 0, 0 )\n\t\t}\n\t},\n\n\tseedRandomValuesToTree : function( bone )  {\n\t\n\t\tinternals.travelTreeFn( bone, function( arg, bone, depth, sibling, iteration, maxDepth ) {\n\t\t\n\t\t\tbone.randomRotation = [\n\t\t\t\tMath.random()\n\t\t\t  , Math.random()\n\t\t\t  , Math.random()\n\t\t\t]\n\t\t\n\t\t})()\n\t\n\t},\n\n\tshrinkTree : function( rootBone, amount ) {\n\t\n\t\tvar runShrink = internals.travelTreeFn( rootBone, function( arg, bone, depth, sibling, iteration, maxDepth ) {\n\t\t\tbone.scale.multiplyScalar( amount )\n\t\t})\n\t\n\t\trunShrink()\n\t\n\t},\n\n\trecursiveWriggleFn : function( growthTime ) {\n\t\n\t\treturn function( e, bone, depth, sibling, iteration, maxDepth ) {\n\t\t\n\t\t\tvar weight = depth / maxDepth\n\t\t\t\n\t\t\tbone.rotation.z = weight * Math.sin( bone.randomRotation[0] * (e.elapsed + 100000) * 0.0005 )\n\t\t\tbone.rotation.y = weight * Math.sin( bone.randomRotation[1] * (e.elapsed + 200000) * 0.000066 )\n\t\t\tbone.rotation.x = weight * Math.sin( bone.randomRotation[2] * (e.elapsed + 300000) * 0.0002 )\n\t\t}\n\t},\n\n\tgrowTreeFn : function( rootBone, targetScale, growthTime ) {\n\t\n\t\tvar elapsedUnitI = 0\n\t\n\t\treturn internals.travelTreeFn( rootBone.children[0], function( e, bone, depth, sibling, iteration, maxDepth ) {\n\t\t\n\t\t\tvar thirdOfMaxDepth = Math.floor( maxDepth / 3 )\n\t\t\tvar maxDepthPrime = maxDepth - thirdOfMaxDepth\n\t\t\tvar depthPrime = Math.min( maxDepthPrime , Math.max( 0,\n\t\t\t\tdepth - thirdOfMaxDepth\n\t\t\t))\n\t\t\tvar depthUnitI = depthPrime / (maxDepthPrime + 1)\n\t\t\tvar inactiveTime = growthTime * depthUnitI\n\t\t\tvar activeTime = growthTime - inactiveTime\n\t\t\n\t\t\tvar elapsed = e.elapsed + bone.randomRotation[0] * growthTime / maxDepth\n\t\t\n\t\t\tvar scale = Math.min( targetScale , Math.max( 0,\n\t\t\t\tEasing.easeInOutCubic(\n\t\t\t\t\t ( (elapsed % (growthTime * 2) ) - inactiveTime) / activeTime\n\t\t\t\t) * targetScale\n\t\t\t))\n\t\t\n\t\t\tscale = scale * 0.7 + 0.3\n\t\t\n\t\t\tbone.scale.set(\n\t\t\t\tscale, scale, scale\n\t\t\t)\n\t\t})\n\t},\n\n\tupdateFn : function( mesh, config ) {\n\t\n\t\tvar rootBone = mesh.children[0];\n\t\t\n\t\tinternals.seedRandomValuesToTree( rootBone )\n\t\t\n\t\tvar grow = internals.growTreeFn( rootBone, config.shrink, config.growthTime )\n\t\t\n\t\tvar wriggle = internals.travelTreeFn(\n\t\t\trootBone,\n\t\t\tinternals.recursiveWriggleFn( config.growthTime )\n\t\t)\n\t\t\n\t\treturn function( e ) {\n\t\t\n\t\t\tvar bone = mesh\n\t\t\t\n\t\t\twriggle( e )\n\t\t\tgrow( e )\n\t\t\n\t\t}\n\t},\n\t\n\tstart : function( config, poem, sliderValue ) {\n\t\t\n\t\tvar $msg = $(\"<div class='preload-message'>Loading up some ones and zeros to grow...</div>\")\n\t\t$('#container').append(\t$msg )\n\t\n\t\tvar depthSteps = 50\n\t\t\n\t\tvar treeMeshConfig = _.extend({}, config, {\n\t\t\tdepth : Math.floor( sliderValue / depthSteps ),\n\t\t\tdepthRemainder : sliderValue % depthSteps,\n\t\t\tdepthSteps : depthSteps\n\t\t})\n\t\t\n\t\tconsole.log( \"Slider:\", sliderValue )\n\t\tconsole.log( \"Depth:\", treeMeshConfig.depth )\n\t\tconsole.log( \"Depth Remainder:\", treeMeshConfig.depthRemainder )\n\t\t\n\t\n\t\tsetTimeout(function deferredTreeGrowth() {\n\t\t\t\n\t\t\tvar mesh = GenerateTreeMesh( treeMeshConfig );\n\t\t\t\n\t\t\t// mesh.scale.multiplyScalar( 1 )\n\t\t\tpoem.scene.add( mesh )\n\t\t\t\n\t\t\tinternals.countMeshChildren( mesh )\n\t\t\t\n\t\t\tinternals.addBaseSphere( poem.scene )\n\t\t\t\n\t\t\tpoem.emitter.on( 'update', internals.updateFn( mesh, config ) )\n\t\t\t\n\t\t\t$msg.remove()\t\t\t\n\t\t\t\n\t\t}, 500)\n\t\t\n\t},\n\t\n\tcountMeshChildren : function( scene ) {\n\t\t\n\t\tfunction count( obj ) {\n\n\t\t\tvar childCount = obj.children.length\n\n\t\t\tfor( var i=0; i < obj.children.length; i++ ) {\n\t\t\t\tchildCount += count( obj.children[i] )\n\t\t\t}\n\n\t\t\treturn childCount\n\t\t}\n\n\t\tconsole.log( \"Total mesh objects:\", count( scene ) )\n\t\t\n\t}\n\n}\n\nmodule.exports = function treeGrowth( poem, properties ) {\n\t\n\tvar config = _.extend({\n\t\tautoStart\t\t: true\n\t  , height\t\t\t: 50\n\t  , radius\t\t\t: Random.range(2, 10)\n\t  , rSegments\t\t: 5\n\t  , hSegments\t\t: 4\n\t  , depth\t\t\t: 10\n\t  , minBranch\t\t: 1\n\t  , maxBranch\t\t: 3\n\t  , shrink\t\t\t: Random.range(0.7, 0.95)\n\t  , radiusShrink\t: Random.range(0.7, 0.85)\n\t  , growthTime\t\t: 10000\n\t}, properties )\n\t\n\tvar api = {\n\t\tstart : _.partial( internals.start, config, poem )\n\t}\n\n\tif( config.autoStart ) {\n\t\tinternals.start( config, api, poem, config.depth )\n\t}\n\t\n\treturn api\n\t\n}",
    "var Random = require('../../utils/random')\n\nvar internals = {\n\t\n\tcreateRingObject : function( geometry, radius, segments, hue ) {\n\n\t\tvar rStep = 2 * Math.PI / segments\n\t\n\t\treturn {\n\t\t\n\t\t\tcreate : function( height, prevSkinIndex, skinIndex, skinWeight, shrink ) {\n\t\t\t\n\t\t\t\tfor( var i=0; i < segments; i++ ) {\n\n\t\t\t\t\tgeometry.vertices.push( new THREE.Vector3(\n\t\t\t\t\t\tMath.sin( i * rStep ) * radius * shrink\n\t\t\t\t\t  , height\n\t\t\t\t\t  , Math.cos( i * rStep ) * radius * shrink\n\t\t\t\t\t))\n\t\t\n\t\t\t\t\tgeometry.skinIndices.push( new THREE.Vector4( prevSkinIndex, skinIndex, 0, 0 ) )\n\t\t\t\t\tgeometry.skinWeights.push( new THREE.Vector4( 1-skinWeight, skinWeight, 0, 0 ) )\n\t\t\t\t\t// geometry.skinWeights.push( new THREE.Vector4( 1, 0, 0, 0 ) )\n\t\t\t\t}\n\t\t\t\n\t\t\t},\n\t\t\n\t\t\tradius : radius,\n\t\t\n\t\t\tsegments : segments\n\t\t\n\t\t}\n\t\n\t},\n\n\ttubeFn : function( geometry, segments, ring ) {\n\t\n\t\tvar hue = Math.random()\n\t\n\t\tfunction createFaces( hueOffset, a, b, c, d ) {\n\t\n\t\t\tvar f1 = new THREE.Face3( a, b, c )\n\t\t\tvar f2 = new THREE.Face3( d, c, b )\n\t\t\n\t\t\tf1.color = new THREE.Color().setHSL( (hue + hueOffset * 0.03) % 1, 0.5, 0.5 )\n\t\t\tf2.color = new THREE.Color().setHSL( (hue + hueOffset * 0.03) % 1, 0.5, 0.5 )\n\t\t\n\t\t\tgeometry.faces.push( f1 )\n\t\t\tgeometry.faces.push( f2 )\n\t\t\n\t\t}\n\t\n\t\treturn function tube(\n\t\t\theight\n\t\t  , prevSkinIndex\n\t\t  , skinIndex\n\t\t  , prevRingVerts\n\t\t  , baseHeight\n\t\t  , radiusShrink\n\t\t  , depth\n\t\t) {\n\t\n\t\t\tvar offset, a, b, c, d, r2\n\t\t\tvar hStep = height / segments\n\t\t\tvar skinWeight1, skinWeight2\n\t\t\n\t\t\tvar baseOffset = geometry.vertices.length\n\t\t\n\t\t\t//Create the first segment\n\t\t\tring.create(\n\t\t\t\tbaseHeight + hStep * 1\t\t//height\n\t\t\t  , prevSkinIndex\t\t\t\t//skinIndex\n\t\t\t  , skinIndex\n\t\t\t  , (1) / (segments)\t\t\t//skinWeight\n\t\t\t  , radiusShrink\n\t\t\t)\n\t\t\n\t\t\t//Connect the previous ring to the this first segment\n\t\t\tfor( var r=0; r < ring.segments; r++ ) {\n\t\t\t\n\t\t\t\toffset = baseOffset\n\t\t\t\tr2 = (r + 1) % ring.segments // wrap around the last face\n\n\t\t\t\ta = geometry.vertices.indexOf( prevRingVerts[r] )\n\t\t\t\tb = geometry.vertices.indexOf( prevRingVerts[r2] )\n\t\t\t\tc = baseOffset + r\n\t\t\t\td = baseOffset + r2\n\t\n\t\t\t\tcreateFaces( depth + 1 / segments, a, b, c, d )\n\t\t\t\n\t\t\t}\n\t\n\t\t\t//Create the rest of the segments\n\t\t\tfor( var h=2; h <= segments; h++ ) {\n\t\t\n\t\t\t\tring.create(\n\t\t\t\t\tbaseHeight + h * hStep\t//height\n\t\t\t\t  , prevSkinIndex\t\t\t//prevSkinIndex\n\t\t\t\t  , skinIndex\t\t\t\t//skinIndex\n\t\t\t\t  , (h) / (segments)\t\t//skinWeight\n\t\t\t\t  , radiusShrink\n\t\t\t\t)\n\t\t\n\t\t\t\tfor( r=0; r < ring.segments; r++ ) {\n\t\t\t\n\t\t\t\t\t//    c___d\n\t\t\t\t\t//   /   /\n\t\t\t\t\t//  /   /    ^\n\t\t\t\t\t// a___b    / direction\n\t\t\t\n\t\t\t\t\toffset = baseOffset + (h-2) * ring.segments\n\t\t\t\t\tr2 = (r + 1) % ring.segments // wrap around the last face\n\n\t\t\t\t\ta = offset + r\n\t\t\t\t\tb = offset + r2\n\t\t\t\t\tc = offset + r + ring.segments\n\t\t\t\t\td = offset + r2 + ring.segments\n\t\t\t\t\n\t\t\t\t\tcreateFaces( depth + h / segments, a, b, c, d )\n\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\n\t},\n\n\trecursiveTubes : function(\n\t\ttube\n\t  , ring\n\t  , height\n\t  , geometry\n\t  , depth\n\t  , targetDepth\n\t  , ringSlice\n\t  , prevSkinIndex\n\t  , minBranch\n\t  , maxBranch\n\t  , radiusShrink\n\t  , radiusShrinkI\n\t  , depthRemainder\n\t  , depthSteps\n\t) {\n\n\t\tif( depth === targetDepth ) return\n\n\t\tgeometry.bones.push({  \n\t\t\t\"parent\":prevSkinIndex\n\t\t  , \"name\":\"segment\"\n\t\t  , \"pos\":[0,height,0]\n\t\t  , \"rotq\":[0,0,0,1]\n\t\t})\n\t\n\t\tvar skinIndex = geometry.bones.length - 1;\n\t\n\t\ttube(\n\t\t\theight\t\t\t//tube length\n\t\t  , prevSkinIndex\n\t\t  , skinIndex\t\t//skinIndex\n\t\t  , ringSlice\t\t//base slice vertices\n\t\t  , height * depth\t//base height\n\t\t  , radiusShrink\n\t\t  , depth\n\t\t)\n\t\n\t\tvar nextRingSlice = geometry.vertices.slice(\n\t\t\tgeometry.vertices.length - ring.segments,\n\t\t\tgeometry.vertices.length\n\t\t)\n\t\n\t\tvar rand\n\t\tif( depth > 3 ) {\n\t\t\trand = Random.rangeInt( minBranch, maxBranch )\n\t\t} else {\n\t\t\trand = maxBranch\n\t\t}\n\t\t\n\t\t// Allow the depth determination to be more stepped than just by depth\n\t\t// Randomly stop going down to the last level by a certain probability\n\t\tif( depth + 1 === targetDepth ) {\n\t\t\trand = Math.random() > depthRemainder / depthSteps ? rand : 0\n\t\t}\n\t\n\t\tfor( var i=0; i < rand; i++ ) {\n\t\t\tinternals.recursiveTubes(\n\t\t\t\ttube\n\t\t\t  , ring\n\t\t\t  , height\n\t\t\t  , geometry\n\t\t\t  , depth + 1\n\t\t\t  , targetDepth\n\t\t\t  , nextRingSlice\n\t\t\t  , skinIndex\n\t\t\t  , minBranch\n\t\t\t  , maxBranch\n\t\t\t  , radiusShrink * radiusShrinkI\n\t\t\t  , radiusShrinkI\n\t\t\t  , depthRemainder\n\t\t\t  , depthSteps\n\t\t\t)\n\t\t}\n\t\n\t},\n\n\tgenerateGeometry : function( config ) {\n\t\n\t\tvar geometry = new THREE.Geometry()\n\t\tvar ring = internals.createRingObject(\n\t\t\tgeometry\n\t\t  , config.radius\n\t\t  , config.rSegments\n\t\t  , Math.random() //baseHue\n\t\t)\n\t\n\t\t//Create a base ring\n\t\tring.create(\n\t\t\t0\t// height\n\t\t  , -1\t// skinIndex\n\t\t  , 0 \t// prevSkinIndex\n\t\t  , 1\t// skinWeight\n\t\t  , 1\t// radius shrink\n\t\t)\n\n\t\tvar ringSlice = geometry.vertices.slice(0, ring.segments)\n\t\n\t\tvar tube = internals.tubeFn(\n\t\t\tgeometry,\n\t\t\tconfig.hSegments,\n\t\t\tring\n\t\t)\n\t\n\t\tgeometry.bones = [  \n\t\t    {\n\t\t        \"parent\":-1,\n\t\t        \"name\":\"root\",\n\t\t        \"pos\":[0,-config.height,0],\n\t\t        \"rotq\":[0,0,0,1]\n\t\t    }\n\t\t]\n\t\n\t\tinternals.recursiveTubes(\n\t\t\ttube                 // tube\n\t\t  , ring                 // ring\n\t\t  , config.height        // height\n\t\t  , geometry             // geometry\n\t\t  , 0                    // depth\n\t\t  , config.depth         // targetDepth\n\t\t  , ringSlice            // ringSlice\n\t\t  , 0                    // prevSkinIndex\n\t\t  , config.minBranch     // minBranch\n\t\t  , config.maxBranch     // maxBranch\n\t\t  , 1                    // radiusShrink\n\t\t  , config.radiusShrink  // radiusShrinkI\n\t\t  , config.depthRemainder\n\t\t  , config.depthSteps\n\t\t\t\n\t\t)\n\t\n\t\tgeometry.computeFaceNormals()\n\t\tgeometry.computeVertexNormals()\n\t\n\t\treturn geometry;\n\t},\n\n\tcreateMesh : function( config, geometry ) {\n\t\n\t\tvar mat = new THREE.MeshPhongMaterial({\n\t\t\tskinning : true\n\t\t  , emissive : 0x000000\n\t\t  , color : 0x888888\n\t\t  , wireframe : false\n\t\t  , vertexColors : THREE.FaceColors\n\t\t})\n\t\n\t\tmat.side = THREE.DoubleSide\n\t\n\t\tvar mesh = new THREE.SkinnedMesh(\n\t\t\tgeometry,\n\t\t\tmat,\n\t\t\ttrue\n\t\t)\n\t\n\t\tmesh.skeletonHelper = new THREE.SkeletonHelper( mesh )\n\t\tmesh.skeletonHelper.material.linewidth = 3\n\t\t// mesh.add( mesh.skeletonHelper )\n\t\n\t\n\t\treturn mesh\n\t}\n\n}\n\nmodule.exports = function treeMesh( config ) {\n\t\n\tvar geometry = internals.generateGeometry( config )\n\tvar mesh = internals.createMesh( config, geometry )\n\t\n\treturn mesh;\n\t\n}",
    "require('./utils/ThreeConsole');\n\nvar manifests = require('../manifests');\n\nvar routing = require('./core/routing');\nvar ui = require('./core/ui')( manifests );\n\nrouting.start(\n\trequire('./core/poem'),\n\tmanifests\n);",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.BloomPass = function ( strength, kernelSize, sigma, resolution ) {\n\n\tstrength = ( strength !== undefined ) ? strength : 1;\n\tkernelSize = ( kernelSize !== undefined ) ? kernelSize : 25;\n\tsigma = ( sigma !== undefined ) ? sigma : 4.0;\n\tresolution = ( resolution !== undefined ) ? resolution : 256;\n\n\t// render targets\n\n\tvar pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat };\n\n\tthis.renderTargetX = new THREE.WebGLRenderTarget( resolution, resolution, pars );\n\tthis.renderTargetY = new THREE.WebGLRenderTarget( resolution, resolution, pars );\n\n\t// copy material\n\n\tif ( THREE.CopyShader === undefined )\n\t\tconsole.error( \"THREE.BloomPass relies on THREE.CopyShader\" );\n\n\tvar copyShader = THREE.CopyShader;\n\n\tthis.copyUniforms = THREE.UniformsUtils.clone( copyShader.uniforms );\n\n\tthis.copyUniforms[ \"opacity\" ].value = strength;\n\n\tthis.materialCopy = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.copyUniforms,\n\t\tvertexShader: copyShader.vertexShader,\n\t\tfragmentShader: copyShader.fragmentShader,\n\t\tblending: THREE.AdditiveBlending,\n\t\ttransparent: true\n\n\t} );\n\n\t// convolution material\n\n\tif ( THREE.ConvolutionShader === undefined )\n\t\tconsole.error( \"THREE.BloomPass relies on THREE.ConvolutionShader\" );\n\n\tvar convolutionShader = THREE.ConvolutionShader;\n\n\tthis.convolutionUniforms = THREE.UniformsUtils.clone( convolutionShader.uniforms );\n\n\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurx;\n\tthis.convolutionUniforms[ \"cKernel\" ].value = THREE.ConvolutionShader.buildKernel( sigma );\n\n\tthis.materialConvolution = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.convolutionUniforms,\n\t\tvertexShader:  convolutionShader.vertexShader,\n\t\tfragmentShader: convolutionShader.fragmentShader,\n\t\tdefines: {\n\t\t\t\"KERNEL_SIZE_FLOAT\": kernelSize.toFixed( 1 ),\n\t\t\t\"KERNEL_SIZE_INT\": kernelSize.toFixed( 0 )\n\t\t}\n\n\t} );\n\n\tthis.enabled = true;\n\tthis.needsSwap = false;\n\tthis.clear = false;\n\n\n\tthis.camera = new THREE.OrthographicCamera( -1, 1, 1, -1, 0, 1 );\n\tthis.scene  = new THREE.Scene();\n\n\tthis.quad = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), null );\n\tthis.scene.add( this.quad );\n\n};\n\nTHREE.BloomPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta, maskActive ) {\n\n\t\tif ( maskActive ) renderer.context.disable( renderer.context.STENCIL_TEST );\n\n\t\t// Render quad with blured scene into texture (convolution pass 1)\n\n\t\tthis.quad.material = this.materialConvolution;\n\n\t\tthis.convolutionUniforms[ \"tDiffuse\" ].value = readBuffer;\n\t\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurX;\n\n\t\trenderer.render( this.scene, this.camera, this.renderTargetX, true );\n\n\n\t\t// Render quad with blured scene into texture (convolution pass 2)\n\n\t\tthis.convolutionUniforms[ \"tDiffuse\" ].value = this.renderTargetX;\n\t\tthis.convolutionUniforms[ \"uImageIncrement\" ].value = THREE.BloomPass.blurY;\n\n\t\trenderer.render( this.scene, this.camera, this.renderTargetY, true );\n\n\t\t// Render original scene with superimposed blur to texture\n\n\t\tthis.quad.material = this.materialCopy;\n\n\t\tthis.copyUniforms[ \"tDiffuse\" ].value = this.renderTargetY;\n\n\t\tif ( maskActive ) renderer.context.enable( renderer.context.STENCIL_TEST );\n\n\t\trenderer.render( this.scene, this.camera, readBuffer, this.clear );\n\n\t}\n\n};\n\nTHREE.BloomPass.blurX = new THREE.Vector2( 0.001953125, 0.0 );\nTHREE.BloomPass.blurY = new THREE.Vector2( 0.0, 0.001953125 );\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.EffectComposer = function ( renderer, renderTarget ) {\n\n\tthis.renderer = renderer;\n\n\tif ( renderTarget === undefined ) {\n\n\t\tvar width = window.innerWidth || 1;\n\t\tvar height = window.innerHeight || 1;\n\t\tvar parameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBuffer: false };\n\n\t\trenderTarget = new THREE.WebGLRenderTarget( width, height, parameters );\n\n\t}\n\n\tthis.renderTarget1 = renderTarget;\n\tthis.renderTarget2 = renderTarget.clone();\n\n\tthis.writeBuffer = this.renderTarget1;\n\tthis.readBuffer = this.renderTarget2;\n\n\tthis.passes = [];\n\n\tif ( THREE.CopyShader === undefined )\n\t\tconsole.error( \"THREE.EffectComposer relies on THREE.CopyShader\" );\n\n\tthis.copyPass = new THREE.ShaderPass( THREE.CopyShader );\n\n};\n\nTHREE.EffectComposer.prototype = {\n\n\tswapBuffers: function() {\n\n\t\tvar tmp = this.readBuffer;\n\t\tthis.readBuffer = this.writeBuffer;\n\t\tthis.writeBuffer = tmp;\n\n\t},\n\n\taddPass: function ( pass ) {\n\n\t\tthis.passes.push( pass );\n\n\t},\n\n\tinsertPass: function ( pass, index ) {\n\n\t\tthis.passes.splice( index, 0, pass );\n\n\t},\n\n\trender: function ( delta ) {\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t\tvar maskActive = false;\n\n\t\tvar pass, i, il = this.passes.length;\n\n\t\tfor ( i = 0; i < il; i ++ ) {\n\n\t\t\tpass = this.passes[ i ];\n\n\t\t\tif ( !pass.enabled ) continue;\n\n\t\t\tpass.render( this.renderer, this.writeBuffer, this.readBuffer, delta, maskActive );\n\n\t\t\tif ( pass.needsSwap ) {\n\n\t\t\t\tif ( maskActive ) {\n\n\t\t\t\t\tvar context = this.renderer.context;\n\n\t\t\t\t\tcontext.stencilFunc( context.NOTEQUAL, 1, 0xffffffff );\n\n\t\t\t\t\tthis.copyPass.render( this.renderer, this.writeBuffer, this.readBuffer, delta );\n\n\t\t\t\t\tcontext.stencilFunc( context.EQUAL, 1, 0xffffffff );\n\n\t\t\t\t}\n\n\t\t\t\tthis.swapBuffers();\n\n\t\t\t}\n\n\t\t\tif ( pass instanceof THREE.MaskPass ) {\n\n\t\t\t\tmaskActive = true;\n\n\t\t\t} else if ( pass instanceof THREE.ClearMaskPass ) {\n\n\t\t\t\tmaskActive = false;\n\n\t\t\t}\n\n\t\t}\n\n\t},\n\n\treset: function ( renderTarget ) {\n\n\t\tif ( renderTarget === undefined ) {\n\n\t\t\trenderTarget = this.renderTarget1.clone();\n\n\t\t\trenderTarget.width = window.innerWidth;\n\t\t\trenderTarget.height = window.innerHeight;\n\n\t\t}\n\n\t\tthis.renderTarget1 = renderTarget;\n\t\tthis.renderTarget2 = renderTarget.clone();\n\n\t\tthis.writeBuffer = this.renderTarget1;\n\t\tthis.readBuffer = this.renderTarget2;\n\n\t},\n\n\tsetSize: function ( width, height ) {\n\n\t\tvar renderTarget = this.renderTarget1.clone();\n\n\t\trenderTarget.width = width;\n\t\trenderTarget.height = height;\n\n\t\tthis.reset( renderTarget );\n\n\t}\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.FilmPass = function ( noiseIntensity, scanlinesIntensity, scanlinesCount, grayscale ) {\n\n\tif ( THREE.FilmShader === undefined )\n\t\tconsole.error( \"THREE.FilmPass relies on THREE.FilmShader\" );\n\n\tvar shader = THREE.FilmShader;\n\n\tthis.uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\tthis.material = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.uniforms,\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader\n\n\t} );\n\n\tif ( grayscale !== undefined )\tthis.uniforms.grayscale.value = grayscale;\n\tif ( noiseIntensity !== undefined ) this.uniforms.nIntensity.value = noiseIntensity;\n\tif ( scanlinesIntensity !== undefined ) this.uniforms.sIntensity.value = scanlinesIntensity;\n\tif ( scanlinesCount !== undefined ) this.uniforms.sCount.value = scanlinesCount;\n\n\tthis.enabled = true;\n\tthis.renderToScreen = false;\n\tthis.needsSwap = true;\n\n\n\tthis.camera = new THREE.OrthographicCamera( -1, 1, 1, -1, 0, 1 );\n\tthis.scene  = new THREE.Scene();\n\n\tthis.quad = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), null );\n\tthis.scene.add( this.quad );\n\n};\n\nTHREE.FilmPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta ) {\n\n\t\tthis.uniforms[ \"tDiffuse\" ].value = readBuffer;\n\t\tthis.uniforms[ \"time\" ].value += delta;\n\n\t\tthis.quad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t} else {\n\n\t\t\trenderer.render( this.scene, this.camera, writeBuffer, false );\n\n\t\t}\n\n\t}\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.MaskPass = function ( scene, camera ) {\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.enabled = true;\n\tthis.clear = true;\n\tthis.needsSwap = false;\n\n\tthis.inverse = false;\n\n};\n\nTHREE.MaskPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta ) {\n\n\t\tvar context = renderer.context;\n\n\t\t// don't update color or depth\n\n\t\tcontext.colorMask( false, false, false, false );\n\t\tcontext.depthMask( false );\n\n\t\t// set up stencil\n\n\t\tvar writeValue, clearValue;\n\n\t\tif ( this.inverse ) {\n\n\t\t\twriteValue = 0;\n\t\t\tclearValue = 1;\n\n\t\t} else {\n\n\t\t\twriteValue = 1;\n\t\t\tclearValue = 0;\n\n\t\t}\n\n\t\tcontext.enable( context.STENCIL_TEST );\n\t\tcontext.stencilOp( context.REPLACE, context.REPLACE, context.REPLACE );\n\t\tcontext.stencilFunc( context.ALWAYS, writeValue, 0xffffffff );\n\t\tcontext.clearStencil( clearValue );\n\n\t\t// draw into the stencil buffer\n\n\t\trenderer.render( this.scene, this.camera, readBuffer, this.clear );\n\t\trenderer.render( this.scene, this.camera, writeBuffer, this.clear );\n\n\t\t// re-enable update of color and depth\n\n\t\tcontext.colorMask( true, true, true, true );\n\t\tcontext.depthMask( true );\n\n\t\t// only render where stencil is set to 1\n\n\t\tcontext.stencilFunc( context.EQUAL, 1, 0xffffffff );  // draw if == 1\n\t\tcontext.stencilOp( context.KEEP, context.KEEP, context.KEEP );\n\n\t}\n\n};\n\n\nTHREE.ClearMaskPass = function () {\n\n\tthis.enabled = true;\n\n};\n\nTHREE.ClearMaskPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta ) {\n\n\t\tvar context = renderer.context;\n\n\t\tcontext.disable( context.STENCIL_TEST );\n\n\t}\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.RenderPass = function ( scene, camera, overrideMaterial, clearColor, clearAlpha ) {\n\n\tthis.scene = scene;\n\tthis.camera = camera;\n\n\tthis.overrideMaterial = overrideMaterial;\n\n\tthis.clearColor = clearColor;\n\tthis.clearAlpha = ( clearAlpha !== undefined ) ? clearAlpha : 1;\n\n\tthis.oldClearColor = new THREE.Color();\n\tthis.oldClearAlpha = 1;\n\n\tthis.enabled = true;\n\tthis.clear = true;\n\tthis.needsSwap = false;\n\n};\n\nTHREE.RenderPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta ) {\n\n\t\tthis.scene.overrideMaterial = this.overrideMaterial;\n\n\t\tif ( this.clearColor ) {\n\n\t\t\tthis.oldClearColor.copy( renderer.getClearColor() );\n\t\t\tthis.oldClearAlpha = renderer.getClearAlpha();\n\n\t\t\trenderer.setClearColor( this.clearColor, this.clearAlpha );\n\n\t\t}\n\n\t\trenderer.render( this.scene, this.camera, readBuffer, this.clear );\n\n\t\tif ( this.clearColor ) {\n\n\t\t\trenderer.setClearColor( this.oldClearColor, this.oldClearAlpha );\n\n\t\t}\n\n\t\tthis.scene.overrideMaterial = null;\n\n\t}\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n */\n\nTHREE.ShaderPass = function ( shader, textureID ) {\n\n\tthis.textureID = ( textureID !== undefined ) ? textureID : \"tDiffuse\";\n\n\tthis.uniforms = THREE.UniformsUtils.clone( shader.uniforms );\n\n\tthis.material = new THREE.ShaderMaterial( {\n\n\t\tuniforms: this.uniforms,\n\t\tvertexShader: shader.vertexShader,\n\t\tfragmentShader: shader.fragmentShader\n\n\t} );\n\n\tthis.renderToScreen = false;\n\n\tthis.enabled = true;\n\tthis.needsSwap = true;\n\tthis.clear = false;\n\n\n\tthis.camera = new THREE.OrthographicCamera( -1, 1, 1, -1, 0, 1 );\n\tthis.scene  = new THREE.Scene();\n\n\tthis.quad = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), null );\n\tthis.scene.add( this.quad );\n\n};\n\nTHREE.ShaderPass.prototype = {\n\n\trender: function ( renderer, writeBuffer, readBuffer, delta ) {\n\n\t\tif ( this.uniforms[ this.textureID ] ) {\n\n\t\t\tthis.uniforms[ this.textureID ].value = readBuffer;\n\n\t\t}\n\n\t\tthis.quad.material = this.material;\n\n\t\tif ( this.renderToScreen ) {\n\n\t\t\trenderer.render( this.scene, this.camera );\n\n\t\t} else {\n\n\t\t\trenderer.render( this.scene, this.camera, writeBuffer, this.clear );\n\n\t\t}\n\n\t}\n\n};\n",
    "var glslify = require(\"glslify\");\nvar createShader = require(\"three-glslify\")(THREE);\nvar shader = createShader(require(\"glslify/simple-adapter.js\")(\"\\n#define GLSLIFY 1\\n\\nvarying vec2 vUv;\\nvoid main() {\\n  vUv = uv;\\n  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\\n}\", \"\\n#define GLSLIFY 1\\n\\nhighp float a_x_random(vec2 co) {\\n  highp float a = 12.9898;\\n  highp float b = 78.233;\\n  highp float c = 43758.5453;\\n  highp float dt = dot(co.xy, vec2(a, b));\\n  highp float sn = mod(dt, 3.14);\\n  return fract(sin(sn) * c);\\n}\\nuniform float opacity;\\nuniform sampler2D tDiffuse;\\nvarying vec2 vUv;\\nvoid main() {\\n  vec2 unitI_ToSide = (vUv * 2.0 - 1.0);\\n  unitI_ToSide = pow(unitI_ToSide, vec2(3.0, 5.0)) * a_x_random(vUv) * -0.01;\\n  vec4 texel = texture2D(tDiffuse, vUv);\\n  vec4 smallshift = texture2D(tDiffuse, vUv + unitI_ToSide * 0.5);\\n  vec4 bigshift = texture2D(tDiffuse, vUv + unitI_ToSide);\\n  gl_FragColor = opacity * vec4(bigshift.x, texel.y, smallshift.z, texel.w);\\n}\", [{\"name\":\"opacity\",\"type\":\"float\"},{\"name\":\"tDiffuse\",\"type\":\"sampler2D\"}], []));\nshader.uniforms.opacity.value = 1;\nmodule.exports = shader;",
    "require('./EffectComposer');\nrequire('./MaskPass');\nrequire('./BloomPass');\nrequire('./RenderPass');\nrequire('./ShaderPass');\nrequire('./FilmPass');",
    "/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Convolution shader\n * ported from o3d sample to WebGL / GLSL\n * http://o3d.googlecode.com/svn/trunk/samples/convolution.html\n */\n\nTHREE.ConvolutionShader = {\n\n\tdefines: {\n\n\t\t\"KERNEL_SIZE_FLOAT\": \"25.0\",\n\t\t\"KERNEL_SIZE_INT\": \"25\",\n\n\t},\n\n\tuniforms: {\n\n\t\t\"tDiffuse\":        { type: \"t\", value: null },\n\t\t\"uImageIncrement\": { type: \"v2\", value: new THREE.Vector2( 0.001953125, 0.0 ) },\n\t\t\"cKernel\":         { type: \"fv1\", value: [] }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"uniform vec2 uImageIncrement;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\"),\n\n\tfragmentShader: [\n\n\t\t\"uniform float cKernel[ KERNEL_SIZE_INT ];\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\t\t\"uniform vec2 uImageIncrement;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vec2 imageCoord = vUv;\",\n\t\t\t\"vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\",\n\n\t\t\t\"for( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\",\n\n\t\t\t\t\"sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\",\n\t\t\t\t\"imageCoord += uImageIncrement;\",\n\n\t\t\t\"}\",\n\n\t\t\t\"gl_FragColor = sum;\",\n\n\t\t\"}\"\n\n\n\t].join(\"\\n\"),\n\n\tbuildKernel: function ( sigma ) {\n\n\t\t// We lop off the sqrt(2 * pi) * sigma term, since we're going to normalize anyway.\n\n\t\tfunction gauss( x, sigma ) {\n\n\t\t\treturn Math.exp( - ( x * x ) / ( 2.0 * sigma * sigma ) );\n\n\t\t}\n\n\t\tvar i, values, sum, halfWidth, kMaxKernelSize = 25, kernelSize = 2 * Math.ceil( sigma * 3.0 ) + 1;\n\n\t\tif ( kernelSize > kMaxKernelSize ) kernelSize = kMaxKernelSize;\n\t\thalfWidth = ( kernelSize - 1 ) * 0.5;\n\n\t\tvalues = new Array( kernelSize );\n\t\tsum = 0.0;\n\t\tfor ( i = 0; i < kernelSize; ++i ) {\n\n\t\t\tvalues[ i ] = gauss( i - halfWidth, sigma );\n\t\t\tsum += values[ i ];\n\n\t\t}\n\n\t\t// normalize the kernel\n\n\t\tfor ( i = 0; i < kernelSize; ++i ) values[ i ] /= sum;\n\n\t\treturn values;\n\n\t}\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Full-screen textured quad shader\n */\n\nTHREE.CopyShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\": { type: \"t\", value: null },\n\t\t\"opacity\":  { type: \"f\", value: 1.0 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\"),\n\n\tfragmentShader: [\n\n\t\t\"uniform float opacity;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vec4 texel = texture2D( tDiffuse, vUv );\",\n\t\t\t\"gl_FragColor = opacity * texel;\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\")\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n * @author davidedc / http://www.sketchpatch.net/\n *\n * NVIDIA FXAA by Timothy Lottes\n * http://timothylottes.blogspot.com/2011/06/fxaa3-source-released.html\n * - WebGL port by @supereggbert\n * http://www.glge.org/demos/fxaa/\n */\n\nTHREE.FXAAShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\":   { type: \"t\", value: null },\n\t\t\"resolution\": { type: \"v2\", value: new THREE.Vector2( 1 / 1024, 1 / 512 )  }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\"),\n\n\tfragmentShader: [\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\t\t\"uniform vec2 resolution;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"#define FXAA_REDUCE_MIN   (1.0/128.0)\",\n\t\t\"#define FXAA_REDUCE_MUL   (1.0/8.0)\",\n\t\t\"#define FXAA_SPAN_MAX     8.0\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vec3 rgbNW = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( -1.0, -1.0 ) ) * resolution ).xyz;\",\n\t\t\t\"vec3 rgbNE = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( 1.0, -1.0 ) ) * resolution ).xyz;\",\n\t\t\t\"vec3 rgbSW = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( -1.0, 1.0 ) ) * resolution ).xyz;\",\n\t\t\t\"vec3 rgbSE = texture2D( tDiffuse, ( gl_FragCoord.xy + vec2( 1.0, 1.0 ) ) * resolution ).xyz;\",\n\t\t\t\"vec4 rgbaM  = texture2D( tDiffuse,  gl_FragCoord.xy  * resolution );\",\n\t\t\t\"vec3 rgbM  = rgbaM.xyz;\",\n\t\t\t\"vec3 luma = vec3( 0.299, 0.587, 0.114 );\",\n\n\t\t\t\"float lumaNW = dot( rgbNW, luma );\",\n\t\t\t\"float lumaNE = dot( rgbNE, luma );\",\n\t\t\t\"float lumaSW = dot( rgbSW, luma );\",\n\t\t\t\"float lumaSE = dot( rgbSE, luma );\",\n\t\t\t\"float lumaM  = dot( rgbM,  luma );\",\n\t\t\t\"float lumaMin = min( lumaM, min( min( lumaNW, lumaNE ), min( lumaSW, lumaSE ) ) );\",\n\t\t\t\"float lumaMax = max( lumaM, max( max( lumaNW, lumaNE) , max( lumaSW, lumaSE ) ) );\",\n\n\t\t\t\"vec2 dir;\",\n\t\t\t\"dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\",\n\t\t\t\"dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));\",\n\n\t\t\t\"float dirReduce = max( ( lumaNW + lumaNE + lumaSW + lumaSE ) * ( 0.25 * FXAA_REDUCE_MUL ), FXAA_REDUCE_MIN );\",\n\n\t\t\t\"float rcpDirMin = 1.0 / ( min( abs( dir.x ), abs( dir.y ) ) + dirReduce );\",\n\t\t\t\"dir = min( vec2( FXAA_SPAN_MAX,  FXAA_SPAN_MAX),\",\n\t\t\t\t  \"max( vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),\",\n\t\t\t\t\t\t\"dir * rcpDirMin)) * resolution;\",\n\t\t\t\"vec4 rgbA = (1.0/2.0) * (\",\n        \t\"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (1.0/3.0 - 0.5)) +\",\n\t\t\t\"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (2.0/3.0 - 0.5)));\",\n    \t\t\"vec4 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (\",\n\t\t\t\"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (0.0/3.0 - 0.5)) +\",\n      \t\t\"texture2D(tDiffuse,  gl_FragCoord.xy  * resolution + dir * (3.0/3.0 - 0.5)));\",\n    \t\t\"float lumaB = dot(rgbB, vec4(luma, 0.0));\",\n\n\t\t\t\"if ( ( lumaB < lumaMin ) || ( lumaB > lumaMax ) ) {\",\n\n\t\t\t\t\"gl_FragColor = rgbA;\",\n\n\t\t\t\"} else {\",\n\t\t\t\t\"gl_FragColor = rgbB;\",\n\n\t\t\t\"}\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\")\n\n};\n",
    "/**\n * @author alteredq / http://alteredqualia.com/\n *\n * Film grain & scanlines shader\n *\n * - ported from HLSL to WebGL / GLSL\n * http://www.truevision3d.com/forums/showcase/staticnoise_colorblackwhite_scanline_shaders-t18698.0.html\n *\n * Screen Space Static Postprocessor\n *\n * Produces an analogue noise overlay similar to a film grain / TV static\n *\n * Original implementation and noise algorithm\n * Pat 'Hawthorne' Shearon\n *\n * Optimized scanlines + noise version with intensity scaling\n * Georg 'Leviathan' Steinrohder\n *\n * This version is provided under a Creative Commons Attribution 3.0 License\n * http://creativecommons.org/licenses/by/3.0/\n */\n\nTHREE.FilmShader = {\n\n\tuniforms: {\n\n\t\t\"tDiffuse\":   { type: \"t\", value: null },\n\t\t\"time\":       { type: \"f\", value: 0.0 },\n\t\t\"nIntensity\": { type: \"f\", value: 0.5 },\n\t\t\"sIntensity\": { type: \"f\", value: 0.05 },\n\t\t\"sCount\":     { type: \"f\", value: 4096 },\n\t\t\"grayscale\":  { type: \"i\", value: 1 }\n\n\t},\n\n\tvertexShader: [\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t\"vUv = uv;\",\n\t\t\t\"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\"),\n\n\tfragmentShader: [\n\n\t\t// control parameter\n\t\t\"uniform float time;\",\n\n\t\t\"uniform bool grayscale;\",\n\n\t\t// noise effect intensity value (0 = no effect, 1 = full effect)\n\t\t\"uniform float nIntensity;\",\n\n\t\t// scanlines effect intensity value (0 = no effect, 1 = full effect)\n\t\t\"uniform float sIntensity;\",\n\n\t\t// scanlines effect count value (0 = no effect, 4096 = full effect)\n\t\t\"uniform float sCount;\",\n\n\t\t\"uniform sampler2D tDiffuse;\",\n\n\t\t\"varying vec2 vUv;\",\n\n\t\t\"void main() {\",\n\n\t\t\t// sample the source\n\t\t\t\"vec4 cTextureScreen = texture2D( tDiffuse, vUv );\",\n\n\t\t\t// make some noise\n\t\t\t\"float x = vUv.x * vUv.y * time *  1000.0;\",\n\t\t\t\"x = mod( x, 13.0 ) * mod( x, 123.0 );\",\n\t\t\t\"float dx = mod( x, 0.01 );\",\n\n\t\t\t// add noise\n\t\t\t\"vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx * 100.0, 0.0, 1.0 );\",\n\n\t\t\t// get us a sine and cosine\n\t\t\t\"vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\",\n\n\t\t\t// add scanlines\n\t\t\t\"cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\",\n\n\t\t\t// interpolate between source and result by intensity\n\t\t\t\"cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\",\n\n\t\t\t// convert to grayscale if desired\n\t\t\t\"if( grayscale ) {\",\n\n\t\t\t\t\"cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\",\n\n\t\t\t\"}\",\n\n\t\t\t\"gl_FragColor =  vec4( cResult, cTextureScreen.a );\",\n\n\t\t\"}\"\n\n\t].join(\"\\n\")\n\n};\n",
    "var poemMute = require('poem-mute');\nvar mute = poemMute();\nwindow.mutePrime = mute;\nwindow.mutePrimeEmitter = mute.emitter;\n\n//Turn on a poem muter\nmodule.exports = mute;",
    "function roundTo( value, decimalPlaces ) {\n\t\n\tif( typeof decimalPlaces === \"number\" ) {\n\n\t\treturn Math.round( Math.pow(10, decimalPlaces) * value ) / Math.pow(10, decimalPlaces);\n\n\t} else {\n\t\t\n\t\treturn value;\n\t\t\n\t}\n\t\n}\n\nTHREE.Console = {\n\t\n\tvector : function( vectorOrList, decimalPlaces ) {\n\t\t\n\t\tvar results = [];\n\t\tvar list;\n\t\t\n\t\tif( vectorOrList instanceof THREE.Vector2 || vectorOrList instanceof THREE.Vector3  || vectorOrList instanceof THREE.Vector4 ) {\n\t\t\tlist = [ vectorOrList ];\n\t\t} else {\n\t\t\tlist = vectorOrList;\n\t\t}\n\t\t\n\t\tconsole.table(\n\t\t\t_.map( list, function( vector ) {\n\t\t\t\treturn _.map( vector.toArray(), function( x ) {\n\t\t\t\t\treturn roundTo( x, decimalPlaces );\n\t\t\t\t});\n\t\t\t})\n\t\t);\n\t\t\n\t},\n\t\n\tface : function( faceOrList ) {\n\t\t\n\t\tvar results = [];\n\t\tvar list;\n\t\t\n\t\tif( faceOrList instanceof THREE.Face3 ) {\n\t\t\tlist = [ faceOrList ];\n\t\t} else {\n\t\t\tlist = faceOrList;\n\t\t}\n\t\t\n\t\tconsole.table(\n\t\t\t_.map( list, function( face ) {\n\t\t\t\treturn [face.a, face.b, face.c];\n\t\t\t})\n\t\t);\n\t\t\n\t},\n\t\n\tmatrix : function( matrixOrElements, decimalPlaces ) {\n \n\t\tvar i, j, el, els, results;\n \n\t\tresults = [];\n\t\tj = 0;\n\t\t\n\t\tif( matrixOrElements instanceof THREE.Matrix4 ) {\n\t\t\tels = matrixOrElements.elements;\n\t\t} else {\n\t\t\tels = matrixOrElements;\n\t\t}\n \n\t\tfor( i=0; i < els.length; i++ ) {\n\t\t\n\t\t\tif( j === 0 ) {\n\t\t\t\tresults.push([]);\n\t\t\t}\n \n\t\t\tel = roundTo( els[i], decimalPlaces );\n \n\t\t\tresults[Math.floor(i / 4) % 4].push( el );\n \n\t\t\tj++;\n\t\t\tj %= 4;\n\t\t\n\t\t\tif( i % 16 === 15 ) {\n\t\t\t\tconsole.table( results );\n\t\t\t\tresults = [];\n\t\t\t}\n \n\t\t}\n \n\t},\n};\n\nwindow.consoleMatrix = THREE.Console.matrix;\nwindow.consoleVector = THREE.Console.vector;\nwindow.consoleFace = THREE.Console.face;\n\nmodule.exports = THREE.Console;",
    "module.exports = {\n\t// no easing, no acceleration\n\tlinear: function (t) { return t },\n\t// accelerating from zero velocity\n\teaseInQuad: function (t) { return t*t },\n\t// decelerating to zero velocity\n\teaseOutQuad: function (t) { return t*(2-t) },\n\t// acceleration until halfway, then deceleration\n\teaseInOutQuad: function (t) { return t<0.5 ? 2*t*t : -1+(4-2*t)*t },\n\t// accelerating from zero velocity \n\teaseInCubic: function (t) { return t*t*t },\n\t// decelerating to zero velocity \n\teaseOutCubic: function (t) { return (--t)*t*t+1 },\n\t// acceleration until halfway, then deceleration \n\teaseInOutCubic: function (t) { return t<0.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 },\n\t// accelerating from zero velocity \n\teaseInQuart: function (t) { return t*t*t*t },\n\t// decelerating to zero velocity \n\teaseOutQuart: function (t) { return 1-(--t)*t*t*t },\n\t// acceleration until halfway, then deceleration\n\teaseInOutQuart: function (t) { return t<0.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t },\n\t// accelerating from zero velocity\n\teaseInQuint: function (t) { return t*t*t*t*t },\n\t// decelerating to zero velocity\n\teaseOutQuint: function (t) { return 1+(--t)*t*t*t*t },\n\t// acceleration until halfway, then deceleration \n\teaseInOutQuint: function (t) { return t<0.5 ? 16*t*t*t*t*t : 1+16*(--t)*t*t*t*t }\n}",
    "var random = {\n\t\n\tflip : function() {\n\t\treturn Math.random() > 0.5 ? true: false;\n\t},\n\t\n\trange : function(min, max) {\n\t\treturn Math.random() * (max - min) + min;\n\t},\n\t\n\trangeInt : function(min, max) {\n\t\treturn Math.floor( this.range(min, max + 1) );\n\t},\n\t\n\trangeLow : function(min, max) {\n\t\t//More likely to return a low value\n\t  return Math.random() * Math.random() * (max - min) + min;\n\t},\n\t\n\trangeHigh : function(min, max) {\n\t\t//More likely to return a high value\n\t\treturn (1 - Math.random() * Math.random()) * (max - min) + min;\n\t}\n\t \n};\n\nmodule.exports = random;\n",
    "/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n/*global THREE, console */\n\n// This set of controls performs orbiting, dollying (zooming), and panning. It maintains\n// the \"up\" direction as +Y, unlike the TrackballControls. Touch on tablet and phones is\n// supported.\n//\n//    Orbit - left mouse / touch: one finger move\n//    Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n//    Pan - right mouse, or arrow keys / touch: three finter swipe\n//\n// This is a drop-in replacement for (most) TrackballControls used in examples.\n// That is, include this js file and wherever you see:\n//    \tcontrols = new THREE.TrackballControls( camera );\n//      controls.target.z = 150;\n// Simple substitute \"OrbitControls\" and the control should work as-is.\n\nTHREE.OrbitControls = function ( object, domElement ) {\n\n\tthis.object = object;\n\tthis.domElement = ( domElement !== undefined ) ? domElement : document;\n\n\t// API\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the control orbits around\n\t// and where it pans with respect to.\n\tthis.target = new THREE.Vector3();\n\n\t// center is old, deprecated; use \"target\" instead\n\tthis.center = this.target;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for\n\t// backwards compatibility\n\tthis.noZoom = false;\n\tthis.zoomSpeed = 1.0;\n\n\t// Limits to how far you can dolly in and out\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// Set to true to disable this control\n\tthis.noRotate = false;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to true to disable this control\n\tthis.noPan = false;\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to disable use of the keys\n\tthis.noKeys = false;\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n\t////////////\n\t// internals\n\n\tvar scope = this;\n\n\tvar EPS = 0.000001;\n\n\tvar rotateStart = new THREE.Vector2();\n\tvar rotateEnd = new THREE.Vector2();\n\tvar rotateDelta = new THREE.Vector2();\n\n\tvar panStart = new THREE.Vector2();\n\tvar panEnd = new THREE.Vector2();\n\tvar panDelta = new THREE.Vector2();\n\tvar panOffset = new THREE.Vector3();\n\n\tvar offset = new THREE.Vector3();\n\n\tvar dollyStart = new THREE.Vector2();\n\tvar dollyEnd = new THREE.Vector2();\n\tvar dollyDelta = new THREE.Vector2();\n\n\tvar theta;\n\tvar phi;\n\tvar phiDelta = 0;\n\tvar thetaDelta = 0;\n\tvar scale = 1;\n\tvar pan = new THREE.Vector3();\n\n\tvar lastPosition = new THREE.Vector3();\n\tvar lastQuaternion = new THREE.Quaternion();\n\n\tvar STATE = { NONE : -1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 };\n\n\tvar state = STATE.NONE;\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\n\t// so camera.up is the orbit axis\n\n\tvar quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n\tvar quatInverse = quat.clone().inverse();\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start'};\n\tvar endEvent = { type: 'end'};\n\n\tthis.rotateLeft = function ( angle ) {\n\n\t\tif ( angle === undefined ) {\n\n\t\t\tangle = getAutoRotationAngle();\n\n\t\t}\n\n\t\tthetaDelta -= angle;\n\n\t};\n\n\tthis.rotateUp = function ( angle ) {\n\n\t\tif ( angle === undefined ) {\n\n\t\t\tangle = getAutoRotationAngle();\n\n\t\t}\n\n\t\tphiDelta -= angle;\n\n\t};\n\n\t// pass in distance in world space to move left\n\tthis.panLeft = function ( distance ) {\n\n\t\tvar te = this.object.matrix.elements;\n\n\t\t// get X column of matrix\n\t\tpanOffset.set( te[ 0 ], te[ 1 ], te[ 2 ] );\n\t\tpanOffset.multiplyScalar( - distance );\n\n\t\tpan.add( panOffset );\n\n\t};\n\n\t// pass in distance in world space to move up\n\tthis.panUp = function ( distance ) {\n\n\t\tvar te = this.object.matrix.elements;\n\n\t\t// get Y column of matrix\n\t\tpanOffset.set( te[ 4 ], te[ 5 ], te[ 6 ] );\n\t\tpanOffset.multiplyScalar( distance );\n\n\t\tpan.add( panOffset );\n\n\t};\n\n\t// pass in x,y of change desired in pixel space,\n\t// right and down are positive\n\tthis.pan = function ( deltaX, deltaY ) {\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\tif ( scope.object.fov !== undefined ) {\n\n\t\t\t// perspective\n\t\t\tvar position = scope.object.position;\n\t\t\tvar offset = position.clone().sub( scope.target );\n\t\t\tvar targetDistance = offset.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we actually don't use screenWidth, since perspective camera is fixed to screen height\n\t\t\tscope.panLeft( 2 * deltaX * targetDistance / element.clientHeight );\n\t\t\tscope.panUp( 2 * deltaY * targetDistance / element.clientHeight );\n\n\t\t} else if ( scope.object.top !== undefined ) {\n\n\t\t\t// orthographic\n\t\t\tscope.panLeft( deltaX * (scope.object.right - scope.object.left) / element.clientWidth );\n\t\t\tscope.panUp( deltaY * (scope.object.top - scope.object.bottom) / element.clientHeight );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic or perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\n\t\t}\n\n\t};\n\n\tthis.dollyIn = function ( dollyScale ) {\n\n\t\tif ( dollyScale === undefined ) {\n\n\t\t\tdollyScale = getZoomScale();\n\n\t\t}\n\n\t\tscale /= dollyScale;\n\n\t};\n\n\tthis.dollyOut = function ( dollyScale ) {\n\n\t\tif ( dollyScale === undefined ) {\n\n\t\t\tdollyScale = getZoomScale();\n\n\t\t}\n\n\t\tscale *= dollyScale;\n\n\t};\n\n\tthis.update = function () {\n\n\t\tvar position = this.object.position;\n\n\t\toffset.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\toffset.applyQuaternion( quat );\n\n\t\t// angle from z-axis around y-axis\n\n\t\ttheta = Math.atan2( offset.x, offset.z );\n\n\t\t// angle from y-axis\n\n\t\tphi = Math.atan2( Math.sqrt( offset.x * offset.x + offset.z * offset.z ), offset.y );\n\n\t\tif ( this.autoRotate && state === STATE.NONE ) {\n\n\t\t\tthis.rotateLeft( getAutoRotationAngle() );\n\n\t\t}\n\n\t\ttheta += thetaDelta;\n\t\tphi += phiDelta;\n\n\t\t// restrict theta to be between desired limits\n\t\ttheta = Math.max( this.minAzimuthAngle, Math.min( this.maxAzimuthAngle, theta ) );\n\n\t\t// restrict phi to be between desired limits\n\t\tphi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, phi ) );\n\n\t\t// restrict phi to be betwee EPS and PI-EPS\n\t\tphi = Math.max( EPS, Math.min( Math.PI - EPS, phi ) );\n\n\t\tvar radius = offset.length() * scale;\n\n\t\t// restrict radius to be between desired limits\n\t\tradius = Math.max( this.minDistance, Math.min( this.maxDistance, radius ) );\n\n\t\t// move target to panned location\n\t\tthis.target.add( pan );\n\n\t\toffset.x = radius * Math.sin( phi ) * Math.sin( theta );\n\t\toffset.y = radius * Math.cos( phi );\n\t\toffset.z = radius * Math.sin( phi ) * Math.cos( theta );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\toffset.applyQuaternion( quatInverse );\n\n\t\tposition.copy( this.target ).add( offset );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tthetaDelta = 0;\n\t\tphiDelta = 0;\n\t\tscale = 1;\n\t\tpan.set( 0, 0, 0 );\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( lastPosition.distanceToSquared( this.object.position ) > EPS || 8 * (1 - lastQuaternion.dot(this.object.quaternion)) > EPS ) {\n\n\t\t\tthis.dispatchEvent( changeEvent );\n\n\t\t\tlastPosition.copy( this.object.position );\n\t\t\tlastQuaternion.copy (this.object.quaternion );\n\n\t\t}\n\n\t};\n\n\n\tthis.reset = function () {\n\n\t\tstate = STATE.NONE;\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\n\t\tthis.update();\n\n\t};\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn theta;\n\n\t};\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tevent.preventDefault();\n\n\t\tif ( event.button === scope.mouseButtons.ORBIT ) {\n\t\t\tif ( scope.noRotate === true ) return;\n\n\t\t\tstate = STATE.ROTATE;\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t} else if ( event.button === scope.mouseButtons.ZOOM ) {\n\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\tstate = STATE.DOLLY;\n\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t} else if ( event.button === scope.mouseButtons.PAN ) {\n\t\t\tif ( scope.noPan === true ) return;\n\n\t\t\tstate = STATE.PAN;\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\t\t\tdocument.addEventListener( 'mousemove', onMouseMove, false );\n\t\t\tdocument.addEventListener( 'mouseup', onMouseUp, false );\n\t\t\tscope.dispatchEvent( startEvent );\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\tif ( state === STATE.ROTATE ) {\n\n\t\t\tif ( scope.noRotate === true ) return;\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart );\n\n\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\tscope.rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\n\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\tscope.rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t} else if ( state === STATE.DOLLY ) {\n\n\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tscope.dollyIn();\n\n\t\t\t} else {\n\n\t\t\t\tscope.dollyOut();\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t} else if ( state === STATE.PAN ) {\n\n\t\t\tif ( scope.noPan === true ) return;\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\t\t\tpanDelta.subVectors( panEnd, panStart );\n\n\t\t\tscope.pan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) scope.update();\n\n\t}\n\n\tfunction onMouseUp( /* event */ ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tdocument.removeEventListener( 'mousemove', onMouseMove, false );\n\t\tdocument.removeEventListener( 'mouseup', onMouseUp, false );\n\t\tscope.dispatchEvent( endEvent );\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.noZoom === true || state !== STATE.NONE ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar delta = 0;\n\n\t\tif ( event.wheelDelta !== undefined ) { // WebKit / Opera / Explorer 9\n\n\t\t\tdelta = event.wheelDelta;\n\n\t\t} else if ( event.detail !== undefined ) { // Firefox\n\n\t\t\tdelta = - event.detail;\n\n\t\t}\n\n\t\tif ( delta > 0 ) {\n\n\t\t\tscope.dollyOut();\n\n\t\t} else {\n\n\t\t\tscope.dollyIn();\n\n\t\t}\n\n\t\tscope.update();\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.noKeys === true || scope.noPan === true ) return;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tscope.pan( 0, scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tscope.pan( 0, - scope.keyPanSpeed );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tscope.pan( scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tscope.pan( - scope.keyPanSpeed, 0 );\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\t// one-fingered touch: rotate\n\n\t\t\t\tif ( scope.noRotate === true ) return;\n\n\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\t// two-fingered touch: dolly\n\n\t\t\t\tif ( scope.noZoom === true ) return;\n\n\t\t\t\tstate = STATE.TOUCH_DOLLY;\n\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\t\t\t\tdollyStart.set( 0, distance );\n\t\t\t\tbreak;\n\n\t\t\tcase 3: // three-fingered touch: pan\n\n\t\t\t\tif ( scope.noPan === true ) return;\n\n\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) scope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1: // one-fingered touch: rotate\n\n\t\t\t\tif ( scope.noRotate === true ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_ROTATE ) return;\n\n\t\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\t\t\t\trotateDelta.subVectors( rotateEnd, rotateStart );\n\n\t\t\t\t// rotating across whole screen goes 360 degrees around\n\t\t\t\tscope.rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\t\t\t\t// rotating up and down along whole screen attempts to go 360, but limited to 180\n\t\t\t\tscope.rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n\t\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // two-fingered touch: dolly\n\n\t\t\t\tif ( scope.noZoom === true ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_DOLLY ) return;\n\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tdollyEnd.set( 0, distance );\n\t\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\t\tscope.dollyOut();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tscope.dollyIn();\n\n\t\t\t\t}\n\n\t\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tcase 3: // three-fingered touch: pan\n\n\t\t\t\tif ( scope.noPan === true ) return;\n\t\t\t\tif ( state !== STATE.TOUCH_PAN ) return;\n\n\t\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\t\t\t\tpanDelta.subVectors( panEnd, panStart );\n\n\t\t\t\tscope.pan( panDelta.x, panDelta.y );\n\n\t\t\t\tpanStart.copy( panEnd );\n\n\t\t\t\tscope.update();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( /* event */ ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tscope.dispatchEvent( endEvent );\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tthis.domElement.addEventListener( 'contextmenu', function ( event ) { event.preventDefault(); }, false );\n\tthis.domElement.addEventListener( 'mousedown', onMouseDown, false );\n\tthis.domElement.addEventListener( 'mousewheel', onMouseWheel, false );\n\tthis.domElement.addEventListener( 'DOMMouseScroll', onMouseWheel, false ); // firefox\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart, false );\n\tthis.domElement.addEventListener( 'touchend', touchend, false );\n\tthis.domElement.addEventListener( 'touchmove', touchmove, false );\n\n\twindow.addEventListener( 'keydown', onKeyDown, false );\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\nmodule.exports = THREE.OrbitControls;",
    "/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nvar Stats = function () {\n\n\tvar startTime = Date.now(), prevTime = startTime;\n\tvar ms = 0, msMin = Infinity, msMax = 0;\n\tvar fps = 0, fpsMin = Infinity, fpsMax = 0;\n\tvar frames = 0, mode = 0;\n\n\tvar container = document.createElement( 'div' );\n\tcontainer.id = 'stats';\n\tcontainer.addEventListener( 'mousedown', function ( event ) { event.preventDefault(); setMode( ++ mode % 2 ); }, false );\n\tcontainer.style.cssText = 'width:80px;opacity:0.9;cursor:pointer';\n\n\tvar fpsDiv = document.createElement( 'div' );\n\tfpsDiv.id = 'fps';\n\tfpsDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#002';\n\tcontainer.appendChild( fpsDiv );\n\n\tvar fpsText = document.createElement( 'div' );\n\tfpsText.id = 'fpsText';\n\tfpsText.style.cssText = 'color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';\n\tfpsText.innerHTML = 'FPS';\n\tfpsDiv.appendChild( fpsText );\n\n\tvar fpsGraph = document.createElement( 'div' );\n\tfpsGraph.id = 'fpsGraph';\n\tfpsGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0ff';\n\tfpsDiv.appendChild( fpsGraph );\n\n\twhile ( fpsGraph.children.length < 74 ) {\n\n\t\tvar bar = document.createElement( 'span' );\n\t\tbar.style.cssText = 'width:1px;height:30px;float:left;background-color:#113';\n\t\tfpsGraph.appendChild( bar );\n\n\t}\n\n\tvar msDiv = document.createElement( 'div' );\n\tmsDiv.id = 'ms';\n\tmsDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;display:none';\n\tcontainer.appendChild( msDiv );\n\n\tvar msText = document.createElement( 'div' );\n\tmsText.id = 'msText';\n\tmsText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';\n\tmsText.innerHTML = 'MS';\n\tmsDiv.appendChild( msText );\n\n\tvar msGraph = document.createElement( 'div' );\n\tmsGraph.id = 'msGraph';\n\tmsGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0f0';\n\tmsDiv.appendChild( msGraph );\n\n\twhile ( msGraph.children.length < 74 ) {\n\n\t\tvar bar2 = document.createElement( 'span' );\n\t\tbar2.style.cssText = 'width:1px;height:30px;float:left;background-color:#131';\n\t\tmsGraph.appendChild( bar2 );\n\n\t}\n\n\tvar setMode = function ( value ) {\n\n\t\tmode = value;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 0:\n\t\t\t\tfpsDiv.style.display = 'block';\n\t\t\t\tmsDiv.style.display = 'none';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tfpsDiv.style.display = 'none';\n\t\t\t\tmsDiv.style.display = 'block';\n\t\t\t\tbreak;\n\t\t}\n\n\t};\n\n\tvar updateGraph = function ( dom, value ) {\n\n\t\tvar child = dom.appendChild( dom.firstChild );\n\t\tchild.style.height = value + 'px';\n\n\t};\n\n\treturn {\n\n\t\tREVISION: 12,\n\n\t\tdomElement: container,\n\n\t\tsetMode: setMode,\n\n\t\tbegin: function () {\n\n\t\t\tstartTime = Date.now();\n\n\t\t},\n\n\t\tend: function () {\n\n\t\t\tvar time = Date.now();\n\n\t\t\tms = time - startTime;\n\t\t\tmsMin = Math.min( msMin, ms );\n\t\t\tmsMax = Math.max( msMax, ms );\n\n\t\t\tmsText.textContent = ms + ' MS (' + msMin + '-' + msMax + ')';\n\t\t\tupdateGraph( msGraph, Math.min( 30, 30 - ( ms / 200 ) * 30 ) );\n\n\t\t\tframes ++;\n\n\t\t\tif ( time > prevTime + 1000 ) {\n\n\t\t\t\tfps = Math.round( ( frames * 1000 ) / ( time - prevTime ) );\n\t\t\t\tfpsMin = Math.min( fpsMin, fps );\n\t\t\t\tfpsMax = Math.max( fpsMax, fps );\n\n\t\t\t\tfpsText.textContent = fps + ' FPS (' + fpsMin + '-' + fpsMax + ')';\n\t\t\t\tupdateGraph( fpsGraph, Math.min( 30, 30 - ( fps / 100 ) * 30 ) );\n\n\t\t\t\tprevTime = time;\n\t\t\t\tframes = 0;\n\n\t\t\t}\n\n\t\t\treturn time;\n\n\t\t},\n\n\t\tupdate: function () {\n\n\t\t\tstartTime = this.end();\n\n\t\t}\n\n\t};\n\n};\n\nif ( typeof module === 'object' ) {\n\n\tmodule.exports = Stats;\n\n}",
    "/**\n * @author alteredq / http://alteredqualia.com/\n * @authod mrdoob / http://mrdoob.com/\n * @authod arodic / http://aleksandarrodic.com/\n */\n\nTHREE.StereoEffect = function ( renderer ) {\n\n\t// API\n\n\tthis.separation = 3;\n\n\t// internals\n\n\tvar _width, _height;\n\n\tvar _position = new THREE.Vector3();\n\tvar _quaternion = new THREE.Quaternion();\n\tvar _scale = new THREE.Vector3();\n\n\tvar _cameraL = new THREE.PerspectiveCamera();\n\tvar _cameraR = new THREE.PerspectiveCamera();\n\n\t// initialization\n\n\trenderer.autoClear = false;\n\n\tthis.setSize = function ( width, height ) {\n\n\t\t_width = width / 2;\n\t\t_height = height;\n\n\t\trenderer.setSize( width, height );\n\n\t};\n\n\tthis.render = function ( scene, camera ) {\n\n\t\tscene.updateMatrixWorld();\n\n\t\tif ( camera.parent === undefined ) camera.updateMatrixWorld();\n\t\n\t\tcamera.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t// left\n\n\t\t_cameraL.fov = camera.fov;\n\t\t_cameraL.aspect = 0.5 * camera.aspect;\n\t\t_cameraL.near = camera.near;\n\t\t_cameraL.far = camera.far;\n\t\t_cameraL.updateProjectionMatrix();\n\n\t\t_cameraL.position.copy( _position );\n\t\t_cameraL.quaternion.copy( _quaternion );\n\t\t_cameraL.translateX( - this.separation );\n\n\t\t// right\n\n\t\t_cameraR.near = camera.near;\n\t\t_cameraR.far = camera.far;\n\t\t_cameraR.projectionMatrix = _cameraL.projectionMatrix;\n\n\t\t_cameraR.position.copy( _position );\n\t\t_cameraR.quaternion.copy( _quaternion );\n\t\t_cameraR.translateX( this.separation );\n\n\t\t//\n\n\t\trenderer.setViewport( 0, 0, _width * 2, _height );\n\t\trenderer.clear();\n\n\t\trenderer.setViewport( 0, 0, _width, _height );\n\t\trenderer.render( scene, _cameraL );\n\n\t\trenderer.setViewport( _width, 0, _width, _height );\n\t\trenderer.render( scene, _cameraR );\n\n\t};\n\n};\n\nmodule.exports = THREE.StereoEffect;",
    "/**\n * k-d Tree JavaScript - V 1.01\n *\n * https://github.com/ubilabs/kd-tree-javascript\n *\n * @author Mircea Pricop <pricop@ubilabs.net>, 2012\n * @author Martin Kleppe <kleppe@ubilabs.net>, 2012\n * @author Ubilabs http://ubilabs.net, 2012\n * @license MIT License <http://www.opensource.org/licenses/mit-license.php>\n */\n\n (function (root, factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(['exports'], factory);\n    } else if (typeof exports === 'object') {\n        factory(exports);\n    } else {\n        factory((root.commonJsStrict = {}));\n    }\n}(module.exports, function (exports) {\n  function Node(obj, dimension, parent) {\n    this.obj = obj;\n    this.left = null;\n    this.right = null;\n    this.parent = parent;\n    this.dimension = dimension;\n  }\n\n  function kdTree(points, metric, dimensions) {\n\n    var self = this;\n    \n    function buildTree(points, depth, parent) {\n      var dim = depth % dimensions.length,\n        median,\n        node;\n\n      if (points.length === 0) {\n        return null;\n      }\n      if (points.length === 1) {\n        return new Node(points[0], dim, parent);\n      }\n\n      points.sort(function (a, b) {\n        return a[dimensions[dim]] - b[dimensions[dim]];\n      });\n\n      median = Math.floor(points.length / 2);\n      node = new Node(points[median], dim, parent);\n      node.left = buildTree(points.slice(0, median), depth + 1, node);\n      node.right = buildTree(points.slice(median + 1), depth + 1, node);\n\n      return node;\n    }\n\n    // Reloads a serialied tree\n    function loadTree (data) {\n      // Just need to restore the `parent` parameter\n      self.root = data;\n\n      function restoreParent (root) {\n        if (root.left) {\n          root.left.parent = root;\n          restoreParent(root.left);\n        }\n\n        if (root.right) {\n          root.right.parent = root;\n          restoreParent(root.right);\n        }\n      }\n\n      restoreParent(self.root);\n    }\n    \n    // If points is not an array, assume we're loading a pre-built tree\n    if (!Array.isArray(points)) loadTree(points, metric, dimensions);\n    else this.root = buildTree(points, 0, null);\n\n    // Convert to a JSON serializable structure; this just requires removing \n    // the `parent` property\n    this.toJSON = function (src) {\n      if (!src) src = this.root;\n      var dest = new Node(src.obj, src.dimension, null);\n      if (src.left) dest.left = self.toJSON(src.left);\n      if (src.right) dest.right = self.toJSON(src.right);\n      return dest;\n    };\n\n    this.insert = function (point) {\n      function innerSearch(node, parent) {\n\n        if (node === null) {\n          return parent;\n        }\n\n        var dimension = dimensions[node.dimension];\n        if (point[dimension] < node.obj[dimension]) {\n          return innerSearch(node.left, node);\n        } else {\n          return innerSearch(node.right, node);\n        }\n      }\n\n      var insertPosition = innerSearch(this.root, null),\n        newNode,\n        dimension;\n\n      if (insertPosition === null) {\n        this.root = new Node(point, 0, null);\n        return;\n      }\n\n      newNode = new Node(point, (insertPosition.dimension + 1) % dimensions.length, insertPosition);\n      dimension = dimensions[insertPosition.dimension];\n\n      if (point[dimension] < insertPosition.obj[dimension]) {\n        insertPosition.left = newNode;\n      } else {\n        insertPosition.right = newNode;\n      }\n    };\n\n    this.remove = function (point) {\n      var node;\n\n      function nodeSearch(node) {\n        if (node === null) {\n          return null;\n        }\n\n        if (node.obj === point) {\n          return node;\n        }\n\n        var dimension = dimensions[node.dimension];\n\n        if (point[dimension] < node.obj[dimension]) {\n          return nodeSearch(node.left, node);\n        } else {\n          return nodeSearch(node.right, node);\n        }\n      }\n\n      function removeNode(node) {\n        var nextNode,\n          nextObj,\n          pDimension;\n\n        function findMin(node, dim) {\n          var dimension,\n            own,\n            left,\n            right,\n            min;\n\n          if (node === null) {\n            return null;\n          }\n\n          dimension = dimensions[dim];\n\n          if (node.dimension === dim) {\n            if (node.left !== null) {\n              return findMin(node.left, dim);\n            }\n            return node;\n          }\n\n          own = node.obj[dimension];\n          left = findMin(node.left, dim);\n          right = findMin(node.right, dim);\n          min = node;\n\n          if (left !== null && left.obj[dimension] < own) {\n            min = left;\n          }\n          if (right !== null && right.obj[dimension] < min.obj[dimension]) {\n            min = right;\n          }\n          return min;\n        }\n\n        if (node.left === null && node.right === null) {\n          if (node.parent === null) {\n            self.root = null;\n            return;\n          }\n\n          pDimension = dimensions[node.parent.dimension];\n\n          if (node.obj[pDimension] < node.parent.obj[pDimension]) {\n            node.parent.left = null;\n          } else {\n            node.parent.right = null;\n          }\n          return;\n        }\n\n        // If the right subtree is not empty, swap with the minimum element on the\n        // node's dimension. If it is empty, we swap the left and right subtrees and\n        // do the same.\n        if (node.right !== null) {\n          nextNode = findMin(node.right, node.dimension);\n          nextObj = nextNode.obj;\n          removeNode(nextNode);          \n          node.obj = nextObj;\n        } else {\n          nextNode = findMin(node.left, node.dimension);\n          nextObj = nextNode.obj;\n          removeNode(nextNode);\n          node.right = node.left;\n          node.left = null;\n          node.obj = nextObj;\n        }\n\n      }\n\n      node = nodeSearch(self.root);\n\n      if (node === null) { return; }\n\n      removeNode(node);\n    };\n\n    this.nearest = function (point, maxNodes, maxDistance) {\n      var i,\n        result,\n        bestNodes;\n\n      bestNodes = new BinaryHeap(\n        function (e) { return -e[1]; }\n      );\n\n      function nearestSearch(node) {\n        var bestChild,\n          dimension = dimensions[node.dimension],\n          ownDistance = metric(point, node.obj),\n          linearPoint = {},\n          linearDistance,\n          otherChild,\n          i;\n\n        function saveNode(node, distance) {\n          bestNodes.push([node, distance]);\n          if (bestNodes.size() > maxNodes) {\n            bestNodes.pop();\n          }\n        }\n\n        for (i = 0; i < dimensions.length; i += 1) {\n          if (i === node.dimension) {\n            linearPoint[dimensions[i]] = point[dimensions[i]];\n          } else {\n            linearPoint[dimensions[i]] = node.obj[dimensions[i]];\n          }\n        }\n\n        linearDistance = metric(linearPoint, node.obj);\n\n        if (node.right === null && node.left === null) {\n          if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n            saveNode(node, ownDistance);\n          }\n          return;\n        }\n\n        if (node.right === null) {\n          bestChild = node.left;\n        } else if (node.left === null) {\n          bestChild = node.right;\n        } else {\n          if (point[dimension] < node.obj[dimension]) {\n            bestChild = node.left;\n          } else {\n            bestChild = node.right;\n          }\n        }\n\n        nearestSearch(bestChild);\n\n        if (bestNodes.size() < maxNodes || ownDistance < bestNodes.peek()[1]) {\n          saveNode(node, ownDistance);\n        }\n\n        if (bestNodes.size() < maxNodes || Math.abs(linearDistance) < bestNodes.peek()[1]) {\n          if (bestChild === node.left) {\n            otherChild = node.right;\n          } else {\n            otherChild = node.left;\n          }\n          if (otherChild !== null) {\n            nearestSearch(otherChild);\n          }\n        }\n      }\n\n      if (maxDistance) {\n        for (i = 0; i < maxNodes; i += 1) {\n          bestNodes.push([null, maxDistance]);\n        }\n      }\n\n      nearestSearch(self.root);\n\n      result = [];\n\n      for (i = 0; i < maxNodes; i += 1) {\n        if (bestNodes.content[i][0]) {\n          result.push([bestNodes.content[i][0].obj, bestNodes.content[i][1]]);\n        }\n      }\n      return result;\n    };\n\n    this.balanceFactor = function () {\n      function height(node) {\n        if (node === null) {\n          return 0;\n        }\n        return Math.max(height(node.left), height(node.right)) + 1;\n      }\n\n      function count(node) {\n        if (node === null) {\n          return 0;\n        }\n        return count(node.left) + count(node.right) + 1;\n      }\n\n      return height(self.root) / (Math.log(count(self.root)) / Math.log(2));\n    };\n  }\n\n  // Binary heap implementation from:\n  // http://eloquentjavascript.net/appendix2.html\n\n  function BinaryHeap(scoreFunction){\n    this.content = [];\n    this.scoreFunction = scoreFunction;\n  }\n\n  BinaryHeap.prototype = {\n    push: function(element) {\n      // Add the new element to the end of the array.\n      this.content.push(element);\n      // Allow it to bubble up.\n      this.bubbleUp(this.content.length - 1);\n    },\n\n    pop: function() {\n      // Store the first element so we can return it later.\n      var result = this.content[0];\n      // Get the element at the end of the array.\n      var end = this.content.pop();\n      // If there are any elements left, put the end element at the\n      // start, and let it sink down.\n      if (this.content.length > 0) {\n        this.content[0] = end;\n        this.sinkDown(0);\n      }\n      return result;\n    },\n\n    peek: function() {\n      return this.content[0];\n    },\n\n    remove: function(node) {\n      var len = this.content.length;\n      // To remove a value, we must search through the array to find\n      // it.\n      for (var i = 0; i < len; i++) {\n        if (this.content[i] == node) {\n          // When it is found, the process seen in 'pop' is repeated\n          // to fill up the hole.\n          var end = this.content.pop();\n          if (i != len - 1) {\n            this.content[i] = end;\n            if (this.scoreFunction(end) < this.scoreFunction(node))\n              this.bubbleUp(i);\n            else\n              this.sinkDown(i);\n          }\n          return;\n        }\n      }\n      throw new Error(\"Node not found.\");\n    },\n\n    size: function() {\n      return this.content.length;\n    },\n\n    bubbleUp: function(n) {\n      // Fetch the element that has to be moved.\n      var element = this.content[n];\n      // When at 0, an element can not go up any further.\n      while (n > 0) {\n        // Compute the parent element's index, and fetch it.\n        var parentN = Math.floor((n + 1) / 2) - 1,\n            parent = this.content[parentN];\n        // Swap the elements if the parent is greater.\n        if (this.scoreFunction(element) < this.scoreFunction(parent)) {\n          this.content[parentN] = element;\n          this.content[n] = parent;\n          // Update 'n' to continue at the new position.\n          n = parentN;\n        }\n        // Found a parent that is less, no need to move it further.\n        else {\n          break;\n        }\n      }\n    },\n\n    sinkDown: function(n) {\n      // Look up the target element and its score.\n      var length = this.content.length,\n          element = this.content[n],\n          elemScore = this.scoreFunction(element);\n\n      while(true) {\n        // Compute the indices of the child elements.\n        var child2N = (n + 1) * 2, child1N = child2N - 1;\n        // This is used to store the new position of the element,\n        // if any.\n        var swap = null;\n        // If the first child exists (is inside the array)...\n        if (child1N < length) {\n          // Look it up and compute its score.\n          var child1 = this.content[child1N],\n              child1Score = this.scoreFunction(child1);\n          // If the score is less than our element's, we need to swap.\n          if (child1Score < elemScore)\n            swap = child1N;\n        }\n        // Do the same checks for the other child.\n        if (child2N < length) {\n          var child2 = this.content[child2N],\n              child2Score = this.scoreFunction(child2);\n          if (child2Score < (swap == null ? elemScore : child1Score)){\n            swap = child2N;\n          }\n        }\n\n        // If the element needs to be moved, swap it, and continue.\n        if (swap != null) {\n          this.content[n] = this.content[swap];\n          this.content[swap] = element;\n          n = swap;\n        }\n        // Otherwise, we are done.\n        else {\n          break;\n        }\n      }\n    }\n  };\n  \n  this.kdTree = kdTree;\n  \n  exports.kdTree = kdTree;\n  exports.BinaryHeap = BinaryHeap;\n}));\n",
    "module.exports = {\n\tname : \"Growth #1\",\n\tdescription : \"From seedling to tree\",\n\torder : 0,\n\tconfig : {\n\t\tcamera : {\n\t\t\tz : -300,\n\t\t\ty : 25\n\t\t},\n\t\t// renderer : {\n\t\t// \tuseEffects : true\n\t\t// },\n\t\tfog : {\n\t\t\tnearFactor : 0.8,\n\t\t\tfarFactor : 1.1\n\t\t}\n\t},\n\tcomponents : {\n\t\tinfo : {\n\t\t\tconstruct: require(\"../js/components/Info\"),\n\t\t\tproperties : {\n\t\t\t\tdocumentTitle : \"Growth #1: From Seedling To Tree | Greg Tatum\",\n\t\t\t\ttitle : \"Growth #1\",\n\t\t\t\tsubtitle : \"From Seedling To Tree\",\n\t\t\t\t// titleCss : { \"font-size\": \"3.35em\" },\n\t\t\t\tsubtitleCss : {\t\"font-size\": \"1.29em\" },\n\t\t\t\tarrowPrevHref : false,\n\t\t\t\tarrowNextHref : \"#/2-fungus\",\n\t\t\t}\n\t\t},\n\t\tslider : {\n\t\t\tfunction: require(\"../js/components/slider\"),\n\t\t\tproperties: {\n\t\t  \t\tmessage : \"Adjust the Intensity\",\n\t\t  \t\tmin: 300,\n\t\t  \t\tmax: 600,\n\t\t  \t\tstep: 1,\n\t\t\t\tvalue: 400,\n\t\t  \t\tcallToAction: \"Start Growing\",\n\t\t\t\tdestroyOnSubmit : true,\n\t\t    \tcallback : function( poem, number ) {\n\t\t\t\t\tpoem.treeGrowth.start( number )\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcontrols : {\n\t\t\tconstruct: require(\"../js/components/cameras/Controls\"),\n\t\t\tproperties: {\n\t\t\t\ttarget : new THREE.Vector3(0, 110, 0)\n\t\t\t}\n\t\t},\n\t\ttreeGrowth : {\n\t\t\tfunction: require(\"../js/demos/treeGrowth\"),\n\t\t\tproperties: {\n\t\t\t\tautoStart : false\n\t\t\t}\n\t\t},\n\t\t// grid : {\n\t\t// \tconstruct: require(\"../js/components/Grid\"),\n\t\t// },\n\t\tlights : {\n\t\t\tconstruct: require(\"../js/components/lights/TrackCameraLights\")\n\t\t},\n\t\tstats : {\n\t\t\tconstruct: require(\"../js/components/utils/Stats\")\n\t\t}\n\t}\n};",
    "module.exports = {\n\tname : \"Growth #2\",\n\tdescription : \"The fungal state\",\n\torder : 1,\n\tconfig : {\n\t\tcamera : {\n\t\t\tz : -300,\n\t\t\ty : -100\n\t\t},\n\t\t// renderer : {\n\t\t// \tuseEffects : true\n\t\t// },\n\t\tfog : {\n\t\t\tnearFactor : 0.8,\n\t\t\tfarFactor : 1.1\n\t\t}\n\t},\n\tcomponents : {\n\t\tinfo : {\n\t\t\tconstruct: require(\"../js/components/Info\"),\n\t\t\tproperties : {\n\t\t\t\tdocumentTitle : \"Growth #2: The Fungal State | Greg Tatum\",\n\t\t\t\ttitle : \"Growth #2\",\n\t\t\t\tsubtitle : \"The fungal state\",\n\t\t\t\t// titleCss : { \"font-size\": \"3.35em\" },\n\t\t\t\tsubtitleCss : {\n\t\t\t\t\t\"font-size\": \"1.36em\",\n\t\t\t\t\t\"letter-spacing\" : \"0.2em\",\n\t\t\t\t},\n\t\t\t\tarrowPrevHref : \"#/1-seedling\",\n\t\t\t\tarrowNextHref : \"http://gregtatum.com/category/interactive/\",\n\t\t\t}\n\t\t},\n\t\tslider : {\n\t\t\tfunction: require(\"../js/components/slider\"),\n\t\t\tproperties: {\n\t\t  \t\tmessage : \"How hot do you want your device to get?\",\n\t\t  \t\tmin: 0.1,\n\t\t  \t\tmax: 1,\n\t\t  \t\tstep: 0.001,\n\t\t\t\tvalue: 0.5,\n\t\t  \t\tcallToAction: \"Grow a Fungus\",\n\t\t\t\tdestroyOnSubmit : true,\n\t\t    \tcallback : function( poem, number ) {\n\t\t\t\t\tpoem.fungus( number )\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcontrols : {\n\t\t\tconstruct: require(\"../js/components/cameras/Controls\"),\n\t\t\tproperties: {\n\t\t\t\ttarget : new THREE.Vector3(0, 110, 0)\n\t\t\t}\n\t\t},\n\t\tfungus : {\n\t\t\tfunction: require(\"../js/demos/fungus/fungus\"),\n\t\t\tproperties: {\n\t\t\t\tautoStart : true\n\t\t\t}\n\t\t},\n\t\t// grid : {\n\t\t// \tconstruct: require(\"../js/components/Grid\"),\n\t\t// },\n\t\tlights : {\n\t\t\tconstruct: require(\"../js/components/lights/TrackCameraLights\")\n\t\t}\n\t}\n};",
    "module.exports = {\n\t\"1-seedling\" : require(\"./1-seedling\"),\n\t\"2-fungus\" : require(\"./2-fungus\")\n}",
    "/** @license\n * crossroads <http://millermedeiros.github.com/crossroads.js/>\n * Author: Miller Medeiros | MIT License\n * v0.12.0 (2013/01/21 13:47)\n */\n\n(function () {\nvar factory = function (signals) {\n\n    var crossroads,\n        _hasOptionalGroupBug,\n        UNDEF;\n\n    // Helpers -----------\n    //====================\n\n    // IE 7-8 capture optional groups as empty strings while other browsers\n    // capture as `undefined`\n    _hasOptionalGroupBug = (/t(.+)?/).exec('t')[1] === '';\n\n    function arrayIndexOf(arr, val) {\n        if (arr.indexOf) {\n            return arr.indexOf(val);\n        } else {\n            //Array.indexOf doesn't work on IE 6-7\n            var n = arr.length;\n            while (n--) {\n                if (arr[n] === val) {\n                    return n;\n                }\n            }\n            return -1;\n        }\n    }\n\n    function arrayRemove(arr, item) {\n        var i = arrayIndexOf(arr, item);\n        if (i !== -1) {\n            arr.splice(i, 1);\n        }\n    }\n\n    function isKind(val, kind) {\n        return '[object '+ kind +']' === Object.prototype.toString.call(val);\n    }\n\n    function isRegExp(val) {\n        return isKind(val, 'RegExp');\n    }\n\n    function isArray(val) {\n        return isKind(val, 'Array');\n    }\n\n    function isFunction(val) {\n        return typeof val === 'function';\n    }\n\n    //borrowed from AMD-utils\n    function typecastValue(val) {\n        var r;\n        if (val === null || val === 'null') {\n            r = null;\n        } else if (val === 'true') {\n            r = true;\n        } else if (val === 'false') {\n            r = false;\n        } else if (val === UNDEF || val === 'undefined') {\n            r = UNDEF;\n        } else if (val === '' || isNaN(val)) {\n            //isNaN('') returns false\n            r = val;\n        } else {\n            //parseFloat(null || '') returns NaN\n            r = parseFloat(val);\n        }\n        return r;\n    }\n\n    function typecastArrayValues(values) {\n        var n = values.length,\n            result = [];\n        while (n--) {\n            result[n] = typecastValue(values[n]);\n        }\n        return result;\n    }\n\n    //borrowed from AMD-Utils\n    function decodeQueryString(str, shouldTypecast) {\n        var queryArr = (str || '').replace('?', '').split('&'),\n            n = queryArr.length,\n            obj = {},\n            item, val;\n        while (n--) {\n            item = queryArr[n].split('=');\n            val = shouldTypecast ? typecastValue(item[1]) : item[1];\n            obj[item[0]] = (typeof val === 'string')? decodeURIComponent(val) : val;\n        }\n        return obj;\n    }\n\n\n    // Crossroads --------\n    //====================\n\n    /**\n     * @constructor\n     */\n    function Crossroads() {\n        this.bypassed = new signals.Signal();\n        this.routed = new signals.Signal();\n        this._routes = [];\n        this._prevRoutes = [];\n        this._piped = [];\n        this.resetState();\n    }\n\n    Crossroads.prototype = {\n\n        greedy : false,\n\n        greedyEnabled : true,\n\n        ignoreCase : true,\n\n        ignoreState : false,\n\n        shouldTypecast : false,\n\n        normalizeFn : null,\n\n        resetState : function(){\n            this._prevRoutes.length = 0;\n            this._prevMatchedRequest = null;\n            this._prevBypassedRequest = null;\n        },\n\n        create : function () {\n            return new Crossroads();\n        },\n\n        addRoute : function (pattern, callback, priority) {\n            var route = new Route(pattern, callback, priority, this);\n            this._sortedInsert(route);\n            return route;\n        },\n\n        removeRoute : function (route) {\n            arrayRemove(this._routes, route);\n            route._destroy();\n        },\n\n        removeAllRoutes : function () {\n            var n = this.getNumRoutes();\n            while (n--) {\n                this._routes[n]._destroy();\n            }\n            this._routes.length = 0;\n        },\n\n        parse : function (request, defaultArgs) {\n            request = request || '';\n            defaultArgs = defaultArgs || [];\n\n            // should only care about different requests if ignoreState isn't true\n            if ( !this.ignoreState &&\n                (request === this._prevMatchedRequest ||\n                 request === this._prevBypassedRequest) ) {\n                return;\n            }\n\n            var routes = this._getMatchedRoutes(request),\n                i = 0,\n                n = routes.length,\n                cur;\n\n            if (n) {\n                this._prevMatchedRequest = request;\n\n                this._notifyPrevRoutes(routes, request);\n                this._prevRoutes = routes;\n                //should be incremental loop, execute routes in order\n                while (i < n) {\n                    cur = routes[i];\n                    cur.route.matched.dispatch.apply(cur.route.matched, defaultArgs.concat(cur.params));\n                    cur.isFirst = !i;\n                    this.routed.dispatch.apply(this.routed, defaultArgs.concat([request, cur]));\n                    i += 1;\n                }\n            } else {\n                this._prevBypassedRequest = request;\n                this.bypassed.dispatch.apply(this.bypassed, defaultArgs.concat([request]));\n            }\n\n            this._pipeParse(request, defaultArgs);\n        },\n\n        _notifyPrevRoutes : function(matchedRoutes, request) {\n            var i = 0, prev;\n            while (prev = this._prevRoutes[i++]) {\n                //check if switched exist since route may be disposed\n                if(prev.route.switched && this._didSwitch(prev.route, matchedRoutes)) {\n                    prev.route.switched.dispatch(request);\n                }\n            }\n        },\n\n        _didSwitch : function (route, matchedRoutes){\n            var matched,\n                i = 0;\n            while (matched = matchedRoutes[i++]) {\n                // only dispatch switched if it is going to a different route\n                if (matched.route === route) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        _pipeParse : function(request, defaultArgs) {\n            var i = 0, route;\n            while (route = this._piped[i++]) {\n                route.parse(request, defaultArgs);\n            }\n        },\n\n        getNumRoutes : function () {\n            return this._routes.length;\n        },\n\n        _sortedInsert : function (route) {\n            //simplified insertion sort\n            var routes = this._routes,\n                n = routes.length;\n            do { --n; } while (routes[n] && route._priority <= routes[n]._priority);\n            routes.splice(n+1, 0, route);\n        },\n\n        _getMatchedRoutes : function (request) {\n            var res = [],\n                routes = this._routes,\n                n = routes.length,\n                route;\n            //should be decrement loop since higher priorities are added at the end of array\n            while (route = routes[--n]) {\n                if ((!res.length || this.greedy || route.greedy) && route.match(request)) {\n                    res.push({\n                        route : route,\n                        params : route._getParamsArray(request)\n                    });\n                }\n                if (!this.greedyEnabled && res.length) {\n                    break;\n                }\n            }\n            return res;\n        },\n\n        pipe : function (otherRouter) {\n            this._piped.push(otherRouter);\n        },\n\n        unpipe : function (otherRouter) {\n            arrayRemove(this._piped, otherRouter);\n        },\n\n        toString : function () {\n            return '[crossroads numRoutes:'+ this.getNumRoutes() +']';\n        }\n    };\n\n    //\"static\" instance\n    crossroads = new Crossroads();\n    crossroads.VERSION = '0.12.0';\n\n    crossroads.NORM_AS_ARRAY = function (req, vals) {\n        return [vals.vals_];\n    };\n\n    crossroads.NORM_AS_OBJECT = function (req, vals) {\n        return [vals];\n    };\n\n\n    // Route --------------\n    //=====================\n\n    /**\n     * @constructor\n     */\n    function Route(pattern, callback, priority, router) {\n        var isRegexPattern = isRegExp(pattern),\n            patternLexer = router.patternLexer;\n        this._router = router;\n        this._pattern = pattern;\n        this._paramsIds = isRegexPattern? null : patternLexer.getParamIds(pattern);\n        this._optionalParamsIds = isRegexPattern? null : patternLexer.getOptionalParamsIds(pattern);\n        this._matchRegexp = isRegexPattern? pattern : patternLexer.compilePattern(pattern, router.ignoreCase);\n        this.matched = new signals.Signal();\n        this.switched = new signals.Signal();\n        if (callback) {\n            this.matched.add(callback);\n        }\n        this._priority = priority || 0;\n    }\n\n    Route.prototype = {\n\n        greedy : false,\n\n        rules : void(0),\n\n        match : function (request) {\n            request = request || '';\n            return this._matchRegexp.test(request) && this._validateParams(request); //validate params even if regexp because of `request_` rule.\n        },\n\n        _validateParams : function (request) {\n            var rules = this.rules,\n                values = this._getParamsObject(request),\n                key;\n            for (key in rules) {\n                // normalize_ isn't a validation rule... (#39)\n                if(key !== 'normalize_' && rules.hasOwnProperty(key) && ! this._isValidParam(request, key, values)){\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        _isValidParam : function (request, prop, values) {\n            var validationRule = this.rules[prop],\n                val = values[prop],\n                isValid = false,\n                isQuery = (prop.indexOf('?') === 0);\n\n            if (val == null && this._optionalParamsIds && arrayIndexOf(this._optionalParamsIds, prop) !== -1) {\n                isValid = true;\n            }\n            else if (isRegExp(validationRule)) {\n                if (isQuery) {\n                    val = values[prop +'_']; //use raw string\n                }\n                isValid = validationRule.test(val);\n            }\n            else if (isArray(validationRule)) {\n                if (isQuery) {\n                    val = values[prop +'_']; //use raw string\n                }\n                isValid = this._isValidArrayRule(validationRule, val);\n            }\n            else if (isFunction(validationRule)) {\n                isValid = validationRule(val, request, values);\n            }\n\n            return isValid; //fail silently if validationRule is from an unsupported type\n        },\n\n        _isValidArrayRule : function (arr, val) {\n            if (! this._router.ignoreCase) {\n                return arrayIndexOf(arr, val) !== -1;\n            }\n\n            if (typeof val === 'string') {\n                val = val.toLowerCase();\n            }\n\n            var n = arr.length,\n                item,\n                compareVal;\n\n            while (n--) {\n                item = arr[n];\n                compareVal = (typeof item === 'string')? item.toLowerCase() : item;\n                if (compareVal === val) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        _getParamsObject : function (request) {\n            var shouldTypecast = this._router.shouldTypecast,\n                values = this._router.patternLexer.getParamValues(request, this._matchRegexp, shouldTypecast),\n                o = {},\n                n = values.length,\n                param, val;\n            while (n--) {\n                val = values[n];\n                if (this._paramsIds) {\n                    param = this._paramsIds[n];\n                    if (param.indexOf('?') === 0 && val) {\n                        //make a copy of the original string so array and\n                        //RegExp validation can be applied properly\n                        o[param +'_'] = val;\n                        //update vals_ array as well since it will be used\n                        //during dispatch\n                        val = decodeQueryString(val, shouldTypecast);\n                        values[n] = val;\n                    }\n                    // IE will capture optional groups as empty strings while other\n                    // browsers will capture `undefined` so normalize behavior.\n                    // see: #gh-58, #gh-59, #gh-60\n                    if ( _hasOptionalGroupBug && val === '' && arrayIndexOf(this._optionalParamsIds, param) !== -1 ) {\n                        val = void(0);\n                        values[n] = val;\n                    }\n                    o[param] = val;\n                }\n                //alias to paths and for RegExp pattern\n                o[n] = val;\n            }\n            o.request_ = shouldTypecast? typecastValue(request) : request;\n            o.vals_ = values;\n            return o;\n        },\n\n        _getParamsArray : function (request) {\n            var norm = this.rules? this.rules.normalize_ : null,\n                params;\n            norm = norm || this._router.normalizeFn; // default normalize\n            if (norm && isFunction(norm)) {\n                params = norm(request, this._getParamsObject(request));\n            } else {\n                params = this._getParamsObject(request).vals_;\n            }\n            return params;\n        },\n\n        interpolate : function(replacements) {\n            var str = this._router.patternLexer.interpolate(this._pattern, replacements);\n            if (! this._validateParams(str) ) {\n                throw new Error('Generated string doesn\\'t validate against `Route.rules`.');\n            }\n            return str;\n        },\n\n        dispose : function () {\n            this._router.removeRoute(this);\n        },\n\n        _destroy : function () {\n            this.matched.dispose();\n            this.switched.dispose();\n            this.matched = this.switched = this._pattern = this._matchRegexp = null;\n        },\n\n        toString : function () {\n            return '[Route pattern:\"'+ this._pattern +'\", numListeners:'+ this.matched.getNumListeners() +']';\n        }\n\n    };\n\n\n\n    // Pattern Lexer ------\n    //=====================\n\n    Crossroads.prototype.patternLexer = (function () {\n\n        var\n            //match chars that should be escaped on string regexp\n            ESCAPE_CHARS_REGEXP = /[\\\\.+*?\\^$\\[\\](){}\\/'#]/g,\n\n            //trailing slashes (begin/end of string)\n            LOOSE_SLASHES_REGEXP = /^\\/|\\/$/g,\n            LEGACY_SLASHES_REGEXP = /\\/$/g,\n\n            //params - everything between `{ }` or `: :`\n            PARAMS_REGEXP = /(?:\\{|:)([^}:]+)(?:\\}|:)/g,\n\n            //used to save params during compile (avoid escaping things that\n            //shouldn't be escaped).\n            TOKENS = {\n                'OS' : {\n                    //optional slashes\n                    //slash between `::` or `}:` or `\\w:` or `:{?` or `}{?` or `\\w{?`\n                    rgx : /([:}]|\\w(?=\\/))\\/?(:|(?:\\{\\?))/g,\n                    save : '$1{{id}}$2',\n                    res : '\\\\/?'\n                },\n                'RS' : {\n                    //required slashes\n                    //used to insert slash between `:{` and `}{`\n                    rgx : /([:}])\\/?(\\{)/g,\n                    save : '$1{{id}}$2',\n                    res : '\\\\/'\n                },\n                'RQ' : {\n                    //required query string - everything in between `{? }`\n                    rgx : /\\{\\?([^}]+)\\}/g,\n                    //everything from `?` till `#` or end of string\n                    res : '\\\\?([^#]+)'\n                },\n                'OQ' : {\n                    //optional query string - everything in between `:? :`\n                    rgx : /:\\?([^:]+):/g,\n                    //everything from `?` till `#` or end of string\n                    res : '(?:\\\\?([^#]*))?'\n                },\n                'OR' : {\n                    //optional rest - everything in between `: *:`\n                    rgx : /:([^:]+)\\*:/g,\n                    res : '(.*)?' // optional group to avoid passing empty string as captured\n                },\n                'RR' : {\n                    //rest param - everything in between `{ *}`\n                    rgx : /\\{([^}]+)\\*\\}/g,\n                    res : '(.+)'\n                },\n                // required/optional params should come after rest segments\n                'RP' : {\n                    //required params - everything between `{ }`\n                    rgx : /\\{([^}]+)\\}/g,\n                    res : '([^\\\\/?]+)'\n                },\n                'OP' : {\n                    //optional params - everything between `: :`\n                    rgx : /:([^:]+):/g,\n                    res : '([^\\\\/?]+)?\\/?'\n                }\n            },\n\n            LOOSE_SLASH = 1,\n            STRICT_SLASH = 2,\n            LEGACY_SLASH = 3,\n\n            _slashMode = LOOSE_SLASH;\n\n\n        function precompileTokens(){\n            var key, cur;\n            for (key in TOKENS) {\n                if (TOKENS.hasOwnProperty(key)) {\n                    cur = TOKENS[key];\n                    cur.id = '__CR_'+ key +'__';\n                    cur.save = ('save' in cur)? cur.save.replace('{{id}}', cur.id) : cur.id;\n                    cur.rRestore = new RegExp(cur.id, 'g');\n                }\n            }\n        }\n        precompileTokens();\n\n\n        function captureVals(regex, pattern) {\n            var vals = [], match;\n            // very important to reset lastIndex since RegExp can have \"g\" flag\n            // and multiple runs might affect the result, specially if matching\n            // same string multiple times on IE 7-8\n            regex.lastIndex = 0;\n            while (match = regex.exec(pattern)) {\n                vals.push(match[1]);\n            }\n            return vals;\n        }\n\n        function getParamIds(pattern) {\n            return captureVals(PARAMS_REGEXP, pattern);\n        }\n\n        function getOptionalParamsIds(pattern) {\n            return captureVals(TOKENS.OP.rgx, pattern);\n        }\n\n        function compilePattern(pattern, ignoreCase) {\n            pattern = pattern || '';\n\n            if(pattern){\n                if (_slashMode === LOOSE_SLASH) {\n                    pattern = pattern.replace(LOOSE_SLASHES_REGEXP, '');\n                }\n                else if (_slashMode === LEGACY_SLASH) {\n                    pattern = pattern.replace(LEGACY_SLASHES_REGEXP, '');\n                }\n\n                //save tokens\n                pattern = replaceTokens(pattern, 'rgx', 'save');\n                //regexp escape\n                pattern = pattern.replace(ESCAPE_CHARS_REGEXP, '\\\\$&');\n                //restore tokens\n                pattern = replaceTokens(pattern, 'rRestore', 'res');\n\n                if (_slashMode === LOOSE_SLASH) {\n                    pattern = '\\\\/?'+ pattern;\n                }\n            }\n\n            if (_slashMode !== STRICT_SLASH) {\n                //single slash is treated as empty and end slash is optional\n                pattern += '\\\\/?';\n            }\n            return new RegExp('^'+ pattern + '$', ignoreCase? 'i' : '');\n        }\n\n        function replaceTokens(pattern, regexpName, replaceName) {\n            var cur, key;\n            for (key in TOKENS) {\n                if (TOKENS.hasOwnProperty(key)) {\n                    cur = TOKENS[key];\n                    pattern = pattern.replace(cur[regexpName], cur[replaceName]);\n                }\n            }\n            return pattern;\n        }\n\n        function getParamValues(request, regexp, shouldTypecast) {\n            var vals = regexp.exec(request);\n            if (vals) {\n                vals.shift();\n                if (shouldTypecast) {\n                    vals = typecastArrayValues(vals);\n                }\n            }\n            return vals;\n        }\n\n        function interpolate(pattern, replacements) {\n            if (typeof pattern !== 'string') {\n                throw new Error('Route pattern should be a string.');\n            }\n\n            var replaceFn = function(match, prop){\n                    var val;\n                    prop = (prop.substr(0, 1) === '?')? prop.substr(1) : prop;\n                    if (replacements[prop] != null) {\n                        if (typeof replacements[prop] === 'object') {\n                            var queryParts = [];\n                            for(var key in replacements[prop]) {\n                                queryParts.push(encodeURI(key + '=' + replacements[prop][key]));\n                            }\n                            val = '?' + queryParts.join('&');\n                        } else {\n                            // make sure value is a string see #gh-54\n                            val = String(replacements[prop]);\n                        }\n\n                        if (match.indexOf('*') === -1 && val.indexOf('/') !== -1) {\n                            throw new Error('Invalid value \"'+ val +'\" for segment \"'+ match +'\".');\n                        }\n                    }\n                    else if (match.indexOf('{') !== -1) {\n                        throw new Error('The segment '+ match +' is required.');\n                    }\n                    else {\n                        val = '';\n                    }\n                    return val;\n                };\n\n            if (! TOKENS.OS.trail) {\n                TOKENS.OS.trail = new RegExp('(?:'+ TOKENS.OS.id +')+$');\n            }\n\n            return pattern\n                        .replace(TOKENS.OS.rgx, TOKENS.OS.save)\n                        .replace(PARAMS_REGEXP, replaceFn)\n                        .replace(TOKENS.OS.trail, '') // remove trailing\n                        .replace(TOKENS.OS.rRestore, '/'); // add slash between segments\n        }\n\n        //API\n        return {\n            strict : function(){\n                _slashMode = STRICT_SLASH;\n            },\n            loose : function(){\n                _slashMode = LOOSE_SLASH;\n            },\n            legacy : function(){\n                _slashMode = LEGACY_SLASH;\n            },\n            getParamIds : getParamIds,\n            getOptionalParamsIds : getOptionalParamsIds,\n            getParamValues : getParamValues,\n            compilePattern : compilePattern,\n            interpolate : interpolate\n        };\n\n    }());\n\n\n    return crossroads;\n};\n\nif (typeof define === 'function' && define.amd) {\n    define(['signals'], factory);\n} else if (typeof module !== 'undefined' && module.exports) { //Node\n    module.exports = factory(require('signals'));\n} else {\n    /*jshint sub:true */\n    window['crossroads'] = factory(window['signals']);\n}\n\n}());\n\n",
    "/*jslint onevar:true, undef:true, newcap:true, regexp:true, bitwise:true, maxerr:50, indent:4, white:false, nomen:false, plusplus:false */\n/*global define:false, require:false, exports:false, module:false, signals:false */\n\n/** @license\n * JS Signals <http://millermedeiros.github.com/js-signals/>\n * Released under the MIT license\n * Author: Miller Medeiros\n * Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM)\n */\n\n(function(global){\n\n    // SignalBinding -------------------------------------------------\n    //================================================================\n\n    /**\n     * Object that represents a binding between a Signal and a listener function.\n     * <br />- <strong>This is an internal constructor and shouldn't be called by regular users.</strong>\n     * <br />- inspired by Joa Ebert AS3 SignalBinding and Robert Penner's Slot classes.\n     * @author Miller Medeiros\n     * @constructor\n     * @internal\n     * @name SignalBinding\n     * @param {Signal} signal Reference to Signal object that listener is currently bound to.\n     * @param {Function} listener Handler function bound to the signal.\n     * @param {boolean} isOnce If binding should be executed just once.\n     * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n     * @param {Number} [priority] The priority level of the event listener. (default = 0).\n     */\n    function SignalBinding(signal, listener, isOnce, listenerContext, priority) {\n\n        /**\n         * Handler function bound to the signal.\n         * @type Function\n         * @private\n         */\n        this._listener = listener;\n\n        /**\n         * If binding should be executed just once.\n         * @type boolean\n         * @private\n         */\n        this._isOnce = isOnce;\n\n        /**\n         * Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @memberOf SignalBinding.prototype\n         * @name context\n         * @type Object|undefined|null\n         */\n        this.context = listenerContext;\n\n        /**\n         * Reference to Signal object that listener is currently bound to.\n         * @type Signal\n         * @private\n         */\n        this._signal = signal;\n\n        /**\n         * Listener priority\n         * @type Number\n         * @private\n         */\n        this._priority = priority || 0;\n    }\n\n    SignalBinding.prototype = {\n\n        /**\n         * If binding is active and should be executed.\n         * @type boolean\n         */\n        active : true,\n\n        /**\n         * Default parameters passed to listener during `Signal.dispatch` and `SignalBinding.execute`. (curried parameters)\n         * @type Array|null\n         */\n        params : null,\n\n        /**\n         * Call listener passing arbitrary parameters.\n         * <p>If binding was added using `Signal.addOnce()` it will be automatically removed from signal dispatch queue, this method is used internally for the signal dispatch.</p>\n         * @param {Array} [paramsArr] Array of parameters that should be passed to the listener\n         * @return {*} Value returned by the listener.\n         */\n        execute : function (paramsArr) {\n            var handlerReturn, params;\n            if (this.active && !!this._listener) {\n                params = this.params? this.params.concat(paramsArr) : paramsArr;\n                handlerReturn = this._listener.apply(this.context, params);\n                if (this._isOnce) {\n                    this.detach();\n                }\n            }\n            return handlerReturn;\n        },\n\n        /**\n         * Detach binding from signal.\n         * - alias to: mySignal.remove(myBinding.getListener());\n         * @return {Function|null} Handler function bound to the signal or `null` if binding was previously detached.\n         */\n        detach : function () {\n            return this.isBound()? this._signal.remove(this._listener, this.context) : null;\n        },\n\n        /**\n         * @return {Boolean} `true` if binding is still bound to the signal and have a listener.\n         */\n        isBound : function () {\n            return (!!this._signal && !!this._listener);\n        },\n\n        /**\n         * @return {boolean} If SignalBinding will only be executed once.\n         */\n        isOnce : function () {\n            return this._isOnce;\n        },\n\n        /**\n         * @return {Function} Handler function bound to the signal.\n         */\n        getListener : function () {\n            return this._listener;\n        },\n\n        /**\n         * @return {Signal} Signal that listener is currently bound to.\n         */\n        getSignal : function () {\n            return this._signal;\n        },\n\n        /**\n         * Delete instance properties\n         * @private\n         */\n        _destroy : function () {\n            delete this._signal;\n            delete this._listener;\n            delete this.context;\n        },\n\n        /**\n         * @return {string} String representation of the object.\n         */\n        toString : function () {\n            return '[SignalBinding isOnce:' + this._isOnce +', isBound:'+ this.isBound() +', active:' + this.active + ']';\n        }\n\n    };\n\n\n/*global SignalBinding:false*/\n\n    // Signal --------------------------------------------------------\n    //================================================================\n\n    function validateListener(listener, fnName) {\n        if (typeof listener !== 'function') {\n            throw new Error( 'listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName) );\n        }\n    }\n\n    /**\n     * Custom event broadcaster\n     * <br />- inspired by Robert Penner's AS3 Signals.\n     * @name Signal\n     * @author Miller Medeiros\n     * @constructor\n     */\n    function Signal() {\n        /**\n         * @type Array.<SignalBinding>\n         * @private\n         */\n        this._bindings = [];\n        this._prevParams = null;\n\n        // enforce dispatch to aways work on same context (#47)\n        var self = this;\n        this.dispatch = function(){\n            Signal.prototype.dispatch.apply(self, arguments);\n        };\n    }\n\n    Signal.prototype = {\n\n        /**\n         * Signals Version Number\n         * @type String\n         * @const\n         */\n        VERSION : '1.0.0',\n\n        /**\n         * If Signal should keep record of previously dispatched parameters and\n         * automatically execute listener during `add()`/`addOnce()` if Signal was\n         * already dispatched before.\n         * @type boolean\n         */\n        memorize : false,\n\n        /**\n         * @type boolean\n         * @private\n         */\n        _shouldPropagate : true,\n\n        /**\n         * If Signal is active and should broadcast events.\n         * <p><strong>IMPORTANT:</strong> Setting this property during a dispatch will only affect the next dispatch, if you want to stop the propagation of a signal use `halt()` instead.</p>\n         * @type boolean\n         */\n        active : true,\n\n        /**\n         * @param {Function} listener\n         * @param {boolean} isOnce\n         * @param {Object} [listenerContext]\n         * @param {Number} [priority]\n         * @return {SignalBinding}\n         * @private\n         */\n        _registerListener : function (listener, isOnce, listenerContext, priority) {\n\n            var prevIndex = this._indexOfListener(listener, listenerContext),\n                binding;\n\n            if (prevIndex !== -1) {\n                binding = this._bindings[prevIndex];\n                if (binding.isOnce() !== isOnce) {\n                    throw new Error('You cannot add'+ (isOnce? '' : 'Once') +'() then add'+ (!isOnce? '' : 'Once') +'() the same listener without removing the relationship first.');\n                }\n            } else {\n                binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);\n                this._addBinding(binding);\n            }\n\n            if(this.memorize && this._prevParams){\n                binding.execute(this._prevParams);\n            }\n\n            return binding;\n        },\n\n        /**\n         * @param {SignalBinding} binding\n         * @private\n         */\n        _addBinding : function (binding) {\n            //simplified insertion sort\n            var n = this._bindings.length;\n            do { --n; } while (this._bindings[n] && binding._priority <= this._bindings[n]._priority);\n            this._bindings.splice(n + 1, 0, binding);\n        },\n\n        /**\n         * @param {Function} listener\n         * @return {number}\n         * @private\n         */\n        _indexOfListener : function (listener, context) {\n            var n = this._bindings.length,\n                cur;\n            while (n--) {\n                cur = this._bindings[n];\n                if (cur._listener === listener && cur.context === context) {\n                    return n;\n                }\n            }\n            return -1;\n        },\n\n        /**\n         * Check if listener was attached to Signal.\n         * @param {Function} listener\n         * @param {Object} [context]\n         * @return {boolean} if Signal has the specified listener.\n         */\n        has : function (listener, context) {\n            return this._indexOfListener(listener, context) !== -1;\n        },\n\n        /**\n         * Add a listener to the signal.\n         * @param {Function} listener Signal handler function.\n         * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n         * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n         */\n        add : function (listener, listenerContext, priority) {\n            validateListener(listener, 'add');\n            return this._registerListener(listener, false, listenerContext, priority);\n        },\n\n        /**\n         * Add listener to the signal that should be removed after first execution (will be executed only once).\n         * @param {Function} listener Signal handler function.\n         * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n         * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n         */\n        addOnce : function (listener, listenerContext, priority) {\n            validateListener(listener, 'addOnce');\n            return this._registerListener(listener, true, listenerContext, priority);\n        },\n\n        /**\n         * Remove a single listener from the dispatch queue.\n         * @param {Function} listener Handler function that should be removed.\n         * @param {Object} [context] Execution context (since you can add the same handler multiple times if executing in a different context).\n         * @return {Function} Listener handler function.\n         */\n        remove : function (listener, context) {\n            validateListener(listener, 'remove');\n\n            var i = this._indexOfListener(listener, context);\n            if (i !== -1) {\n                this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn't attached to a signal\n                this._bindings.splice(i, 1);\n            }\n            return listener;\n        },\n\n        /**\n         * Remove all listeners from the Signal.\n         */\n        removeAll : function () {\n            var n = this._bindings.length;\n            while (n--) {\n                this._bindings[n]._destroy();\n            }\n            this._bindings.length = 0;\n        },\n\n        /**\n         * @return {number} Number of listeners attached to the Signal.\n         */\n        getNumListeners : function () {\n            return this._bindings.length;\n        },\n\n        /**\n         * Stop propagation of the event, blocking the dispatch to next listeners on the queue.\n         * <p><strong>IMPORTANT:</strong> should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.</p>\n         * @see Signal.prototype.disable\n         */\n        halt : function () {\n            this._shouldPropagate = false;\n        },\n\n        /**\n         * Dispatch/Broadcast Signal to all listeners added to the queue.\n         * @param {...*} [params] Parameters that should be passed to each handler.\n         */\n        dispatch : function (params) {\n            if (! this.active) {\n                return;\n            }\n\n            var paramsArr = Array.prototype.slice.call(arguments),\n                n = this._bindings.length,\n                bindings;\n\n            if (this.memorize) {\n                this._prevParams = paramsArr;\n            }\n\n            if (! n) {\n                //should come after memorize\n                return;\n            }\n\n            bindings = this._bindings.slice(); //clone array in case add/remove items during dispatch\n            this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch.\n\n            //execute all callbacks until end of the list or until a callback returns `false` or stops propagation\n            //reverse loop since listeners with higher priority will be added at the end of the list\n            do { n--; } while (bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false);\n        },\n\n        /**\n         * Forget memorized arguments.\n         * @see Signal.memorize\n         */\n        forget : function(){\n            this._prevParams = null;\n        },\n\n        /**\n         * Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).\n         * <p><strong>IMPORTANT:</strong> calling any method on the signal instance after calling dispose will throw errors.</p>\n         */\n        dispose : function () {\n            this.removeAll();\n            delete this._bindings;\n            delete this._prevParams;\n        },\n\n        /**\n         * @return {string} String representation of the object.\n         */\n        toString : function () {\n            return '[Signal active:'+ this.active +' numListeners:'+ this.getNumListeners() +']';\n        }\n\n    };\n\n\n    // Namespace -----------------------------------------------------\n    //================================================================\n\n    /**\n     * Signals namespace\n     * @namespace\n     * @name signals\n     */\n    var signals = Signal;\n\n    /**\n     * Custom event broadcaster\n     * @see Signal\n     */\n    // alias for backwards compatibility (see #gh-44)\n    signals.Signal = Signal;\n\n\n\n    //exports to multiple environments\n    if(typeof define === 'function' && define.amd){ //AMD\n        define(function () { return signals; });\n    } else if (typeof module !== 'undefined' && module.exports){ //node\n        module.exports = signals;\n    } else { //browser\n        //use string because of Google closure compiler ADVANCED_MODE\n        /*jslint sub:true */\n        global['signals'] = signals;\n    }\n\n}(this));\n",
    "function elasticOut(t) {\n  return Math.sin(-13.0 * (t + 1.0) * Math.PI/2) * Math.pow(2.0, -10.0 * t) + 1.0\n}\n\nmodule.exports = elasticOut",
    "module.exports = noop\n\nfunction noop() {\n  throw new Error(\n      'You should bundle your code ' +\n      'using `glslify` as a transform.'\n  )\n}\n",
    "module.exports = programify\n\nfunction programify(vertex, fragment, uniforms, attributes) {\n  return {\n    vertex: vertex, \n    fragment: fragment,\n    uniforms: uniforms, \n    attributes: attributes\n  };\n}\n",
    "/*!!\n * Hasher <http://github.com/millermedeiros/hasher>\n * @author Miller Medeiros\n * @version 1.2.0 (2013/11/11 03:18 PM)\n * Released under the MIT License\n */\n\n;(function () {\nvar factory = function(signals){\n\n/*jshint white:false*/\n/*global signals:false, window:false*/\n\n/**\n * Hasher\n * @namespace History Manager for rich-media applications.\n * @name hasher\n */\nvar hasher = (function(window){\n\n    //--------------------------------------------------------------------------------------\n    // Private Vars\n    //--------------------------------------------------------------------------------------\n\n    var\n\n        // frequency that it will check hash value on IE 6-7 since it doesn't\n        // support the hashchange event\n        POOL_INTERVAL = 25,\n\n        // local storage for brevity and better compression --------------------------------\n\n        document = window.document,\n        history = window.history,\n        Signal = signals.Signal,\n\n        // local vars ----------------------------------------------------------------------\n\n        hasher,\n        _hash,\n        _checkInterval,\n        _isActive,\n        _frame, //iframe used for legacy IE (6-7)\n        _checkHistory,\n        _hashValRegexp = /#(.*)$/,\n        _baseUrlRegexp = /(\\?.*)|(\\#.*)/,\n        _hashRegexp = /^\\#/,\n\n        // sniffing/feature detection -------------------------------------------------------\n\n        //hack based on this: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html\n        _isIE = (!+\"\\v1\"),\n        // hashchange is supported by FF3.6+, IE8+, Chrome 5+, Safari 5+ but\n        // feature detection fails on IE compatibility mode, so we need to\n        // check documentMode\n        _isHashChangeSupported = ('onhashchange' in window) && document.documentMode !== 7,\n        //check if is IE6-7 since hash change is only supported on IE8+ and\n        //changing hash value on IE6-7 doesn't generate history record.\n        _isLegacyIE = _isIE && !_isHashChangeSupported,\n        _isLocal = (location.protocol === 'file:');\n\n\n    //--------------------------------------------------------------------------------------\n    // Private Methods\n    //--------------------------------------------------------------------------------------\n\n    function _escapeRegExp(str){\n        return String(str || '').replace(/\\W/g, \"\\\\$&\");\n    }\n\n    function _trimHash(hash){\n        if (!hash) return '';\n        var regexp = new RegExp('^' + _escapeRegExp(hasher.prependHash) + '|' + _escapeRegExp(hasher.appendHash) + '$', 'g');\n        return hash.replace(regexp, '');\n    }\n\n    function _getWindowHash(){\n        //parsed full URL instead of getting window.location.hash because Firefox decode hash value (and all the other browsers don't)\n        //also because of IE8 bug with hash query in local file [issue #6]\n        var result = _hashValRegexp.exec( hasher.getURL() );\n        var path = (result && result[1]) || '';\n        try {\n          return hasher.raw? path : decodeURIComponent(path);\n        } catch (e) {\n          // in case user did not set `hasher.raw` and decodeURIComponent\n          // throws an error (see #57)\n          return path;\n        }\n    }\n\n    function _getFrameHash(){\n        return (_frame)? _frame.contentWindow.frameHash : null;\n    }\n\n    function _createFrame(){\n        _frame = document.createElement('iframe');\n        _frame.src = 'about:blank';\n        _frame.style.display = 'none';\n        document.body.appendChild(_frame);\n    }\n\n    function _updateFrame(){\n        if(_frame && _hash !== _getFrameHash()){\n            var frameDoc = _frame.contentWindow.document;\n            frameDoc.open();\n            //update iframe content to force new history record.\n            //based on Really Simple History, SWFAddress and YUI.history.\n            frameDoc.write('<html><head><title>' + document.title + '</title><script type=\"text/javascript\">var frameHash=\"' + _hash + '\";</script></head><body>&nbsp;</body></html>');\n            frameDoc.close();\n        }\n    }\n\n    function _registerChange(newHash, isReplace){\n        if(_hash !== newHash){\n            var oldHash = _hash;\n            _hash = newHash; //should come before event dispatch to make sure user can get proper value inside event handler\n            if(_isLegacyIE){\n                if(!isReplace){\n                    _updateFrame();\n                } else {\n                    _frame.contentWindow.frameHash = newHash;\n                }\n            }\n            hasher.changed.dispatch(_trimHash(newHash), _trimHash(oldHash));\n        }\n    }\n\n    if (_isLegacyIE) {\n        /**\n         * @private\n         */\n        _checkHistory = function(){\n            var windowHash = _getWindowHash(),\n                frameHash = _getFrameHash();\n            if(frameHash !== _hash && frameHash !== windowHash){\n                //detect changes made pressing browser history buttons.\n                //Workaround since history.back() and history.forward() doesn't\n                //update hash value on IE6/7 but updates content of the iframe.\n                //needs to trim hash since value stored already have\n                //prependHash + appendHash for fast check.\n                hasher.setHash(_trimHash(frameHash));\n            } else if (windowHash !== _hash){\n                //detect if hash changed (manually or using setHash)\n                _registerChange(windowHash);\n            }\n        };\n    } else {\n        /**\n         * @private\n         */\n        _checkHistory = function(){\n            var windowHash = _getWindowHash();\n            if(windowHash !== _hash){\n                _registerChange(windowHash);\n            }\n        };\n    }\n\n    function _addListener(elm, eType, fn){\n        if(elm.addEventListener){\n            elm.addEventListener(eType, fn, false);\n        } else if (elm.attachEvent){\n            elm.attachEvent('on' + eType, fn);\n        }\n    }\n\n    function _removeListener(elm, eType, fn){\n        if(elm.removeEventListener){\n            elm.removeEventListener(eType, fn, false);\n        } else if (elm.detachEvent){\n            elm.detachEvent('on' + eType, fn);\n        }\n    }\n\n    function _makePath(paths){\n        paths = Array.prototype.slice.call(arguments);\n\n        var path = paths.join(hasher.separator);\n        path = path? hasher.prependHash + path.replace(_hashRegexp, '') + hasher.appendHash : path;\n        return path;\n    }\n\n    function _encodePath(path){\n        //used encodeURI instead of encodeURIComponent to preserve '?', '/',\n        //'#'. Fixes Safari bug [issue #8]\n        path = encodeURI(path);\n        if(_isIE && _isLocal){\n            //fix IE8 local file bug [issue #6]\n            path = path.replace(/\\?/, '%3F');\n        }\n        return path;\n    }\n\n    //--------------------------------------------------------------------------------------\n    // Public (API)\n    //--------------------------------------------------------------------------------------\n\n    hasher = /** @lends hasher */ {\n\n        /**\n         * hasher Version Number\n         * @type string\n         * @constant\n         */\n        VERSION : '1.2.0',\n\n        /**\n         * Boolean deciding if hasher encodes/decodes the hash or not.\n         * <ul>\n         * <li>default value: false;</li>\n         * </ul>\n         * @type boolean\n         */\n        raw : false,\n\n        /**\n         * String that should always be added to the end of Hash value.\n         * <ul>\n         * <li>default value: '';</li>\n         * <li>will be automatically removed from `hasher.getHash()`</li>\n         * <li>avoid conflicts with elements that contain ID equal to hash value;</li>\n         * </ul>\n         * @type string\n         */\n        appendHash : '',\n\n        /**\n         * String that should always be added to the beginning of Hash value.\n         * <ul>\n         * <li>default value: '/';</li>\n         * <li>will be automatically removed from `hasher.getHash()`</li>\n         * <li>avoid conflicts with elements that contain ID equal to hash value;</li>\n         * </ul>\n         * @type string\n         */\n        prependHash : '/',\n\n        /**\n         * String used to split hash paths; used by `hasher.getHashAsArray()` to split paths.\n         * <ul>\n         * <li>default value: '/';</li>\n         * </ul>\n         * @type string\n         */\n        separator : '/',\n\n        /**\n         * Signal dispatched when hash value changes.\n         * - pass current hash as 1st parameter to listeners and previous hash value as 2nd parameter.\n         * @type signals.Signal\n         */\n        changed : new Signal(),\n\n        /**\n         * Signal dispatched when hasher is stopped.\n         * -  pass current hash as first parameter to listeners\n         * @type signals.Signal\n         */\n        stopped : new Signal(),\n\n        /**\n         * Signal dispatched when hasher is initialized.\n         * - pass current hash as first parameter to listeners.\n         * @type signals.Signal\n         */\n        initialized : new Signal(),\n\n        /**\n         * Start listening/dispatching changes in the hash/history.\n         * <ul>\n         *   <li>hasher won't dispatch CHANGE events by manually typing a new value or pressing the back/forward buttons before calling this method.</li>\n         * </ul>\n         */\n        init : function(){\n            if(_isActive) return;\n\n            _hash = _getWindowHash();\n\n            //thought about branching/overloading hasher.init() to avoid checking multiple times but\n            //don't think worth doing it since it probably won't be called multiple times.\n            if(_isHashChangeSupported){\n                _addListener(window, 'hashchange', _checkHistory);\n            }else {\n                if(_isLegacyIE){\n                    if(! _frame){\n                        _createFrame();\n                    }\n                    _updateFrame();\n                }\n                _checkInterval = setInterval(_checkHistory, POOL_INTERVAL);\n            }\n\n            _isActive = true;\n            hasher.initialized.dispatch(_trimHash(_hash));\n        },\n\n        /**\n         * Stop listening/dispatching changes in the hash/history.\n         * <ul>\n         *   <li>hasher won't dispatch CHANGE events by manually typing a new value or pressing the back/forward buttons after calling this method, unless you call hasher.init() again.</li>\n         *   <li>hasher will still dispatch changes made programatically by calling hasher.setHash();</li>\n         * </ul>\n         */\n        stop : function(){\n            if(! _isActive) return;\n\n            if(_isHashChangeSupported){\n                _removeListener(window, 'hashchange', _checkHistory);\n            }else{\n                clearInterval(_checkInterval);\n                _checkInterval = null;\n            }\n\n            _isActive = false;\n            hasher.stopped.dispatch(_trimHash(_hash));\n        },\n\n        /**\n         * @return {boolean}    If hasher is listening to changes on the browser history and/or hash value.\n         */\n        isActive : function(){\n            return _isActive;\n        },\n\n        /**\n         * @return {string} Full URL.\n         */\n        getURL : function(){\n            return window.location.href;\n        },\n\n        /**\n         * @return {string} Retrieve URL without query string and hash.\n         */\n        getBaseURL : function(){\n            return hasher.getURL().replace(_baseUrlRegexp, ''); //removes everything after '?' and/or '#'\n        },\n\n        /**\n         * Set Hash value, generating a new history record.\n         * @param {...string} path    Hash value without '#'. Hasher will join\n         * path segments using `hasher.separator` and prepend/append hash value\n         * with `hasher.appendHash` and `hasher.prependHash`\n         * @example hasher.setHash('lorem', 'ipsum', 'dolor') -> '#/lorem/ipsum/dolor'\n         */\n        setHash : function(path){\n            path = _makePath.apply(null, arguments);\n            if(path !== _hash){\n                // we should store raw value\n                _registerChange(path);\n                if (path === _hash) {\n                    // we check if path is still === _hash to avoid error in\n                    // case of multiple consecutive redirects [issue #39]\n                    if (! hasher.raw) {\n                        path = _encodePath(path);\n                    }\n                    window.location.hash = '#' + path;\n                }\n            }\n        },\n\n        /**\n         * Set Hash value without keeping previous hash on the history record.\n         * Similar to calling `window.location.replace(\"#/hash\")` but will also work on IE6-7.\n         * @param {...string} path    Hash value without '#'. Hasher will join\n         * path segments using `hasher.separator` and prepend/append hash value\n         * with `hasher.appendHash` and `hasher.prependHash`\n         * @example hasher.replaceHash('lorem', 'ipsum', 'dolor') -> '#/lorem/ipsum/dolor'\n         */\n        replaceHash : function(path){\n            path = _makePath.apply(null, arguments);\n            if(path !== _hash){\n                // we should store raw value\n                _registerChange(path, true);\n                if (path === _hash) {\n                    // we check if path is still === _hash to avoid error in\n                    // case of multiple consecutive redirects [issue #39]\n                    if (! hasher.raw) {\n                        path = _encodePath(path);\n                    }\n                    window.location.replace('#' + path);\n                }\n            }\n        },\n\n        /**\n         * @return {string} Hash value without '#', `hasher.appendHash` and `hasher.prependHash`.\n         */\n        getHash : function(){\n            //didn't used actual value of the `window.location.hash` to avoid breaking the application in case `window.location.hash` isn't available and also because value should always be synched.\n            return _trimHash(_hash);\n        },\n\n        /**\n         * @return {Array.<string>} Hash value split into an Array.\n         */\n        getHashAsArray : function(){\n            return hasher.getHash().split(hasher.separator);\n        },\n\n        /**\n         * Removes all event listeners, stops hasher and destroy hasher object.\n         * - IMPORTANT: hasher won't work after calling this method, hasher Object will be deleted.\n         */\n        dispose : function(){\n            hasher.stop();\n            hasher.initialized.dispose();\n            hasher.stopped.dispose();\n            hasher.changed.dispose();\n            _frame = hasher = window.hasher = null;\n        },\n\n        /**\n         * @return {string} A string representation of the object.\n         */\n        toString : function(){\n            return '[hasher version=\"'+ hasher.VERSION +'\" hash=\"'+ hasher.getHash() +'\"]';\n        }\n\n    };\n\n    hasher.initialized.memorize = true; //see #33\n\n    return hasher;\n\n}(window));\n\n\n    return hasher;\n};\n\nif (typeof define === 'function' && define.amd) {\n    define(['signals'], factory);\n} else if (typeof exports === 'object') {\n    module.exports = factory(require('signals'));\n} else {\n    /*jshint sub:true */\n    window['hasher'] = factory(window['signals']);\n}\n\n}());\n",
    "/*jslint onevar:true, undef:true, newcap:true, regexp:true, bitwise:true, maxerr:50, indent:4, white:false, nomen:false, plusplus:false */\n/*global define:false, require:false, exports:false, module:false, signals:false */\n\n/** @license\n * JS Signals <http://millermedeiros.github.com/js-signals/>\n * Released under the MIT license\n * Author: Miller Medeiros\n * Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM)\n */\n\n(function(global){\n\n    // SignalBinding -------------------------------------------------\n    //================================================================\n\n    /**\n     * Object that represents a binding between a Signal and a listener function.\n     * <br />- <strong>This is an internal constructor and shouldn't be called by regular users.</strong>\n     * <br />- inspired by Joa Ebert AS3 SignalBinding and Robert Penner's Slot classes.\n     * @author Miller Medeiros\n     * @constructor\n     * @internal\n     * @name SignalBinding\n     * @param {Signal} signal Reference to Signal object that listener is currently bound to.\n     * @param {Function} listener Handler function bound to the signal.\n     * @param {boolean} isOnce If binding should be executed just once.\n     * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n     * @param {Number} [priority] The priority level of the event listener. (default = 0).\n     */\n    function SignalBinding(signal, listener, isOnce, listenerContext, priority) {\n\n        /**\n         * Handler function bound to the signal.\n         * @type Function\n         * @private\n         */\n        this._listener = listener;\n\n        /**\n         * If binding should be executed just once.\n         * @type boolean\n         * @private\n         */\n        this._isOnce = isOnce;\n\n        /**\n         * Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @memberOf SignalBinding.prototype\n         * @name context\n         * @type Object|undefined|null\n         */\n        this.context = listenerContext;\n\n        /**\n         * Reference to Signal object that listener is currently bound to.\n         * @type Signal\n         * @private\n         */\n        this._signal = signal;\n\n        /**\n         * Listener priority\n         * @type Number\n         * @private\n         */\n        this._priority = priority || 0;\n    }\n\n    SignalBinding.prototype = {\n\n        /**\n         * If binding is active and should be executed.\n         * @type boolean\n         */\n        active : true,\n\n        /**\n         * Default parameters passed to listener during `Signal.dispatch` and `SignalBinding.execute`. (curried parameters)\n         * @type Array|null\n         */\n        params : null,\n\n        /**\n         * Call listener passing arbitrary parameters.\n         * <p>If binding was added using `Signal.addOnce()` it will be automatically removed from signal dispatch queue, this method is used internally for the signal dispatch.</p>\n         * @param {Array} [paramsArr] Array of parameters that should be passed to the listener\n         * @return {*} Value returned by the listener.\n         */\n        execute : function (paramsArr) {\n            var handlerReturn, params;\n            if (this.active && !!this._listener) {\n                params = this.params? this.params.concat(paramsArr) : paramsArr;\n                handlerReturn = this._listener.apply(this.context, params);\n                if (this._isOnce) {\n                    this.detach();\n                }\n            }\n            return handlerReturn;\n        },\n\n        /**\n         * Detach binding from signal.\n         * - alias to: mySignal.remove(myBinding.getListener());\n         * @return {Function|null} Handler function bound to the signal or `null` if binding was previously detached.\n         */\n        detach : function () {\n            return this.isBound()? this._signal.remove(this._listener, this.context) : null;\n        },\n\n        /**\n         * @return {Boolean} `true` if binding is still bound to the signal and have a listener.\n         */\n        isBound : function () {\n            return (!!this._signal && !!this._listener);\n        },\n\n        /**\n         * @return {boolean} If SignalBinding will only be executed once.\n         */\n        isOnce : function () {\n            return this._isOnce;\n        },\n\n        /**\n         * @return {Function} Handler function bound to the signal.\n         */\n        getListener : function () {\n            return this._listener;\n        },\n\n        /**\n         * @return {Signal} Signal that listener is currently bound to.\n         */\n        getSignal : function () {\n            return this._signal;\n        },\n\n        /**\n         * Delete instance properties\n         * @private\n         */\n        _destroy : function () {\n            delete this._signal;\n            delete this._listener;\n            delete this.context;\n        },\n\n        /**\n         * @return {string} String representation of the object.\n         */\n        toString : function () {\n            return '[SignalBinding isOnce:' + this._isOnce +', isBound:'+ this.isBound() +', active:' + this.active + ']';\n        }\n\n    };\n\n\n/*global SignalBinding:false*/\n\n    // Signal --------------------------------------------------------\n    //================================================================\n\n    function validateListener(listener, fnName) {\n        if (typeof listener !== 'function') {\n            throw new Error( 'listener is a required param of {fn}() and should be a Function.'.replace('{fn}', fnName) );\n        }\n    }\n\n    /**\n     * Custom event broadcaster\n     * <br />- inspired by Robert Penner's AS3 Signals.\n     * @name Signal\n     * @author Miller Medeiros\n     * @constructor\n     */\n    function Signal() {\n        /**\n         * @type Array.<SignalBinding>\n         * @private\n         */\n        this._bindings = [];\n        this._prevParams = null;\n\n        // enforce dispatch to aways work on same context (#47)\n        var self = this;\n        this.dispatch = function(){\n            Signal.prototype.dispatch.apply(self, arguments);\n        };\n    }\n\n    Signal.prototype = {\n\n        /**\n         * Signals Version Number\n         * @type String\n         * @const\n         */\n        VERSION : '1.0.0',\n\n        /**\n         * If Signal should keep record of previously dispatched parameters and\n         * automatically execute listener during `add()`/`addOnce()` if Signal was\n         * already dispatched before.\n         * @type boolean\n         */\n        memorize : false,\n\n        /**\n         * @type boolean\n         * @private\n         */\n        _shouldPropagate : true,\n\n        /**\n         * If Signal is active and should broadcast events.\n         * <p><strong>IMPORTANT:</strong> Setting this property during a dispatch will only affect the next dispatch, if you want to stop the propagation of a signal use `halt()` instead.</p>\n         * @type boolean\n         */\n        active : true,\n\n        /**\n         * @param {Function} listener\n         * @param {boolean} isOnce\n         * @param {Object} [listenerContext]\n         * @param {Number} [priority]\n         * @return {SignalBinding}\n         * @private\n         */\n        _registerListener : function (listener, isOnce, listenerContext, priority) {\n\n            var prevIndex = this._indexOfListener(listener, listenerContext),\n                binding;\n\n            if (prevIndex !== -1) {\n                binding = this._bindings[prevIndex];\n                if (binding.isOnce() !== isOnce) {\n                    throw new Error('You cannot add'+ (isOnce? '' : 'Once') +'() then add'+ (!isOnce? '' : 'Once') +'() the same listener without removing the relationship first.');\n                }\n            } else {\n                binding = new SignalBinding(this, listener, isOnce, listenerContext, priority);\n                this._addBinding(binding);\n            }\n\n            if(this.memorize && this._prevParams){\n                binding.execute(this._prevParams);\n            }\n\n            return binding;\n        },\n\n        /**\n         * @param {SignalBinding} binding\n         * @private\n         */\n        _addBinding : function (binding) {\n            //simplified insertion sort\n            var n = this._bindings.length;\n            do { --n; } while (this._bindings[n] && binding._priority <= this._bindings[n]._priority);\n            this._bindings.splice(n + 1, 0, binding);\n        },\n\n        /**\n         * @param {Function} listener\n         * @return {number}\n         * @private\n         */\n        _indexOfListener : function (listener, context) {\n            var n = this._bindings.length,\n                cur;\n            while (n--) {\n                cur = this._bindings[n];\n                if (cur._listener === listener && cur.context === context) {\n                    return n;\n                }\n            }\n            return -1;\n        },\n\n        /**\n         * Check if listener was attached to Signal.\n         * @param {Function} listener\n         * @param {Object} [context]\n         * @return {boolean} if Signal has the specified listener.\n         */\n        has : function (listener, context) {\n            return this._indexOfListener(listener, context) !== -1;\n        },\n\n        /**\n         * Add a listener to the signal.\n         * @param {Function} listener Signal handler function.\n         * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n         * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n         */\n        add : function (listener, listenerContext, priority) {\n            validateListener(listener, 'add');\n            return this._registerListener(listener, false, listenerContext, priority);\n        },\n\n        /**\n         * Add listener to the signal that should be removed after first execution (will be executed only once).\n         * @param {Function} listener Signal handler function.\n         * @param {Object} [listenerContext] Context on which listener will be executed (object that should represent the `this` variable inside listener function).\n         * @param {Number} [priority] The priority level of the event listener. Listeners with higher priority will be executed before listeners with lower priority. Listeners with same priority level will be executed at the same order as they were added. (default = 0)\n         * @return {SignalBinding} An Object representing the binding between the Signal and listener.\n         */\n        addOnce : function (listener, listenerContext, priority) {\n            validateListener(listener, 'addOnce');\n            return this._registerListener(listener, true, listenerContext, priority);\n        },\n\n        /**\n         * Remove a single listener from the dispatch queue.\n         * @param {Function} listener Handler function that should be removed.\n         * @param {Object} [context] Execution context (since you can add the same handler multiple times if executing in a different context).\n         * @return {Function} Listener handler function.\n         */\n        remove : function (listener, context) {\n            validateListener(listener, 'remove');\n\n            var i = this._indexOfListener(listener, context);\n            if (i !== -1) {\n                this._bindings[i]._destroy(); //no reason to a SignalBinding exist if it isn't attached to a signal\n                this._bindings.splice(i, 1);\n            }\n            return listener;\n        },\n\n        /**\n         * Remove all listeners from the Signal.\n         */\n        removeAll : function () {\n            var n = this._bindings.length;\n            while (n--) {\n                this._bindings[n]._destroy();\n            }\n            this._bindings.length = 0;\n        },\n\n        /**\n         * @return {number} Number of listeners attached to the Signal.\n         */\n        getNumListeners : function () {\n            return this._bindings.length;\n        },\n\n        /**\n         * Stop propagation of the event, blocking the dispatch to next listeners on the queue.\n         * <p><strong>IMPORTANT:</strong> should be called only during signal dispatch, calling it before/after dispatch won't affect signal broadcast.</p>\n         * @see Signal.prototype.disable\n         */\n        halt : function () {\n            this._shouldPropagate = false;\n        },\n\n        /**\n         * Dispatch/Broadcast Signal to all listeners added to the queue.\n         * @param {...*} [params] Parameters that should be passed to each handler.\n         */\n        dispatch : function (params) {\n            if (! this.active) {\n                return;\n            }\n\n            var paramsArr = Array.prototype.slice.call(arguments),\n                n = this._bindings.length,\n                bindings;\n\n            if (this.memorize) {\n                this._prevParams = paramsArr;\n            }\n\n            if (! n) {\n                //should come after memorize\n                return;\n            }\n\n            bindings = this._bindings.slice(); //clone array in case add/remove items during dispatch\n            this._shouldPropagate = true; //in case `halt` was called before dispatch or during the previous dispatch.\n\n            //execute all callbacks until end of the list or until a callback returns `false` or stops propagation\n            //reverse loop since listeners with higher priority will be added at the end of the list\n            do { n--; } while (bindings[n] && this._shouldPropagate && bindings[n].execute(paramsArr) !== false);\n        },\n\n        /**\n         * Forget memorized arguments.\n         * @see Signal.memorize\n         */\n        forget : function(){\n            this._prevParams = null;\n        },\n\n        /**\n         * Remove all bindings from signal and destroy any reference to external objects (destroy Signal object).\n         * <p><strong>IMPORTANT:</strong> calling any method on the signal instance after calling dispose will throw errors.</p>\n         */\n        dispose : function () {\n            this.removeAll();\n            delete this._bindings;\n            delete this._prevParams;\n        },\n\n        /**\n         * @return {string} String representation of the object.\n         */\n        toString : function () {\n            return '[Signal active:'+ this.active +' numListeners:'+ this.getNumListeners() +']';\n        }\n\n    };\n\n\n    // Namespace -----------------------------------------------------\n    //================================================================\n\n    /**\n     * Signals namespace\n     * @namespace\n     * @name signals\n     */\n    var signals = Signal;\n\n    /**\n     * Custom event broadcaster\n     * @see Signal\n     */\n    // alias for backwards compatibility (see #gh-44)\n    signals.Signal = Signal;\n\n\n\n    //exports to multiple environments\n    if(typeof define === 'function' && define.amd){ //AMD\n        define(function () { return signals; });\n    } else if (typeof module !== 'undefined' && module.exports){ //node\n        module.exports = signals;\n    } else { //browser\n        //use string because of Google closure compiler ADVANCED_MODE\n        /*jslint sub:true */\n        global['signals'] = signals;\n    }\n\n}(this));\n",
    "var inserted = {};\n\nmodule.exports = function (css, options) {\n    if (inserted[css]) return;\n    inserted[css] = true;\n    \n    var elem = document.createElement('style');\n    elem.setAttribute('type', 'text/css');\n\n    if ('textContent' in elem) {\n      elem.textContent = css;\n    } else {\n      elem.styleSheet.cssText = css;\n    }\n    \n    var head = document.getElementsByTagName('head')[0];\n    if (options && options.prepend) {\n        head.insertBefore(elem, head.childNodes[0]);\n    } else {\n        head.appendChild(elem);\n    }\n};\n",
    "function lerp(v0, v1, t) {\n    return v0*(1-t)+v1*t\n}\nmodule.exports = lerp",
    "var Extend = require('lodash.assign');\n\nvar delta = function( maxDt, minDt ) {\n\t\n\treturn function() {\n\t\tvar newTime, dt\n\t\n\t\tnewTime = Date.now()\n\t\tdt = newTime - this.now\n\t\n\t\tdt = Math.min( dt, maxDt )\n\t\tdt = Math.max( dt, minDt )\n\t\n\t\tthis.elapsed += dt\n\t\tthis.now = newTime\n\t\n\t\treturn dt\n\t}\n}\n\nvar start = function() {\n\tthis.now = Date.now()\n}\n\nvar reset = function() {\n\tthis.now = 0\n\tthis.elapsed = 0\n}\n\nvar getValue = function( key ) {\n\treturn function() {\n\t\treturn this[key]\n\t}\n}\n\nvar clock = function( properties ) {\n\n\tvar config = Extend({\n\t\tmaxDt : 60,\n\t\tminDt : 16.66666667,\n\t\tautostart : false\n\t}, properties)\n\t\n\tvar state = Object.preventExtensions({\n\t\tnow : 0,\n\t\telapsed : 0\n\t})\n\n\tif(config.autostart !== false) {\n\t\tstart.bind( state )()\n\t}\n\t\n\treturn {\n\t\tstart\t: start.bind( state ),\n\t\treset\t: reset.bind( state ),\n\t\tnow\t\t: getValue(\"now\").bind( state ),\n\t\telapsed\t: getValue(\"elapsed\").bind( state ),\n\t\tdelta\t: delta( config.maxDt, config.minDt ).bind( state ),\n\t}\n}\n\nmodule.exports = clock",
    "var raf = require('raf');\nvar EventEmitter = require('events').EventEmitter;\nvar Extend = require('lodash.assign');\nvar clock = require('./clock')();\n\nvar start = function( loop, clock ) {\n\t\n\treturn function() {\n\t\tif( !this.started ) {\n\t\t\tif( !this.clockStarted ) {\n\t\t\t\tclock.start()\n\t\t\t}\n\t\t\tloop()\n\t\t\tthis.started = true\n\t\t}\n\t}\n\t\t\n}\n\nvar stop = function() {\n\traf.cancel( this.rafHandle )\n\tthis.started = false\n}\n\nvar createLoop = function( emitter, clock, customizeEvent ) {\n\t\n\treturn function runLoop() {\n\t\t\n\t\tthis.rafHandle = raf( runLoop.bind(this) )\n\t\tvar dt = clock.delta()\n\t\t\n\t\tvar event = customizeEvent({\n\t\t\tdt: dt,\n\t\t\tunitDt: dt / 16.66666667,\n\t\t\tnow: clock.now(),\n\t\t\telapsed: clock.elapsed()\n\t\t})\n\t\t\n\t\temitter.emit(\"update\", event)\n\t\temitter.emit(\"draw\", event)\n\t\t\n\t}\n\t\n}\n\nvar passThrough = function( a ) { return a }\n\nmodule.exports = function configurePoemLoop( properties ) {\n\n\tvar config = Extend({\n\t\temitter: new EventEmitter(),\n\t\tcustomizeEvent: passThrough\n\t}, properties)\n\t\n\tvar state = Object.preventExtensions({\n\t\tclockStarted : false,\n\t\tstarted: false,\n\t\trafHandle: null\n\t})\n\t\n\tvar loop = createLoop(\n\t\tconfig.emitter,\n\t\tclock,\n\t\tconfig.customizeEvent\n\t)\n\t.bind( state )\n\t\n\treturn {\n\t\tstart\t: start( loop, clock ).bind( state ),\n\t\tstop\t: stop.bind( state ),\n\t\treset\t: clock.reset,\n\t\temitter : config.emitter\n\t}\n\t\n}",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseAssign = require('lodash._baseassign'),\n    createAssigner = require('lodash._createassigner'),\n    keys = require('lodash.keys');\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n  var index = -1,\n      props = keys(source),\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index],\n        value = object[key],\n        result = customizer(value, source[key], key, object, source);\n\n    if ((result === result ? (result !== value) : (value === value)) ||\n        (value === undefined && !(key in object))) {\n      object[key] = result;\n    }\n  }\n  return object;\n}\n\n/**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources overwrite property assignments of previous sources.\n * If `customizer` is provided it is invoked to produce the assigned values.\n * The `customizer` is bound to `thisArg` and invoked with five arguments:\n * (objectValue, sourceValue, key, object, source).\n *\n * **Note:** This method mutates `object` and is based on\n * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n *\n * @static\n * @memberOf _\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n * // => { 'user': 'fred', 'age': 40 }\n *\n * // using a customizer callback\n * var defaults = _.partialRight(_.assign, function(value, other) {\n *   return _.isUndefined(value) ? other : value;\n * });\n *\n * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n * // => { 'user': 'barney', 'age': 36 }\n */\nvar assign = createAssigner(function(object, source, customizer) {\n  return customizer\n    ? assignWith(object, source, customizer)\n    : baseAssign(object, source);\n});\n\nmodule.exports = assign;\n",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCopy = require('lodash._basecopy'),\n    keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return source == null\n    ? object\n    : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n",
    "/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar bindCallback = require('lodash._bindcallback'),\n    isIterateeCall = require('lodash._isiterateecall'),\n    restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return restParam(function(object, sources) {\n    var index = -1,\n        length = object == null ? 0 : sources.length,\n        customizer = length > 2 ? sources[length - 2] : undefined,\n        guard = length > 2 ? sources[2] : undefined,\n        thisArg = length > 1 ? sources[length - 1] : undefined;\n\n    if (typeof customizer == 'function') {\n      customizer = bindCallback(customizer, thisArg, 5);\n      length -= 2;\n    } else {\n      customizer = typeof thisArg == 'function' ? thisArg : undefined;\n      length -= (customizer ? 1 : 0);\n    }\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.9 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n",
    "/**\n * lodash 3.6.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "var now = require('performance-now')\n  , global = typeof window === 'undefined' ? {} : window\n  , vendors = ['moz', 'webkit']\n  , suffix = 'AnimationFrame'\n  , raf = global['request' + suffix]\n  , caf = global['cancel' + suffix] || global['cancelRequest' + suffix]\n  , isNative = true\n\nfor(var i = 0; i < vendors.length && !raf; i++) {\n  raf = global[vendors[i] + 'Request' + suffix]\n  caf = global[vendors[i] + 'Cancel' + suffix]\n      || global[vendors[i] + 'CancelRequest' + suffix]\n}\n\n// Some versions of FF have rAF but not cAF\nif(!raf || !caf) {\n  isNative = false\n\n  var last = 0\n    , id = 0\n    , queue = []\n    , frameDuration = 1000 / 60\n\n  raf = function(callback) {\n    if(queue.length === 0) {\n      var _now = now()\n        , next = Math.max(0, frameDuration - (_now - last))\n      last = next + _now\n      setTimeout(function() {\n        var cp = queue.slice(0)\n        // Clear queue here to prevent\n        // callbacks from appending listeners\n        // to the current frame's queue\n        queue.length = 0\n        for(var i = 0; i < cp.length; i++) {\n          if(!cp[i].cancelled) {\n            try{\n              cp[i].callback(last)\n            } catch(e) {\n              setTimeout(function() { throw e }, 0)\n            }\n          }\n        }\n      }, Math.round(next))\n    }\n    queue.push({\n      handle: ++id,\n      callback: callback,\n      cancelled: false\n    })\n    return id\n  }\n\n  caf = function(handle) {\n    for(var i = 0; i < queue.length; i++) {\n      if(queue[i].handle === handle) {\n        queue[i].cancelled = true\n      }\n    }\n  }\n}\n\nmodule.exports = function(fn) {\n  // Wrap in a new function to prevent\n  // `cancel` potentially being assigned\n  // to the native rAF function\n  if(!isNative) {\n    return raf.call(global, fn)\n  }\n  return raf.call(global, function() {\n    try{\n      fn.apply(this, arguments)\n    } catch(e) {\n      setTimeout(function() { throw e }, 0)\n    }\n  })\n}\nmodule.exports.cancel = function() {\n  caf.apply(global, arguments)\n}\n",
    "// Generated by CoffeeScript 1.6.3\n(function() {\n  var getNanoSeconds, hrtime, loadTime;\n\n  if ((typeof performance !== \"undefined\" && performance !== null) && performance.now) {\n    module.exports = function() {\n      return performance.now();\n    };\n  } else if ((typeof process !== \"undefined\" && process !== null) && process.hrtime) {\n    module.exports = function() {\n      return (getNanoSeconds() - loadTime) / 1e6;\n    };\n    hrtime = process.hrtime;\n    getNanoSeconds = function() {\n      var hr;\n      hr = hrtime();\n      return hr[0] * 1e9 + hr[1];\n    };\n    loadTime = getNanoSeconds();\n  } else if (Date.now) {\n    module.exports = function() {\n      return Date.now() - loadTime;\n    };\n    loadTime = Date.now();\n  } else {\n    module.exports = function() {\n      return new Date().getTime() - loadTime;\n    };\n    loadTime = new Date().getTime();\n  }\n\n}).call(this);\n\n/*\n//@ sourceMappingURL=performance-now.map\n*/\n",
    "var EventEmitter = require('events').EventEmitter;\nvar IsObject = require('lodash.isobject');\nvar Each = require('lodash.foreach');\nvar Extend = require('lodash.assign');\n\nvar load = function( manifests, globalManifest, getGraph, emitter ) {\n\t\n\treturn function( newSlug ) {\n\n\t\tvar oldSlug = this.slug;\n\n\t\tvar newManifest = manifests[newSlug];\n\t\tvar oldManifest = this.manifest;\n\t\t\n\t\tif( !IsObject( newManifest ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif( this.slug ) {\n\t\t\temitter.emit(\"unload\", {\n\t\t\t\tslug : oldSlug,\n\t\t\t\tmanifest : oldManifest\n\t\t\t});\n\t\t}\n\t\t\n\t\tvar graph = getGraph( newManifest, newSlug );\n\t\tparseManifest( globalManifest, graph );\n\t\tparseManifest( newManifest, graph );\n\n\t\tthis.manifest = newManifest;\n\t\tthis.slug = newSlug;\n\t\t\n\t\temitter.emit(\"load\", {\n\t\t\tslug\t\t\t: newSlug,\n\t\t\tglobalManifest\t: globalManifest,\n\t\t\tmanifest\t\t: newManifest,\n\t\t\tgraph\t\t\t: graph\n\t\t});\n\t\t\n\t\treturn true;\n\t\t\n\t};\n\t\n};\n\nvar parseManifest = function( manifest, graph ) {\n\t\n\tEach( manifest.components, function loadComponent( value, key ) {\n\t\t\n\t\tvar properties;\n\t\t\n\t\tif(IsObject( value )) {\n\t\t\t\n\t\t\tproperties = IsObject( value.properties ) ? value.properties : {};\n\t\t\t\n\t\t\tif( IsObject( value.function ) ) {\n\t\t\t\tgraph[ key ] = value.function( graph, properties );\n\t\t\t} else if( IsObject( value.construct ) ) {\n\t\t\t\tgraph[ key ] = new value.construct( graph, properties );\n\t\t\t} else {\n\t\t\t\tgraph[ key ] = value;\n\t\t\t}\n\t\t\t\n\t\t} else {\n\t\t\tgraph[ key ] = value;\n\t\t}\n\t\t\n\t});\n\t\n\treturn graph;\n};\n\nvar createBlankObject = function() { return {}; };\n\nmodule.exports = function( manifests, properties ) {\n\n\tvar config = Extend({\n\t\tglobalManifest: {},\n\t\tgetGraph: createBlankObject,\n\t\temitter: new EventEmitter()\n\t}, properties);\n\t\n\tvar state = Object.preventExtensions({\n\t\tslug : null,\n\t\tmanifest : null\n\t});\n\t\n\treturn {\n\t\tload : load( manifests, config.globalManifest, config.getGraph, config.emitter ).bind( state ),\n\t\temitter : config.emitter\n\t}\n\t\n};",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseAssign = require('lodash._baseassign'),\n    createAssigner = require('lodash._createassigner'),\n    keys = require('lodash.keys');\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n  var index = -1,\n      props = keys(source),\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index],\n        value = object[key],\n        result = customizer(value, source[key], key, object, source);\n\n    if ((result === result ? (result !== value) : (value === value)) ||\n        (value === undefined && !(key in object))) {\n      object[key] = result;\n    }\n  }\n  return object;\n}\n\n/**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources overwrite property assignments of previous sources.\n * If `customizer` is provided it is invoked to produce the assigned values.\n * The `customizer` is bound to `thisArg` and invoked with five arguments:\n * (objectValue, sourceValue, key, object, source).\n *\n * **Note:** This method mutates `object` and is based on\n * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n *\n * @static\n * @memberOf _\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n * // => { 'user': 'fred', 'age': 40 }\n *\n * // using a customizer callback\n * var defaults = _.partialRight(_.assign, function(value, other) {\n *   return _.isUndefined(value) ? other : value;\n * });\n *\n * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n * // => { 'user': 'barney', 'age': 36 }\n */\nvar assign = createAssigner(function(object, source, customizer) {\n  return customizer\n    ? assignWith(object, source, customizer)\n    : baseAssign(object, source);\n});\n\nmodule.exports = assign;\n",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCopy = require('lodash._basecopy'),\n    keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return source == null\n    ? object\n    : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n",
    "/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar bindCallback = require('lodash._bindcallback'),\n    isIterateeCall = require('lodash._isiterateecall'),\n    restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return restParam(function(object, sources) {\n    var index = -1,\n        length = object == null ? 0 : sources.length,\n        customizer = length > 2 ? sources[length - 2] : undefined,\n        guard = length > 2 ? sources[2] : undefined,\n        thisArg = length > 1 ? sources[length - 1] : undefined;\n\n    if (typeof customizer == 'function') {\n      customizer = bindCallback(customizer, thisArg, 5);\n      length -= 2;\n    } else {\n      customizer = typeof thisArg == 'function' ? thisArg : undefined;\n      length -= (customizer ? 1 : 0);\n    }\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.9 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n",
    "/**\n * lodash 3.6.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.0.3 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar arrayEach = require('lodash._arrayeach'),\n    baseEach = require('lodash._baseeach'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray');\n\n/**\n * Creates a function for `_.forEach` or `_.forEachRight`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over an array.\n * @param {Function} eachFunc The function to iterate over a collection.\n * @returns {Function} Returns the new each function.\n */\nfunction createForEach(arrayFunc, eachFunc) {\n  return function(collection, iteratee, thisArg) {\n    return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n      ? arrayFunc(collection, iteratee)\n      : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n  };\n}\n\n/**\n * Iterates over elements of `collection` invoking `iteratee` for each element.\n * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n * (value, index|key, collection). Iteratee functions may exit iteration early\n * by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\" property\n * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n * may be used for object iteration.\n *\n * @static\n * @memberOf _\n * @alias each\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2]).forEach(function(n) {\n *   console.log(n);\n * }).value();\n * // => logs each value from left to right and returns the array\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {\n *   console.log(n, key);\n * });\n * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\n */\nvar forEach = createForEach(arrayEach, baseEach);\n\nmodule.exports = forEach;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n",
    "var Map = require('lodash.map');\n\nvar colors = {\n\t\n\thexToArray : function( hexColor ) {\n\t\t\n\t\tvar string = colors.hexToString( hexColor );\n\t\t\n\t\treturn [\n\t\t    parseInt(string[1]+string[2], 16),\n\t\t\tparseInt(string[3]+string[4], 16),\n\t\t\tparseInt(string[5]+string[6], 16)\n\t\t];\n\t\t\n\t},\n\t\n\tarrayToHex : function( color ) {\n\t\t\n\t\tvar stringResult = Map( color, function( c ) {\n\t\t\t\n\t\t\tvar s = parseInt( c, 10 ).toString(16);\n\t\t\t\n\t\t\treturn s.length > 1 ? s : \"0\"+s;\n\t\t\t\n\t\t}).join('');\n\t\t\n\t\treturn parseInt( stringResult, 16 );\n\t\t\n\t},\n\t\n\tlightness : function( hexColor, unitI ) {\n\t\n\t\t// oh my dear lord\n\t\t\n\t\tif( typeof hexColor !== \"number\" ) throw new Error(\"hexColor must be in the form of 0x54AFFF\");\n\t\tif( hexColor < 0x000000 || hexColor > 0xffffff ) throw new Error(\"hexColor is out of range\");\n\t\t\n\t\tvar color = colors.hexToArray( hexColor );\n\t\tvar blendValue = 255;\n\t\n\t\tif( unitI < 0 ) {\n\t\t\tunitI *= -1;\n\t\t\tblendValue = 0;\n\t\t}\n\t\t\n\t\tvar result = Map( color, function( c ) {\n\t\t\t\n\t\t\treturn c * ( 1 - unitI ) + blendValue * unitI;\n\t\t\t\n\t\t});\n\t\t\n\t\treturn colors.arrayToHex( result );\n\t\t\n\t},\n\t\n\tmix : function( hexColor1, hexColor2, unitI ) {\n\t\t\n\t\tvar color1 = colors.hexToArray( hexColor1 );\n\t\tvar color2 = colors.hexToArray( hexColor2 );\n\t\t\n\t\tvar result = Map( color1, function( c1, i ) {\n\t\t\t\n\t\t\treturn c1 * (1 - unitI) + color2[i] * unitI;\n\t\t\t\t\t\t\n\t\t});\n\t\t\n\t\treturn colors.arrayToHex( result );\n\t},\n\n\thexToString : function( hexColor ) {\n\t\n\t\tvar string = parseInt(hexColor, 10).toString( 16 );\n\t\n\t\twhile( string.length < 6 ) {\n\t\t\tstring = \"0\" + string;\n\t\t}\n\t\n\t\treturn \"#\" + string;\n\t}\t\n\t\n}\n\nmodule.exports = colors;",
    "\nvar insertCss = require('insert-css');\nvar ClassList = require(\"class-list\");\nvar EventEmitter = require('events').EventEmitter;\nvar colors = require('./colors');\n\nvar Pairs = require('lodash.pairs');\nvar Filter = require('lodash.filter');\nvar SortBy = require('lodash.sortby');\nvar ForEach = require('lodash.foreach');\nvar Template = require('lodash.template');\nvar MapValues = require('lodash.mapvalues');\nvar Reduce = require('lodash.reduce');\nvar IsElement = require('lodash.iselement');\nvar Extend = require('lodash.assign');\n\nvar _menuTemplate = null;\nvar _cssTemplate = null;\nvar _levelTemplate = null;\n\n\nvar sortAndFilterManifests = function( manifests ) {\n\t\n\tvar pairs = Pairs( manifests )\n\t\n\tvar visible = Filter( pairs, function(keypair) {\n\t\treturn keypair[1].visible !== false;\n\t})\n\t\n\tvar sorted = SortBy( visible, function( keypair ) {\n\t\treturn keypair[1].order;\n\t})\n\t\n\treturn sorted;\n};\n\nvar handlers = (function() {\n\t\n\tvar bodyClass = ClassList( document.body );\n\tvar isOpen = false;\n\tvar emitter = null;\n\tvar preventDefault = false;\n\t\n\tvar toggle = function( e ) {\n\t\tif( e ) e.preventDefault();\n\t\tisOpen ? close() : open();\n\t};\n\t\n\tvar close = function() {\n\t\tbodyClass.remove('poem-menu-open');\n\t\temitter.emit('close');\n\t\tisOpen = false;\n\t};\n\t\n\tvar open = function() {\n\t\tbodyClass.add('poem-menu-open');\n\t\temitter.emit('open');\n\t\tisOpen = true;\n\t};\n\t\n\tvar loadLevel = function( e ) {\n\t\temitter.emit('load', {\n\t\t\tslug : this.getAttribute('data-slug')\n\t\t});\n\t\tclose();\n\t};\n\t\n\treturn function( config, currentEmitter, div ) {\n\n\t\temitter = currentEmitter;\n\t\tpreventDefault = config.preventDefault;\n\t\t\n\t\tvar button = div.getElementsByClassName('poem-menu-burger')[0];\n\t\tbutton.addEventListener( 'click', toggle, false );\n\t\t\n\t\tvar levelLinks = div\n\t\t\t.getElementsByClassName('poem-menu-levels')[0]\n\t\t\t.getElementsByTagName('a');\n\t\t\n\t\tForEach( levelLinks, function( el ) {\n\t\t\tel.addEventListener( 'click', loadLevel, false );\n\t\t});\n\t\t\n\t\tdiv\t.getElementsByClassName('poem-menu-blocker')[0]\n\t\t\t.addEventListener( 'click', close, false );\n\t\t\n\t\twindow.addEventListener('keydown', function toggleMenuHandler( e ) {\n\t\t\tif( e.keyCode !== config.toggleKey ) return;\n\t\t\ttoggle(e);\n\t\t});\n\t\t\n\t\treturn {\n\t\t\tclose : close,\n\t\t\topen : open\n\t\t};\n\t};\n\t\n})();\n\nvar loadTemplatesOnce = (function() {\n\t\n\tvar firstRun = true;\n\t\n\treturn function() {\n\t\t\n\t\tif( firstRun ) {\n\t\t\t\n\t\t\tfirstRun = false;\n\t\t\t\n\t\t\t_menuTemplate = Template(\n\t\t\t\tBuffer(\"PGRpdiBjbGFzcz0ncG9lbS1tZW51Jz4KCQoJPGEgY2xhc3M9InBvZW0tbWVudS1idXJnZXIiIGhyZWY9IiNtZW51IiB0aXRsZT0nSGl0IEVTQyBrZXkgdG8gb3Blbi9jbG9zZSc+CgkJPGRpdiBjbGFzcz0icG9lbS1tZW51LWJ1cmdlci1iYXJzIj48L2Rpdj4KCTwvYT4KCQoJPGRpdiBjbGFzcz0ncG9lbS1tZW51LXRvcCc+PC9kaXY+CgkKCTxkaXYgY2xhc3M9J3BvZW0tbWVudS1taWRkbGUnPgoJCTxkaXYgY2xhc3M9J3BvZW0tbWVudS1sZXZlbHMtdG9wJz48L2Rpdj4KCQk8ZGl2IGNsYXNzPSdwb2VtLW1lbnUtbGV2ZWxzJz4KCQkJPCU9IGxldmVscyAlPgoJCTwvZGl2PgoJCTxkaXYgY2xhc3M9J3BvZW0tbWVudS1sZXZlbHMtYm90dG9tJz48L2Rpdj4KCTwvZGl2PgoJCQoJPGRpdiBjbGFzcz0ncG9lbS1tZW51LWJvdHRvbSc+PC9kaXY+CgkKPC9kaXY+CjxkaXYgY2xhc3M9J3BvZW0tbWVudS1ibG9ja2VyJz48L2Rpdj4=\",\"base64\")\n\t\t\t);\n\t\t\t\n\t\t\t_levelTemplate = Template(\n\t\t\t\tBuffer(\"PGEgaHJlZj0nIy88JS0gc2x1ZyAlPicgZGF0YS1zbHVnPSc8JS0gc2x1ZyAlPicgY2xhc3M9J3BvZW0tbWVudS1sZXZlbCc+Cgk8aDIgY2xhc3M9J3BvZW0tbWVudS1sZXZlbC1uYW1lJz48JS0gbWFuaWZlc3QubmFtZSAlPjwvaDE+Cgk8ZGl2IGNsYXNzPSdwb2VtLW1lbnUtbGV2ZWwtZGVzY3JpcHRpb24nPjwlLSBtYW5pZmVzdC5kZXNjcmlwdGlvbiAlPjwvZGl2Pgo8L2E+\",\"base64\")\n\t\t\t);\n\t\t\t\n\t\t\t_cssTemplate = Template(\n\t\t\t\tBuffer(\"LnBvZW0tbWVudSwKLnBvZW0tbWVudSAqLAoucG9lbS1tZW51ICo6YmVmb3JlLAoucG9lbS1tZW51ICo6YWZ0ZXIgewoJLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OyAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KLnBvZW0tbWVudSBhIHsKCWNvbG9yOiA8JT0gcHJpbWFyeSAlPjsKfQoucG9lbS1tZW51IHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMDBweCk7CiAgICAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAwcHgpOwogICAgICAgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTMwMHB4KTsKICAgICAgICAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zMDBweCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAwcHgpOwogICAgdHJhbnNpdGlvbjogNTAwbXM7CiAgICB3aWR0aDogMzAwcHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCA8JT0gbWVudUxpZ2h0ICU+OwogICAgYmFja2dyb3VuZDogPCU9IG1lbnVEYXJrICU+OwogICAgcGFkZGluZzogMWVtOwoJei1pbmRleDoxMDE7Cn0KLnBvZW0tbWVudS1vcGVuIC5wb2VtLW1lbnUgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgIGJveC1zaGFkb3c6IDAgMCAyZW0gcmdiYSgwLCAwLCAwLCAwLjE5KTsKfQoucG9lbS1tZW51LWJsb2NrZXIgewoJaGVpZ2h0OjA7Cgl3aWR0aDoxMDAlOwoJcG9zaXRpb246YWJzb2x1dGU7Cgl0b3A6MDsKCWxlZnQ6MDsKCXotaW5kZXg6MTAwOwoJY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogPCU9IG1lbnUgJT47CglvcGFjaXR5OjA7Cgktd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7CgkgICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7CgkgICAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7CgkgICAgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7CgkgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7Cn0KLnBvZW0tbWVudS1vcGVuIC5wb2VtLW1lbnUtYmxvY2tlciB7CgloZWlnaHQ6MTAwJTsKCW9wYWNpdHk6MC43Owp9Ci5wb2VtLW1lbnUtb3BlbiAucG9lbS1tZW51LWNvbnRhaW5lciB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7CiAgICAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7CiAgICAgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7CiAgICAgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7CiAgICBvcGFjaXR5OiAwLjM7Cn0KLnBvZW0tbWVudS1jb250YWluZXIgewoJLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CgkgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKCSAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwoJICAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CgkgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKCWhlaWdodDogMTAwJTsKCXRyYW5zaXRpb246IHRyYW5zZm9ybSA1MDBtcywgb3BhY2l0eSA1MDBtczsKCXdpZHRoOiAxMDAlOwoJcG9zaXRpb246IGFic29sdXRlOwoJei1pbmRleDowOwp9Ci5wb2VtLW1lbnUtYnVyZ2VyIHsKCXBhZGRpbmc6IDEuNWVtIDAuNWVtOwoJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJcG9zaXRpb246IGFic29sdXRlOwoJdG9wOiAwOwoJcmlnaHQ6IDA7Cgktd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDMuNGVtLCAwLjRlbSk7CgkgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDMuNGVtLCAwLjRlbSk7CgkgICAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDMuNGVtLCAwLjRlbSk7CgkgICAgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlKDMuNGVtLCAwLjRlbSk7CgkgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDMuNGVtLCAwLjRlbSk7Cgktd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDUwMG1zOwoJICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSA1MDBtczsKCSAgICAtbXMtdHJhbnNpdGlvbjogLW1zLXRyYW5zZm9ybSA1MDBtczsKCSAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDUwMG1zOwoJICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gNTAwbXM7Cn0KLnBvZW0tbWVudS1idXJnZXItYmFycyB7CglkaXNwbGF5OmJsb2NrOwoJaGVpZ2h0OjAuM2VtOwoJd2lkdGg6MmVtOwoJYmFja2dyb3VuZDogPCU9IGhhbWJ1cmdlciAlPjsKCXBvc2l0aW9uOnJlbGF0aXZlOwoJY3Vyc29yOiBwb2ludGVyOwoJLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC42NnM7CgkgICAtbW96LXRyYW5zaXRpb246IGFsbCAwLjY2czsKCSAgICAtbXMtdHJhbnNpdGlvbjogYWxsIDAuNjZzOwoJICAgICAtby10cmFuc2l0aW9uOiBhbGwgMC42NnM7CgkgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjY2czsKfQoucG9lbS1tZW51LWJ1cmdlci1iYXJzOmFmdGVyIHsKCWNvbnRlbnQ6Jyc7Cglwb3NpdGlvbjphYnNvbHV0ZTsKCXRvcDowLjhlbTsKCXdpZHRoOjJlbTsKCWhlaWdodDowLjNlbTsKCWJhY2tncm91bmQ6IDwlPSBoYW1idXJnZXIgJT47Cgktd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjY2czsKCSAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNjZzOwoJICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC42NnM7CgkgICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjY2czsKCSAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNjZzOwp9Ci5wb2VtLW1lbnUtYnVyZ2VyLWJhcnM6YmVmb3JlIHsKCWNvbnRlbnQ6Jyc7Cglwb3NpdGlvbjphYnNvbHV0ZTsKCXRvcDotMC44ZW07Cgl3aWR0aDoyZW07CgloZWlnaHQ6MC4zZW07CgliYWNrZ3JvdW5kOjwlPSBoYW1idXJnZXIgJT47Cgktd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjY2czsKCSAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNjZzOwoJICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC42NnM7CgkgICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjY2czsKCSAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuNjZzOwp9CgoucG9lbS1tZW51LW9wZW4gLnBvZW0tbWVudS1idXJnZXItYmFycyB7CgliYWNrZ3JvdW5kOnRyYW5zcGFyZW50Owp9Ci5wb2VtLW1lbnUtb3BlbiAucG9lbS1tZW51LWJ1cmdlci1iYXJzOmJlZm9yZSB7Cgktd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMjI1ZGVnKTsKCSAgIC1tb3otdHJhbnNmb3JtOnJvdGF0ZSgyMjVkZWcpOwoJICAgIC1tcy10cmFuc2Zvcm06cm90YXRlKDIyNWRlZyk7CgkgICAgIC1vLXRyYW5zZm9ybTpyb3RhdGUoMjI1ZGVnKTsKCSAgICAgICAgdHJhbnNmb3JtOnJvdGF0ZSgyMjVkZWcpOwoJdG9wOjA7Cn0KLnBvZW0tbWVudS1vcGVuIC5wb2VtLW1lbnUtYnVyZ2VyLWJhcnM6YWZ0ZXIgewoJLXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC0yMjVkZWcpOwoJICAgLW1vei10cmFuc2Zvcm06cm90YXRlKC0yMjVkZWcpOwoJICAgIC1tcy10cmFuc2Zvcm06cm90YXRlKC0yMjVkZWcpOwoJICAgICAtby10cmFuc2Zvcm06cm90YXRlKC0yMjVkZWcpOwoJICAgICAgICB0cmFuc2Zvcm06cm90YXRlKC0yMjVkZWcpOwoJdG9wOjA7Cn0KLnBvZW0tbWVudS1ib3R0b20gewoJcG9zaXRpb246IGFic29sdXRlOwoJYm90dG9tOiAwOwoJd2lkdGg6IDEwMCU7CglsZWZ0OiAwOwoJcGFkZGluZzogMWVtOwp9Ci5wb2VtLW1lbnUtYm90dG9tLW11dGUgewoJdGV4dC1hbGlnbjpyaWdodDsKfQoucG9lbS1tZW51LWJvdHRvbS1tdXRlIGltZyB7Cgl3aWR0aDo2MHB4Owp9Ci5wb2VtLW1lbnUtYm90dG9tLXJlc2V0IHsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWJvdHRvbToxLjNlbTsKCWxlZnQ6MWVtOwp9Ci5wb2VtLW1lbnUtdG9wIHsKICAgIGNvbG9yOiA8JT0gcHJpbWFyeSAlPjsKICAgIGZvbnQtc2l6ZTogMS43ZW07CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIG1hcmdpbi10b3A6IDAuMWVtOwp9Ci5wb2VtLW1lbnUtbWlkZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogNC40ZW07CiAgICBib3R0b206IDVlbTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcGFkZGluZzogMWVtOwogICAgYmFja2dyb3VuZDogPCU9IG1lbnUgJT47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgPCU9IG1lbnVMaWdodCAlPjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCA8JT0gbWVudURhcmsgJT47Cn0KLnBvZW0tbWVudS1sZXZlbC1uYW1lIHsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtd2VpZ2h0OiAxMDA7CiAgICBmb250LXNpemU6IDEuMWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC4zZW07Cgljb2xvcjogPCU9IHByaW1hcnkgJT4KfQphOmhvdmVyIC5wb2VtLW1lbnUtbGV2ZWwtbmFtZSB7Cgljb2xvcjogPCU9IHByaW1hcnlBY3RpdmUgJT4KfQoucG9lbS1tZW51LWxldmVsLWRlc2NyaXB0aW9uIHsKICAgIGNvbG9yOiA8JT0gdGV4dCAlPjsKICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgZm9udC1zaXplOiAwLjhlbTsKICAgIGZvbnQtd2VpZ2h0OiAxMDA7Cn0KYTpob3ZlciAucG9lbS1tZW51LWxldmVsLWRlc2NyaXB0aW9uIHsKCWNvbG9yOiA8JT0gdGV4dEFjdGl2ZSAlPgp9CgphLnBvZW0tbWVudS1sZXZlbCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGJvcmRlcjogMXB4IHNvbGlkIDwlPSBsZXZlbEFjdGl2ZSAlPjsKICAgIG1hcmdpbjogMS4zZW0gMDsKICAgIHBhZGRpbmc6IDAuNWVtOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAuOWVtIHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiA8JT0gbGV2ZWwgJT47CiAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDIwMG1zOwogICAgICAgLW1vei10cmFuc2l0aW9uOiAtbW96LXRyYW5zZm9ybSAyMDBtczsKICAgICAgICAtbXMtdHJhbnNpdGlvbjogLW1zLXRyYW5zZm9ybSAyMDBtczsKICAgICAgICAgLW8tdHJhbnNpdGlvbjogLW8tdHJhbnNmb3JtIDIwMG1zOwogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjAwbXM7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAtbW96LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgIC1vLXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7Cn0KYS5wb2VtLW1lbnUtbGV2ZWwtdGl0bGVzIHsKCXRleHQtYWxpZ246IGNlbnRlcjsKCXBhZGRpbmc6IDAuNGVtOwoJbWFyZ2luLXRvcDogMC41ZW07Cn0KYS5wb2VtLW1lbnUtbGV2ZWw6aG92ZXIgewogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMDE1KTsKICAgICAgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgxLjAxNSk7CiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMS4wMTUpOwogICAgICAgICAtby10cmFuc2Zvcm06IHNjYWxlKDEuMDE1KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAxNSk7Cn0KQG1lZGlhIChtYXgtd2lkdGg6NDAwcHgpIHsKCS5wb2VtLW1lbnUgewoJICAgIGZvbnQtc2l6ZTogMC44NWVtOwoJfQoJLnBvZW0tbWVudS1vcGVuIC5idXJnZXItd3JhcHBlciB7CgkgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTAuMWVtKTsKCSAgICAgICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4xZW0pOwoJICAgICAgICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0wLjFlbSk7CgkgICAgICAgICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTAuMWVtKTsKCSAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMC4xZW0pOwoJfQoJCgkucG9lbS1tZW51LXRvcCB7CgkgICAgdGV4dC1hbGlnbjogbGVmdDsKCSAgICBmb250LXNpemU6IDIuMWVtOwoJfQoJLnBvZW0tbWVudS1taWRkbGUgewoJICAgIHRvcDogNC44ZW07CgkgICAgYm90dG9tOiAzLjVlbTsKCX0KfQ==\",\"base64\")\n\t\t\t);\n\t\t\t\n\t\t}\n\t};\n\t\n})();\n\nvar runCssTemplates = function( config ) {\n\t\n\tvar direction = config.primaryColor > config.menuColor ? 1 : -1;\n\t\n\tvar css = _cssTemplate(MapValues({\n\t\t\n\t\thamburger\t\t: config.hamburgerColor,\n\t\tprimaryActive\t: config.primaryColor,\n\t\ttext\t\t\t: config.textColor,\n\t\tmenu\t\t\t: config.menuColor,\n\t\t\n\t\ttextActive\t\t: colors.lightness( config.textColor,\t\tdirection * 0.1 ),\n\t\tmenuDark\t\t: colors.lightness( config.menuColor,\t\tdirection * -0.2 ),\n\t\tmenuLight\t\t: colors.lightness( config.menuColor,\t\tdirection * 0.2 ),\n\t\t\n\t\tprimary\t\t\t: colors.mix( config.primaryColor, config.menuColor, 0.2 ),\n\t\tlevel\t\t\t: colors.mix( config.primaryColor, config.menuColor, 0.9 ),\n\t\tlevelActive\t\t: colors.mix( config.primaryColor, config.menuColor, 0.6 )\n\t\t\n\t}, colors.hexToString ));\n\t\n\tinsertCss( css );\n\t\n};\n\nvar runHtmlTemplates = function( manifestKeyValuePairs, config ) {\n\t\t\n\tvar levels = Reduce( manifestKeyValuePairs, function( memo, keyPair ) {\n\t\treturn memo + _levelTemplate({\n\t\t\tslug: keyPair[0],\n\t\t\tmanifest: keyPair[1]\n\t\t})\n\t}, \"\");\n\t\n\tvar html = _menuTemplate({\n\t\tlevels : levels\n\t});\n\t\t\n\t//Attach elements\n\tvar div = document.createElement('div');\n\tdiv.innerHTML = html;\n\t\n\tfunction appendOrSetInnerHtml( el, contents ) {\n\t\tif( IsElement( contents ) ) {\n\t\t\tel.appendChild( contents );\n\t\t} else {\n\t\t\tel.innerHTML = contents;\n\t\t}\n\t}\n\t\n\tappendOrSetInnerHtml( div.getElementsByClassName('poem-menu-top')[0],\t\t\t\tconfig.top );\n\tappendOrSetInnerHtml( div.getElementsByClassName('poem-menu-levels-top')[0],\t\tconfig.beforeLevels );\n\tappendOrSetInnerHtml( div.getElementsByClassName('poem-menu-levels-bottom')[0],\t\tconfig.afterLevels );\n\tappendOrSetInnerHtml( div.getElementsByClassName('poem-menu-bottom')[0],\t\t\tconfig.bottom );\n\t\n\tdocument.body.insertBefore( div, document.body.firstChild );\n\t\n\treturn div;\n};\n\nmodule.exports = function menu( manifests, properties ) {\n\n\tloadTemplatesOnce();\n\n\tvar config = Extend({\n\t\thamburgerColor\t\t\t\t: 0xffffff,\n\t\tprimaryColor\t\t\t\t: 0x54AFFF,\n\t\ttextColor\t\t\t\t\t: 0x9FC6E1,\n\t\tmenuColor\t\t\t\t\t: 0x272E34,\n\t\ttop\t\t\t\t\t\t\t: \"Poem\",\n\t\tbeforeLevels\t\t\t\t: \"\",\n\t\tafterLevels\t\t\t\t\t: \"\",\n\t\tbottom\t\t\t\t\t\t: \"\",\n\t\tpreventDefaultLevelLinks\t: true,\n\t\ttoggleKey\t\t\t\t\t: 27 //escape\n\t}, properties);\n\t\n    var emitter = new EventEmitter();\n\tvar manifestKeyValuePairs = sortAndFilterManifests( manifests )\n\t\n\trunCssTemplates( config );\n\tvar div = runHtmlTemplates( manifestKeyValuePairs, config );\n    var commands = handlers( config, emitter, div );\n\t\n\treturn {\n\t\temitter : emitter,\n\t\tclose : commands.close,\n\t\topen : commands.open\n\t};\n\t\n};",
    "// contains, add, remove, toggle\nvar indexof = require('indexof')\n\nmodule.exports = ClassList\n\nfunction ClassList(elem) {\n    var cl = elem.classList\n\n    if (cl) {\n        return cl\n    }\n\n    var classList = {\n        add: add\n        , remove: remove\n        , contains: contains\n        , toggle: toggle\n        , toString: $toString\n        , length: 0\n        , item: item\n    }\n\n    return classList\n\n    function add(token) {\n        var list = getTokens()\n        if (indexof(list, token) > -1) {\n            return\n        }\n        list.push(token)\n        setTokens(list)\n    }\n\n    function remove(token) {\n        var list = getTokens()\n            , index = indexof(list, token)\n\n        if (index === -1) {\n            return\n        }\n\n        list.splice(index, 1)\n        setTokens(list)\n    }\n\n    function contains(token) {\n        return indexof(getTokens(), token) > -1\n    }\n\n    function toggle(token) {\n        if (contains(token)) {\n            remove(token)\n            return false\n        } else {\n            add(token)\n            return true\n        }\n    }\n\n    function $toString() {\n        return elem.className\n    }\n\n    function item(index) {\n        var tokens = getTokens()\n        return tokens[index] || null\n    }\n\n    function getTokens() {\n        var className = elem.className\n\n        return filter(className.split(\" \"), isTruthy)\n    }\n\n    function setTokens(list) {\n        var length = list.length\n\n        elem.className = list.join(\" \")\n        classList.length = length\n\n        for (var i = 0; i < list.length; i++) {\n            classList[i] = list[i]\n        }\n\n        delete list[length]\n    }\n}\n\nfunction filter (arr, fn) {\n    var ret = []\n    for (var i = 0; i < arr.length; i++) {\n        if (fn(arr[i])) ret.push(arr[i])\n    }\n    return ret\n}\n\nfunction isTruthy(value) {\n    return !!value\n}\n",
    "\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};",
    "var inserted = {};\n\nmodule.exports = function (css, options) {\n    if (inserted[css]) return;\n    inserted[css] = true;\n    \n    var elem = document.createElement('style');\n    elem.setAttribute('type', 'text/css');\n\n    if ('textContent' in elem) {\n      elem.textContent = css;\n    } else {\n      elem.styleSheet.cssText = css;\n    }\n    \n    var head = document.getElementsByTagName('head')[0];\n    if (options && options.prepend) {\n        head.insertBefore(elem, head.childNodes[0]);\n    } else {\n        head.appendChild(elem);\n    }\n};\n",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseAssign = require('lodash._baseassign'),\n    createAssigner = require('lodash._createassigner'),\n    keys = require('lodash.keys');\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n  var index = -1,\n      props = keys(source),\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index],\n        value = object[key],\n        result = customizer(value, source[key], key, object, source);\n\n    if ((result === result ? (result !== value) : (value === value)) ||\n        (value === undefined && !(key in object))) {\n      object[key] = result;\n    }\n  }\n  return object;\n}\n\n/**\n * Assigns own enumerable properties of source object(s) to the destination\n * object. Subsequent sources overwrite property assignments of previous sources.\n * If `customizer` is provided it is invoked to produce the assigned values.\n * The `customizer` is bound to `thisArg` and invoked with five arguments:\n * (objectValue, sourceValue, key, object, source).\n *\n * **Note:** This method mutates `object` and is based on\n * [`Object.assign`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).\n *\n * @static\n * @memberOf _\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });\n * // => { 'user': 'fred', 'age': 40 }\n *\n * // using a customizer callback\n * var defaults = _.partialRight(_.assign, function(value, other) {\n *   return _.isUndefined(value) ? other : value;\n * });\n *\n * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });\n * // => { 'user': 'barney', 'age': 36 }\n */\nvar assign = createAssigner(function(object, source, customizer) {\n  return customizer\n    ? assignWith(object, source, customizer)\n    : baseAssign(object, source);\n});\n\nmodule.exports = assign;\n",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCopy = require('lodash._basecopy'),\n    keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return source == null\n    ? object\n    : baseCopy(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n",
    "/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar bindCallback = require('lodash._bindcallback'),\n    isIterateeCall = require('lodash._isiterateecall'),\n    restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return restParam(function(object, sources) {\n    var index = -1,\n        length = object == null ? 0 : sources.length,\n        customizer = length > 2 ? sources[length - 2] : undefined,\n        guard = length > 2 ? sources[2] : undefined,\n        thisArg = length > 1 ? sources[length - 1] : undefined;\n\n    if (typeof customizer == 'function') {\n      customizer = bindCallback(customizer, thisArg, 5);\n      length -= 2;\n    } else {\n      customizer = typeof thisArg == 'function' ? thisArg : undefined;\n      length -= (customizer ? 1 : 0);\n    }\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.9 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n",
    "/**\n * lodash 3.6.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar arrayFilter = require('lodash._arrayfilter'),\n    baseCallback = require('lodash._basecallback'),\n    baseFilter = require('lodash._basefilter'),\n    isArray = require('lodash.isarray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is bound to `thisArg` and\n * invoked with three arguments: (value, index|key, collection).\n *\n * If a property name is provided for `predicate` the created `_.property`\n * style callback returns the property value of the given element.\n *\n * If a value is also provided for `thisArg` the created `_.matchesProperty`\n * style callback returns `true` for elements that have a matching property\n * value, else `false`.\n *\n * If an object is provided for `predicate` the created `_.matches` style\n * callback returns `true` for elements that have the properties of the given\n * object, else `false`.\n *\n * @static\n * @memberOf _\n * @alias select\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [predicate=_.identity] The function invoked\n *  per iteration.\n * @param {*} [thisArg] The `this` binding of `predicate`.\n * @returns {Array} Returns the new filtered array.\n * @example\n *\n * _.filter([4, 5, 6], function(n) {\n *   return n % 2 == 0;\n * });\n * // => [4, 6]\n *\n * var users = [\n *   { 'user': 'barney', 'age': 36, 'active': true },\n *   { 'user': 'fred',   'age': 40, 'active': false }\n * ];\n *\n * // using the `_.matches` callback shorthand\n * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');\n * // => ['barney']\n *\n * // using the `_.matchesProperty` callback shorthand\n * _.pluck(_.filter(users, 'active', false), 'user');\n * // => ['fred']\n *\n * // using the `_.property` callback shorthand\n * _.pluck(_.filter(users, 'active'), 'user');\n * // => ['barney']\n */\nfunction filter(collection, predicate, thisArg) {\n  var func = isArray(collection) ? arrayFilter : baseFilter;\n  predicate = baseCallback(predicate, thisArg, 3);\n  return func(collection, predicate);\n}\n\nmodule.exports = filter;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `_.filter` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array.length,\n      resIndex = -1,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[++resIndex] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n",
    "/**\n * lodash 3.3.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseIsEqual = require('lodash._baseisequal'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray'),\n    pairs = require('lodash.pairs');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\n/**\n * The base implementation of `_.callback` which supports specifying the\n * number of arguments to provide to `func`.\n *\n * @private\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction baseCallback(func, thisArg, argCount) {\n  var type = typeof func;\n  if (type == 'function') {\n    return thisArg === undefined\n      ? func\n      : bindCallback(func, thisArg, argCount);\n  }\n  if (func == null) {\n    return identity;\n  }\n  if (type == 'object') {\n    return baseMatches(func);\n  }\n  return thisArg === undefined\n    ? property(func)\n    : baseMatchesProperty(func, thisArg);\n}\n\n/**\n * The base implementation of `get` without support for string paths\n * and default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path of the property to get.\n * @param {string} [pathKey] The key representation of path.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path, pathKey) {\n  if (object == null) {\n    return;\n  }\n  if (pathKey !== undefined && pathKey in toObject(object)) {\n    path = [pathKey];\n  }\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[path[index++]];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isMatch` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} matchData The propery names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = toObject(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n      if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.matches` which does not clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    var key = matchData[0][0],\n        value = matchData[0][1];\n\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      return object[key] === value && (value !== undefined || (key in toObject(object)));\n    };\n  }\n  return function(object) {\n    return baseIsMatch(object, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to compare.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  var isArr = isArray(path),\n      isCommon = isKey(path) && isStrictComparable(srcValue),\n      pathKey = (path + '');\n\n  path = toPath(path);\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    var key = pathKey;\n    object = toObject(object);\n    if ((isArr || !isCommon) && !(key in object)) {\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      if (object == null) {\n        return false;\n      }\n      key = last(path);\n      object = toObject(object);\n    }\n    return object[key] === srcValue\n      ? (srcValue !== undefined || (key in object))\n      : baseIsEqual(srcValue, object[key], undefined, true);\n  };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction basePropertyDeep(path) {\n  var pathKey = (path + '');\n  path = toPath(path);\n  return function(object) {\n    return baseGet(object, path, pathKey);\n  };\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  start = start == null ? 0 : (+start || 0);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : (+end || 0);\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Gets the propery names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = pairs(object),\n      length = result.length;\n\n  while (length--) {\n    result[length][2] = isStrictComparable(result[length][1]);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  var type = typeof value;\n  if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n    return true;\n  }\n  if (isArray(value)) {\n    return false;\n  }\n  var result = !reIsDeepProp.test(value);\n  return result || (object != null && value in toObject(object));\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Converts `value` to property path array if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Array} Returns the property path array.\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  var result = [];\n  baseToString(value).replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array ? array.length : 0;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the property value at `path` on a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': { 'c': 2 } } },\n *   { 'a': { 'b': { 'c': 1 } } }\n * ];\n *\n * _.map(objects, _.property('a.b.c'));\n * // => [2, 1]\n *\n * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n}\n\nmodule.exports = baseCallback;\n",
    "/**\n * lodash 3.0.7 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArray = require('lodash.isarray'),\n    isTypedArray = require('lodash.istypedarray'),\n    keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * A specialized version of `_.some` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.isEqual` without support for `this` binding\n * `customizer` functions.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = objToString.call(object);\n    if (objTag == argsTag) {\n      objTag = objectTag;\n    } else if (objTag != objectTag) {\n      objIsArr = isTypedArray(object);\n    }\n  }\n  if (!othIsArr) {\n    othTag = objToString.call(other);\n    if (othTag == argsTag) {\n      othTag = objectTag;\n    } else if (othTag != objectTag) {\n      othIsArr = isTypedArray(other);\n    }\n  }\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !(objIsArr || objIsObj)) {\n    return equalByTag(object, other, objTag);\n  }\n  if (!isLoose) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  // For more information on detecting circular references see https://es5.github.io/#JO.\n  stackA || (stackA = []);\n  stackB || (stackB = []);\n\n  var length = stackA.length;\n  while (length--) {\n    if (stackA[length] == object) {\n      return stackB[length] == other;\n    }\n  }\n  // Add `object` and `other` to the stack of traversed objects.\n  stackA.push(object);\n  stackB.push(other);\n\n  var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n  stackA.pop();\n  stackB.pop();\n\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing arrays.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var index = -1,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n    return false;\n  }\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index],\n        result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n    if (result !== undefined) {\n      if (result) {\n        continue;\n      }\n      return false;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (isLoose) {\n      if (!arraySome(other, function(othValue) {\n            return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n          })) {\n        return false;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} value The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag) {\n  switch (tag) {\n    case boolTag:\n    case dateTag:\n      // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n      return +object == +other;\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case numberTag:\n      // Treat `NaN` vs. `NaN` as equal.\n      return (object != +object)\n        ? other != +other\n        : object == +other;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings primitives and string\n      // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n      return object == (other + '');\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isLoose) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  var skipCtor = isLoose;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key],\n        result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n      return false;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (!skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseIsEqual;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseEach = require('lodash._baseeach');\n\n/**\n * The base implementation of `_.filter` without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n  var result = [];\n  baseEach(collection, function(value, index, collection) {\n    if (predicate(value, index, collection)) {\n      result.push(value);\n    }\n  });\n  return result;\n}\n\nmodule.exports = baseFilter;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.3 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar arrayEach = require('lodash._arrayeach'),\n    baseEach = require('lodash._baseeach'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray');\n\n/**\n * Creates a function for `_.forEach` or `_.forEachRight`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over an array.\n * @param {Function} eachFunc The function to iterate over a collection.\n * @returns {Function} Returns the new each function.\n */\nfunction createForEach(arrayFunc, eachFunc) {\n  return function(collection, iteratee, thisArg) {\n    return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n      ? arrayFunc(collection, iteratee)\n      : eachFunc(collection, bindCallback(iteratee, thisArg, 3));\n  };\n}\n\n/**\n * Iterates over elements of `collection` invoking `iteratee` for each element.\n * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n * (value, index|key, collection). Iteratee functions may exit iteration early\n * by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\" property\n * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`\n * may be used for object iteration.\n *\n * @static\n * @memberOf _\n * @alias each\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {Array|Object|string} Returns `collection`.\n * @example\n *\n * _([1, 2]).forEach(function(n) {\n *   console.log(n);\n * }).value();\n * // => logs each value from left to right and returns the array\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {\n *   console.log(n, key);\n * });\n * // => logs each value-key pair and returns the object (iteration order is not guaranteed)\n */\nvar forEach = createForEach(arrayEach, baseEach);\n\nmodule.exports = forEach;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.0.8 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isPlainObject = require('lodash.isplainobject');\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a DOM element.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\nfunction isElement(value) {\n  return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);\n}\n\nmodule.exports = isElement;\n",
    "/**\n * lodash 3.2.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseFor = require('lodash._basefor'),\n    isArguments = require('lodash.isarguments'),\n    keysIn = require('lodash.keysin');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n  return baseFor(object, iteratee, keysIn);\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  var Ctor;\n\n  // Exit early for non `Object` objects.\n  if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||\n      (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n    return false;\n  }\n  // IE < 9 iterates inherited properties before own properties. If the first\n  // iterated property is an object's own property then there are no inherited\n  // enumerable properties.\n  var result;\n  // In most environments an object's own properties are iterated before\n  // its inherited properties. If the last iterated property is an object's\n  // own property then there are no inherited enumerable properties.\n  baseForIn(value, function(subValue, key) {\n    result = key;\n  });\n  return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseFor;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.8 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keysIn;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar arrayMap = require('lodash._arraymap'),\n    baseCallback = require('lodash._basecallback'),\n    baseEach = require('lodash._baseeach'),\n    isArray = require('lodash.isarray');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.map` without support for callback shorthands\n * and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Creates an array of values by running each element in `collection` through\n * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three\n * arguments: (value, index|key, collection).\n *\n * If a property name is provided for `iteratee` the created `_.property`\n * style callback returns the property value of the given element.\n *\n * If a value is also provided for `thisArg` the created `_.matchesProperty`\n * style callback returns `true` for elements that have a matching property\n * value, else `false`.\n *\n * If an object is provided for `iteratee` the created `_.matches` style\n * callback returns `true` for elements that have the properties of the given\n * object, else `false`.\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,\n * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,\n * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,\n * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,\n * `sum`, `uniq`, and `words`\n *\n * @static\n * @memberOf _\n * @alias collect\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n *  per iteration.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function timesThree(n) {\n *   return n * 3;\n * }\n *\n * _.map([1, 2], timesThree);\n * // => [3, 6]\n *\n * _.map({ 'a': 1, 'b': 2 }, timesThree);\n * // => [3, 6] (iteration order is not guaranteed)\n *\n * var users = [\n *   { 'user': 'barney' },\n *   { 'user': 'fred' }\n * ];\n *\n * // using the `_.property` callback shorthand\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\nfunction map(collection, iteratee, thisArg) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  iteratee = baseCallback(iteratee, thisArg, 3);\n  return func(collection, iteratee);\n}\n\nmodule.exports = map;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `_.map` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n",
    "/**\n * lodash 3.3.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseIsEqual = require('lodash._baseisequal'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray'),\n    pairs = require('lodash.pairs');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\n/**\n * The base implementation of `_.callback` which supports specifying the\n * number of arguments to provide to `func`.\n *\n * @private\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction baseCallback(func, thisArg, argCount) {\n  var type = typeof func;\n  if (type == 'function') {\n    return thisArg === undefined\n      ? func\n      : bindCallback(func, thisArg, argCount);\n  }\n  if (func == null) {\n    return identity;\n  }\n  if (type == 'object') {\n    return baseMatches(func);\n  }\n  return thisArg === undefined\n    ? property(func)\n    : baseMatchesProperty(func, thisArg);\n}\n\n/**\n * The base implementation of `get` without support for string paths\n * and default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path of the property to get.\n * @param {string} [pathKey] The key representation of path.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path, pathKey) {\n  if (object == null) {\n    return;\n  }\n  if (pathKey !== undefined && pathKey in toObject(object)) {\n    path = [pathKey];\n  }\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[path[index++]];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isMatch` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} matchData The propery names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = toObject(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n      if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.matches` which does not clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    var key = matchData[0][0],\n        value = matchData[0][1];\n\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      return object[key] === value && (value !== undefined || (key in toObject(object)));\n    };\n  }\n  return function(object) {\n    return baseIsMatch(object, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to compare.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  var isArr = isArray(path),\n      isCommon = isKey(path) && isStrictComparable(srcValue),\n      pathKey = (path + '');\n\n  path = toPath(path);\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    var key = pathKey;\n    object = toObject(object);\n    if ((isArr || !isCommon) && !(key in object)) {\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      if (object == null) {\n        return false;\n      }\n      key = last(path);\n      object = toObject(object);\n    }\n    return object[key] === srcValue\n      ? (srcValue !== undefined || (key in object))\n      : baseIsEqual(srcValue, object[key], undefined, true);\n  };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction basePropertyDeep(path) {\n  var pathKey = (path + '');\n  path = toPath(path);\n  return function(object) {\n    return baseGet(object, path, pathKey);\n  };\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  start = start == null ? 0 : (+start || 0);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : (+end || 0);\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Gets the propery names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = pairs(object),\n      length = result.length;\n\n  while (length--) {\n    result[length][2] = isStrictComparable(result[length][1]);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  var type = typeof value;\n  if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n    return true;\n  }\n  if (isArray(value)) {\n    return false;\n  }\n  var result = !reIsDeepProp.test(value);\n  return result || (object != null && value in toObject(object));\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Converts `value` to property path array if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Array} Returns the property path array.\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  var result = [];\n  baseToString(value).replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array ? array.length : 0;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the property value at `path` on a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': { 'c': 2 } } },\n *   { 'a': { 'b': { 'c': 1 } } }\n * ];\n *\n * _.map(objects, _.property('a.b.c'));\n * // => [2, 1]\n *\n * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n}\n\nmodule.exports = baseCallback;\n",
    "/**\n * lodash 3.0.7 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArray = require('lodash.isarray'),\n    isTypedArray = require('lodash.istypedarray'),\n    keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * A specialized version of `_.some` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.isEqual` without support for `this` binding\n * `customizer` functions.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = objToString.call(object);\n    if (objTag == argsTag) {\n      objTag = objectTag;\n    } else if (objTag != objectTag) {\n      objIsArr = isTypedArray(object);\n    }\n  }\n  if (!othIsArr) {\n    othTag = objToString.call(other);\n    if (othTag == argsTag) {\n      othTag = objectTag;\n    } else if (othTag != objectTag) {\n      othIsArr = isTypedArray(other);\n    }\n  }\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !(objIsArr || objIsObj)) {\n    return equalByTag(object, other, objTag);\n  }\n  if (!isLoose) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  // For more information on detecting circular references see https://es5.github.io/#JO.\n  stackA || (stackA = []);\n  stackB || (stackB = []);\n\n  var length = stackA.length;\n  while (length--) {\n    if (stackA[length] == object) {\n      return stackB[length] == other;\n    }\n  }\n  // Add `object` and `other` to the stack of traversed objects.\n  stackA.push(object);\n  stackB.push(other);\n\n  var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n  stackA.pop();\n  stackB.pop();\n\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing arrays.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var index = -1,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n    return false;\n  }\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index],\n        result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n    if (result !== undefined) {\n      if (result) {\n        continue;\n      }\n      return false;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (isLoose) {\n      if (!arraySome(other, function(othValue) {\n            return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n          })) {\n        return false;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} value The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag) {\n  switch (tag) {\n    case boolTag:\n    case dateTag:\n      // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n      return +object == +other;\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case numberTag:\n      // Treat `NaN` vs. `NaN` as equal.\n      return (object != +object)\n        ? other != +other\n        : object == +other;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings primitives and string\n      // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n      return object == (other + '');\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isLoose) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  var skipCtor = isLoose;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key],\n        result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n      return false;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (!skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseIsEqual;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCallback = require('lodash._basecallback'),\n    baseFor = require('lodash._basefor'),\n    keys = require('lodash.keys');\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * Creates a function for `_.mapKeys` or `_.mapValues`.\n *\n * @private\n * @param {boolean} [isMapKeys] Specify mapping keys instead of values.\n * @returns {Function} Returns the new map function.\n */\nfunction createObjectMapper(isMapKeys) {\n  return function(object, iteratee, thisArg) {\n    var result = {};\n    iteratee = baseCallback(iteratee, thisArg, 3);\n\n    baseForOwn(object, function(value, key, object) {\n      var mapped = iteratee(value, key, object);\n      key = isMapKeys ? mapped : key;\n      value = isMapKeys ? value : mapped;\n      result[key] = value;\n    });\n    return result;\n  };\n}\n\n/**\n * Creates an object with the same keys as `object` and values generated by\n * running each own enumerable property of `object` through `iteratee`. The\n * iteratee function is bound to `thisArg` and invoked with three arguments:\n * (value, key, object).\n *\n * If a property name is provided for `iteratee` the created `_.property`\n * style callback returns the property value of the given element.\n *\n * If a value is also provided for `thisArg` the created `_.matchesProperty`\n * style callback returns `true` for elements that have a matching property\n * value, else `false`.\n *\n * If an object is provided for `iteratee` the created `_.matches` style\n * callback returns `true` for elements that have the properties of the given\n * object, else `false`.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n *  per iteration.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {Object} Returns the new mapped object.\n * @example\n *\n * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {\n *   return n * 3;\n * });\n * // => { 'a': 3, 'b': 6 }\n *\n * var users = {\n *   'fred':    { 'user': 'fred',    'age': 40 },\n *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * // using the `_.property` callback shorthand\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nvar mapValues = createObjectMapper();\n\nmodule.exports = mapValues;\n",
    "/**\n * lodash 3.3.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseIsEqual = require('lodash._baseisequal'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray'),\n    pairs = require('lodash.pairs');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\n/**\n * The base implementation of `_.callback` which supports specifying the\n * number of arguments to provide to `func`.\n *\n * @private\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction baseCallback(func, thisArg, argCount) {\n  var type = typeof func;\n  if (type == 'function') {\n    return thisArg === undefined\n      ? func\n      : bindCallback(func, thisArg, argCount);\n  }\n  if (func == null) {\n    return identity;\n  }\n  if (type == 'object') {\n    return baseMatches(func);\n  }\n  return thisArg === undefined\n    ? property(func)\n    : baseMatchesProperty(func, thisArg);\n}\n\n/**\n * The base implementation of `get` without support for string paths\n * and default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path of the property to get.\n * @param {string} [pathKey] The key representation of path.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path, pathKey) {\n  if (object == null) {\n    return;\n  }\n  if (pathKey !== undefined && pathKey in toObject(object)) {\n    path = [pathKey];\n  }\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[path[index++]];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isMatch` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} matchData The propery names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = toObject(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n      if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.matches` which does not clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    var key = matchData[0][0],\n        value = matchData[0][1];\n\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      return object[key] === value && (value !== undefined || (key in toObject(object)));\n    };\n  }\n  return function(object) {\n    return baseIsMatch(object, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to compare.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  var isArr = isArray(path),\n      isCommon = isKey(path) && isStrictComparable(srcValue),\n      pathKey = (path + '');\n\n  path = toPath(path);\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    var key = pathKey;\n    object = toObject(object);\n    if ((isArr || !isCommon) && !(key in object)) {\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      if (object == null) {\n        return false;\n      }\n      key = last(path);\n      object = toObject(object);\n    }\n    return object[key] === srcValue\n      ? (srcValue !== undefined || (key in object))\n      : baseIsEqual(srcValue, object[key], undefined, true);\n  };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction basePropertyDeep(path) {\n  var pathKey = (path + '');\n  path = toPath(path);\n  return function(object) {\n    return baseGet(object, path, pathKey);\n  };\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  start = start == null ? 0 : (+start || 0);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : (+end || 0);\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Gets the propery names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = pairs(object),\n      length = result.length;\n\n  while (length--) {\n    result[length][2] = isStrictComparable(result[length][1]);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  var type = typeof value;\n  if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n    return true;\n  }\n  if (isArray(value)) {\n    return false;\n  }\n  var result = !reIsDeepProp.test(value);\n  return result || (object != null && value in toObject(object));\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Converts `value` to property path array if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Array} Returns the property path array.\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  var result = [];\n  baseToString(value).replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array ? array.length : 0;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the property value at `path` on a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': { 'c': 2 } } },\n *   { 'a': { 'b': { 'c': 1 } } }\n * ];\n *\n * _.map(objects, _.property('a.b.c'));\n * // => [2, 1]\n *\n * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n}\n\nmodule.exports = baseCallback;\n",
    "/**\n * lodash 3.0.7 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArray = require('lodash.isarray'),\n    isTypedArray = require('lodash.istypedarray'),\n    keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * A specialized version of `_.some` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.isEqual` without support for `this` binding\n * `customizer` functions.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = objToString.call(object);\n    if (objTag == argsTag) {\n      objTag = objectTag;\n    } else if (objTag != objectTag) {\n      objIsArr = isTypedArray(object);\n    }\n  }\n  if (!othIsArr) {\n    othTag = objToString.call(other);\n    if (othTag == argsTag) {\n      othTag = objectTag;\n    } else if (othTag != objectTag) {\n      othIsArr = isTypedArray(other);\n    }\n  }\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !(objIsArr || objIsObj)) {\n    return equalByTag(object, other, objTag);\n  }\n  if (!isLoose) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  // For more information on detecting circular references see https://es5.github.io/#JO.\n  stackA || (stackA = []);\n  stackB || (stackB = []);\n\n  var length = stackA.length;\n  while (length--) {\n    if (stackA[length] == object) {\n      return stackB[length] == other;\n    }\n  }\n  // Add `object` and `other` to the stack of traversed objects.\n  stackA.push(object);\n  stackB.push(other);\n\n  var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n  stackA.pop();\n  stackB.pop();\n\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing arrays.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var index = -1,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n    return false;\n  }\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index],\n        result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n    if (result !== undefined) {\n      if (result) {\n        continue;\n      }\n      return false;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (isLoose) {\n      if (!arraySome(other, function(othValue) {\n            return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n          })) {\n        return false;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} value The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag) {\n  switch (tag) {\n    case boolTag:\n    case dateTag:\n      // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n      return +object == +other;\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case numberTag:\n      // Treat `NaN` vs. `NaN` as equal.\n      return (object != +object)\n        ? other != +other\n        : object == +other;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings primitives and string\n      // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n      return object == (other + '');\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isLoose) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  var skipCtor = isLoose;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key],\n        result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n      return false;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (!skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseIsEqual;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseFor;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates a two dimensional array of the key-value pairs for `object`,\n * e.g. `[[key1, value1], [key2, value2]]`.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the new array of key-value pairs.\n * @example\n *\n * _.pairs({ 'barney': 36, 'fred': 40 });\n * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)\n */\nfunction pairs(object) {\n  object = toObject(object);\n\n  var index = -1,\n      props = keys(object),\n      length = props.length,\n      result = Array(length);\n\n  while (++index < length) {\n    var key = props[index];\n    result[index] = [key, object[key]];\n  }\n  return result;\n}\n\nmodule.exports = pairs;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCallback = require('lodash._basecallback'),\n    baseEach = require('lodash._baseeach'),\n    baseReduce = require('lodash._basereduce'),\n    isArray = require('lodash.isarray');\n\n/**\n * A specialized version of `_.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initFromArray] Specify using the first element of `array`\n *  as the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initFromArray) {\n  var index = -1,\n      length = array.length;\n\n  if (initFromArray && length) {\n    accumulator = array[++index];\n  }\n  while (++index < length) {\n    accumulator = iteratee(accumulator, array[index], index, array);\n  }\n  return accumulator;\n}\n\n/**\n * Creates a function for `_.reduce` or `_.reduceRight`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over an array.\n * @param {Function} eachFunc The function to iterate over a collection.\n * @returns {Function} Returns the new each function.\n */\nfunction createReduce(arrayFunc, eachFunc) {\n  return function(collection, iteratee, accumulator, thisArg) {\n    var initFromArray = arguments.length < 3;\n    return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))\n      ? arrayFunc(collection, iteratee, accumulator, initFromArray)\n      : baseReduce(collection, baseCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);\n  };\n}\n\n/**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` through `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not provided the first element of `collection` is used as the initial\n * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `includes`, `merge`, `sortByAll`, and `sortByOrder`\n *\n * @static\n * @memberOf _\n * @alias foldl, inject\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.reduce([1, 2], function(total, n) {\n *   return total + n;\n * });\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {\n *   result[key] = n * 3;\n *   return result;\n * }, {});\n * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)\n */\nvar reduce = createReduce(arrayReduce, baseEach);\n\nmodule.exports = reduce;\n",
    "/**\n * lodash 3.3.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseIsEqual = require('lodash._baseisequal'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray'),\n    pairs = require('lodash.pairs');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\n/**\n * The base implementation of `_.callback` which supports specifying the\n * number of arguments to provide to `func`.\n *\n * @private\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction baseCallback(func, thisArg, argCount) {\n  var type = typeof func;\n  if (type == 'function') {\n    return thisArg === undefined\n      ? func\n      : bindCallback(func, thisArg, argCount);\n  }\n  if (func == null) {\n    return identity;\n  }\n  if (type == 'object') {\n    return baseMatches(func);\n  }\n  return thisArg === undefined\n    ? property(func)\n    : baseMatchesProperty(func, thisArg);\n}\n\n/**\n * The base implementation of `get` without support for string paths\n * and default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path of the property to get.\n * @param {string} [pathKey] The key representation of path.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path, pathKey) {\n  if (object == null) {\n    return;\n  }\n  if (pathKey !== undefined && pathKey in toObject(object)) {\n    path = [pathKey];\n  }\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[path[index++]];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isMatch` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} matchData The propery names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = toObject(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n      if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.matches` which does not clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    var key = matchData[0][0],\n        value = matchData[0][1];\n\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      return object[key] === value && (value !== undefined || (key in toObject(object)));\n    };\n  }\n  return function(object) {\n    return baseIsMatch(object, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to compare.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  var isArr = isArray(path),\n      isCommon = isKey(path) && isStrictComparable(srcValue),\n      pathKey = (path + '');\n\n  path = toPath(path);\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    var key = pathKey;\n    object = toObject(object);\n    if ((isArr || !isCommon) && !(key in object)) {\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      if (object == null) {\n        return false;\n      }\n      key = last(path);\n      object = toObject(object);\n    }\n    return object[key] === srcValue\n      ? (srcValue !== undefined || (key in object))\n      : baseIsEqual(srcValue, object[key], undefined, true);\n  };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction basePropertyDeep(path) {\n  var pathKey = (path + '');\n  path = toPath(path);\n  return function(object) {\n    return baseGet(object, path, pathKey);\n  };\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  start = start == null ? 0 : (+start || 0);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : (+end || 0);\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Gets the propery names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = pairs(object),\n      length = result.length;\n\n  while (length--) {\n    result[length][2] = isStrictComparable(result[length][1]);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  var type = typeof value;\n  if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n    return true;\n  }\n  if (isArray(value)) {\n    return false;\n  }\n  var result = !reIsDeepProp.test(value);\n  return result || (object != null && value in toObject(object));\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Converts `value` to property path array if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Array} Returns the property path array.\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  var result = [];\n  baseToString(value).replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array ? array.length : 0;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the property value at `path` on a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': { 'c': 2 } } },\n *   { 'a': { 'b': { 'c': 1 } } }\n * ];\n *\n * _.map(objects, _.property('a.b.c'));\n * // => [2, 1]\n *\n * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n}\n\nmodule.exports = baseCallback;\n",
    "/**\n * lodash 3.0.7 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArray = require('lodash.isarray'),\n    isTypedArray = require('lodash.istypedarray'),\n    keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * A specialized version of `_.some` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.isEqual` without support for `this` binding\n * `customizer` functions.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = objToString.call(object);\n    if (objTag == argsTag) {\n      objTag = objectTag;\n    } else if (objTag != objectTag) {\n      objIsArr = isTypedArray(object);\n    }\n  }\n  if (!othIsArr) {\n    othTag = objToString.call(other);\n    if (othTag == argsTag) {\n      othTag = objectTag;\n    } else if (othTag != objectTag) {\n      othIsArr = isTypedArray(other);\n    }\n  }\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !(objIsArr || objIsObj)) {\n    return equalByTag(object, other, objTag);\n  }\n  if (!isLoose) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  // For more information on detecting circular references see https://es5.github.io/#JO.\n  stackA || (stackA = []);\n  stackB || (stackB = []);\n\n  var length = stackA.length;\n  while (length--) {\n    if (stackA[length] == object) {\n      return stackB[length] == other;\n    }\n  }\n  // Add `object` and `other` to the stack of traversed objects.\n  stackA.push(object);\n  stackB.push(other);\n\n  var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n  stackA.pop();\n  stackB.pop();\n\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing arrays.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var index = -1,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n    return false;\n  }\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index],\n        result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n    if (result !== undefined) {\n      if (result) {\n        continue;\n      }\n      return false;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (isLoose) {\n      if (!arraySome(other, function(othValue) {\n            return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n          })) {\n        return false;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} value The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag) {\n  switch (tag) {\n    case boolTag:\n    case dateTag:\n      // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n      return +object == +other;\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case numberTag:\n      // Treat `NaN` vs. `NaN` as equal.\n      return (object != +object)\n        ? other != +other\n        : object == +other;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings primitives and string\n      // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n      return object == (other + '');\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isLoose) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  var skipCtor = isLoose;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key],\n        result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n      return false;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (!skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseIsEqual;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `_.reduce` and `_.reduceRight` without support\n * for callback shorthands or `this` binding, which iterates over `collection`\n * using the provided `eachFunc`.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initFromCollection Specify using the first or last element\n *  of `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\nfunction baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {\n  eachFunc(collection, function(value, index, collection) {\n    accumulator = initFromCollection\n      ? (initFromCollection = false, value)\n      : iteratee(accumulator, value, index, collection);\n  });\n  return accumulator;\n}\n\nmodule.exports = baseReduce;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.1.5 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCallback = require('lodash._basecallback'),\n    baseCompareAscending = require('lodash._basecompareascending'),\n    baseEach = require('lodash._baseeach'),\n    baseSortBy = require('lodash._basesortby'),\n    isIterateeCall = require('lodash._isiterateecall');\n\n/**\n * Used by `_.sortBy` to compare transformed elements of a collection and stable\n * sort them in ascending order.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareAscending(object, other) {\n  return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);\n}\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.map` without support for callback shorthands\n * and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection through `iteratee`. This method performs\n * a stable sort, that is, it preserves the original sort order of equal elements.\n * The `iteratee` is bound to `thisArg` and invoked with three arguments:\n * (value, index|key, collection).\n *\n * If a property name is provided for `iteratee` the created `_.property`\n * style callback returns the property value of the given element.\n *\n * If a value is also provided for `thisArg` the created `_.matchesProperty`\n * style callback returns `true` for elements that have a matching property\n * value, else `false`.\n *\n * If an object is provided for `iteratee` the created `_.matches` style\n * callback returns `true` for elements that have the properties of the given\n * object, else `false`.\n *\n * @static\n * @memberOf _\n * @category Collection\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function|Object|string} [iteratee=_.identity] The function invoked\n *  per iteration.\n * @param {*} [thisArg] The `this` binding of `iteratee`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * _.sortBy([1, 2, 3], function(n) {\n *   return Math.sin(n);\n * });\n * // => [3, 1, 2]\n *\n * _.sortBy([1, 2, 3], function(n) {\n *   return this.sin(n);\n * }, Math);\n * // => [3, 1, 2]\n *\n * var users = [\n *   { 'user': 'fred' },\n *   { 'user': 'pebbles' },\n *   { 'user': 'barney' }\n * ];\n *\n * // using the `_.property` callback shorthand\n * _.pluck(_.sortBy(users, 'user'), 'user');\n * // => ['barney', 'fred', 'pebbles']\n */\nfunction sortBy(collection, iteratee, thisArg) {\n  if (collection == null) {\n    return [];\n  }\n  if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {\n    iteratee = undefined;\n  }\n  var index = -1;\n  iteratee = baseCallback(iteratee, thisArg, 3);\n\n  var result = baseMap(collection, function(value, key, collection) {\n    return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };\n  });\n  return baseSortBy(result, compareAscending);\n}\n\nmodule.exports = sortBy;\n",
    "/**\n * lodash 3.3.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseIsEqual = require('lodash._baseisequal'),\n    bindCallback = require('lodash._bindcallback'),\n    isArray = require('lodash.isarray'),\n    pairs = require('lodash.pairs');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\n/**\n * The base implementation of `_.callback` which supports specifying the\n * number of arguments to provide to `func`.\n *\n * @private\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction baseCallback(func, thisArg, argCount) {\n  var type = typeof func;\n  if (type == 'function') {\n    return thisArg === undefined\n      ? func\n      : bindCallback(func, thisArg, argCount);\n  }\n  if (func == null) {\n    return identity;\n  }\n  if (type == 'object') {\n    return baseMatches(func);\n  }\n  return thisArg === undefined\n    ? property(func)\n    : baseMatchesProperty(func, thisArg);\n}\n\n/**\n * The base implementation of `get` without support for string paths\n * and default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path of the property to get.\n * @param {string} [pathKey] The key representation of path.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path, pathKey) {\n  if (object == null) {\n    return;\n  }\n  if (pathKey !== undefined && pathKey in toObject(object)) {\n    path = [pathKey];\n  }\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[path[index++]];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isMatch` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} matchData The propery names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = toObject(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var result = customizer ? customizer(objValue, srcValue, key) : undefined;\n      if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.matches` which does not clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    var key = matchData[0][0],\n        value = matchData[0][1];\n\n    return function(object) {\n      if (object == null) {\n        return false;\n      }\n      return object[key] === value && (value !== undefined || (key in toObject(object)));\n    };\n  }\n  return function(object) {\n    return baseIsMatch(object, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which does not clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to compare.\n * @returns {Function} Returns the new function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  var isArr = isArray(path),\n      isCommon = isKey(path) && isStrictComparable(srcValue),\n      pathKey = (path + '');\n\n  path = toPath(path);\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    var key = pathKey;\n    object = toObject(object);\n    if ((isArr || !isCommon) && !(key in object)) {\n      object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));\n      if (object == null) {\n        return false;\n      }\n      key = last(path);\n      object = toObject(object);\n    }\n    return object[key] === srcValue\n      ? (srcValue !== undefined || (key in object))\n      : baseIsEqual(srcValue, object[key], undefined, true);\n  };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction basePropertyDeep(path) {\n  var pathKey = (path + '');\n  path = toPath(path);\n  return function(object) {\n    return baseGet(object, path, pathKey);\n  };\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  start = start == null ? 0 : (+start || 0);\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = (end === undefined || end > length) ? length : (+end || 0);\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Gets the propery names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = pairs(object),\n      length = result.length;\n\n  while (length--) {\n    result[length][2] = isStrictComparable(result[length][1]);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  var type = typeof value;\n  if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {\n    return true;\n  }\n  if (isArray(value)) {\n    return false;\n  }\n  var result = !reIsDeepProp.test(value);\n  return result || (object != null && value in toObject(object));\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Converts `value` to property path array if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Array} Returns the property path array.\n */\nfunction toPath(value) {\n  if (isArray(value)) {\n    return value;\n  }\n  var result = [];\n  baseToString(value).replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n}\n\n/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array ? array.length : 0;\n  return length ? array[length - 1] : undefined;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the property value at `path` on a\n * given object.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': { 'c': 2 } } },\n *   { 'a': { 'b': { 'c': 1 } } }\n * ];\n *\n * _.map(objects, _.property('a.b.c'));\n * // => [2, 1]\n *\n * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(path) : basePropertyDeep(path);\n}\n\nmodule.exports = baseCallback;\n",
    "/**\n * lodash 3.0.7 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar isArray = require('lodash.isarray'),\n    isTypedArray = require('lodash.istypedarray'),\n    keys = require('lodash.keys');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    stringTag = '[object String]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * A specialized version of `_.some` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.isEqual` without support for `this` binding\n * `customizer` functions.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing objects.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA=[]] Tracks traversed `value` objects.\n * @param {Array} [stackB=[]] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = objToString.call(object);\n    if (objTag == argsTag) {\n      objTag = objectTag;\n    } else if (objTag != objectTag) {\n      objIsArr = isTypedArray(object);\n    }\n  }\n  if (!othIsArr) {\n    othTag = objToString.call(other);\n    if (othTag == argsTag) {\n      othTag = objectTag;\n    } else if (othTag != objectTag) {\n      othIsArr = isTypedArray(other);\n    }\n  }\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !(objIsArr || objIsObj)) {\n    return equalByTag(object, other, objTag);\n  }\n  if (!isLoose) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  // For more information on detecting circular references see https://es5.github.io/#JO.\n  stackA || (stackA = []);\n  stackB || (stackB = []);\n\n  var length = stackA.length;\n  while (length--) {\n    if (stackA[length] == object) {\n      return stackB[length] == other;\n    }\n  }\n  // Add `object` and `other` to the stack of traversed objects.\n  stackA.push(object);\n  stackB.push(other);\n\n  var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);\n\n  stackA.pop();\n  stackB.pop();\n\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing arrays.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var index = -1,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isLoose && othLength > arrLength)) {\n    return false;\n  }\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index],\n        result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;\n\n    if (result !== undefined) {\n      if (result) {\n        continue;\n      }\n      return false;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (isLoose) {\n      if (!arraySome(other, function(othValue) {\n            return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);\n          })) {\n        return false;\n      }\n    } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} value The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag) {\n  switch (tag) {\n    case boolTag:\n    case dateTag:\n      // Coerce dates and booleans to numbers, dates to milliseconds and booleans\n      // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.\n      return +object == +other;\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case numberTag:\n      // Treat `NaN` vs. `NaN` as equal.\n      return (object != +object)\n        ? other != +other\n        : object == +other;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings primitives and string\n      // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.\n      return object == (other + '');\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparing values.\n * @param {boolean} [isLoose] Specify performing partial comparisons.\n * @param {Array} [stackA] Tracks traversed `value` objects.\n * @param {Array} [stackB] Tracks traversed `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {\n  var objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isLoose) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  var skipCtor = isLoose;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key],\n        result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;\n\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {\n      return false;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (!skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseIsEqual;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n  return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n  if (typeof func != 'function') {\n    return identity;\n  }\n  if (thisArg === undefined) {\n    return func;\n  }\n  switch (argCount) {\n    case 1: return function(value) {\n      return func.call(thisArg, value);\n    };\n    case 3: return function(value, index, collection) {\n      return func.call(thisArg, value, index, collection);\n    };\n    case 4: return function(accumulator, value, index, collection) {\n      return func.call(thisArg, accumulator, value, index, collection);\n    };\n    case 5: return function(value, other, key, object, source) {\n      return func.call(thisArg, value, other, key, object, source);\n    };\n  }\n  return function() {\n    return func.apply(thisArg, arguments);\n  };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = bindCallback;\n",
    "/**\n * lodash 3.0.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `compareAscending` which compares values and\n * sorts them in ascending order without guaranteeing a stable sort.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction baseCompareAscending(value, other) {\n  if (value !== other) {\n    var valIsNull = value === null,\n        valIsUndef = value === undefined,\n        valIsReflexive = value === value;\n\n    var othIsNull = other === null,\n        othIsUndef = other === undefined,\n        othIsReflexive = other === other;\n\n    if ((value > other && !othIsNull) || !valIsReflexive ||\n        (valIsNull && !othIsUndef && othIsReflexive) ||\n        (valIsUndef && othIsReflexive)) {\n      return 1;\n    }\n    if ((value < other && !valIsNull) || !othIsReflexive ||\n        (othIsNull && !valIsUndef && valIsReflexive) ||\n        (othIsUndef && valIsReflexive)) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nmodule.exports = baseCompareAscending;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar keys = require('lodash.keys');\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.forEach` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array|Object|string} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object|string} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    var length = collection ? getLength(collection) : 0;\n    if (!isLength(length)) {\n      return eachFunc(collection, iteratee);\n    }\n    var index = fromRight ? length : -1,\n        iterable = toObject(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var iterable = toObject(object),\n        props = keysFunc(object),\n        length = props.length,\n        index = fromRight ? length : -1;\n\n    while ((fromRight ? index-- : ++index < length)) {\n      var key = props[index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n  return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = baseEach;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `_.sortBy` and `_.sortByAll` which uses `comparer`\n * to define the sort order of `array` and replaces criteria objects with their\n * corresponding values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nmodule.exports = baseSortBy;\n",
    "/**\n * lodash 3.0.9 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.6.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseCopy = require('lodash._basecopy'),\n    baseToString = require('lodash._basetostring'),\n    baseValues = require('lodash._basevalues'),\n    isIterateeCall = require('lodash._isiterateecall'),\n    reInterpolate = require('lodash._reinterpolate'),\n    keys = require('lodash.keys'),\n    restParam = require('lodash.restparam'),\n    templateSettings = require('lodash.templatesettings');\n\n/** `Object#toString` result references. */\nvar errorTag = '[object Error]';\n\n/** Used to match empty string literals in compiled template source. */\nvar reEmptyStringLeading = /\\b__p \\+= '';/g,\n    reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n    reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */\nvar reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n/** Used to ensure capturing order of template delimiters. */\nvar reNoMatch = /($^)/;\n\n/** Used to match unescaped characters in compiled string literals. */\nvar reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n/** Used to escape characters for inclusion in compiled string literals. */\nvar stringEscapes = {\n  '\\\\': '\\\\',\n  \"'\": \"'\",\n  '\\n': 'n',\n  '\\r': 'r',\n  '\\u2028': 'u2028',\n  '\\u2029': 'u2029'\n};\n\n/**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nfunction escapeStringChar(chr) {\n  return '\\\\' + stringEscapes[chr];\n}\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used by `_.template` to customize its `_.assign` use.\n *\n * **Note:** This function is like `assignDefaults` except that it ignores\n * inherited property values when checking if a property is `undefined`.\n *\n * @private\n * @param {*} objectValue The destination object property value.\n * @param {*} sourceValue The source object property value.\n * @param {string} key The key associated with the object and source values.\n * @param {Object} object The destination object.\n * @returns {*} Returns the value to assign to the destination object.\n */\nfunction assignOwnDefaults(objectValue, sourceValue, key, object) {\n  return (objectValue === undefined || !hasOwnProperty.call(object, key))\n    ? sourceValue\n    : objectValue;\n}\n\n/**\n * A specialized version of `_.assign` for customizing assigned values without\n * support for argument juggling, multiple sources, and `this` binding `customizer`\n * functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n */\nfunction assignWith(object, source, customizer) {\n  var index = -1,\n      props = keys(source),\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index],\n        value = object[key],\n        result = customizer(value, source[key], key, object, source);\n\n    if ((result === result ? (result !== value) : (value === value)) ||\n        (value === undefined && !(key in object))) {\n      object[key] = result;\n    }\n  }\n  return object;\n}\n\n/**\n * The base implementation of `_.assign` without support for argument juggling,\n * multiple sources, and `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return source == null\n    ? object\n    : baseCopy(source, keys(source), object);\n}\n\n/**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\nfunction isError(value) {\n  return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;\n}\n\n/**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is provided it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options] The options object.\n * @param {RegExp} [options.escape] The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate] The \"evaluate\" delimiter.\n * @param {Object} [options.imports] An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate] The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.\n * @param {string} [options.variable] The data object variable name.\n * @param- {Object} [otherOptions] Enables the legacy `options` param signature.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // using the \"interpolate\" delimiter to create a compiled template\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // using the HTML \"escape\" delimiter to escape data property values\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // using the \"evaluate\" delimiter to execute JavaScript and generate HTML\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // using the internal `print` function in \"evaluate\" delimiters\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // using the ES delimiter as an alternative to the default \"interpolate\" delimiter\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // using custom template delimiters\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // using backslashes to treat delimiters as plain text\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // using the `imports` option to import `jQuery` as `jq`\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // using the `sourceURL` option to specify a custom sourceURL for the template\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector\n *\n * // using the `variable` option to ensure a with-statement isn't used in the compiled template\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * //   var __t, __p = '';\n * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * //   return __p;\n * // }\n *\n * // using the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and a stack trace\n * fs.writeFileSync(path.join(cwd, 'jst.js'), '\\\n *   var JST = {\\\n *     \"main\": ' + _.template(mainText).source + '\\\n *   };\\\n * ');\n */\nfunction template(string, options, otherOptions) {\n  // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)\n  // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n  var settings = templateSettings.imports._.templateSettings || templateSettings;\n\n  if (otherOptions && isIterateeCall(string, options, otherOptions)) {\n    options = otherOptions = undefined;\n  }\n  string = baseToString(string);\n  options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);\n\n  var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),\n      importsKeys = keys(imports),\n      importsValues = baseValues(imports, importsKeys);\n\n  var isEscaping,\n      isEvaluating,\n      index = 0,\n      interpolate = options.interpolate || reNoMatch,\n      source = \"__p += '\";\n\n  // Compile the regexp to match each delimiter.\n  var reDelimiters = RegExp(\n    (options.escape || reNoMatch).source + '|' +\n    interpolate.source + '|' +\n    (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n    (options.evaluate || reNoMatch).source + '|$'\n  , 'g');\n\n  // Use a sourceURL for easier debugging.\n  var sourceURL = 'sourceURL' in options ? '//# sourceURL=' + options.sourceURL + '\\n' : '';\n\n  string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n    interpolateValue || (interpolateValue = esTemplateValue);\n\n    // Escape characters that can't be included in string literals.\n    source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n    // Replace delimiters with snippets.\n    if (escapeValue) {\n      isEscaping = true;\n      source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n    }\n    if (evaluateValue) {\n      isEvaluating = true;\n      source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n    }\n    if (interpolateValue) {\n      source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n    }\n    index = offset + match.length;\n\n    // The JS engine embedded in Adobe products requires returning the `match`\n    // string in order to produce the correct `offset` value.\n    return match;\n  });\n\n  source += \"';\\n\";\n\n  // If `variable` is not specified wrap a with-statement around the generated\n  // code to add the data object to the top of the scope chain.\n  var variable = options.variable;\n  if (!variable) {\n    source = 'with (obj) {\\n' + source + '\\n}\\n';\n  }\n  // Cleanup code by stripping empty strings.\n  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n    .replace(reEmptyStringMiddle, '$1')\n    .replace(reEmptyStringTrailing, '$1;');\n\n  // Frame code as the function body.\n  source = 'function(' + (variable || 'obj') + ') {\\n' +\n    (variable\n      ? ''\n      : 'obj || (obj = {});\\n'\n    ) +\n    \"var __t, __p = ''\" +\n    (isEscaping\n       ? ', __e = _.escape'\n       : ''\n    ) +\n    (isEvaluating\n      ? ', __j = Array.prototype.join;\\n' +\n        \"function print() { __p += __j.call(arguments, '') }\\n\"\n      : ';\\n'\n    ) +\n    source +\n    'return __p\\n}';\n\n  var result = attempt(function() {\n    return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n  });\n\n  // Provide the compiled function's source by its `toString` method or\n  // the `source` property as a convenience for inlining compiled templates.\n  result.source = source;\n  if (isError(result)) {\n    throw result;\n  }\n  return result;\n}\n\n/**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it is invoked.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {Function} func The function to attempt.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // avoid throwing errors for invalid selectors\n * var elements = _.attempt(function(selector) {\n *   return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n *   elements = [];\n * }\n */\nvar attempt = restParam(function(func, args) {\n  try {\n    return func.apply(undefined, args);\n  } catch(e) {\n    return isError(e) ? e : new Error(e);\n  }\n});\n\nmodule.exports = template;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n    object[key] = source[key];\n  }\n  return object;\n}\n\nmodule.exports = baseCopy;\n",
    "/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Converts `value` to a string if it's not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  return value == null ? '' : (value + '');\n}\n\nmodule.exports = baseToString;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * returned by `keysFunc`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  var index = -1,\n      length = props.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = object[props[index]];\n  }\n  return result;\n}\n\nmodule.exports = baseValues;\n",
    "/**\n * lodash 3.0.9 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n      ? (isArrayLike(object) && isIndex(index, object.length))\n      : (type == 'string' && index in object)) {\n    var other = object[index];\n    return value === value ? (value === other) : (other !== other);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isIterateeCall;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to match template delimiters. */\nvar reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\nmodule.exports = reInterpolate;\n",
    "/**\n * lodash 3.0.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar baseToString = require('lodash._basetostring');\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"'`]/g,\n    reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '`': '&#96;'\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nfunction escapeHtmlChar(chr) {\n  return htmlEscapes[chr];\n}\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', \"'\", and '`', in `string` to\n * their corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional characters\n * use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't require escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value.\n * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * Backticks are escaped because in Internet Explorer < 9, they can break out\n * of attribute values or HTML comments. See [#102](https://html5sec.org/#102),\n * [#108](https://html5sec.org/#108), and [#133](https://html5sec.org/#133) of\n * the [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.\n *\n * When working with HTML you should always quote attribute values to reduce\n * XSS vectors. See [Ryan Grove's article](http://wonko.com/post/html-escaping)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\nfunction escape(string) {\n  // Reset `lastIndex` because in IE < 9 `String#replace` does not.\n  string = baseToString(string);\n  return (string && reHasUnescapedHtml.test(string))\n    ? string.replace(reUnescapedHtml, escapeHtmlChar)\n    : string;\n}\n\nmodule.exports = escape;\n",
    "/**\n * lodash 3.1.2 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative'),\n    isArguments = require('lodash.isarguments'),\n    isArray = require('lodash.isarray');\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n  var props = keysIn(object),\n      propsLength = props.length,\n      length = propsLength && object.length;\n\n  var allowIndexes = !!length && isLength(length) &&\n    (isArray(object) || isArguments(object));\n\n  var index = -1,\n      result = [];\n\n  while (++index < propsLength) {\n    var key = props[index];\n    if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n  var Ctor = object == null ? undefined : object.constructor;\n  if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n      (typeof object != 'function' && isArrayLike(object))) {\n    return shimKeys(object);\n  }\n  return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  if (object == null) {\n    return [];\n  }\n  if (!isObject(object)) {\n    object = Object(object);\n  }\n  var length = object.length;\n  length = (length && isLength(length) &&\n    (isArray(object) || isArguments(object)) && length) || 0;\n\n  var Ctor = object.constructor,\n      index = -1,\n      isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n      result = Array(length),\n      skipIndexes = length > 0;\n\n  while (++index < length) {\n    result[index] = (index + '');\n  }\n  for (var key in object) {\n    if (!(skipIndexes && isIndex(key, length)) &&\n        !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = keys;\n",
    "/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  return isObjectLike(value) && isArrayLike(value) &&\n    hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n",
    "/**\n * lodash 3.0.4 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n    funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = object == null ? undefined : object[key];\n  return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n  return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n  return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in older versions of Chrome and Safari which return 'function' for regexes\n  // and Safari 8 equivalents which return 'object' for typed array constructors.\n  return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n  // Avoid a V8 JIT bug in Chrome 19-20.\n  // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n  if (value == null) {\n    return false;\n  }\n  if (isFunction(value)) {\n    return reIsNative.test(fnToString.call(value));\n  }\n  return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = isArray;\n",
    "/**\n * lodash 3.6.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n *   return what + ' ' + _.initial(names).join(', ') +\n *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        rest = Array(length);\n\n    while (++index < length) {\n      rest[index] = args[start + index];\n    }\n    switch (start) {\n      case 0: return func.call(this, rest);\n      case 1: return func.call(this, args[0], rest);\n      case 2: return func.call(this, args[0], args[1], rest);\n    }\n    var otherArgs = Array(start + 1);\n    index = -1;\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = rest;\n    return func.apply(this, otherArgs);\n  };\n}\n\nmodule.exports = restParam;\n",
    "/**\n * lodash 3.1.0 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar reInterpolate = require('lodash._reinterpolate'),\n    escape = require('lodash.escape');\n\n/** Used to match template delimiters. */\nvar reEscape = /<%-([\\s\\S]+?)%>/g,\n    reEvaluate = /<%([\\s\\S]+?)%>/g;\n\n/**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB). Change the following template settings to use\n * alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar templateSettings = {\n\n  /**\n   * Used to detect `data` property values to be HTML-escaped.\n   *\n   * @memberOf _.templateSettings\n   * @type RegExp\n   */\n  'escape': reEscape,\n\n  /**\n   * Used to detect code to be evaluated.\n   *\n   * @memberOf _.templateSettings\n   * @type RegExp\n   */\n  'evaluate': reEvaluate,\n\n  /**\n   * Used to detect `data` property values to inject.\n   *\n   * @memberOf _.templateSettings\n   * @type RegExp\n   */\n  'interpolate': reInterpolate,\n\n  /**\n   * Used to reference the data object in the template text.\n   *\n   * @memberOf _.templateSettings\n   * @type string\n   */\n  'variable': '',\n\n  /**\n   * Used to import variables into the compiled template.\n   *\n   * @memberOf _.templateSettings\n   * @type Object\n   */\n  'imports': {\n\n    /**\n     * A reference to the `lodash` function.\n     *\n     * @memberOf _.templateSettings.imports\n     * @type Function\n     */\n    '_': { 'escape': escape }\n  }\n};\n\nmodule.exports = templateSettings;\n",
    "var localforage = require('localforage');\nvar EventEmitter = require('events').EventEmitter;\nvar muteUI = require('./ui');\nvar extend = require('extend');\n\nvar dispatchChanged = function( emitter, mutedValue ) {\n\n\temitter.emit('change', mutedValue );\n\t\n\tif( mutedValue === true ) {\n\t\temitter.emit('mute');\n\t} else {\n\t\temitter.emit('unmute');\n\t}\n};\n\nvar updateFromLocalStorage = function( exports, emitter ) {\n\t\n\tlocalforage.getItem('poem-mute', function( err, value ) {\n\t\t\n\t\tvar currentMute = exports.muted();\n\n\t\tif( err || (value !== false && value !== true ) ) {\n\t\t\texports.muted( false );\n\t\t} else {\n\t\t \texports.muted( value );\n\t\t}\n\t\t\n\t}.bind(this));\n\t\n};\n\nvar keyboardShortcut = function( state, toggle, config ) {\n\t\n\tif( config.keyCode !== false ) {\n\t\t\n\t\twindow.addEventListener('keydown', function muteAudioByKeboard( e ) {\n\t\n\t\t\tif( e.keyCode !== config.keyCode ) return;\n\t\t\ttoggle();\n\t\n\t\t});\n\t}\n};\n\nvar getSetMuted = function( state, emitter ) {\n\treturn function( value ) {\n\t\t\n\t\tif( value === true || value === false ) {\n\t\t\tif( value !== state.muted ) {\n\t\t\t\t\n\t\t\t\tstate.muted = value;\n\t\t\t\tlocalforage.setItem( 'poem-mute', state.muted );\n\t\t\t\tdispatchChanged( emitter, state.muted );\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn state.muted;\n\t}\n};\n\nvar mute = function( properties ) {\n\t\n\tvar config = extend({\n\t\tmuted : false,\n\t\tkeyCode : 83\n\t});\n\t\n\tvar state = {\n\t\tmuted : config.muted\n\t};\n\t\n\tvar emitter = new EventEmitter();\n\tvar muted = getSetMuted( state, emitter );\n\tvar toggle = function() { muted( !muted() ); }\n\t\n\tkeyboardShortcut( state, toggle, config );\n\t\n\tvar exports = {\n\t\tmuted : muted,\n\t\ttoggle : toggle,\n\t\temitter : emitter,\n\t\tel : null\n\t};\n\n\tupdateFromLocalStorage( exports, emitter );\n\texports.el = muteUI( exports )\n\t\n\treturn exports;\n};\n\nmodule.exports = mute;\n",
    "// contains, add, remove, toggle\nvar indexof = require('indexof')\n\nmodule.exports = ClassList\n\nfunction ClassList(elem) {\n    var cl = elem.classList\n\n    if (cl) {\n        return cl\n    }\n\n    var classList = {\n        add: add\n        , remove: remove\n        , contains: contains\n        , toggle: toggle\n        , toString: $toString\n        , length: 0\n        , item: item\n    }\n\n    return classList\n\n    function add(token) {\n        var list = getTokens()\n        if (indexof(list, token) > -1) {\n            return\n        }\n        list.push(token)\n        setTokens(list)\n    }\n\n    function remove(token) {\n        var list = getTokens()\n            , index = indexof(list, token)\n\n        if (index === -1) {\n            return\n        }\n\n        list.splice(index, 1)\n        setTokens(list)\n    }\n\n    function contains(token) {\n        return indexof(getTokens(), token) > -1\n    }\n\n    function toggle(token) {\n        if (contains(token)) {\n            remove(token)\n            return false\n        } else {\n            add(token)\n            return true\n        }\n    }\n\n    function $toString() {\n        return elem.className\n    }\n\n    function item(index) {\n        var tokens = getTokens()\n        return tokens[index] || null\n    }\n\n    function getTokens() {\n        var className = elem.className\n\n        return filter(className.split(\" \"), isTruthy)\n    }\n\n    function setTokens(list) {\n        var length = list.length\n\n        elem.className = list.join(\" \")\n        classList.length = length\n\n        for (var i = 0; i < list.length; i++) {\n            classList[i] = list[i]\n        }\n\n        delete list[length]\n    }\n}\n\nfunction filter (arr, fn) {\n    var ret = []\n    for (var i = 0; i < arr.length; i++) {\n        if (fn(arr[i])) ret.push(arr[i])\n    }\n    return ret\n}\n\nfunction isTruthy(value) {\n    return !!value\n}\n",
    "\nvar indexOf = [].indexOf;\n\nmodule.exports = function(arr, obj){\n  if (indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};",
    "var hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar undefined;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\t'use strict';\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar has_own_constructor = hasOwn.call(obj, 'constructor');\n\tvar has_is_property_of_method = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !has_own_constructor && !has_is_property_of_method) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) {}\n\n\treturn key === undefined || hasOwn.call(obj, key);\n};\n\nmodule.exports = function extend() {\n\t'use strict';\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[0],\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t} else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = target[name];\n\t\t\t\tcopy = options[name];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target === copy) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[name] = extend(deep, clone, copy);\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n",
    "'use strict';\n\nvar asap = require('asap')\n\nmodule.exports = Promise\nfunction Promise(fn) {\n  if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new')\n  if (typeof fn !== 'function') throw new TypeError('not a function')\n  var state = null\n  var value = null\n  var deferreds = []\n  var self = this\n\n  this.then = function(onFulfilled, onRejected) {\n    return new Promise(function(resolve, reject) {\n      handle(new Handler(onFulfilled, onRejected, resolve, reject))\n    })\n  }\n\n  function handle(deferred) {\n    if (state === null) {\n      deferreds.push(deferred)\n      return\n    }\n    asap(function() {\n      var cb = state ? deferred.onFulfilled : deferred.onRejected\n      if (cb === null) {\n        (state ? deferred.resolve : deferred.reject)(value)\n        return\n      }\n      var ret\n      try {\n        ret = cb(value)\n      }\n      catch (e) {\n        deferred.reject(e)\n        return\n      }\n      deferred.resolve(ret)\n    })\n  }\n\n  function resolve(newValue) {\n    try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n      if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.')\n      if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n        var then = newValue.then\n        if (typeof then === 'function') {\n          doResolve(then.bind(newValue), resolve, reject)\n          return\n        }\n      }\n      state = true\n      value = newValue\n      finale()\n    } catch (e) { reject(e) }\n  }\n\n  function reject(newValue) {\n    state = false\n    value = newValue\n    finale()\n  }\n\n  function finale() {\n    for (var i = 0, len = deferreds.length; i < len; i++)\n      handle(deferreds[i])\n    deferreds = null\n  }\n\n  doResolve(fn, resolve, reject)\n}\n\n\nfunction Handler(onFulfilled, onRejected, resolve, reject){\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null\n  this.resolve = resolve\n  this.reject = reject\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, onFulfilled, onRejected) {\n  var done = false;\n  try {\n    fn(function (value) {\n      if (done) return\n      done = true\n      onFulfilled(value)\n    }, function (reason) {\n      if (done) return\n      done = true\n      onRejected(reason)\n    })\n  } catch (ex) {\n    if (done) return\n    done = true\n    onRejected(ex)\n  }\n}\n",
    "'use strict';\n\n//This file contains then/promise specific extensions to the core promise API\n\nvar Promise = require('./core.js')\nvar asap = require('asap')\n\nmodule.exports = Promise\n\n/* Static Functions */\n\nfunction ValuePromise(value) {\n  this.then = function (onFulfilled) {\n    if (typeof onFulfilled !== 'function') return this\n    return new Promise(function (resolve, reject) {\n      asap(function () {\n        try {\n          resolve(onFulfilled(value))\n        } catch (ex) {\n          reject(ex);\n        }\n      })\n    })\n  }\n}\nValuePromise.prototype = Object.create(Promise.prototype)\n\nvar TRUE = new ValuePromise(true)\nvar FALSE = new ValuePromise(false)\nvar NULL = new ValuePromise(null)\nvar UNDEFINED = new ValuePromise(undefined)\nvar ZERO = new ValuePromise(0)\nvar EMPTYSTRING = new ValuePromise('')\n\nPromise.resolve = function (value) {\n  if (value instanceof Promise) return value\n\n  if (value === null) return NULL\n  if (value === undefined) return UNDEFINED\n  if (value === true) return TRUE\n  if (value === false) return FALSE\n  if (value === 0) return ZERO\n  if (value === '') return EMPTYSTRING\n\n  if (typeof value === 'object' || typeof value === 'function') {\n    try {\n      var then = value.then\n      if (typeof then === 'function') {\n        return new Promise(then.bind(value))\n      }\n    } catch (ex) {\n      return new Promise(function (resolve, reject) {\n        reject(ex)\n      })\n    }\n  }\n\n  return new ValuePromise(value)\n}\n\nPromise.from = Promise.cast = function (value) {\n  var err = new Error('Promise.from and Promise.cast are deprecated, use Promise.resolve instead')\n  err.name = 'Warning'\n  console.warn(err.stack)\n  return Promise.resolve(value)\n}\n\nPromise.denodeify = function (fn, argumentCount) {\n  argumentCount = argumentCount || Infinity\n  return function () {\n    var self = this\n    var args = Array.prototype.slice.call(arguments)\n    return new Promise(function (resolve, reject) {\n      while (args.length && args.length > argumentCount) {\n        args.pop()\n      }\n      args.push(function (err, res) {\n        if (err) reject(err)\n        else resolve(res)\n      })\n      fn.apply(self, args)\n    })\n  }\n}\nPromise.nodeify = function (fn) {\n  return function () {\n    var args = Array.prototype.slice.call(arguments)\n    var callback = typeof args[args.length - 1] === 'function' ? args.pop() : null\n    try {\n      return fn.apply(this, arguments).nodeify(callback)\n    } catch (ex) {\n      if (callback === null || typeof callback == 'undefined') {\n        return new Promise(function (resolve, reject) { reject(ex) })\n      } else {\n        asap(function () {\n          callback(ex)\n        })\n      }\n    }\n  }\n}\n\nPromise.all = function () {\n  var calledWithArray = arguments.length === 1 && Array.isArray(arguments[0])\n  var args = Array.prototype.slice.call(calledWithArray ? arguments[0] : arguments)\n\n  if (!calledWithArray) {\n    var err = new Error('Promise.all should be called with a single array, calling it with multiple arguments is deprecated')\n    err.name = 'Warning'\n    console.warn(err.stack)\n  }\n\n  return new Promise(function (resolve, reject) {\n    if (args.length === 0) return resolve([])\n    var remaining = args.length\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then\n          if (typeof then === 'function') {\n            then.call(val, function (val) { res(i, val) }, reject)\n            return\n          }\n        }\n        args[i] = val\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex)\n      }\n    }\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i])\n    }\n  })\n}\n\nPromise.reject = function (value) {\n  return new Promise(function (resolve, reject) { \n    reject(value);\n  });\n}\n\nPromise.race = function (values) {\n  return new Promise(function (resolve, reject) { \n    values.forEach(function(value){\n      Promise.resolve(value).then(resolve, reject);\n    })\n  });\n}\n\n/* Prototype Methods */\n\nPromise.prototype.done = function (onFulfilled, onRejected) {\n  var self = arguments.length ? this.then.apply(this, arguments) : this\n  self.then(null, function (err) {\n    asap(function () {\n      throw err\n    })\n  })\n}\n\nPromise.prototype.nodeify = function (callback) {\n  if (typeof callback != 'function') return this\n\n  this.then(function (value) {\n    asap(function () {\n      callback(null, value)\n    })\n  }, function (err) {\n    asap(function () {\n      callback(err)\n    })\n  })\n}\n\nPromise.prototype['catch'] = function (onRejected) {\n  return this.then(null, onRejected);\n}\n",
    "\n// Use the fastest possible means to execute a task in a future turn\n// of the event loop.\n\n// linked list of tasks (single, with head node)\nvar head = {task: void 0, next: null};\nvar tail = head;\nvar flushing = false;\nvar requestFlush = void 0;\nvar isNodeJS = false;\n\nfunction flush() {\n    /* jshint loopfunc: true */\n\n    while (head.next) {\n        head = head.next;\n        var task = head.task;\n        head.task = void 0;\n        var domain = head.domain;\n\n        if (domain) {\n            head.domain = void 0;\n            domain.enter();\n        }\n\n        try {\n            task();\n\n        } catch (e) {\n            if (isNodeJS) {\n                // In node, uncaught exceptions are considered fatal errors.\n                // Re-throw them synchronously to interrupt flushing!\n\n                // Ensure continuation if the uncaught exception is suppressed\n                // listening \"uncaughtException\" events (as domains does).\n                // Continue in next event to avoid tick recursion.\n                if (domain) {\n                    domain.exit();\n                }\n                setTimeout(flush, 0);\n                if (domain) {\n                    domain.enter();\n                }\n\n                throw e;\n\n            } else {\n                // In browsers, uncaught exceptions are not fatal.\n                // Re-throw them asynchronously to avoid slow-downs.\n                setTimeout(function() {\n                   throw e;\n                }, 0);\n            }\n        }\n\n        if (domain) {\n            domain.exit();\n        }\n    }\n\n    flushing = false;\n}\n\nif (typeof process !== \"undefined\" && process.nextTick) {\n    // Node.js before 0.9. Note that some fake-Node environments, like the\n    // Mocha test runner, introduce a `process` global without a `nextTick`.\n    isNodeJS = true;\n\n    requestFlush = function () {\n        process.nextTick(flush);\n    };\n\n} else if (typeof setImmediate === \"function\") {\n    // In IE10, Node.js 0.9+, or https://github.com/NobleJS/setImmediate\n    if (typeof window !== \"undefined\") {\n        requestFlush = setImmediate.bind(window, flush);\n    } else {\n        requestFlush = function () {\n            setImmediate(flush);\n        };\n    }\n\n} else if (typeof MessageChannel !== \"undefined\") {\n    // modern browsers\n    // http://www.nonblocking.io/2011/06/windownexttick.html\n    var channel = new MessageChannel();\n    channel.port1.onmessage = flush;\n    requestFlush = function () {\n        channel.port2.postMessage(0);\n    };\n\n} else {\n    // old browsers\n    requestFlush = function () {\n        setTimeout(flush, 0);\n    };\n}\n\nfunction asap(task) {\n    tail = tail.next = {\n        task: task,\n        domain: isNodeJS && process.domain,\n        next: null\n    };\n\n    if (!flushing) {\n        flushing = true;\n        requestFlush();\n    }\n};\n\nmodule.exports = asap;\n\n",
    "// Some code originally from async_storage.js in\n// [Gaia](https://github.com/mozilla-b2g/gaia).\n(function() {\n    'use strict';\n\n    // Originally found in https://github.com/mozilla-b2g/gaia/blob/e8f624e4cc9ea945727278039b3bc9bcb9f8667a/shared/js/async_storage.js\n\n    // Promises!\n    var Promise = (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') ?\n                  require('promise') : this.Promise;\n\n    // Initialize IndexedDB; fall back to vendor-prefixed versions if needed.\n    var indexedDB = indexedDB || this.indexedDB || this.webkitIndexedDB ||\n                    this.mozIndexedDB || this.OIndexedDB ||\n                    this.msIndexedDB;\n\n    // If IndexedDB isn't available, we get outta here!\n    if (!indexedDB) {\n        return;\n    }\n\n    var DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support';\n    var supportsBlobs;\n\n    // Abstracts constructing a Blob object, so it also works in older\n    // browsers that don't support the native Blob constructor. (i.e.\n    // old QtWebKit versions, at least).\n    function _createBlob(parts, properties) {\n        parts = parts || [];\n        properties = properties || {};\n        try {\n            return new Blob(parts, properties);\n        } catch (e) {\n            if (e.name !== 'TypeError') {\n                throw e;\n            }\n            var BlobBuilder = window.BlobBuilder ||\n                window.MSBlobBuilder ||\n                window.MozBlobBuilder ||\n                window.WebKitBlobBuilder;\n            var builder = new BlobBuilder();\n            for (var i = 0; i < parts.length; i += 1) {\n                builder.append(parts[i]);\n            }\n            return builder.getBlob(properties.type);\n        }\n    }\n\n    // Transform a binary string to an array buffer, because otherwise\n    // weird stuff happens when you try to work with the binary string directly.\n    // It is known.\n    // From http://stackoverflow.com/questions/14967647/ (continues on next line)\n    // encode-decode-image-with-base64-breaks-image (2013-04-21)\n    function _binStringToArrayBuffer(bin) {\n        var length = bin.length;\n        var buf = new ArrayBuffer(length);\n        var arr = new Uint8Array(buf);\n        for (var i = 0; i < length; i++) {\n            arr[i] = bin.charCodeAt(i);\n        }\n        return buf;\n    }\n\n    // Fetch a blob using ajax. This reveals bugs in Chrome < 43.\n    // For details on all this junk:\n    // https://github.com/nolanlawson/state-of-binary-data-in-the-browser#readme\n    function _blobAjax(url) {\n        return new Promise(function(resolve, reject) {\n            var xhr = new XMLHttpRequest();\n            xhr.open('GET', url);\n            xhr.withCredentials = true;\n            xhr.responseType = 'arraybuffer';\n\n            xhr.onreadystatechange = function() {\n                if (xhr.readyState !== 4) {\n                    return;\n                }\n                if (xhr.status === 200) {\n                    return resolve({\n                        response: xhr.response,\n                        type: xhr.getResponseHeader('Content-Type')\n                    });\n                }\n                reject({status: xhr.status, response: xhr.response});\n            };\n            xhr.send();\n        });\n    }\n\n    //\n    // Detect blob support. Chrome didn't support it until version 38.\n    // In version 37 they had a broken version where PNGs (and possibly\n    // other binary types) aren't stored correctly, because when you fetch\n    // them, the content type is always null.\n    //\n    // Furthermore, they have some outstanding bugs where blobs occasionally\n    // are read by FileReader as null, or by ajax as 404s.\n    //\n    // Sadly we use the 404 bug to detect the FileReader bug, so if they\n    // get fixed independently and released in different versions of Chrome,\n    // then the bug could come back. So it's worthwhile to watch these issues:\n    // 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916\n    // FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836\n    //\n    function _checkBlobSupportWithoutCaching(idb) {\n        return new Promise(function(resolve, reject) {\n            var blob = _createBlob([''], {type: 'image/png'});\n            var txn = idb.transaction([DETECT_BLOB_SUPPORT_STORE], 'readwrite');\n            txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key');\n            txn.oncomplete = function() {\n                // have to do it in a separate transaction, else the correct\n                // content type is always returned\n                var blobTxn = idb.transaction([DETECT_BLOB_SUPPORT_STORE],\n                    'readwrite');\n                var getBlobReq = blobTxn.objectStore(\n                    DETECT_BLOB_SUPPORT_STORE).get('key');\n                getBlobReq.onerror = reject;\n                getBlobReq.onsuccess = function(e) {\n\n                    var storedBlob = e.target.result;\n                    var url = URL.createObjectURL(storedBlob);\n\n                    _blobAjax(url).then(function(res) {\n                        resolve(!!(res && res.type === 'image/png'));\n                    }, function() {\n                        resolve(false);\n                    }).then(function() {\n                        URL.revokeObjectURL(url);\n                    });\n                };\n            };\n        }).catch(function() {\n            return false; // error, so assume unsupported\n        });\n    }\n\n    function _checkBlobSupport(idb) {\n        if (typeof supportsBlobs === 'boolean') {\n            return Promise.resolve(supportsBlobs);\n        }\n        return _checkBlobSupportWithoutCaching(idb).then(function(value) {\n            supportsBlobs = value;\n            return supportsBlobs;\n        });\n    }\n\n    // encode a blob for indexeddb engines that don't support blobs\n    function _encodeBlob(blob) {\n        return new Promise(function(resolve, reject) {\n            var reader = new FileReader();\n            reader.onerror = reject;\n            reader.onloadend = function(e) {\n                var base64 = btoa(e.target.result || '');\n                resolve({\n                    __local_forage_encoded_blob: true,\n                    data: base64,\n                    type: blob.type\n                });\n            };\n            reader.readAsBinaryString(blob);\n        });\n    }\n\n    // decode an encoded blob\n    function _decodeBlob(encodedBlob) {\n        var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));\n        return _createBlob([arrayBuff], { type: encodedBlob.type});\n    }\n\n    // is this one of our fancy encoded blobs?\n    function _isEncodedBlob(value) {\n        return value && value.__local_forage_encoded_blob;\n    }\n\n    // Open the IndexedDB database (automatically creates one if one didn't\n    // previously exist), using any options set in the config.\n    function _initStorage(options) {\n        var self = this;\n        var dbInfo = {\n            db: null\n        };\n\n        if (options) {\n            for (var i in options) {\n                dbInfo[i] = options[i];\n            }\n        }\n\n        return new Promise(function(resolve, reject) {\n            var openreq = indexedDB.open(dbInfo.name, dbInfo.version);\n            openreq.onerror = function() {\n                reject(openreq.error);\n            };\n            openreq.onupgradeneeded = function(e) {\n                // First time setup: create an empty object store\n                openreq.result.createObjectStore(dbInfo.storeName);\n                if (e.oldVersion <= 1) {\n                    // added when support for blob shims was added\n                    openreq.result.createObjectStore(DETECT_BLOB_SUPPORT_STORE);\n                }\n            };\n            openreq.onsuccess = function() {\n                dbInfo.db = openreq.result;\n                self._dbInfo = dbInfo;\n                resolve();\n            };\n        });\n    }\n\n    function getItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly')\n                    .objectStore(dbInfo.storeName);\n                var req = store.get(key);\n\n                req.onsuccess = function() {\n                    var value = req.result;\n                    if (value === undefined) {\n                        value = null;\n                    }\n                    if (_isEncodedBlob(value)) {\n                        value = _decodeBlob(value);\n                    }\n                    resolve(value);\n                };\n\n                req.onerror = function() {\n                    reject(req.error);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Iterate over all items stored in database.\n    function iterate(iterator, callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly')\n                                     .objectStore(dbInfo.storeName);\n\n                var req = store.openCursor();\n                var iterationNumber = 1;\n\n                req.onsuccess = function() {\n                    var cursor = req.result;\n\n                    if (cursor) {\n                        var value = cursor.value;\n                        if (_isEncodedBlob(value)) {\n                            value = _decodeBlob(value);\n                        }\n                        var result = iterator(value, cursor.key, iterationNumber++);\n\n                        if (result !== void(0)) {\n                            resolve(result);\n                        } else {\n                            cursor.continue();\n                        }\n                    } else {\n                        resolve();\n                    }\n                };\n\n                req.onerror = function() {\n                    reject(req.error);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n\n        return promise;\n    }\n\n    function setItem(key, value, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            var dbInfo;\n            self.ready().then(function() {\n                dbInfo = self._dbInfo;\n                return _checkBlobSupport(dbInfo.db);\n            }).then(function(blobSupport) {\n                if (!blobSupport && value instanceof Blob) {\n                    return _encodeBlob(value);\n                }\n                return value;\n            }).then(function(value) {\n                var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n                var store = transaction.objectStore(dbInfo.storeName);\n\n                // The reason we don't _save_ null is because IE 10 does\n                // not support saving the `null` type in IndexedDB. How\n                // ironic, given the bug below!\n                // See: https://github.com/mozilla/localForage/issues/161\n                if (value === null) {\n                    value = undefined;\n                }\n\n                var req = store.put(value, key);\n                transaction.oncomplete = function() {\n                    // Cast to undefined so the value passed to\n                    // callback/promise is the same as what one would get out\n                    // of `getItem()` later. This leads to some weirdness\n                    // (setItem('foo', undefined) will return `null`), but\n                    // it's not my fault localStorage is our baseline and that\n                    // it's weird.\n                    if (value === undefined) {\n                        value = null;\n                    }\n\n                    resolve(value);\n                };\n                transaction.onabort = transaction.onerror = function() {\n                    var err = req.error ? req.error : req.transaction.error;\n                    reject(err);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function removeItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n                var store = transaction.objectStore(dbInfo.storeName);\n\n                // We use a Grunt task to make this safe for IE and some\n                // versions of Android (including those used by Cordova).\n                // Normally IE won't like `.delete()` and will insist on\n                // using `['delete']()`, but we have a build step that\n                // fixes this for us now.\n                var req = store.delete(key);\n                transaction.oncomplete = function() {\n                    resolve();\n                };\n\n                transaction.onerror = function() {\n                    reject(req.error);\n                };\n\n                // The request will be also be aborted if we've exceeded our storage\n                // space.\n                transaction.onabort = function() {\n                    var err = req.error ? req.error : req.transaction.error;\n                    reject(err);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function clear(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var transaction = dbInfo.db.transaction(dbInfo.storeName, 'readwrite');\n                var store = transaction.objectStore(dbInfo.storeName);\n                var req = store.clear();\n\n                transaction.oncomplete = function() {\n                    resolve();\n                };\n\n                transaction.onabort = transaction.onerror = function() {\n                    var err = req.error ? req.error : req.transaction.error;\n                    reject(err);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function length(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly')\n                              .objectStore(dbInfo.storeName);\n                var req = store.count();\n\n                req.onsuccess = function() {\n                    resolve(req.result);\n                };\n\n                req.onerror = function() {\n                    reject(req.error);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function key(n, callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            if (n < 0) {\n                resolve(null);\n\n                return;\n            }\n\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly')\n                              .objectStore(dbInfo.storeName);\n\n                var advanced = false;\n                var req = store.openCursor();\n                req.onsuccess = function() {\n                    var cursor = req.result;\n                    if (!cursor) {\n                        // this means there weren't enough keys\n                        resolve(null);\n\n                        return;\n                    }\n\n                    if (n === 0) {\n                        // We have the first key, return it if that's what they\n                        // wanted.\n                        resolve(cursor.key);\n                    } else {\n                        if (!advanced) {\n                            // Otherwise, ask the cursor to skip ahead n\n                            // records.\n                            advanced = true;\n                            cursor.advance(n);\n                        } else {\n                            // When we get here, we've got the nth key.\n                            resolve(cursor.key);\n                        }\n                    }\n                };\n\n                req.onerror = function() {\n                    reject(req.error);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function keys(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                var store = dbInfo.db.transaction(dbInfo.storeName, 'readonly')\n                              .objectStore(dbInfo.storeName);\n\n                var req = store.openCursor();\n                var keys = [];\n\n                req.onsuccess = function() {\n                    var cursor = req.result;\n\n                    if (!cursor) {\n                        resolve(keys);\n                        return;\n                    }\n\n                    keys.push(cursor.key);\n                    cursor.continue();\n                };\n\n                req.onerror = function() {\n                    reject(req.error);\n                };\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function executeCallback(promise, callback) {\n        if (callback) {\n            promise.then(function(result) {\n                callback(null, result);\n            }, function(error) {\n                callback(error);\n            });\n        }\n    }\n\n    var asyncStorage = {\n        _driver: 'asyncStorage',\n        _initStorage: _initStorage,\n        iterate: iterate,\n        getItem: getItem,\n        setItem: setItem,\n        removeItem: removeItem,\n        clear: clear,\n        length: length,\n        key: key,\n        keys: keys\n    };\n\n    if (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') {\n        module.exports = asyncStorage;\n    } else if (typeof define === 'function' && define.amd) {\n        define('asyncStorage', function() {\n            return asyncStorage;\n        });\n    } else {\n        this.asyncStorage = asyncStorage;\n    }\n}).call(window);\n",
    "// If IndexedDB isn't available, we'll fall back to localStorage.\n// Note that this will have considerable performance and storage\n// side-effects (all data will be serialized on save and only data that\n// can be converted to a string via `JSON.stringify()` will be saved).\n(function() {\n    'use strict';\n\n    // Promises!\n    var Promise = (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') ?\n                  require('promise') : this.Promise;\n\n    var globalObject = this;\n    var serializer = null;\n    var localStorage = null;\n\n    // If the app is running inside a Google Chrome packaged webapp, or some\n    // other context where localStorage isn't available, we don't use\n    // localStorage. This feature detection is preferred over the old\n    // `if (window.chrome && window.chrome.runtime)` code.\n    // See: https://github.com/mozilla/localForage/issues/68\n    try {\n        // If localStorage isn't available, we get outta here!\n        // This should be inside a try catch\n        if (!this.localStorage || !('setItem' in this.localStorage)) {\n            return;\n        }\n        // Initialize localStorage and create a variable to use throughout\n        // the code.\n        localStorage = this.localStorage;\n    } catch (e) {\n        return;\n    }\n\n    var ModuleType = {\n        DEFINE: 1,\n        EXPORT: 2,\n        WINDOW: 3\n    };\n\n    // Attaching to window (i.e. no module loader) is the assumed,\n    // simple default.\n    var moduleType = ModuleType.WINDOW;\n\n    // Find out what kind of module setup we have; if none, we'll just attach\n    // localForage to the main window.\n    if (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') {\n        moduleType = ModuleType.EXPORT;\n    } else if (typeof define === 'function' && define.amd) {\n        moduleType = ModuleType.DEFINE;\n    }\n\n    // Config the localStorage backend, using options set in the config.\n    function _initStorage(options) {\n        var self = this;\n        var dbInfo = {};\n        if (options) {\n            for (var i in options) {\n                dbInfo[i] = options[i];\n            }\n        }\n\n        dbInfo.keyPrefix = dbInfo.name + '/';\n\n        self._dbInfo = dbInfo;\n\n        var serializerPromise = new Promise(function(resolve/*, reject*/) {\n            // We allow localForage to be declared as a module or as a\n            // library available without AMD/require.js.\n            if (moduleType === ModuleType.DEFINE) {\n                require(['localforageSerializer'], resolve);\n            } else if (moduleType === ModuleType.EXPORT) {\n                // Making it browserify friendly\n                resolve(require('./../utils/serializer'));\n            } else {\n                resolve(globalObject.localforageSerializer);\n            }\n        });\n\n        return serializerPromise.then(function(lib) {\n            serializer = lib;\n            return Promise.resolve();\n        });\n    }\n\n    // Remove all keys from the datastore, effectively destroying all data in\n    // the app's key/value store!\n    function clear(callback) {\n        var self = this;\n        var promise = self.ready().then(function() {\n            var keyPrefix = self._dbInfo.keyPrefix;\n\n            for (var i = localStorage.length - 1; i >= 0; i--) {\n                var key = localStorage.key(i);\n\n                if (key.indexOf(keyPrefix) === 0) {\n                    localStorage.removeItem(key);\n                }\n            }\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Retrieve an item from the store. Unlike the original async_storage\n    // library in Gaia, we don't modify return values at all. If a key's value\n    // is `undefined`, we pass that value to the callback function.\n    function getItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = self.ready().then(function() {\n            var dbInfo = self._dbInfo;\n            var result = localStorage.getItem(dbInfo.keyPrefix + key);\n\n            // If a result was found, parse it from the serialized\n            // string into a JS object. If result isn't truthy, the key\n            // is likely undefined and we'll pass it straight to the\n            // callback.\n            if (result) {\n                result = serializer.deserialize(result);\n            }\n\n            return result;\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Iterate over all items in the store.\n    function iterate(iterator, callback) {\n        var self = this;\n\n        var promise = self.ready().then(function() {\n            var keyPrefix = self._dbInfo.keyPrefix;\n            var keyPrefixLength = keyPrefix.length;\n            var length = localStorage.length;\n\n            for (var i = 0; i < length; i++) {\n                var key = localStorage.key(i);\n                var value = localStorage.getItem(key);\n\n                // If a result was found, parse it from the serialized\n                // string into a JS object. If result isn't truthy, the\n                // key is likely undefined and we'll pass it straight\n                // to the iterator.\n                if (value) {\n                    value = serializer.deserialize(value);\n                }\n\n                value = iterator(value, key.substring(keyPrefixLength), i + 1);\n\n                if (value !== void(0)) {\n                    return value;\n                }\n            }\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Same as localStorage's key() method, except takes a callback.\n    function key(n, callback) {\n        var self = this;\n        var promise = self.ready().then(function() {\n            var dbInfo = self._dbInfo;\n            var result;\n            try {\n                result = localStorage.key(n);\n            } catch (error) {\n                result = null;\n            }\n\n            // Remove the prefix from the key, if a key is found.\n            if (result) {\n                result = result.substring(dbInfo.keyPrefix.length);\n            }\n\n            return result;\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function keys(callback) {\n        var self = this;\n        var promise = self.ready().then(function() {\n            var dbInfo = self._dbInfo;\n            var length = localStorage.length;\n            var keys = [];\n\n            for (var i = 0; i < length; i++) {\n                if (localStorage.key(i).indexOf(dbInfo.keyPrefix) === 0) {\n                    keys.push(localStorage.key(i).substring(dbInfo.keyPrefix.length));\n                }\n            }\n\n            return keys;\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Supply the number of keys in the datastore to the callback function.\n    function length(callback) {\n        var self = this;\n        var promise = self.keys().then(function(keys) {\n            return keys.length;\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Remove an item from the store, nice and simple.\n    function removeItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = self.ready().then(function() {\n            var dbInfo = self._dbInfo;\n            localStorage.removeItem(dbInfo.keyPrefix + key);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Set a key's value and run an optional callback once the value is set.\n    // Unlike Gaia's implementation, the callback function is passed the value,\n    // in case you want to operate on that value only after you're sure it\n    // saved, or something like that.\n    function setItem(key, value, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = self.ready().then(function() {\n            // Convert undefined values to null.\n            // https://github.com/mozilla/localForage/pull/42\n            if (value === undefined) {\n                value = null;\n            }\n\n            // Save the original value to pass to the callback.\n            var originalValue = value;\n\n            return new Promise(function(resolve, reject) {\n                serializer.serialize(value, function(value, error) {\n                    if (error) {\n                        reject(error);\n                    } else {\n                        try {\n                            var dbInfo = self._dbInfo;\n                            localStorage.setItem(dbInfo.keyPrefix + key, value);\n                            resolve(originalValue);\n                        } catch (e) {\n                            // localStorage capacity exceeded.\n                            // TODO: Make this a specific error/event.\n                            if (e.name === 'QuotaExceededError' ||\n                                e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n                                reject(e);\n                            }\n                            reject(e);\n                        }\n                    }\n                });\n            });\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function executeCallback(promise, callback) {\n        if (callback) {\n            promise.then(function(result) {\n                callback(null, result);\n            }, function(error) {\n                callback(error);\n            });\n        }\n    }\n\n    var localStorageWrapper = {\n        _driver: 'localStorageWrapper',\n        _initStorage: _initStorage,\n        // Default API, from Gaia/localStorage.\n        iterate: iterate,\n        getItem: getItem,\n        setItem: setItem,\n        removeItem: removeItem,\n        clear: clear,\n        length: length,\n        key: key,\n        keys: keys\n    };\n\n    if (moduleType === ModuleType.EXPORT) {\n        module.exports = localStorageWrapper;\n    } else if (moduleType === ModuleType.DEFINE) {\n        define('localStorageWrapper', function() {\n            return localStorageWrapper;\n        });\n    } else {\n        this.localStorageWrapper = localStorageWrapper;\n    }\n}).call(window);\n",
    "/*\n * Includes code from:\n *\n * base64-arraybuffer\n * https://github.com/niklasvh/base64-arraybuffer\n *\n * Copyright (c) 2012 Niklas von Hertzen\n * Licensed under the MIT license.\n */\n(function() {\n    'use strict';\n\n    // Promises!\n    var Promise = (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') ?\n                  require('promise') : this.Promise;\n\n    var globalObject = this;\n    var serializer = null;\n    var openDatabase = this.openDatabase;\n\n    // If WebSQL methods aren't available, we can stop now.\n    if (!openDatabase) {\n        return;\n    }\n\n    var ModuleType = {\n        DEFINE: 1,\n        EXPORT: 2,\n        WINDOW: 3\n    };\n\n    // Attaching to window (i.e. no module loader) is the assumed,\n    // simple default.\n    var moduleType = ModuleType.WINDOW;\n\n    // Find out what kind of module setup we have; if none, we'll just attach\n    // localForage to the main window.\n    if (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') {\n        moduleType = ModuleType.EXPORT;\n    } else if (typeof define === 'function' && define.amd) {\n        moduleType = ModuleType.DEFINE;\n    }\n\n    // Open the WebSQL database (automatically creates one if one didn't\n    // previously exist), using any options set in the config.\n    function _initStorage(options) {\n        var self = this;\n        var dbInfo = {\n            db: null\n        };\n\n        if (options) {\n            for (var i in options) {\n                dbInfo[i] = typeof(options[i]) !== 'string' ?\n                            options[i].toString() : options[i];\n            }\n        }\n\n        var serializerPromise = new Promise(function(resolve/*, reject*/) {\n            // We allow localForage to be declared as a module or as a\n            // library available without AMD/require.js.\n            if (moduleType === ModuleType.DEFINE) {\n                require(['localforageSerializer'], resolve);\n            } else if (moduleType === ModuleType.EXPORT) {\n                // Making it browserify friendly\n                resolve(require('./../utils/serializer'));\n            } else {\n                resolve(globalObject.localforageSerializer);\n            }\n        });\n\n        var dbInfoPromise = new Promise(function(resolve, reject) {\n            // Open the database; the openDatabase API will automatically\n            // create it for us if it doesn't exist.\n            try {\n                dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version),\n                                         dbInfo.description, dbInfo.size);\n            } catch (e) {\n                return self.setDriver(self.LOCALSTORAGE).then(function() {\n                    return self._initStorage(options);\n                }).then(resolve).catch(reject);\n            }\n\n            // Create our key/value table if it doesn't exist.\n            dbInfo.db.transaction(function(t) {\n                t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName +\n                             ' (id INTEGER PRIMARY KEY, key unique, value)', [],\n                             function() {\n                    self._dbInfo = dbInfo;\n                    resolve();\n                }, function(t, error) {\n                    reject(error);\n                });\n            });\n        });\n\n        return serializerPromise.then(function(lib) {\n            serializer = lib;\n            return dbInfoPromise;\n        });\n    }\n\n    function getItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('SELECT * FROM ' + dbInfo.storeName +\n                                 ' WHERE key = ? LIMIT 1', [key],\n                                 function(t, results) {\n                        var result = results.rows.length ?\n                                     results.rows.item(0).value : null;\n\n                        // Check to see if this is serialized content we need to\n                        // unpack.\n                        if (result) {\n                            result = serializer.deserialize(result);\n                        }\n\n                        resolve(result);\n                    }, function(t, error) {\n\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function iterate(iterator, callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('SELECT * FROM ' + dbInfo.storeName, [],\n                        function(t, results) {\n                            var rows = results.rows;\n                            var length = rows.length;\n\n                            for (var i = 0; i < length; i++) {\n                                var item = rows.item(i);\n                                var result = item.value;\n\n                                // Check to see if this is serialized content\n                                // we need to unpack.\n                                if (result) {\n                                    result = serializer.deserialize(result);\n                                }\n\n                                result = iterator(result, item.key, i + 1);\n\n                                // void(0) prevents problems with redefinition\n                                // of `undefined`.\n                                if (result !== void(0)) {\n                                    resolve(result);\n                                    return;\n                                }\n                            }\n\n                            resolve();\n                        }, function(t, error) {\n                            reject(error);\n                        });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function setItem(key, value, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                // The localStorage API doesn't return undefined values in an\n                // \"expected\" way, so undefined is always cast to null in all\n                // drivers. See: https://github.com/mozilla/localForage/pull/42\n                if (value === undefined) {\n                    value = null;\n                }\n\n                // Save the original value to pass to the callback.\n                var originalValue = value;\n\n                serializer.serialize(value, function(value, error) {\n                    if (error) {\n                        reject(error);\n                    } else {\n                        var dbInfo = self._dbInfo;\n                        dbInfo.db.transaction(function(t) {\n                            t.executeSql('INSERT OR REPLACE INTO ' +\n                                         dbInfo.storeName +\n                                         ' (key, value) VALUES (?, ?)',\n                                         [key, value], function() {\n                                resolve(originalValue);\n                            }, function(t, error) {\n                                reject(error);\n                            });\n                        }, function(sqlError) {\n                            // The transaction failed; check\n                            // to see if it's a quota error.\n                            if (sqlError.code === sqlError.QUOTA_ERR) {\n                                // We reject the callback outright for now, but\n                                // it's worth trying to re-run the transaction.\n                                // Even if the user accepts the prompt to use\n                                // more storage on Safari, this error will\n                                // be called.\n                                //\n                                // TODO: Try to re-run the transaction.\n                                reject(sqlError);\n                            }\n                        });\n                    }\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function removeItem(key, callback) {\n        var self = this;\n\n        // Cast the key to a string, as that's all we can set as a key.\n        if (typeof key !== 'string') {\n            window.console.warn(key +\n                                ' used as a key, but it is not a string.');\n            key = String(key);\n        }\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('DELETE FROM ' + dbInfo.storeName +\n                                 ' WHERE key = ?', [key],\n                                 function() {\n                        resolve();\n                    }, function(t, error) {\n\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Deletes every item in the table.\n    // TODO: Find out if this resets the AUTO_INCREMENT number.\n    function clear(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('DELETE FROM ' + dbInfo.storeName, [],\n                                 function() {\n                        resolve();\n                    }, function(t, error) {\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Does a simple `COUNT(key)` to get the number of items stored in\n    // localForage.\n    function length(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    // Ahhh, SQL makes this one soooooo easy.\n                    t.executeSql('SELECT COUNT(key) as c FROM ' +\n                                 dbInfo.storeName, [], function(t, results) {\n                        var result = results.rows.item(0).c;\n\n                        resolve(result);\n                    }, function(t, error) {\n\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    // Return the key located at key index X; essentially gets the key from a\n    // `WHERE id = ?`. This is the most efficient way I can think to implement\n    // this rarely-used (in my experience) part of the API, but it can seem\n    // inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so\n    // the ID of each key will change every time it's updated. Perhaps a stored\n    // procedure for the `setItem()` SQL would solve this problem?\n    // TODO: Don't change ID on `setItem()`.\n    function key(n, callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('SELECT key FROM ' + dbInfo.storeName +\n                                 ' WHERE id = ? LIMIT 1', [n + 1],\n                                 function(t, results) {\n                        var result = results.rows.length ?\n                                     results.rows.item(0).key : null;\n                        resolve(result);\n                    }, function(t, error) {\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function keys(callback) {\n        var self = this;\n\n        var promise = new Promise(function(resolve, reject) {\n            self.ready().then(function() {\n                var dbInfo = self._dbInfo;\n                dbInfo.db.transaction(function(t) {\n                    t.executeSql('SELECT key FROM ' + dbInfo.storeName, [],\n                                 function(t, results) {\n                        var keys = [];\n\n                        for (var i = 0; i < results.rows.length; i++) {\n                            keys.push(results.rows.item(i).key);\n                        }\n\n                        resolve(keys);\n                    }, function(t, error) {\n\n                        reject(error);\n                    });\n                });\n            }).catch(reject);\n        });\n\n        executeCallback(promise, callback);\n        return promise;\n    }\n\n    function executeCallback(promise, callback) {\n        if (callback) {\n            promise.then(function(result) {\n                callback(null, result);\n            }, function(error) {\n                callback(error);\n            });\n        }\n    }\n\n    var webSQLStorage = {\n        _driver: 'webSQLStorage',\n        _initStorage: _initStorage,\n        iterate: iterate,\n        getItem: getItem,\n        setItem: setItem,\n        removeItem: removeItem,\n        clear: clear,\n        length: length,\n        key: key,\n        keys: keys\n    };\n\n    if (moduleType === ModuleType.DEFINE) {\n        define('webSQLStorage', function() {\n            return webSQLStorage;\n        });\n    } else if (moduleType === ModuleType.EXPORT) {\n        module.exports = webSQLStorage;\n    } else {\n        this.webSQLStorage = webSQLStorage;\n    }\n}).call(window);\n",
    "(function() {\n    'use strict';\n\n    // Promises!\n    var Promise = (typeof module !== 'undefined' && module.exports &&\n                   typeof require !== 'undefined') ?\n                  require('promise') : this.Promise;\n\n    // Custom drivers are stored here when `defineDriver()` is called.\n    // They are shared across all instances of localForage.\n    var CustomDrivers = {};\n\n    var DriverType = {\n        INDEXEDDB: 'asyncStorage',\n        LOCALSTORAGE: 'localStorageWrapper',\n        WEBSQL: 'webSQLStorage'\n    };\n\n    var DefaultDriverOrder = [\n        DriverType.INDEXEDDB,\n        DriverType.WEBSQL,\n        DriverType.LOCALSTORAGE\n    ];\n\n    var LibraryMethods = [\n        'clear',\n        'getItem',\n        'iterate',\n        'key',\n        'keys',\n        'length',\n        'removeItem',\n        'setItem'\n    ];\n\n    var ModuleType = {\n        DEFINE: 1,\n        EXPORT: 2,\n        WINDOW: 3\n    };\n\n    var DefaultConfig = {\n        description: '',\n        driver: DefaultDriverOrder.slice(),\n        name: 'localforage',\n        // Default DB size is _JUST UNDER_ 5MB, as it's the highest size\n        // we can use without a prompt.\n        size: 4980736,\n        storeName: 'keyvaluepairs',\n        version: 1.0\n    };\n\n    // Attaching to window (i.e. no module loader) is the assumed,\n    // simple default.\n    var moduleType = ModuleType.WINDOW;\n\n    // Find out what kind of module setup we have; if none, we'll just attach\n    // localForage to the main window.\n    if (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') {\n        moduleType = ModuleType.EXPORT;\n    } else if (typeof define === 'function' && define.amd) {\n        moduleType = ModuleType.DEFINE;\n    }\n\n    // Check to see if IndexedDB is available and if it is the latest\n    // implementation; it's our preferred backend library. We use \"_spec_test\"\n    // as the name of the database because it's not the one we'll operate on,\n    // but it's useful to make sure its using the right spec.\n    // See: https://github.com/mozilla/localForage/issues/128\n    var driverSupport = (function(self) {\n        // Initialize IndexedDB; fall back to vendor-prefixed versions\n        // if needed.\n        var indexedDB = indexedDB || self.indexedDB || self.webkitIndexedDB ||\n                        self.mozIndexedDB || self.OIndexedDB ||\n                        self.msIndexedDB;\n\n        var result = {};\n\n        result[DriverType.WEBSQL] = !!self.openDatabase;\n        result[DriverType.INDEXEDDB] = !!(function() {\n            // We mimic PouchDB here; just UA test for Safari (which, as of\n            // iOS 8/Yosemite, doesn't properly support IndexedDB).\n            // IndexedDB support is broken and different from Blink's.\n            // This is faster than the test case (and it's sync), so we just\n            // do this. *SIGH*\n            // http://bl.ocks.org/nolanlawson/raw/c83e9039edf2278047e9/\n            //\n            // We test for openDatabase because IE Mobile identifies itself\n            // as Safari. Oh the lulz...\n            if (typeof self.openDatabase !== 'undefined' && self.navigator &&\n                self.navigator.userAgent &&\n                /Safari/.test(self.navigator.userAgent) &&\n                !/Chrome/.test(self.navigator.userAgent)) {\n                return false;\n            }\n            try {\n                return indexedDB &&\n                       typeof indexedDB.open === 'function' &&\n                       // Some Samsung/HTC Android 4.0-4.3 devices\n                       // have older IndexedDB specs; if this isn't available\n                       // their IndexedDB is too old for us to use.\n                       // (Replaces the onupgradeneeded test.)\n                       typeof self.IDBKeyRange !== 'undefined';\n            } catch (e) {\n                return false;\n            }\n        })();\n\n        result[DriverType.LOCALSTORAGE] = !!(function() {\n            try {\n                return (self.localStorage &&\n                        ('setItem' in self.localStorage) &&\n                        (self.localStorage.setItem));\n            } catch (e) {\n                return false;\n            }\n        })();\n\n        return result;\n    })(this);\n\n    var isArray = Array.isArray || function(arg) {\n        return Object.prototype.toString.call(arg) === '[object Array]';\n    };\n\n    function callWhenReady(localForageInstance, libraryMethod) {\n        localForageInstance[libraryMethod] = function() {\n            var _args = arguments;\n            return localForageInstance.ready().then(function() {\n                return localForageInstance[libraryMethod].apply(localForageInstance, _args);\n            });\n        };\n    }\n\n    function extend() {\n        for (var i = 1; i < arguments.length; i++) {\n            var arg = arguments[i];\n\n            if (arg) {\n                for (var key in arg) {\n                    if (arg.hasOwnProperty(key)) {\n                        if (isArray(arg[key])) {\n                            arguments[0][key] = arg[key].slice();\n                        } else {\n                            arguments[0][key] = arg[key];\n                        }\n                    }\n                }\n            }\n        }\n\n        return arguments[0];\n    }\n\n    function isLibraryDriver(driverName) {\n        for (var driver in DriverType) {\n            if (DriverType.hasOwnProperty(driver) &&\n                DriverType[driver] === driverName) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    var globalObject = this;\n\n    function LocalForage(options) {\n        this._config = extend({}, DefaultConfig, options);\n        this._driverSet = null;\n        this._ready = false;\n        this._dbInfo = null;\n\n        // Add a stub for each driver API method that delays the call to the\n        // corresponding driver method until localForage is ready. These stubs\n        // will be replaced by the driver methods as soon as the driver is\n        // loaded, so there is no performance impact.\n        for (var i = 0; i < LibraryMethods.length; i++) {\n            callWhenReady(this, LibraryMethods[i]);\n        }\n\n        this.setDriver(this._config.driver);\n    }\n\n    LocalForage.prototype.INDEXEDDB = DriverType.INDEXEDDB;\n    LocalForage.prototype.LOCALSTORAGE = DriverType.LOCALSTORAGE;\n    LocalForage.prototype.WEBSQL = DriverType.WEBSQL;\n\n    // Set any config values for localForage; can be called anytime before\n    // the first API call (e.g. `getItem`, `setItem`).\n    // We loop through options so we don't overwrite existing config\n    // values.\n    LocalForage.prototype.config = function(options) {\n        // If the options argument is an object, we use it to set values.\n        // Otherwise, we return either a specified config value or all\n        // config values.\n        if (typeof(options) === 'object') {\n            // If localforage is ready and fully initialized, we can't set\n            // any new configuration values. Instead, we return an error.\n            if (this._ready) {\n                return new Error(\"Can't call config() after localforage \" +\n                                 'has been used.');\n            }\n\n            for (var i in options) {\n                if (i === 'storeName') {\n                    options[i] = options[i].replace(/\\W/g, '_');\n                }\n\n                this._config[i] = options[i];\n            }\n\n            // after all config options are set and\n            // the driver option is used, try setting it\n            if ('driver' in options && options.driver) {\n                this.setDriver(this._config.driver);\n            }\n\n            return true;\n        } else if (typeof(options) === 'string') {\n            return this._config[options];\n        } else {\n            return this._config;\n        }\n    };\n\n    // Used to define a custom driver, shared across all instances of\n    // localForage.\n    LocalForage.prototype.defineDriver = function(driverObject, callback,\n                                                  errorCallback) {\n        var defineDriver = new Promise(function(resolve, reject) {\n            try {\n                var driverName = driverObject._driver;\n                var complianceError = new Error(\n                    'Custom driver not compliant; see ' +\n                    'https://mozilla.github.io/localForage/#definedriver'\n                );\n                var namingError = new Error(\n                    'Custom driver name already in use: ' + driverObject._driver\n                );\n\n                // A driver name should be defined and not overlap with the\n                // library-defined, default drivers.\n                if (!driverObject._driver) {\n                    reject(complianceError);\n                    return;\n                }\n                if (isLibraryDriver(driverObject._driver)) {\n                    reject(namingError);\n                    return;\n                }\n\n                var customDriverMethods = LibraryMethods.concat('_initStorage');\n                for (var i = 0; i < customDriverMethods.length; i++) {\n                    var customDriverMethod = customDriverMethods[i];\n                    if (!customDriverMethod ||\n                        !driverObject[customDriverMethod] ||\n                        typeof driverObject[customDriverMethod] !== 'function') {\n                        reject(complianceError);\n                        return;\n                    }\n                }\n\n                var supportPromise = Promise.resolve(true);\n                if ('_support'  in driverObject) {\n                    if (driverObject._support && typeof driverObject._support === 'function') {\n                        supportPromise = driverObject._support();\n                    } else {\n                        supportPromise = Promise.resolve(!!driverObject._support);\n                    }\n                }\n\n                supportPromise.then(function(supportResult) {\n                    driverSupport[driverName] = supportResult;\n                    CustomDrivers[driverName] = driverObject;\n                    resolve();\n                }, reject);\n            } catch (e) {\n                reject(e);\n            }\n        });\n\n        defineDriver.then(callback, errorCallback);\n        return defineDriver;\n    };\n\n    LocalForage.prototype.driver = function() {\n        return this._driver || null;\n    };\n\n    LocalForage.prototype.ready = function(callback) {\n        var self = this;\n\n        var ready = new Promise(function(resolve, reject) {\n            self._driverSet.then(function() {\n                if (self._ready === null) {\n                    self._ready = self._initStorage(self._config);\n                }\n\n                self._ready.then(resolve, reject);\n            }).catch(reject);\n        });\n\n        ready.then(callback, callback);\n        return ready;\n    };\n\n    LocalForage.prototype.setDriver = function(drivers, callback,\n                                               errorCallback) {\n        var self = this;\n\n        if (typeof drivers === 'string') {\n            drivers = [drivers];\n        }\n\n        this._driverSet = new Promise(function(resolve, reject) {\n            var driverName = self._getFirstSupportedDriver(drivers);\n            var error = new Error('No available storage method found.');\n\n            if (!driverName) {\n                self._driverSet = Promise.reject(error);\n                reject(error);\n                return;\n            }\n\n            self._dbInfo = null;\n            self._ready = null;\n\n            if (isLibraryDriver(driverName)) {\n                var driverPromise = new Promise(function(resolve/*, reject*/) {\n                    // We allow localForage to be declared as a module or as a\n                    // library available without AMD/require.js.\n                    if (moduleType === ModuleType.DEFINE) {\n                        require([driverName], resolve);\n                    } else if (moduleType === ModuleType.EXPORT) {\n                        // Making it browserify friendly\n                        switch (driverName) {\n                            case self.INDEXEDDB:\n                                resolve(require('./drivers/indexeddb'));\n                                break;\n                            case self.LOCALSTORAGE:\n                                resolve(require('./drivers/localstorage'));\n                                break;\n                            case self.WEBSQL:\n                                resolve(require('./drivers/websql'));\n                                break;\n                        }\n                    } else {\n                        resolve(globalObject[driverName]);\n                    }\n                });\n                driverPromise.then(function(driver) {\n                    self._extend(driver);\n                    resolve();\n                });\n            } else if (CustomDrivers[driverName]) {\n                self._extend(CustomDrivers[driverName]);\n                resolve();\n            } else {\n                self._driverSet = Promise.reject(error);\n                reject(error);\n            }\n        });\n\n        function setDriverToConfig() {\n            self._config.driver = self.driver();\n        }\n        this._driverSet.then(setDriverToConfig, setDriverToConfig);\n\n        this._driverSet.then(callback, errorCallback);\n        return this._driverSet;\n    };\n\n    LocalForage.prototype.supports = function(driverName) {\n        return !!driverSupport[driverName];\n    };\n\n    LocalForage.prototype._extend = function(libraryMethodsAndProperties) {\n        extend(this, libraryMethodsAndProperties);\n    };\n\n    // Used to determine which driver we should use as the backend for this\n    // instance of localForage.\n    LocalForage.prototype._getFirstSupportedDriver = function(drivers) {\n        if (drivers && isArray(drivers)) {\n            for (var i = 0; i < drivers.length; i++) {\n                var driver = drivers[i];\n\n                if (this.supports(driver)) {\n                    return driver;\n                }\n            }\n        }\n\n        return null;\n    };\n\n    LocalForage.prototype.createInstance = function(options) {\n        return new LocalForage(options);\n    };\n\n    // The actual localForage object that we expose as a module or via a\n    // global. It's extended by pulling in one of our other libraries.\n    var localForage = new LocalForage();\n\n    // We allow localForage to be declared as a module or as a library\n    // available without AMD/require.js.\n    if (moduleType === ModuleType.DEFINE) {\n        define('localforage', function() {\n            return localForage;\n        });\n    } else if (moduleType === ModuleType.EXPORT) {\n        module.exports = localForage;\n    } else {\n        this.localforage = localForage;\n    }\n}).call(window);\n",
    "(function() {\n    'use strict';\n\n    // Sadly, the best way to save binary data in WebSQL/localStorage is serializing\n    // it to Base64, so this is how we store it to prevent very strange errors with less\n    // verbose ways of binary <-> string data storage.\n    var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n    var BLOB_TYPE_PREFIX = '~~local_forage_type~';\n    var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;\n\n    var SERIALIZED_MARKER = '__lfsc__:';\n    var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;\n\n    // OMG the serializations!\n    var TYPE_ARRAYBUFFER = 'arbf';\n    var TYPE_BLOB = 'blob';\n    var TYPE_INT8ARRAY = 'si08';\n    var TYPE_UINT8ARRAY = 'ui08';\n    var TYPE_UINT8CLAMPEDARRAY = 'uic8';\n    var TYPE_INT16ARRAY = 'si16';\n    var TYPE_INT32ARRAY = 'si32';\n    var TYPE_UINT16ARRAY = 'ur16';\n    var TYPE_UINT32ARRAY = 'ui32';\n    var TYPE_FLOAT32ARRAY = 'fl32';\n    var TYPE_FLOAT64ARRAY = 'fl64';\n    var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH +\n                                        TYPE_ARRAYBUFFER.length;\n\n    // Get out of our habit of using `window` inline, at least.\n    var globalObject = this;\n\n    // Abstracts constructing a Blob object, so it also works in older\n    // browsers that don't support the native Blob constructor. (i.e.\n    // old QtWebKit versions, at least).\n    function _createBlob(parts, properties) {\n        parts = parts || [];\n        properties = properties || {};\n\n        try {\n            return new Blob(parts, properties);\n        } catch (err) {\n            if (err.name !== 'TypeError') {\n                throw err;\n            }\n\n            var BlobBuilder = globalObject.BlobBuilder ||\n                              globalObject.MSBlobBuilder ||\n                              globalObject.MozBlobBuilder ||\n                              globalObject.WebKitBlobBuilder;\n\n            var builder = new BlobBuilder();\n            for (var i = 0; i < parts.length; i += 1) {\n                builder.append(parts[i]);\n            }\n\n            return builder.getBlob(properties.type);\n        }\n    }\n\n    // Serialize a value, afterwards executing a callback (which usually\n    // instructs the `setItem()` callback/promise to be executed). This is how\n    // we store binary data with localStorage.\n    function serialize(value, callback) {\n        var valueString = '';\n        if (value) {\n            valueString = value.toString();\n        }\n\n        // Cannot use `value instanceof ArrayBuffer` or such here, as these\n        // checks fail when running the tests using casper.js...\n        //\n        // TODO: See why those tests fail and use a better solution.\n        if (value && (value.toString() === '[object ArrayBuffer]' ||\n                      value.buffer &&\n                      value.buffer.toString() === '[object ArrayBuffer]')) {\n            // Convert binary arrays to a string and prefix the string with\n            // a special marker.\n            var buffer;\n            var marker = SERIALIZED_MARKER;\n\n            if (value instanceof ArrayBuffer) {\n                buffer = value;\n                marker += TYPE_ARRAYBUFFER;\n            } else {\n                buffer = value.buffer;\n\n                if (valueString === '[object Int8Array]') {\n                    marker += TYPE_INT8ARRAY;\n                } else if (valueString === '[object Uint8Array]') {\n                    marker += TYPE_UINT8ARRAY;\n                } else if (valueString === '[object Uint8ClampedArray]') {\n                    marker += TYPE_UINT8CLAMPEDARRAY;\n                } else if (valueString === '[object Int16Array]') {\n                    marker += TYPE_INT16ARRAY;\n                } else if (valueString === '[object Uint16Array]') {\n                    marker += TYPE_UINT16ARRAY;\n                } else if (valueString === '[object Int32Array]') {\n                    marker += TYPE_INT32ARRAY;\n                } else if (valueString === '[object Uint32Array]') {\n                    marker += TYPE_UINT32ARRAY;\n                } else if (valueString === '[object Float32Array]') {\n                    marker += TYPE_FLOAT32ARRAY;\n                } else if (valueString === '[object Float64Array]') {\n                    marker += TYPE_FLOAT64ARRAY;\n                } else {\n                    callback(new Error('Failed to get type for BinaryArray'));\n                }\n            }\n\n            callback(marker + bufferToString(buffer));\n        } else if (valueString === '[object Blob]') {\n            // Conver the blob to a binaryArray and then to a string.\n            var fileReader = new FileReader();\n\n            fileReader.onload = function() {\n                // Backwards-compatible prefix for the blob type.\n                var str = BLOB_TYPE_PREFIX + value.type + '~' +\n                    bufferToString(this.result);\n\n                callback(SERIALIZED_MARKER + TYPE_BLOB + str);\n            };\n\n            fileReader.readAsArrayBuffer(value);\n        } else {\n            try {\n                callback(JSON.stringify(value));\n            } catch (e) {\n                console.error(\"Couldn't convert value into a JSON string: \",\n                              value);\n\n                callback(null, e);\n            }\n        }\n    }\n\n    // Deserialize data we've inserted into a value column/field. We place\n    // special markers into our strings to mark them as encoded; this isn't\n    // as nice as a meta field, but it's the only sane thing we can do whilst\n    // keeping localStorage support intact.\n    //\n    // Oftentimes this will just deserialize JSON content, but if we have a\n    // special marker (SERIALIZED_MARKER, defined above), we will extract\n    // some kind of arraybuffer/binary data/typed array out of the string.\n    function deserialize(value) {\n        // If we haven't marked this string as being specially serialized (i.e.\n        // something other than serialized JSON), we can just return it and be\n        // done with it.\n        if (value.substring(0,\n            SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {\n            return JSON.parse(value);\n        }\n\n        // The following code deals with deserializing some kind of Blob or\n        // TypedArray. First we separate out the type of data we're dealing\n        // with from the data itself.\n        var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);\n        var type = value.substring(SERIALIZED_MARKER_LENGTH,\n                                   TYPE_SERIALIZED_MARKER_LENGTH);\n\n        var blobType;\n        // Backwards-compatible blob type serialization strategy.\n        // DBs created with older versions of localForage will simply not have the blob type.\n        if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {\n            var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);\n            blobType = matcher[1];\n            serializedString = serializedString.substring(matcher[0].length);\n        }\n        var buffer = stringToBuffer(serializedString);\n\n        // Return the right type based on the code/type set during\n        // serialization.\n        switch (type) {\n            case TYPE_ARRAYBUFFER:\n                return buffer;\n            case TYPE_BLOB:\n                return _createBlob([buffer], {type: blobType});\n            case TYPE_INT8ARRAY:\n                return new Int8Array(buffer);\n            case TYPE_UINT8ARRAY:\n                return new Uint8Array(buffer);\n            case TYPE_UINT8CLAMPEDARRAY:\n                return new Uint8ClampedArray(buffer);\n            case TYPE_INT16ARRAY:\n                return new Int16Array(buffer);\n            case TYPE_UINT16ARRAY:\n                return new Uint16Array(buffer);\n            case TYPE_INT32ARRAY:\n                return new Int32Array(buffer);\n            case TYPE_UINT32ARRAY:\n                return new Uint32Array(buffer);\n            case TYPE_FLOAT32ARRAY:\n                return new Float32Array(buffer);\n            case TYPE_FLOAT64ARRAY:\n                return new Float64Array(buffer);\n            default:\n                throw new Error('Unkown type: ' + type);\n        }\n    }\n\n    function stringToBuffer(serializedString) {\n        // Fill the string into a ArrayBuffer.\n        var bufferLength = serializedString.length * 0.75;\n        var len = serializedString.length;\n        var i;\n        var p = 0;\n        var encoded1, encoded2, encoded3, encoded4;\n\n        if (serializedString[serializedString.length - 1] === '=') {\n            bufferLength--;\n            if (serializedString[serializedString.length - 2] === '=') {\n                bufferLength--;\n            }\n        }\n\n        var buffer = new ArrayBuffer(bufferLength);\n        var bytes = new Uint8Array(buffer);\n\n        for (i = 0; i < len; i+=4) {\n            encoded1 = BASE_CHARS.indexOf(serializedString[i]);\n            encoded2 = BASE_CHARS.indexOf(serializedString[i+1]);\n            encoded3 = BASE_CHARS.indexOf(serializedString[i+2]);\n            encoded4 = BASE_CHARS.indexOf(serializedString[i+3]);\n\n            /*jslint bitwise: true */\n            bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n            bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n            bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n        }\n        return buffer;\n    }\n\n    // Converts a buffer to a string to store, serialized, in the backend\n    // storage library.\n    function bufferToString(buffer) {\n        // base64-arraybuffer\n        var bytes = new Uint8Array(buffer);\n        var base64String = '';\n        var i;\n\n        for (i = 0; i < bytes.length; i += 3) {\n            /*jslint bitwise: true */\n            base64String += BASE_CHARS[bytes[i] >> 2];\n            base64String += BASE_CHARS[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n            base64String += BASE_CHARS[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n            base64String += BASE_CHARS[bytes[i + 2] & 63];\n        }\n\n        if ((bytes.length % 3) === 2) {\n            base64String = base64String.substring(0, base64String.length - 1) + '=';\n        } else if (bytes.length % 3 === 1) {\n            base64String = base64String.substring(0, base64String.length - 2) + '==';\n        }\n\n        return base64String;\n    }\n\n    var localforageSerializer = {\n        serialize: serialize,\n        deserialize: deserialize,\n        stringToBuffer: stringToBuffer,\n        bufferToString: bufferToString\n    };\n\n    if (typeof module !== 'undefined' && module.exports && typeof require !== 'undefined') {\n        module.exports = localforageSerializer;\n    } else if (typeof define === 'function' && define.amd) {\n        define('localforageSerializer', function() {\n            return localforageSerializer;\n        });\n    } else {\n        this.localforageSerializer = localforageSerializer;\n    }\n}).call(window);\n",
    "\nvar ClassList = require(\"class-list\");\nvar insertCss = require('insert-css');\n\nvar _html = Buffer(\"PGEgaHJlZj0nI211dGUnIGlkPSdwb2VtLW11dGUnIGNsYXNzPSdwb2VtLW11dGUnIHRpdGxlPSdIaXQgUyBrZXkgdG8gbXV0ZSc+Cgk8c3ZnIGNsYXNzPSdwb2VtLW11dGUtc3ZnJyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJCSB2aWV3Qm94PSIwIDAgNjQwIDQxNC40IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA2NDAgNDE0LjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPgoJPHBhdGggY2xhc3M9J3BvZW0tbXV0ZS1zcGVha2VyJwoJCWQ9Ik0yOTQuNCwzNzlsLTExMi41LTc4LjljLTMuOC0yLjctOC4zLTQuMS0xMy00LjFINzMuNkM2MS4xLDI5Niw1MSwyODUuOSw1MSwyNzMuNFYxNDIuNmMwLTEyLjUsMTAuMS0yMi42LDIyLjYtMjIuNmg5Ni4yCgkJYzQuNywwLDkuMi0xLjQsMTMuMS00LjFsMTExLjUtNzguN2MxNS0xMC42LDM1LjcsMC4xLDM1LjcsMTguNXYzMDQuOEMzMzAsMzc4LjgsMzA5LjQsMzg5LjUsMjk0LjQsMzc5eiIvPgoJPHBhdGggY2xhc3M9J3BvZW0tbXV0ZS14JwoJCWQ9Ik01NjUuMywyNjkuM2wtNTkuMS01OS4xbDU5LjEtNTkuMWM3LjEtNy4xLDcuMS0xOC43LDAtMjUuOGMtNy4xLTcuMS0xOC43LTcuMS0yNS44LDBsLTU5LjEsNTkuMWwtNTkuMS01OS4xCgkJYy03LjEtNy4xLTE4LjctNy4xLTI1LjgsMGwwLDBjLTcuMSw3LjEtNy4xLDE4LjcsMCwyNS44bDU5LjEsNTkuMWwtNTkuMSw1OS4xYy03LjEsNy4xLTcuMSwxOC43LDAsMjUuOGM3LjEsNy4xLDE4LjcsNy4xLDI1LjgsMAoJCWw1OS4xLTU5LjFsNTkuMSw1OS4xYzcuMSw3LjEsMTguNyw3LjEsMjUuOCwwdjBDNTcyLjQsMjg3LjksNTcyLjQsMjc2LjQsNTY1LjMsMjY5LjN6Ii8+Cgk8Zz4KCQk8Zz4KCQkJPHBhdGggY2xhc3M9J3BvZW0tbXV0ZS13YXZlJwoJCQkJZD0iTTM5NS4yLDMxNC4yYy02LjMsMC0xMi40LTMuNy0xNS4xLTkuOGMtMi44LTYuNS0xLjItMTMuNywzLjUtMTguNGMwLjUtMC42LDEtMS4yLDEuNi0xLjhjMi4yLTIuMiw0LjMtMy42LDYuMS00LjcKCQkJCWMxLTEuMSwyLTIuMiwzLTMuM2MxLjctMS44LDMuNC0zLjcsNS4zLTUuN2MxNi42LTE5LjksMjQuNC00Ni43LDIxLjYtNzMuN2MtMi44LTI2LjktMTYtNTEuMy0zNi4yLTY2LjljLTcuMi01LjYtOC41LTE1LjktMy0yMy4xCgkJCQljNS42LTcuMiwxNS45LTguNSwyMy4xLTNjMjcuMywyMS4xLDQ1LjEsNTMuNyw0OC44LDg5LjZjMy44LDM2LjEtNyw3Mi4yLTI5LjYsOTlsLTAuNCwwLjVsLTAuNSwwLjVjLTEuNiwxLjYtMy4xLDMuMi00LjcsNQoJCQkJYy0xLjgsMi0zLjcsNC4xLTUuOSw2LjNsLTEuOSwxLjlsLTIuNCwxLjJjMCwwLDAsMC0wLjEsMGMtMS40LDEuNy0zLjUsMy44LTYuOSw1LjJDMzk5LjcsMzEzLjgsMzk3LjUsMzE0LjIsMzk1LjIsMzE0LjJ6Ii8+CgkJPC9nPgoJCTxnPgoJCQk8cGF0aCBjbGFzcz0ncG9lbS1tdXRlLXdhdmUnCgkJCQlkPSJNNDM4LjYsMzU2LjJjLTYuMywwLTEyLjQtMy43LTE1LjEtOS44Yy0yLjktNi42LTEuMS0xNC4xLDMuOS0xOC44YzAuNS0wLjcsMS4yLTEuNiwyLjEtMi40YzMtMyw1LjktNC44LDguMy02LjIKCQkJCWMxLjgtMS45LDMuNi0zLjgsNS40LTUuOWMyLjQtMi43LDQuOS01LjUsNy44LTguNGMyNS43LTMwLjcsMzcuOS03Mi4xLDMzLjUtMTEzLjhjLTQuNC00MS41LTI0LjgtNzkuMS01NS45LTEwMy4yCgkJCQljLTcuMi01LjYtOC41LTE1LjktMy0yMy4xYzUuNi03LjIsMTUuOS04LjUsMjMuMS0zYzM4LjIsMjkuNiw2My4yLDc1LjQsNjguNiwxMjUuOGM1LjQsNTAuOC05LjgsMTAxLjUtNDEuNiwxMzkuMWwtMC40LDAuNQoJCQkJbC0wLjUsMC41Yy0yLjQsMi40LTQuNyw1LTcuMSw3LjZjLTIuNiwyLjktNS4yLDUuOC04LjMsOC45bC0xLjksMS45bC0yLjQsMS4yYy0wLjgsMC40LTEuNCwwLjctMS43LDAuOWMtMS4zLDEuOS0zLjgsNC44LTguMSw2LjYKCQkJCUM0NDMsMzU1LjcsNDQwLjgsMzU2LjIsNDM4LjYsMzU2LjJ6Ii8+CgkJPC9nPgoJCTxnPgoJCQk8cGF0aCBjbGFzcz0ncG9lbS1tdXRlLXdhdmUnCgkJCQlkPSJNNDgzLjYsMzk1LjZjLTYuMywwLTEyLjQtMy43LTE1LjEtOS44Yy0zLTYuNy0xLjEtMTQuNCw0LjItMTljMC42LTAuOSwxLjQtMS45LDIuNS0yLjljMy43LTMuNyw3LjMtNS45LDEwLjMtNy41CgkJCQljMi42LTIuNyw1LTUuNCw3LjYtOC4zYzMuMi0zLjUsNi40LTcuMSwxMC4xLTEwLjhjMzQuMy00MC44LDUwLjYtOTYsNDQuOC0xNTEuNmMtNS44LTU1LjItMzMtMTA1LjItNzQuNS0xMzcuMwoJCQkJYy03LjItNS42LTguNS0xNS45LTMtMjMuMWM1LjYtNy4yLDE1LjktOC41LDIzLjEtM2M0OC42LDM3LjYsODAuMyw5NS45LDg3LjEsMTYwYzYuOCw2NC43LTEyLjQsMTI5LjEtNTIuOCwxNzYuOWwtMC40LDAuNQoJCQkJbC0wLjUsMC41Yy0zLjMsMy4zLTYuMiw2LjYtOS40LDEwLjFjLTMuMywzLjctNi43LDcuNS0xMC42LDExLjNsLTEuOSwxLjlsLTIuNCwxLjJjLTEuOCwwLjktMi44LDEuNC0zLjYsMgoJCQkJYy0xLjMsMi0zLjksNS41LTguOSw3LjdDNDg4LjEsMzk1LjIsNDg1LjgsMzk1LjYsNDgzLjYsMzk1LjZ6Ii8+CgkJPC9nPgoJPC9nPgoJPC9zdmc+CjwvYT4=\",\"base64\");\nvar _css = Buffer(\"LnBvZW0tbXV0ZS1zdmcgewogICAgZmlsbDogI2ZmZjsKCW9wYWNpdHk6MC44Owp9Ci5wb2VtLW11dGUtbXV0ZWQgLnBvZW0tbXV0ZS13YXZlIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLnBvZW0tbXV0ZS11bm11dGVkIC5wb2VtLW11dGUteCB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5wb2VtLW11dGUteCB7CiAgICBmaWxsOiByZWQ7Cn0KLnBvZW0tbXV0ZS1zdmc6aG92ZXIgewogICAgb3BhY2l0eToxOwp9\",\"base64\");\nvar _cssInserted = false;\n\n\nfunction createElement( html, className ) {\n\tvar div = document.createElement('div');\n\tdiv.innerHTML = html;\n\treturn div.getElementsByClassName( className )[0]\n}\n\nmodule.exports = function muteEl( mute ) {\n\t\n\tvar el = createElement( _html, 'poem-mute' );\n\tvar elClass = ClassList( el );\n\t\n\tif( !_cssInserted ) {\n\t\tinsertCss( _css );\n\t\t_cssInserted = true;\n\t}\n\t\n\tvar updateClass = function() {\n\t\tif( mute.muted() ) {\n\t\t\telClass.remove('poem-mute-unmuted');\n\t\t\telClass.add('poem-mute-muted');\t\t\n\t\t} else {\n\t\t\telClass.remove('poem-mute-muted');\n\t\t\telClass.add('poem-mute-unmuted');\n\t\t}\n\t};\n\t\t\n\tmute.emitter.on( 'change', updateClass );\n\tupdateClass();\n\t\n\t\n\tel.addEventListener( 'click', function( e ) {\n\t\tmute.toggle();\n\t\tupdateClass();\n\t\t\n\t\te.preventDefault();\n\t\te.stopImmediatePropagation();\n\t}, true);\n\t\n\treturn el;\n};",
    "var createTypes = require('./types')\n\n\nmodule.exports = function(THREE) {\n\n    var types = createTypes(THREE) \n\n    return function create(glShader, opts) {\n        opts = opts||{}\n\n        if (typeof opts.colors === 'string')\n            opts.colors = [opts.colors]\n        \n        var tUniforms = types( glShader.uniforms, opts.colors )\n        var tAttribs = types( glShader.attributes, opts.colors )\n            \n        //clear the attribute arrays\n        for (var k in tAttribs) {\n            tAttribs[k].value = []\n        }\n\n        return {\n            vertexShader: glShader.vertex,\n            fragmentShader: glShader.fragment,\n            uniforms: tUniforms,\n            attributes: tAttribs\n        }\n    }\n}",
    "var typeMap = {\n    'int': 'i',\n    'float': 'f',\n    'ivec2': 'i2',\n    'ivec3': 'i3',\n    'ivec4': 'i4',\n    'vec2': 'v2',\n    'vec3': 'v3',\n    'vec4': 'v4',\n    'mat4': 'm4',\n    'mat3': 'm3',\n    'sampler2D': 't',\n    'samplerCube': 't'\n}\n\nfunction create(THREE) {\n    function newInstance(type, isArray) {\n        switch (type) {\n            case 'float': \n            case 'int':\n                return 0\n            case 'vec2':\n            case 'ivec2':\n                return new THREE.Vector2()\n            case 'vec3':\n            case 'ivec3':\n                return new THREE.Vector3()\n            case 'vec4':\n            case 'ivec4':\n                return new THREE.Vector4()\n            case 'mat4':\n                return new THREE.Matrix4()\n            case 'mat3':\n                return new THREE.Matrix3()\n            case 'samplerCube':\n            case 'sampler2D':\n                return new THREE.Texture()\n            default:\n                return undefined\n        }\n    }\n\n    function defaultValue(type, isArray, arrayLen) {\n        if (isArray) {\n            //ThreeJS flattens ivec3 type\n            //(we don't support 'fv' type)\n            if (type === 'ivec3')\n                arrayLen *= 3\n            var ar = new Array(arrayLen)\n            for (var i=0; i<ar.length; i++)\n                ar[i] = newInstance(type, isArray)\n            return ar\n        }  \n        return newInstance(type)\n    }\n\n    function getType(type, isArray) {\n        if (!isArray)\n            return typeMap[type]\n\n        if (type === 'int')\n            return 'iv1'\n        else if (type === 'float')\n            return 'fv1'\n        else\n            return typeMap[type]+'v'\n    }\n\n    return function setupUniforms(glUniforms, colorNames) {\n        if (!Array.isArray(colorNames))\n            colorNames = Array.prototype.slice.call(arguments, 1)\n\n        var result = {}\n        var arrays = {}\n\n        //map uniform types\n        glUniforms.forEach(function(uniform) {\n            var name = uniform.name\n            var isArray = /(.+)\\[[0-9]+\\]/.exec(name)\n\n            //special case: colors...\n            if (colorNames && colorNames.indexOf(name) !== -1) {\n                if (isArray)\n                    throw new Error(\"array of color uniforms not supported\")\n                if (uniform.type !== 'vec3')\n                    throw new Error(\"ThreeJS expects vec3 for Color uniforms\") \n                result[name] = {\n                    type: 'c',\n                    value: new THREE.Color()\n                }\n                return\n            }\n\n            if (isArray) {\n                name = isArray[1]\n                if (name in arrays) \n                    arrays[name].count++ \n                else\n                    arrays[name] = { count: 1, type: uniform.type }\n            }\n            result[name] = { \n                type: getType(uniform.type, isArray), \n                value: isArray ? null : defaultValue(uniform.type) \n            }\n        })\n\n        //now clean up any array values\n        for (var k in result) {\n            var u = result[k]\n            if (k in arrays) { //is an array\n                var a = arrays[k]\n                u.value = defaultValue(a.type, true, a.count)\n            }\n        }\n        return result\n    }\n}\n\nmodule.exports = create",
    "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('is-array')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\nBuffer.poolSize = 8192 // not used by this implementation\n\nvar kMaxLength = 0x3fffffff\nvar rootParent = {}\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Note:\n *\n * - Implementation must support adding new properties to `Uint8Array` instances.\n *   Firefox 4-29 lacked support, fixed in Firefox 30+.\n *   See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *  - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *  - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *    incorrect length in some situations.\n *\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they will\n * get the Object implementation, which is slower but will work correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = (function () {\n  try {\n    var buf = new ArrayBuffer(0)\n    var arr = new Uint8Array(buf)\n    arr.foo = function () { return 42 }\n    return 42 === arr.foo() && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        new Uint8Array(1).subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n})()\n\n/**\n * Class: Buffer\n * =============\n *\n * The Buffer constructor returns instances of `Uint8Array` that are augmented\n * with function properties for all the node `Buffer` API functions. We use\n * `Uint8Array` so that square bracket notation works as expected -- it returns\n * a single octet.\n *\n * By augmenting the instances, we can avoid modifying the `Uint8Array`\n * prototype.\n */\nfunction Buffer (subject, encoding, noZero) {\n  if (!(this instanceof Buffer))\n    return new Buffer(subject, encoding, noZero)\n\n  var type = typeof subject\n\n  // Find the length\n  var length\n  if (type === 'number')\n    length = subject > 0 ? subject >>> 0 : 0\n  else if (type === 'string') {\n    length = Buffer.byteLength(subject, encoding)\n  } else if (type === 'object' && subject !== null) { // assume object is array-like\n    if (subject.type === 'Buffer' && isArray(subject.data))\n      subject = subject.data\n    length = +subject.length > 0 ? Math.floor(+subject.length) : 0\n  } else\n    throw new TypeError('must start with number, buffer, array or string')\n\n  if (length > kMaxLength)\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n      'size: 0x' + kMaxLength.toString(16) + ' bytes')\n\n  var buf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Preferred: Return an augmented `Uint8Array` instance for best performance\n    buf = Buffer._augment(new Uint8Array(length))\n  } else {\n    // Fallback: Return THIS instance of Buffer (created by `new`)\n    buf = this\n    buf.length = length\n    buf._isBuffer = true\n  }\n\n  var i\n  if (Buffer.TYPED_ARRAY_SUPPORT && typeof subject.byteLength === 'number') {\n    // Speed optimization -- use set if we're copying from a typed array\n    buf._set(subject)\n  } else if (isArrayish(subject)) {\n    // Treat array-ish objects as a byte array\n    if (Buffer.isBuffer(subject)) {\n      for (i = 0; i < length; i++)\n        buf[i] = subject.readUInt8(i)\n    } else {\n      for (i = 0; i < length; i++)\n        buf[i] = ((subject[i] % 256) + 256) % 256\n    }\n  } else if (type === 'string') {\n    buf.write(subject, 0, encoding)\n  } else if (type === 'number' && !Buffer.TYPED_ARRAY_SUPPORT && !noZero) {\n    for (i = 0; i < length; i++) {\n      buf[i] = 0\n    }\n  }\n\n  if (length > 0 && length <= Buffer.poolSize)\n    buf.parent = rootParent\n\n  return buf\n}\n\nfunction SlowBuffer(subject, encoding, noZero) {\n  if (!(this instanceof SlowBuffer))\n    return new SlowBuffer(subject, encoding, noZero)\n\n  var buf = new Buffer(subject, encoding, noZero)\n  delete buf.parent\n  return buf\n}\n\nBuffer.isBuffer = function (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b))\n    throw new TypeError('Arguments must be Buffers')\n\n  var x = a.length\n  var y = b.length\n  for (var i = 0, len = Math.min(x, y); i < len && a[i] === b[i]; i++) {}\n  if (i !== len) {\n    x = a[i]\n    y = b[i]\n  }\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function (list, totalLength) {\n  if (!isArray(list)) throw new TypeError('Usage: Buffer.concat(list[, length])')\n\n  if (list.length === 0) {\n    return new Buffer(0)\n  } else if (list.length === 1) {\n    return list[0]\n  }\n\n  var i\n  if (totalLength === undefined) {\n    totalLength = 0\n    for (i = 0; i < list.length; i++) {\n      totalLength += list[i].length\n    }\n  }\n\n  var buf = new Buffer(totalLength)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var item = list[i]\n    item.copy(buf, pos)\n    pos += item.length\n  }\n  return buf\n}\n\nBuffer.byteLength = function (str, encoding) {\n  var ret\n  str = str + ''\n  switch (encoding || 'utf8') {\n    case 'ascii':\n    case 'binary':\n    case 'raw':\n      ret = str.length\n      break\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      ret = str.length * 2\n      break\n    case 'hex':\n      ret = str.length >>> 1\n      break\n    case 'utf8':\n    case 'utf-8':\n      ret = utf8ToBytes(str).length\n      break\n    case 'base64':\n      ret = base64ToBytes(str).length\n      break\n    default:\n      ret = str.length\n  }\n  return ret\n}\n\n// pre-set for values that may exist in the future\nBuffer.prototype.length = undefined\nBuffer.prototype.parent = undefined\n\n// toString(encoding, start=0, end=buffer.length)\nBuffer.prototype.toString = function (encoding, start, end) {\n  var loweredCase = false\n\n  start = start >>> 0\n  end = end === undefined || end === Infinity ? this.length : end >>> 0\n\n  if (!encoding) encoding = 'utf8'\n  if (start < 0) start = 0\n  if (end > this.length) end = this.length\n  if (end <= start) return ''\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase)\n          throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.equals = function (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max)\n      str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  return Buffer.compare(this, b)\n}\n\n// `get` will be removed in Node 0.13+\nBuffer.prototype.get = function (offset) {\n  console.log('.get() is deprecated. Access using array indexes instead.')\n  return this.readUInt8(offset)\n}\n\n// `set` will be removed in Node 0.13+\nBuffer.prototype.set = function (v, offset) {\n  console.log('.set() is deprecated. Access using array indexes instead.')\n  return this.writeUInt8(v, offset)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var byte = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(byte)) throw new Error('Invalid hex string')\n    buf[offset + i] = byte\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  var charsWritten = blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n  return charsWritten\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  var charsWritten = blitBuffer(asciiToBytes(string), buf, offset, length)\n  return charsWritten\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  var charsWritten = blitBuffer(base64ToBytes(string), buf, offset, length)\n  return charsWritten\n}\n\nfunction utf16leWrite (buf, string, offset, length) {\n  var charsWritten = blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length, 2)\n  return charsWritten\n}\n\nBuffer.prototype.write = function (string, offset, length, encoding) {\n  // Support both (string, offset, length, encoding)\n  // and the legacy (string, encoding, offset, length)\n  if (isFinite(offset)) {\n    if (!isFinite(length)) {\n      encoding = length\n      length = undefined\n    }\n  } else {  // legacy\n    var swap = encoding\n    encoding = offset\n    offset = length\n    length = swap\n  }\n\n  offset = Number(offset) || 0\n\n  if (length < 0 || offset < 0 || offset > this.length)\n    throw new RangeError('attempt to write outside buffer bounds');\n\n  var remaining = this.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n  encoding = String(encoding || 'utf8').toLowerCase()\n\n  var ret\n  switch (encoding) {\n    case 'hex':\n      ret = hexWrite(this, string, offset, length)\n      break\n    case 'utf8':\n    case 'utf-8':\n      ret = utf8Write(this, string, offset, length)\n      break\n    case 'ascii':\n      ret = asciiWrite(this, string, offset, length)\n      break\n    case 'binary':\n      ret = binaryWrite(this, string, offset, length)\n      break\n    case 'base64':\n      ret = base64Write(this, string, offset, length)\n      break\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      ret = utf16leWrite(this, string, offset, length)\n      break\n    default:\n      throw new TypeError('Unknown encoding: ' + encoding)\n  }\n  return ret\n}\n\nBuffer.prototype.toJSON = function () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  var res = ''\n  var tmp = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    if (buf[i] <= 0x7F) {\n      res += decodeUtf8Char(tmp) + String.fromCharCode(buf[i])\n      tmp = ''\n    } else {\n      tmp += '%' + buf[i].toString(16)\n    }\n  }\n\n  return res + decodeUtf8Char(tmp)\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len;\n    if (start < 0)\n      start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0)\n      end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start)\n    end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = Buffer._augment(this.subarray(start, end))\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined, true)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  if (newBuf.length)\n    newBuf.parent = this.parent || this\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0)\n    throw new RangeError('offset is not uint')\n  if (offset + ext > length)\n    throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100))\n    val += this[offset + i] * mul\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100))\n    val += this[offset + --byteLength] * mul;\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n      ((this[offset + 1] << 16) |\n      (this[offset + 2] << 8) |\n      this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100))\n    val += this[offset + i] * mul\n  mul *= 0x80\n\n  if (val >= mul)\n    val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100))\n    val += this[offset + --i] * mul\n  mul *= 0x80\n\n  if (val >= mul)\n    val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80))\n    return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16) |\n      (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n      (this[offset + 1] << 16) |\n      (this[offset + 2] << 8) |\n      (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function (offset, noAssert) {\n  if (!noAssert)\n    checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100))\n    this[offset + i] = (value / mul) >>> 0 & 0xFF\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100))\n    this[offset + i] = (value / mul) >>> 0 & 0xFF\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = value\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n  } else objectWriteUInt16(this, value, offset, true)\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = value\n  } else objectWriteUInt16(this, value, offset, false)\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = value\n  } else objectWriteUInt32(this, value, offset, true)\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = value\n  } else objectWriteUInt32(this, value, offset, false)\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkInt(this,\n             value,\n             offset,\n             byteLength,\n             Math.pow(2, 8 * byteLength - 1) - 1,\n             -Math.pow(2, 8 * byteLength - 1))\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100))\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkInt(this,\n             value,\n             offset,\n             byteLength,\n             Math.pow(2, 8 * byteLength - 1) - 1,\n             -Math.pow(2, 8 * byteLength - 1))\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = value < 0 ? 1 : 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100))\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = value\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n  } else objectWriteUInt16(this, value, offset, true)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = value\n  } else objectWriteUInt16(this, value, offset, false)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else objectWriteUInt32(this, value, offset, true)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert)\n    checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = value\n  } else objectWriteUInt32(this, value, offset, false)\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (value > max || value < min) throw new RangeError('value is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('index out of range')\n  if (offset < 0) throw new RangeError('index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert)\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert)\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function (target, target_start, start, end) {\n  var source = this\n\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (target_start >= target.length) target_start = target.length\n  if (!target_start) target_start = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || source.length === 0) return 0\n\n  // Fatal error conditions\n  if (target_start < 0)\n    throw new RangeError('targetStart out of bounds')\n  if (start < 0 || start >= source.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length)\n    end = this.length\n  if (target.length - target_start < end - start)\n    end = target.length - target_start + start\n\n  var len = end - start\n\n  if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < len; i++) {\n      target[i + target_start] = this[i + start]\n    }\n  } else {\n    target._set(this.subarray(start, start + len), target_start)\n  }\n\n  return len\n}\n\n// fill(value, start=0, end=buffer.length)\nBuffer.prototype.fill = function (value, start, end) {\n  if (!value) value = 0\n  if (!start) start = 0\n  if (!end) end = this.length\n\n  if (end < start) throw new RangeError('end < start')\n\n  // Fill 0 bytes; we're done\n  if (end === start) return\n  if (this.length === 0) return\n\n  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')\n  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')\n\n  var i\n  if (typeof value === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = value\n    }\n  } else {\n    var bytes = utf8ToBytes(value.toString())\n    var len = bytes.length\n    for (i = start; i < end; i++) {\n      this[i] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n/**\n * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.\n * Added in Node 0.12. Only available in browsers that support ArrayBuffer.\n */\nBuffer.prototype.toArrayBuffer = function () {\n  if (typeof Uint8Array !== 'undefined') {\n    if (Buffer.TYPED_ARRAY_SUPPORT) {\n      return (new Buffer(this)).buffer\n    } else {\n      var buf = new Uint8Array(this.length)\n      for (var i = 0, len = buf.length; i < len; i += 1) {\n        buf[i] = this[i]\n      }\n      return buf.buffer\n    }\n  } else {\n    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')\n  }\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar BP = Buffer.prototype\n\n/**\n * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods\n */\nBuffer._augment = function (arr) {\n  arr.constructor = Buffer\n  arr._isBuffer = true\n\n  // save reference to original Uint8Array get/set methods before overwriting\n  arr._get = arr.get\n  arr._set = arr.set\n\n  // deprecated, will be removed in node 0.13+\n  arr.get = BP.get\n  arr.set = BP.set\n\n  arr.write = BP.write\n  arr.toString = BP.toString\n  arr.toLocaleString = BP.toString\n  arr.toJSON = BP.toJSON\n  arr.equals = BP.equals\n  arr.compare = BP.compare\n  arr.copy = BP.copy\n  arr.slice = BP.slice\n  arr.readUIntLE = BP.readUIntLE\n  arr.readUIntBE = BP.readUIntBE\n  arr.readUInt8 = BP.readUInt8\n  arr.readUInt16LE = BP.readUInt16LE\n  arr.readUInt16BE = BP.readUInt16BE\n  arr.readUInt32LE = BP.readUInt32LE\n  arr.readUInt32BE = BP.readUInt32BE\n  arr.readIntLE = BP.readIntLE\n  arr.readIntBE = BP.readIntBE\n  arr.readInt8 = BP.readInt8\n  arr.readInt16LE = BP.readInt16LE\n  arr.readInt16BE = BP.readInt16BE\n  arr.readInt32LE = BP.readInt32LE\n  arr.readInt32BE = BP.readInt32BE\n  arr.readFloatLE = BP.readFloatLE\n  arr.readFloatBE = BP.readFloatBE\n  arr.readDoubleLE = BP.readDoubleLE\n  arr.readDoubleBE = BP.readDoubleBE\n  arr.writeUInt8 = BP.writeUInt8\n  arr.writeUIntLE = BP.writeUIntLE\n  arr.writeUIntBE = BP.writeUIntBE\n  arr.writeUInt16LE = BP.writeUInt16LE\n  arr.writeUInt16BE = BP.writeUInt16BE\n  arr.writeUInt32LE = BP.writeUInt32LE\n  arr.writeUInt32BE = BP.writeUInt32BE\n  arr.writeIntLE = BP.writeIntLE\n  arr.writeIntBE = BP.writeIntBE\n  arr.writeInt8 = BP.writeInt8\n  arr.writeInt16LE = BP.writeInt16LE\n  arr.writeInt16BE = BP.writeInt16BE\n  arr.writeInt32LE = BP.writeInt32LE\n  arr.writeInt32BE = BP.writeInt32BE\n  arr.writeFloatLE = BP.writeFloatLE\n  arr.writeFloatBE = BP.writeFloatBE\n  arr.writeDoubleLE = BP.writeDoubleLE\n  arr.writeDoubleBE = BP.writeDoubleBE\n  arr.fill = BP.fill\n  arr.inspect = BP.inspect\n  arr.toArrayBuffer = BP.toArrayBuffer\n\n  return arr\n}\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-z\\-]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction isArrayish (subject) {\n  return isArray(subject) || Buffer.isBuffer(subject) ||\n      subject && typeof subject === 'object' &&\n      typeof subject.length === 'number'\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes(string, units) {\n  var codePoint, length = string.length\n  var leadSurrogate = null\n  units = units || Infinity\n  var bytes = []\n  var i = 0\n\n  for (; i<length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n\n      // last char was a lead\n      if (leadSurrogate) {\n\n        // 2 leads in a row\n        if (codePoint < 0xDC00) {\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          leadSurrogate = codePoint\n          continue\n        }\n\n        // valid surrogate pair\n        else {\n          codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000\n          leadSurrogate = null\n        }\n      }\n\n      // no lead yet\n      else {\n\n        // unexpected trail\n        if (codePoint > 0xDBFF) {\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // unpaired lead\n        else if (i + 1 === length) {\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        else {\n          leadSurrogate = codePoint\n          continue\n        }\n      }\n    }\n\n    // valid bmp char, but last char was a lead\n    else if (leadSurrogate) {\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n      leadSurrogate = null\n    }\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    }\n    else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      );\n    }\n    else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    }\n    else if (codePoint < 0x200000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      );\n    }\n    else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length, unitSize) {\n  if (unitSize) length -= length % unitSize;\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length))\n      break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction decodeUtf8Char (str) {\n  try {\n    return decodeURIComponent(str)\n  } catch (err) {\n    return String.fromCharCode(0xFFFD) // UTF 8 invalid char\n  }\n}\n",
    "var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n;(function (exports) {\n\t'use strict';\n\n  var Arr = (typeof Uint8Array !== 'undefined')\n    ? Uint8Array\n    : Array\n\n\tvar PLUS   = '+'.charCodeAt(0)\n\tvar SLASH  = '/'.charCodeAt(0)\n\tvar NUMBER = '0'.charCodeAt(0)\n\tvar LOWER  = 'a'.charCodeAt(0)\n\tvar UPPER  = 'A'.charCodeAt(0)\n\tvar PLUS_URL_SAFE = '-'.charCodeAt(0)\n\tvar SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n\tfunction decode (elt) {\n\t\tvar code = elt.charCodeAt(0)\n\t\tif (code === PLUS ||\n\t\t    code === PLUS_URL_SAFE)\n\t\t\treturn 62 // '+'\n\t\tif (code === SLASH ||\n\t\t    code === SLASH_URL_SAFE)\n\t\t\treturn 63 // '/'\n\t\tif (code < NUMBER)\n\t\t\treturn -1 //no match\n\t\tif (code < NUMBER + 10)\n\t\t\treturn code - NUMBER + 26 + 26\n\t\tif (code < UPPER + 26)\n\t\t\treturn code - UPPER\n\t\tif (code < LOWER + 26)\n\t\t\treturn code - LOWER + 26\n\t}\n\n\tfunction b64ToByteArray (b64) {\n\t\tvar i, j, l, tmp, placeHolders, arr\n\n\t\tif (b64.length % 4 > 0) {\n\t\t\tthrow new Error('Invalid string. Length must be a multiple of 4')\n\t\t}\n\n\t\t// the number of equal signs (place holders)\n\t\t// if there are two placeholders, than the two characters before it\n\t\t// represent one byte\n\t\t// if there is only one, then the three characters before it represent 2 bytes\n\t\t// this is just a cheap hack to not do indexOf twice\n\t\tvar len = b64.length\n\t\tplaceHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0\n\n\t\t// base64 is 4/3 + up to two characters of the original data\n\t\tarr = new Arr(b64.length * 3 / 4 - placeHolders)\n\n\t\t// if there are placeholders, only get up to the last complete 4 chars\n\t\tl = placeHolders > 0 ? b64.length - 4 : b64.length\n\n\t\tvar L = 0\n\n\t\tfunction push (v) {\n\t\t\tarr[L++] = v\n\t\t}\n\n\t\tfor (i = 0, j = 0; i < l; i += 4, j += 3) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n\t\t\tpush((tmp & 0xFF0000) >> 16)\n\t\t\tpush((tmp & 0xFF00) >> 8)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\tif (placeHolders === 2) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n\t\t\tpush(tmp & 0xFF)\n\t\t} else if (placeHolders === 1) {\n\t\t\ttmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n\t\t\tpush((tmp >> 8) & 0xFF)\n\t\t\tpush(tmp & 0xFF)\n\t\t}\n\n\t\treturn arr\n\t}\n\n\tfunction uint8ToBase64 (uint8) {\n\t\tvar i,\n\t\t\textraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes\n\t\t\toutput = \"\",\n\t\t\ttemp, length\n\n\t\tfunction encode (num) {\n\t\t\treturn lookup.charAt(num)\n\t\t}\n\n\t\tfunction tripletToBase64 (num) {\n\t\t\treturn encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)\n\t\t}\n\n\t\t// go through the array every three bytes, we'll deal with trailing stuff later\n\t\tfor (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {\n\t\t\ttemp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n\t\t\toutput += tripletToBase64(temp)\n\t\t}\n\n\t\t// pad the end with zeros, but make sure to not forget the extra bytes\n\t\tswitch (extraBytes) {\n\t\t\tcase 1:\n\t\t\t\ttemp = uint8[uint8.length - 1]\n\t\t\t\toutput += encode(temp >> 2)\n\t\t\t\toutput += encode((temp << 4) & 0x3F)\n\t\t\t\toutput += '=='\n\t\t\t\tbreak\n\t\t\tcase 2:\n\t\t\t\ttemp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])\n\t\t\t\toutput += encode(temp >> 10)\n\t\t\t\toutput += encode((temp >> 4) & 0x3F)\n\t\t\t\toutput += encode((temp << 2) & 0x3F)\n\t\t\t\toutput += '='\n\t\t\t\tbreak\n\t\t}\n\n\t\treturn output\n\t}\n\n\texports.toByteArray = b64ToByteArray\n\texports.fromByteArray = uint8ToBase64\n}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))\n",
    "exports.read = function(buffer, offset, isLE, mLen, nBytes) {\n  var e, m,\n      eLen = nBytes * 8 - mLen - 1,\n      eMax = (1 << eLen) - 1,\n      eBias = eMax >> 1,\n      nBits = -7,\n      i = isLE ? (nBytes - 1) : 0,\n      d = isLE ? -1 : 1,\n      s = buffer[offset + i];\n\n  i += d;\n\n  e = s & ((1 << (-nBits)) - 1);\n  s >>= (-nBits);\n  nBits += eLen;\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8);\n\n  m = e & ((1 << (-nBits)) - 1);\n  e >>= (-nBits);\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8);\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity);\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function(buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c,\n      eLen = nBytes * 8 - mLen - 1,\n      eMax = (1 << eLen) - 1,\n      eBias = eMax >> 1,\n      rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0),\n      i = isLE ? 0 : (nBytes - 1),\n      d = isLE ? 1 : -1,\n      s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8);\n\n  e = (e << mLen) | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8);\n\n  buffer[offset + i - d] |= s * 128;\n};\n",
    "\n/**\n * isArray\n */\n\nvar isArray = Array.isArray;\n\n/**\n * toString\n */\n\nvar str = Object.prototype.toString;\n\n/**\n * Whether or not the given `val`\n * is an array.\n *\n * example:\n *\n *        isArray([]);\n *        // > true\n *        isArray(arguments);\n *        // > false\n *        isArray('');\n *        // > false\n *\n * @param {mixed} val\n * @return {bool}\n */\n\nmodule.exports = isArray || function (val) {\n  return !! val && '[object Array]' == str.call(val);\n};\n",
    "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n  this._events = this._events || {};\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n  if (!isNumber(n) || n < 0 || isNaN(n))\n    throw TypeError('n must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n  var er, handler, len, args, i, listeners;\n\n  if (!this._events)\n    this._events = {};\n\n  // If there is no 'error' event listener then throw.\n  if (type === 'error') {\n    if (!this._events.error ||\n        (isObject(this._events.error) && !this._events.error.length)) {\n      er = arguments[1];\n      if (er instanceof Error) {\n        throw er; // Unhandled 'error' event\n      }\n      throw TypeError('Uncaught, unspecified \"error\" event.');\n    }\n  }\n\n  handler = this._events[type];\n\n  if (isUndefined(handler))\n    return false;\n\n  if (isFunction(handler)) {\n    switch (arguments.length) {\n      // fast cases\n      case 1:\n        handler.call(this);\n        break;\n      case 2:\n        handler.call(this, arguments[1]);\n        break;\n      case 3:\n        handler.call(this, arguments[1], arguments[2]);\n        break;\n      // slower\n      default:\n        len = arguments.length;\n        args = new Array(len - 1);\n        for (i = 1; i < len; i++)\n          args[i - 1] = arguments[i];\n        handler.apply(this, args);\n    }\n  } else if (isObject(handler)) {\n    len = arguments.length;\n    args = new Array(len - 1);\n    for (i = 1; i < len; i++)\n      args[i - 1] = arguments[i];\n\n    listeners = handler.slice();\n    len = listeners.length;\n    for (i = 0; i < len; i++)\n      listeners[i].apply(this, args);\n  }\n\n  return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n  var m;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events)\n    this._events = {};\n\n  // To avoid recursion in the case that type === \"newListener\"! Before\n  // adding it to the listeners, first emit \"newListener\".\n  if (this._events.newListener)\n    this.emit('newListener', type,\n              isFunction(listener.listener) ?\n              listener.listener : listener);\n\n  if (!this._events[type])\n    // Optimize the case of one listener. Don't need the extra array object.\n    this._events[type] = listener;\n  else if (isObject(this._events[type]))\n    // If we've already got an array, just append.\n    this._events[type].push(listener);\n  else\n    // Adding the second element, need to change to array.\n    this._events[type] = [this._events[type], listener];\n\n  // Check for listener leak\n  if (isObject(this._events[type]) && !this._events[type].warned) {\n    var m;\n    if (!isUndefined(this._maxListeners)) {\n      m = this._maxListeners;\n    } else {\n      m = EventEmitter.defaultMaxListeners;\n    }\n\n    if (m && m > 0 && this._events[type].length > m) {\n      this._events[type].warned = true;\n      console.error('(node) warning: possible EventEmitter memory ' +\n                    'leak detected. %d listeners added. ' +\n                    'Use emitter.setMaxListeners() to increase limit.',\n                    this._events[type].length);\n      if (typeof console.trace === 'function') {\n        // not supported in IE 10\n        console.trace();\n      }\n    }\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  var fired = false;\n\n  function g() {\n    this.removeListener(type, g);\n\n    if (!fired) {\n      fired = true;\n      listener.apply(this, arguments);\n    }\n  }\n\n  g.listener = listener;\n  this.on(type, g);\n\n  return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n  var list, position, length, i;\n\n  if (!isFunction(listener))\n    throw TypeError('listener must be a function');\n\n  if (!this._events || !this._events[type])\n    return this;\n\n  list = this._events[type];\n  length = list.length;\n  position = -1;\n\n  if (list === listener ||\n      (isFunction(list.listener) && list.listener === listener)) {\n    delete this._events[type];\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n\n  } else if (isObject(list)) {\n    for (i = length; i-- > 0;) {\n      if (list[i] === listener ||\n          (list[i].listener && list[i].listener === listener)) {\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0)\n      return this;\n\n    if (list.length === 1) {\n      list.length = 0;\n      delete this._events[type];\n    } else {\n      list.splice(position, 1);\n    }\n\n    if (this._events.removeListener)\n      this.emit('removeListener', type, listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n  var key, listeners;\n\n  if (!this._events)\n    return this;\n\n  // not listening for removeListener, no need to emit\n  if (!this._events.removeListener) {\n    if (arguments.length === 0)\n      this._events = {};\n    else if (this._events[type])\n      delete this._events[type];\n    return this;\n  }\n\n  // emit removeListener for all listeners on all events\n  if (arguments.length === 0) {\n    for (key in this._events) {\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n    this.removeAllListeners('removeListener');\n    this._events = {};\n    return this;\n  }\n\n  listeners = this._events[type];\n\n  if (isFunction(listeners)) {\n    this.removeListener(type, listeners);\n  } else {\n    // LIFO order\n    while (listeners.length)\n      this.removeListener(type, listeners[listeners.length - 1]);\n  }\n  delete this._events[type];\n\n  return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n  var ret;\n  if (!this._events || !this._events[type])\n    ret = [];\n  else if (isFunction(this._events[type]))\n    ret = [this._events[type]];\n  else\n    ret = this._events[type].slice();\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  var ret;\n  if (!emitter._events || !emitter._events[type])\n    ret = 0;\n  else if (isFunction(emitter._events[type]))\n    ret = 1;\n  else\n    ret = emitter._events[type].length;\n  return ret;\n};\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n",
    "// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    draining = true;\n    var currentQueue;\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        var i = -1;\n        while (++i < len) {\n            currentQueue[i]();\n        }\n        len = queue.length;\n    }\n    draining = false;\n}\nprocess.nextTick = function (fun) {\n    queue.push(fun);\n    if (!draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\n// TODO(shtylman)\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n"
  ]
}