{"version":3,"sources":["webpack:///build/bundle.js","webpack:///webpack/bootstrap 110861404e1422b5c590","webpack:///./~/leapjs/~/underscore/underscore.js","webpack:///./~/gl-matrix/dist/gl-matrix.js","webpack:///./~/events/events.js","webpack:///./~/leapjs/lib/pointable.js","webpack:///./~/leapjs/lib/finger.js","webpack:///./~/leapjs/lib/hand.js","webpack:///./~/keyboardjs/lib/key-combo.js","webpack:///./~/leapjs/lib/frame.js","webpack:///./~/leapjs/lib/gesture.js","webpack:///./~/process/browser.js","webpack:///./src/names.js","webpack:///./~/keyboardjs/lib/locale.js","webpack:///./~/leapjs/lib/bone.js","webpack:///./~/leapjs/lib/circular_buffer.js","webpack:///./~/leapjs/lib/connection/base.js","webpack:///./~/leapjs/lib/dialog.js","webpack:///./~/leapjs/lib/interaction_box.js","webpack:///./~/leapjs/lib/protocol.js","webpack:///./~/random-js/lib/random.js","webpack:///./src/DataGUI.js","webpack:///./src/data.js","webpack:///./src/index.js","webpack:///./src/scenes/GameScene.js","webpack:///./src/scenes/LogoScene.js","webpack:///./src/utils/AssetsLoader.js","webpack:///./src/utils/SecretSymbols.js","webpack:///./src/utils/postprocessing/EffectComposer.js","webpack:///./src/utils/postprocessing/MaskPass.js","webpack:///./src/utils/postprocessing/RenderPass.js","webpack:///./src/utils/postprocessing/ShaderPass.js","webpack:///./src/utils/postprocessing/shaders/BadTVShader.js","webpack:///./src/utils/postprocessing/shaders/CopyShader.js","webpack:///./src/utils/postprocessing/shaders/FilmShader.js","webpack:///./src/utils/postprocessing/shaders/RGBShiftShader.js","webpack:///./src/utils/postprocessing/shaders/StaticShader.js","webpack:///./~/keyboardjs/index.js","webpack:///./~/keyboardjs/lib/keyboard.js","webpack:///./~/keyboardjs/locales/us.js","webpack:///./~/leapjs/lib/connection/browser.js","webpack:///./~/leapjs/lib/connection/node.js","webpack:///./~/leapjs/lib/controller.js","webpack:///./~/leapjs/lib/index.js","webpack:///./~/leapjs/lib/pipeline.js","webpack:///./~/leapjs/lib/ui.js","webpack:///./~/leapjs/lib/ui/cursor.js","webpack:///./~/leapjs/lib/ui/region.js","webpack:///./~/leapjs/lib/version.js","webpack:///./~/leapjs/~/ws/lib/browser.js","webpack:///./~/tween.js/src/Tween.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","m","c","p","root","this","previousUnderscore","_","breaker","ArrayProto","Array","prototype","ObjProto","Object","FuncProto","Function","push","slice","concat","toString","hasOwnProperty","nativeForEach","forEach","nativeMap","map","nativeReduce","reduce","nativeReduceRight","reduceRight","nativeFilter","filter","nativeEvery","every","nativeSome","some","nativeIndexOf","indexOf","nativeLastIndexOf","lastIndexOf","nativeIsArray","isArray","nativeKeys","keys","nativeBind","bind","obj","_wrapped","VERSION","each","iterator","context","length","i","l","key","has","collect","results","value","index","list","reduceError","foldl","inject","memo","initial","arguments","TypeError","foldr","find","detect","result","any","select","reject","all","identity","contains","include","target","invoke","method","args","isFunc","isFunction","apply","pluck","where","attrs","first","isEmpty","findWhere","max","Math","Infinity","computed","min","shuffle","rand","shuffled","random","lookupIterator","sortBy","criteria","sort","left","right","a","b","group","behavior","groupBy","countBy","sortedIndex","array","low","high","mid","toArray","values","size","head","take","n","guard","last","rest","tail","drop","compact","flatten","input","shallow","output","without","difference","uniq","unique","isSorted","seen","union","intersection","item","other","zip","object","from","hasIndex","range","start","stop","step","len","ceil","idx","func","partial","bindAll","funcs","functions","f","memoize","hasher","delay","wait","setTimeout","defer","throttle","timeout","previous","later","Date","now","remaining","clearTimeout","debounce","immediate","callNow","once","ran","wrap","wrapper","compose","after","times","pairs","invert","methods","names","extend","source","prop","pick","copy","omit","defaults","clone","isObject","tap","interceptor","eq","aStack","bStack","className","String","global","multiline","ignoreCase","aCtor","constructor","bCtor","pop","isEqual","isString","isElement","nodeType","name","isArguments","isFinite","isNaN","parseFloat","isNumber","isBoolean","isNull","isUndefined","noConflict","accum","floor","entityMap","escape","&","<",">","\"","'","/","unescape","entityRegexes","RegExp","join","string","replace","match","property","mixin","idCounter","uniqueId","prefix","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","\t"," "," ","escaper","template","text","data","settings","render","matcher","offset","variable","e","chain","_chain","_global","shim","GLMAT_EPSILON","GLMAT_ARRAY_TYPE","Float32Array","GLMAT_RANDOM","glMatrix","setMatrixArrayType","type","t","degree","PI","toRadian","vec2","create","out","fromValues","x","y","set","add","subtract","sub","multiply","mul","divide","div","scale","scaleAndAdd","distance","sqrt","dist","squaredDistance","sqrDist","squaredLength","sqrLen","negate","normalize","dot","cross","z","lerp","ax","ay","r","cos","sin","transformMat2","transformMat2d","transformMat3","transformMat4","vec","stride","count","fn","arg","str","vec3","az","bx","by","bz","zScale","transformQuat","q","qx","qy","qz","qw","ix","iy","iz","iw","rotateX","rotateY","rotateZ","vec4","w","aw","mat2","transpose","a1","a0","a2","a3","det","adjoint","determinant","b0","b1","b2","b3","rotate","rad","s","v","v0","v1","frob","pow","LDU","L","D","U","mat2d","aa","ab","ac","ad","atx","aty","a4","a5","b4","b5","translate","mat3","fromMat4","a01","a02","a12","a00","a10","a11","a20","a21","a22","b01","b11","b21","b00","b02","b10","b12","b20","b22","fromMat2d","fromQuat","x2","y2","z2","xx","yx","yy","zx","zy","zz","wx","wy","wz","normalFromMat4","a03","a13","a23","a30","a31","a32","a33","b03","b04","b05","b06","b07","b08","b09","mat4","axis","abs","fromRotationTranslation","xy","xz","yz","frustum","bottom","top","near","far","rl","tb","nf","perspective","fovy","aspect","tan","ortho","lr","bt","lookAt","eye","center","up","x0","x1","y0","y1","z0","z1","eyex","eyey","eyez","upx","upy","upz","centerx","centery","centerz","quat","rotationTo","tmpvec3","xUnitVec3","yUnitVec3","setAxisAngle","setAxes","matr","view","fromMat3","bw","calculateW","slerp","omega","cosom","sinom","scale0","scale1","acos","invDot","conjugate","fRoot","fTrace","j","k","EventEmitter","_events","_maxListeners","undefined","defaultMaxListeners","setMaxListeners","emit","er","handler","listeners","error","Error","err","addListener","listener","newListener","warned","console","trace","on","g","removeListener","fired","position","splice","removeAllListeners","ret","listenerCount","evlistener","emitter","Pointable","valid","handId","tool","width","direction","stabilizedTipPosition","tipPosition","tipVelocity","touchZone","touchDistance","timeVisible","hand","frame","Invalid","Bone","Dialog","Finger","dipPosition","pipPosition","mcpPosition","carpPosition","extended","finger","positions","bases","addBones","warnBones","metacarpal","prevJoint","nextJoint","basis","proximal","medial","distal","btipPosition","bones","Hand","palmPosition","palmVelocity","palmNormal","sphereCenter","sphereRadius","pointables","fingers","armBasis","arm","armWidth","elbow","wrist","tools","_translation","_rotation","_scaleFactor","stabilizedPalmPosition","grabStrength","pinchStrength","confidence","rotationAngle","sinceFrame","sinceHand","rot","rotationMatrix","cs","angle","rotAxis","rotationAxis","scaleFactor","exp","translation","pitch","atan2","yaw","roll","pointable","dump","KeyCombo","keyComboStr","sourceStr","subCombos","parseComboStr","keyNames","nextSubCombo","sequenceDeliminator","comboDeliminator","keyDeliminator","subComboStrs","_splitStr","combo","check","pressedKeyNames","startingKeyNameIndex","_checkSubCombo","otherKeyCombo","subCombo","otherSubCombo","keyName","deliminator","d","ca","ci","trim","endIndex","escapedKeyName","createGesture","InteractionBox","Frame","timestamp","hands","handsMap","interactionBox","gestures","pointablesMap","currentFrameRate","gestureIdx","gestureCount","postprocessData","handIdx","handCount","pointableIdx","pointableCount","pointableData","addPointable","thumb","indexFinger","middleFinger","ringFinger","pinky","JSON","stringify","Gesture","gesture","CircleGesture","SwipeGesture","ScreenTapGesture","KeyTapGesture","handIds","pointableIds","duration","state","gestureListener","controller","handlers","gestureMap","gestureTracker","cb","update","builder","complete","frames","lastGesture","lastFrame","startPosition","normal","progress","radius","speed","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","run","Item","noop","process","nextTick","title","browser","env","argv","version","versions","off","binding","cwd","chdir","dir","umask","defineProperty","SOUND_GAME_MUSIC","SOUND_INTERSECT_CUBE_1","SOUND_INTERSECT_CUBE_2","SOUND_INTERSECT_CUBE_3","SOUND_INTERSECT_PADDLE","SOUND_BOOM","SOUND_VICTORY_VOICE","SOUND_LOSE_VOICE_1","SOUND_LOSE_VOICE_2","SOUND_START_VOICE","IMG_INTERACTOPUS_BG_BLACK","IMG_INTERACTOPUS_BG_TRANS","EVENT_FINAL_BLOCK_KILLED","EVENT_NO_LIVES","Locale","localeName","pressedKeys","_appliedMacros","_keyMap","_killKeyCodes","_macros","bindKeyCode","keyCode","bindMacro","macro","keyCombo","getKeyCodes","keyCodes","getKeyNames","setKillKey","pressKey","_applyMacros","releaseKey","killKeyCodeIndex","_clearMacros","macros","_center","_matrix","displacement","_left","matrix","CircularBuffer","pos","_buf","get","o","chooseProtocol","BaseConnection","opts","host","enableGestures","scheme","getScheme","port","getPort","background","optimizeHMD","requestProtocolVersion","defaultProtocolVersion","protocolVersionVerified","setBackground","setOptimizeHMD","log","getUrl","protocol","sendBackground","sendOptimizeHMD","handleOpen","connected","enabled","gesturesEnabled","send","encode","handleClose","code","reason","disconnect","startReconnection","connection","reconnectionTimer","setInterval","reconnect","stopReconnection","clearInterval","allowReconnect","socket","close","focusedState","connect","handleData","messageEvent","message","parse","setupSocket","reportFocus","sendFocused","options","createElement","element","document","style","textAlign","zIndex","dialog","appendChild","display","margin","padding","color","borderRadius","border","cursor","whiteSpace","transition","innerHTML","onclick","addEventListener","onmouseover","onmouseout","onmousemove","show","body","hide","removeChild","warnOutOfDate","params","url","returnTo","window","location","href","encodeURIComponent","event","popup","open","focus","getElementById","boxShadow","hasWarnedBones","warn","node","height","depth","denormalizePoint","normalizedPosition","normalizePoint","clamp","Event","header","JSONProtocol","focused","frameData","serviceVersion","versionLong","__WEBPACK_AMD_DEFINE_RESULT__","Random","engine","engines","nativeMath","returnValue","generate","addend","toInteger","number","convertSliceArgument","returnUndefined","imul","ah","al","bh","bl","stringRepeat","repeat","pattern","proto","mt19937","Int32Array","refreshData","tmp","temper","seedWithArray","sourceLength","next","uses","getUseCount","discard","seed","autoSeed","generateEntropyArray","browserCrypto","crypto","getRandomValues","getTime","int32","uint32","uint53","uint53Full","int53","int53Full","integer","isPowerOfTwoMinusOne","bitmask","masking","downscaleToLoopCheckedRange","extendedRange","maximum","downscaleToRange","isEvenlyDivisibleByMaxInt32","upscaleWithHighMasking","upscaleToLoopCheckedRange","upscaleWithinU53","highRange","upscaleWithinI53AndLoopCheck","RangeError","realZeroToOneInclusive","realZeroToOneExclusive","real","multiplier","inclusive","bool","isLeastBitTrue","lessThan","probability","percentage","scaled","round","numerator","denominator","begin","end","finish","distribution","picker","downTo","sample","population","sampleSize","tailLength","die","sideCount","dice","dieCount","uuid4","zeroPad","zeroCount","DEFAULT_STRING_POOL","pool","charAt","hex","LOWER_HEX_POOL","lowerHex","upperHex","toUpperCase","upper","date","_classCallCheck","instance","Constructor","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","DataGUI","gui","dat","GUI","addSlider","camera","lights","blocks","rotation","sphere","innerSphere","selectedData","delta","isOpen","folder","addFolder","param","block","ball","positionOriginal","_interopRequireWildcard","__esModule","newObj","_interopRequireDefault","default","_defineProperty","_LogoScene","_LogoScene2","_GameScene","_GameScene2","_SecretSymbols","_SecretSymbols2","_AssetsLoader","_AssetsLoader2","_names","App","_sounds","_images","_this","assets","sounds","images","wasGameRun","load","then","init","afterInit","eventLogoEl","locationValueEl","dateValueEl","timeValueEl","secretSymbolsLocation","rootEl","word","symbols","secretSymbolsDate","renderType","secretSymbolsTime","logoScene","_this2","getSound","loop","play","classList","remove","logoEl","reload","goGame","_this3","gameEl","game","goVictory","goLose","disable","enable","reveal","_events2","_DataGUI","_data","_data2","_keyboardjs","_keyboardjs2","_tween","_tween2","_randomJs","_randomJs2","_leapjs","_leapjs2","FIELD_WIDTH","FIELD_HEIGHT","BLOCK_SIZE","SPEED","GameScene","soundsSources","pyramidLevels","paused","renderer","scene","onRenderFnArr","requestAnimationFrame","isBallEnabled","initUi","livesAtBegin","currLives","renderLives","ui","lives","querySelector","html","playAudio","ballDx","ballDz","initSkyAndBoard","initBlocks","initBall","initAudio","paddleTweenData","minY","degToRad","maxY","leapPointBase","_paddleTweenData","iBox","leapPoint","normalizedPoint","normalizedPointBase","deltaY","finalDeltaY","preventRepeat","isLeftPressed","moveLeft","paddleTween","isRightPressed","moveRight","rotatePyramid","_paddleTweenData2","tween","newY1","newY2","Tween","to","onUpdate","onComplete","_this4","_paddleTweenData3","_this5","pyramidTween","blocksGroupRotationY","getRadForPyramid","deg","inc","newDeg","parseInt","newRad","soundName","isLoop","_this6","THREE","Scene","PerspectiveCamera","innerWidth","innerHeight","WebGLRenderer","antialias","shadowMapEnabled","shadowMapSoft","setSize","sortObjects","domElement","_this7","light","SpotLight","shadowCameraNear","castShadow","shadowDarkness","shadowMapWidth","shadowMapHeight","geometry","PlaneGeometry","material","MeshBasicMaterial","sky","Mesh","CubeGeometry","board","matrixAutoUpdate","receiveShadow","SphereGeometry","wireframe","mesh","Object3D","_this8","MeshLambertMaterial","bBox","BoundingBoxHelper","visible","isPaddle","box","intersectsBox","ballBox","rad2deg","ballAngle","atan","newBallAngle","newDx","paddle","_this9","levelNum","level","isCompleted","atLeastOneVisible","changePyramidBlocksYPosition","_this10","currLevel","getBlockOffset","_this11","blocksGroup","blocksGroupPivot","createBlock","isEdge","isFinalBlock","changePyramidBlocksYPositionIfNeeded","victory","yIndex","xIndex","isFinal","initBlocksPaddle","initBlocksBlocks","_this12","deathZone","_EffectComposer","_RenderPass","_ShaderPass","_MaskPass","_CopyShader","_FilmShader","_RGBShiftShader","_BadTVShader","_StaticShader","LOGO_WIDTH","LOGO_HEIGHT","LogoScene","onParamsChange","badTVPass","staticPass","rgbPass","filmPass","badTVParams","rgbParams","staticParams","filmParams","uniforms","distortion","distortion2","rollSpeed","amount","size2","sCount","sIntensity","nIntensity","onToggleShaders","renderPass","copyPass","composer","EffectComposer","addPass","renderToScreen","animate","isEnabled","shaderTime","time","onResize","updateProjectionMatrix","videoTexture","TextureLoader","minFilter","LinearFilter","magFilter","videoMaterial","planeGeometry","plane","RenderPass","ShaderPass","BadTVShader","RGBShiftShader","FilmShader","StaticShader","CopyShader","grayscale","mute","f1","onChange","listen","f2","f4","f3","AssetsLoader","imgSources","imgName","audioName","Promise","resolve","audioPromises","filename","soundUrl","audioPromise","loadAudio","buffer","audioEl","sourceEl","src","imagePromises","imgUrl","imagePromise","loadImage","img","loader","ImageLoader","image","xhr","audioLoader","AudioLoader","MIN_SYMBOLS_LENGTH","SecretSymbols","isRevealed","renderReveleadSymbols","renderSymbolsDate","renderSymbolsTime","renderSymbols","symbolsStrToArr","symbolsStr","arr","secret","innerText","day","month","year","h1","h2","m1","m2","renderTarget","parameters","format","RGBFormat","stencilBuffer","WebGLRenderTarget","renderTarget1","renderTarget2","writeBuffer","readBuffer","passes","swapBuffers","pass","insertPass","maskActive","il","needsSwap","stencilFunc","NOTEQUAL","EQUAL","MaskPass","ClearMaskPass","reset","clear","inverse","colorMask","depthMask","writeValue","clearValue","STENCIL_TEST","stencilOp","REPLACE","ALWAYS","clearStencil","KEEP","overrideMaterial","clearColor","clearAlpha","oldClearColor","Color","oldClearAlpha","getClearColor","getClearAlpha","setClearColor","shader","textureID","UniformsUtils","ShaderMaterial","vertexShader","fragmentShader","OrthographicCamera","quad","tDiffuse","opacity","Keyboard","keyboard","setLocale","targetWindow","targetElement","platform","userAgent","_locale","_currentContext","_contexts","_listeners","_appliedListeners","_locales","_targetElement","_targetWindow","_targetPlatform","_targetUserAgent","_isModernBrowser","_targetKeyDownBinding","_targetKeyUpBinding","_targetResetBinding","_paused","setContext","watch","localeBuilder","locale","_localeName","getLocale","localName","pressHandler","releaseHandler","preventRepeatByDefault","unbind","comboMatches","pressHandlerMatches","releaseHandlerMatches","contextName","releaseAllKeys","getContext","withContext","callback","previousContextName","targetPlatform","targetUserAgent","attachEvent","navigator","_bindEvent","_unbindEvent","_applyBindings","_clearBindings","pause","resume","eventName","removeEventListener","detachEvent","_getGroupedListeners","listenerGroups","listenerGroupMap","mapIndex","fromCharCode","capitalKeyName","leftCommandKeyCode","rightCommandKeyCode","semicolonKeyCode","dashKeyCode","BrowserConnection","startFocusLoop","stopFocusLoop","__proto__","useSecure","WebSocket","onopen","onclose","onmessage","onerror","focusDetectorTimer","propertyName","hidden","mozHidden","msHidden","webkitHidden","windowVisible","focusListener","updateFocusState","blurListener","isVisible","NodeConnection","Pipeline","Controller","inNode","frameEventName","useAnimationLoop","suppressAnimationLoop","loopWhileDisconnected","useAllPlugins","checkVersion","animationFrameRequested","onAnimationFrame","lastConnectionFrame","history","lastValidFrame","accumulatedGestures","connectionType","inBrowser","streamingCount","devices","plugins","_pluginPipelineSteps","_pluginExtendedMethods","useRegisteredPlugins","setupFrameEvents","setupConnectionEvents","startAnimationLoop","creator","inBackgroundPage","chrome","extension","getBackgroundPage","streaming","num","addStep","pipeline","processFrame","processFinishedFrame","historyIdx","emitHandEvents","backfillStreamingStartedEventsHandler","info","attached","backfillStreamingStoppedEvents","deviceId","checkOutOfDate","evt","oldInfo","changed","assert","protocolVersion","sV","pV","_pluginFactories","plugin","pluginName","factory","setPluginCallbacks","addWrappedStep","setPluginMethods","hash","klass","use","functionOrHash","pluginFactory","pluginInstance","stopUsing","extMethodHash","steps","extMethodHashes","removeStep","methodName","UI","loopController","stepsLength","dependencies","Region","Cursor","cursorPosition","Vector","enteredFrame","hasPointables","region","nearThreshold","setupNearRegion","updatePosition","clipper","nearRegion","mapToXY","normalized","full","major","minor","MozWebSocket","__WEBPACK_AMD_DEFINE_ARRAY__","TWEEN","_tweens","getAll","removeAll","preserve","hrtime","performance","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_yoyo","_isPlaying","_reversed","_delayTime","_startTime","_easingFunction","Easing","Linear","None","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onCompleteCallback","_onStopCallback","field","properties","stopChainedTweens","numChainedTweens","yoyo","easing","interpolation","onStart","onStop","elapsed","Quadratic","In","Out","InOut","Cubic","Quartic","Quintic","Sinusoidal","Exponential","Circular","Elastic","Back","Bounce","Utils","Bezier","pw","bn","Bernstein","CatmullRom","p0","p1","fc","Factorial","p2","p3","t2","t3"],"mappings":"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","file":"./build/bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(22);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Underscore.js 1.4.4\n\t// http://underscorejs.org\n\t// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc.\n\t// Underscore may be freely distributed under the MIT license.\n\t\n\t(function() {\n\t\n\t // Baseline setup\n\t // --------------\n\t\n\t // Establish the root object, `window` in the browser, or `global` on the server.\n\t var root = this;\n\t\n\t // Save the previous value of the `_` variable.\n\t var previousUnderscore = root._;\n\t\n\t // Establish the object that gets returned to break out of a loop iteration.\n\t var breaker = {};\n\t\n\t // Save bytes in the minified (but not gzipped) version:\n\t var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\t\n\t // Create quick reference variables for speed access to core prototypes.\n\t var push = ArrayProto.push,\n\t slice = ArrayProto.slice,\n\t concat = ArrayProto.concat,\n\t toString = ObjProto.toString,\n\t hasOwnProperty = ObjProto.hasOwnProperty;\n\t\n\t // All **ECMAScript 5** native function implementations that we hope to use\n\t // are declared here.\n\t var\n\t nativeForEach = ArrayProto.forEach,\n\t nativeMap = ArrayProto.map,\n\t nativeReduce = ArrayProto.reduce,\n\t nativeReduceRight = ArrayProto.reduceRight,\n\t nativeFilter = ArrayProto.filter,\n\t nativeEvery = ArrayProto.every,\n\t nativeSome = ArrayProto.some,\n\t nativeIndexOf = ArrayProto.indexOf,\n\t nativeLastIndexOf = ArrayProto.lastIndexOf,\n\t nativeIsArray = Array.isArray,\n\t nativeKeys = Object.keys,\n\t nativeBind = FuncProto.bind;\n\t\n\t // Create a safe reference to the Underscore object for use below.\n\t var _ = function(obj) {\n\t if (obj instanceof _) return obj;\n\t if (!(this instanceof _)) return new _(obj);\n\t this._wrapped = obj;\n\t };\n\t\n\t // Export the Underscore object for **Node.js**, with\n\t // backwards-compatibility for the old `require()` API. If we're in\n\t // the browser, add `_` as a global object via a string identifier,\n\t // for Closure Compiler \"advanced\" mode.\n\t if (true) {\n\t if (typeof module !== 'undefined' && module.exports) {\n\t exports = module.exports = _;\n\t }\n\t exports._ = _;\n\t } else {\n\t root._ = _;\n\t }\n\t\n\t // Current version.\n\t _.VERSION = '1.4.4';\n\t\n\t // Collection Functions\n\t // --------------------\n\t\n\t // The cornerstone, an `each` implementation, aka `forEach`.\n\t // Handles objects with the built-in `forEach`, arrays, and raw objects.\n\t // Delegates to **ECMAScript 5**'s native `forEach` if available.\n\t var each = _.each = _.forEach = function(obj, iterator, context) {\n\t if (obj == null) return;\n\t if (nativeForEach && obj.forEach === nativeForEach) {\n\t obj.forEach(iterator, context);\n\t } else if (obj.length === +obj.length) {\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t if (iterator.call(context, obj[i], i, obj) === breaker) return;\n\t }\n\t } else {\n\t for (var key in obj) {\n\t if (_.has(obj, key)) {\n\t if (iterator.call(context, obj[key], key, obj) === breaker) return;\n\t }\n\t }\n\t }\n\t };\n\t\n\t // Return the results of applying the iterator to each element.\n\t // Delegates to **ECMAScript 5**'s native `map` if available.\n\t _.map = _.collect = function(obj, iterator, context) {\n\t var results = [];\n\t if (obj == null) return results;\n\t if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\t each(obj, function(value, index, list) {\n\t results[results.length] = iterator.call(context, value, index, list);\n\t });\n\t return results;\n\t };\n\t\n\t var reduceError = 'Reduce of empty array with no initial value';\n\t\n\t // **Reduce** builds up a single result from a list of values, aka `inject`,\n\t // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n\t _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n\t var initial = arguments.length > 2;\n\t if (obj == null) obj = [];\n\t if (nativeReduce && obj.reduce === nativeReduce) {\n\t if (context) iterator = _.bind(iterator, context);\n\t return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n\t }\n\t each(obj, function(value, index, list) {\n\t if (!initial) {\n\t memo = value;\n\t initial = true;\n\t } else {\n\t memo = iterator.call(context, memo, value, index, list);\n\t }\n\t });\n\t if (!initial) throw new TypeError(reduceError);\n\t return memo;\n\t };\n\t\n\t // The right-associative version of reduce, also known as `foldr`.\n\t // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n\t _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n\t var initial = arguments.length > 2;\n\t if (obj == null) obj = [];\n\t if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n\t if (context) iterator = _.bind(iterator, context);\n\t return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n\t }\n\t var length = obj.length;\n\t if (length !== +length) {\n\t var keys = _.keys(obj);\n\t length = keys.length;\n\t }\n\t each(obj, function(value, index, list) {\n\t index = keys ? keys[--length] : --length;\n\t if (!initial) {\n\t memo = obj[index];\n\t initial = true;\n\t } else {\n\t memo = iterator.call(context, memo, obj[index], index, list);\n\t }\n\t });\n\t if (!initial) throw new TypeError(reduceError);\n\t return memo;\n\t };\n\t\n\t // Return the first value which passes a truth test. Aliased as `detect`.\n\t _.find = _.detect = function(obj, iterator, context) {\n\t var result;\n\t any(obj, function(value, index, list) {\n\t if (iterator.call(context, value, index, list)) {\n\t result = value;\n\t return true;\n\t }\n\t });\n\t return result;\n\t };\n\t\n\t // Return all the elements that pass a truth test.\n\t // Delegates to **ECMAScript 5**'s native `filter` if available.\n\t // Aliased as `select`.\n\t _.filter = _.select = function(obj, iterator, context) {\n\t var results = [];\n\t if (obj == null) return results;\n\t if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n\t each(obj, function(value, index, list) {\n\t if (iterator.call(context, value, index, list)) results[results.length] = value;\n\t });\n\t return results;\n\t };\n\t\n\t // Return all the elements for which a truth test fails.\n\t _.reject = function(obj, iterator, context) {\n\t return _.filter(obj, function(value, index, list) {\n\t return !iterator.call(context, value, index, list);\n\t }, context);\n\t };\n\t\n\t // Determine whether all of the elements match a truth test.\n\t // Delegates to **ECMAScript 5**'s native `every` if available.\n\t // Aliased as `all`.\n\t _.every = _.all = function(obj, iterator, context) {\n\t iterator || (iterator = _.identity);\n\t var result = true;\n\t if (obj == null) return result;\n\t if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n\t each(obj, function(value, index, list) {\n\t if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n\t });\n\t return !!result;\n\t };\n\t\n\t // Determine if at least one element in the object matches a truth test.\n\t // Delegates to **ECMAScript 5**'s native `some` if available.\n\t // Aliased as `any`.\n\t var any = _.some = _.any = function(obj, iterator, context) {\n\t iterator || (iterator = _.identity);\n\t var result = false;\n\t if (obj == null) return result;\n\t if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n\t each(obj, function(value, index, list) {\n\t if (result || (result = iterator.call(context, value, index, list))) return breaker;\n\t });\n\t return !!result;\n\t };\n\t\n\t // Determine if the array or object contains a given value (using `===`).\n\t // Aliased as `include`.\n\t _.contains = _.include = function(obj, target) {\n\t if (obj == null) return false;\n\t if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n\t return any(obj, function(value) {\n\t return value === target;\n\t });\n\t };\n\t\n\t // Invoke a method (with arguments) on every item in a collection.\n\t _.invoke = function(obj, method) {\n\t var args = slice.call(arguments, 2);\n\t var isFunc = _.isFunction(method);\n\t return _.map(obj, function(value) {\n\t return (isFunc ? method : value[method]).apply(value, args);\n\t });\n\t };\n\t\n\t // Convenience version of a common use case of `map`: fetching a property.\n\t _.pluck = function(obj, key) {\n\t return _.map(obj, function(value){ return value[key]; });\n\t };\n\t\n\t // Convenience version of a common use case of `filter`: selecting only objects\n\t // containing specific `key:value` pairs.\n\t _.where = function(obj, attrs, first) {\n\t if (_.isEmpty(attrs)) return first ? null : [];\n\t return _[first ? 'find' : 'filter'](obj, function(value) {\n\t for (var key in attrs) {\n\t if (attrs[key] !== value[key]) return false;\n\t }\n\t return true;\n\t });\n\t };\n\t\n\t // Convenience version of a common use case of `find`: getting the first object\n\t // containing specific `key:value` pairs.\n\t _.findWhere = function(obj, attrs) {\n\t return _.where(obj, attrs, true);\n\t };\n\t\n\t // Return the maximum element or (element-based computation).\n\t // Can't optimize arrays of integers longer than 65,535 elements.\n\t // See: https://bugs.webkit.org/show_bug.cgi?id=80797\n\t _.max = function(obj, iterator, context) {\n\t if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n\t return Math.max.apply(Math, obj);\n\t }\n\t if (!iterator && _.isEmpty(obj)) return -Infinity;\n\t var result = {computed : -Infinity, value: -Infinity};\n\t each(obj, function(value, index, list) {\n\t var computed = iterator ? iterator.call(context, value, index, list) : value;\n\t computed >= result.computed && (result = {value : value, computed : computed});\n\t });\n\t return result.value;\n\t };\n\t\n\t // Return the minimum element (or element-based computation).\n\t _.min = function(obj, iterator, context) {\n\t if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n\t return Math.min.apply(Math, obj);\n\t }\n\t if (!iterator && _.isEmpty(obj)) return Infinity;\n\t var result = {computed : Infinity, value: Infinity};\n\t each(obj, function(value, index, list) {\n\t var computed = iterator ? iterator.call(context, value, index, list) : value;\n\t computed < result.computed && (result = {value : value, computed : computed});\n\t });\n\t return result.value;\n\t };\n\t\n\t // Shuffle an array.\n\t _.shuffle = function(obj) {\n\t var rand;\n\t var index = 0;\n\t var shuffled = [];\n\t each(obj, function(value) {\n\t rand = _.random(index++);\n\t shuffled[index - 1] = shuffled[rand];\n\t shuffled[rand] = value;\n\t });\n\t return shuffled;\n\t };\n\t\n\t // An internal function to generate lookup iterators.\n\t var lookupIterator = function(value) {\n\t return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n\t };\n\t\n\t // Sort the object's values by a criterion produced by an iterator.\n\t _.sortBy = function(obj, value, context) {\n\t var iterator = lookupIterator(value);\n\t return _.pluck(_.map(obj, function(value, index, list) {\n\t return {\n\t value : value,\n\t index : index,\n\t criteria : iterator.call(context, value, index, list)\n\t };\n\t }).sort(function(left, right) {\n\t var a = left.criteria;\n\t var b = right.criteria;\n\t if (a !== b) {\n\t if (a > b || a === void 0) return 1;\n\t if (a < b || b === void 0) return -1;\n\t }\n\t return left.index < right.index ? -1 : 1;\n\t }), 'value');\n\t };\n\t\n\t // An internal function used for aggregate \"group by\" operations.\n\t var group = function(obj, value, context, behavior) {\n\t var result = {};\n\t var iterator = lookupIterator(value || _.identity);\n\t each(obj, function(value, index) {\n\t var key = iterator.call(context, value, index, obj);\n\t behavior(result, key, value);\n\t });\n\t return result;\n\t };\n\t\n\t // Groups the object's values by a criterion. Pass either a string attribute\n\t // to group by, or a function that returns the criterion.\n\t _.groupBy = function(obj, value, context) {\n\t return group(obj, value, context, function(result, key, value) {\n\t (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n\t });\n\t };\n\t\n\t // Counts instances of an object that group by a certain criterion. Pass\n\t // either a string attribute to count by, or a function that returns the\n\t // criterion.\n\t _.countBy = function(obj, value, context) {\n\t return group(obj, value, context, function(result, key) {\n\t if (!_.has(result, key)) result[key] = 0;\n\t result[key]++;\n\t });\n\t };\n\t\n\t // Use a comparator function to figure out the smallest index at which\n\t // an object should be inserted so as to maintain order. Uses binary search.\n\t _.sortedIndex = function(array, obj, iterator, context) {\n\t iterator = iterator == null ? _.identity : lookupIterator(iterator);\n\t var value = iterator.call(context, obj);\n\t var low = 0, high = array.length;\n\t while (low < high) {\n\t var mid = (low + high) >>> 1;\n\t iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n\t }\n\t return low;\n\t };\n\t\n\t // Safely convert anything iterable into a real, live array.\n\t _.toArray = function(obj) {\n\t if (!obj) return [];\n\t if (_.isArray(obj)) return slice.call(obj);\n\t if (obj.length === +obj.length) return _.map(obj, _.identity);\n\t return _.values(obj);\n\t };\n\t\n\t // Return the number of elements in an object.\n\t _.size = function(obj) {\n\t if (obj == null) return 0;\n\t return (obj.length === +obj.length) ? obj.length : _.keys(obj).length;\n\t };\n\t\n\t // Array Functions\n\t // ---------------\n\t\n\t // Get the first element of an array. Passing **n** will return the first N\n\t // values in the array. Aliased as `head` and `take`. The **guard** check\n\t // allows it to work with `_.map`.\n\t _.first = _.head = _.take = function(array, n, guard) {\n\t if (array == null) return void 0;\n\t return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n\t };\n\t\n\t // Returns everything but the last entry of the array. Especially useful on\n\t // the arguments object. Passing **n** will return all the values in\n\t // the array, excluding the last N. The **guard** check allows it to work with\n\t // `_.map`.\n\t _.initial = function(array, n, guard) {\n\t return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n\t };\n\t\n\t // Get the last element of an array. Passing **n** will return the last N\n\t // values in the array. The **guard** check allows it to work with `_.map`.\n\t _.last = function(array, n, guard) {\n\t if (array == null) return void 0;\n\t if ((n != null) && !guard) {\n\t return slice.call(array, Math.max(array.length - n, 0));\n\t } else {\n\t return array[array.length - 1];\n\t }\n\t };\n\t\n\t // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n\t // Especially useful on the arguments object. Passing an **n** will return\n\t // the rest N values in the array. The **guard**\n\t // check allows it to work with `_.map`.\n\t _.rest = _.tail = _.drop = function(array, n, guard) {\n\t return slice.call(array, (n == null) || guard ? 1 : n);\n\t };\n\t\n\t // Trim out all falsy values from an array.\n\t _.compact = function(array) {\n\t return _.filter(array, _.identity);\n\t };\n\t\n\t // Internal implementation of a recursive `flatten` function.\n\t var flatten = function(input, shallow, output) {\n\t each(input, function(value) {\n\t if (_.isArray(value)) {\n\t shallow ? push.apply(output, value) : flatten(value, shallow, output);\n\t } else {\n\t output.push(value);\n\t }\n\t });\n\t return output;\n\t };\n\t\n\t // Return a completely flattened version of an array.\n\t _.flatten = function(array, shallow) {\n\t return flatten(array, shallow, []);\n\t };\n\t\n\t // Return a version of the array that does not contain the specified value(s).\n\t _.without = function(array) {\n\t return _.difference(array, slice.call(arguments, 1));\n\t };\n\t\n\t // Produce a duplicate-free version of the array. If the array has already\n\t // been sorted, you have the option of using a faster algorithm.\n\t // Aliased as `unique`.\n\t _.uniq = _.unique = function(array, isSorted, iterator, context) {\n\t if (_.isFunction(isSorted)) {\n\t context = iterator;\n\t iterator = isSorted;\n\t isSorted = false;\n\t }\n\t var initial = iterator ? _.map(array, iterator, context) : array;\n\t var results = [];\n\t var seen = [];\n\t each(initial, function(value, index) {\n\t if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n\t seen.push(value);\n\t results.push(array[index]);\n\t }\n\t });\n\t return results;\n\t };\n\t\n\t // Produce an array that contains the union: each distinct element from all of\n\t // the passed-in arrays.\n\t _.union = function() {\n\t return _.uniq(concat.apply(ArrayProto, arguments));\n\t };\n\t\n\t // Produce an array that contains every item shared between all the\n\t // passed-in arrays.\n\t _.intersection = function(array) {\n\t var rest = slice.call(arguments, 1);\n\t return _.filter(_.uniq(array), function(item) {\n\t return _.every(rest, function(other) {\n\t return _.indexOf(other, item) >= 0;\n\t });\n\t });\n\t };\n\t\n\t // Take the difference between one array and a number of other arrays.\n\t // Only the elements present in just the first array will remain.\n\t _.difference = function(array) {\n\t var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t return _.filter(array, function(value){ return !_.contains(rest, value); });\n\t };\n\t\n\t // Zip together multiple lists into a single array -- elements that share\n\t // an index go together.\n\t _.zip = function() {\n\t var args = slice.call(arguments);\n\t var length = _.max(_.pluck(args, 'length'));\n\t var results = new Array(length);\n\t for (var i = 0; i < length; i++) {\n\t results[i] = _.pluck(args, \"\" + i);\n\t }\n\t return results;\n\t };\n\t\n\t // Converts lists into objects. Pass either a single array of `[key, value]`\n\t // pairs, or two parallel arrays of the same length -- one of keys, and one of\n\t // the corresponding values.\n\t _.object = function(list, values) {\n\t if (list == null) return {};\n\t var result = {};\n\t for (var i = 0, l = list.length; i < l; i++) {\n\t if (values) {\n\t result[list[i]] = values[i];\n\t } else {\n\t result[list[i][0]] = list[i][1];\n\t }\n\t }\n\t return result;\n\t };\n\t\n\t // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n\t // we need this function. Return the position of the first occurrence of an\n\t // item in an array, or -1 if the item is not included in the array.\n\t // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n\t // If the array is large and already in sort order, pass `true`\n\t // for **isSorted** to use binary search.\n\t _.indexOf = function(array, item, isSorted) {\n\t if (array == null) return -1;\n\t var i = 0, l = array.length;\n\t if (isSorted) {\n\t if (typeof isSorted == 'number') {\n\t i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted);\n\t } else {\n\t i = _.sortedIndex(array, item);\n\t return array[i] === item ? i : -1;\n\t }\n\t }\n\t if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n\t for (; i < l; i++) if (array[i] === item) return i;\n\t return -1;\n\t };\n\t\n\t // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n\t _.lastIndexOf = function(array, item, from) {\n\t if (array == null) return -1;\n\t var hasIndex = from != null;\n\t if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n\t return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n\t }\n\t var i = (hasIndex ? from : array.length);\n\t while (i--) if (array[i] === item) return i;\n\t return -1;\n\t };\n\t\n\t // Generate an integer Array containing an arithmetic progression. A port of\n\t // the native Python `range()` function. See\n\t // [the Python documentation](http://docs.python.org/library/functions.html#range).\n\t _.range = function(start, stop, step) {\n\t if (arguments.length <= 1) {\n\t stop = start || 0;\n\t start = 0;\n\t }\n\t step = arguments[2] || 1;\n\t\n\t var len = Math.max(Math.ceil((stop - start) / step), 0);\n\t var idx = 0;\n\t var range = new Array(len);\n\t\n\t while(idx < len) {\n\t range[idx++] = start;\n\t start += step;\n\t }\n\t\n\t return range;\n\t };\n\t\n\t // Function (ahem) Functions\n\t // ------------------\n\t\n\t // Create a function bound to a given object (assigning `this`, and arguments,\n\t // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n\t // available.\n\t _.bind = function(func, context) {\n\t if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n\t var args = slice.call(arguments, 2);\n\t return function() {\n\t return func.apply(context, args.concat(slice.call(arguments)));\n\t };\n\t };\n\t\n\t // Partially apply a function by creating a version that has had some of its\n\t // arguments pre-filled, without changing its dynamic `this` context.\n\t _.partial = function(func) {\n\t var args = slice.call(arguments, 1);\n\t return function() {\n\t return func.apply(this, args.concat(slice.call(arguments)));\n\t };\n\t };\n\t\n\t // Bind all of an object's methods to that object. Useful for ensuring that\n\t // all callbacks defined on an object belong to it.\n\t _.bindAll = function(obj) {\n\t var funcs = slice.call(arguments, 1);\n\t if (funcs.length === 0) funcs = _.functions(obj);\n\t each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n\t return obj;\n\t };\n\t\n\t // Memoize an expensive function by storing its results.\n\t _.memoize = function(func, hasher) {\n\t var memo = {};\n\t hasher || (hasher = _.identity);\n\t return function() {\n\t var key = hasher.apply(this, arguments);\n\t return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n\t };\n\t };\n\t\n\t // Delays a function for the given number of milliseconds, and then calls\n\t // it with the arguments supplied.\n\t _.delay = function(func, wait) {\n\t var args = slice.call(arguments, 2);\n\t return setTimeout(function(){ return func.apply(null, args); }, wait);\n\t };\n\t\n\t // Defers a function, scheduling it to run after the current call stack has\n\t // cleared.\n\t _.defer = function(func) {\n\t return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n\t };\n\t\n\t // Returns a function, that, when invoked, will only be triggered at most once\n\t // during a given window of time.\n\t _.throttle = function(func, wait) {\n\t var context, args, timeout, result;\n\t var previous = 0;\n\t var later = function() {\n\t previous = new Date;\n\t timeout = null;\n\t result = func.apply(context, args);\n\t };\n\t return function() {\n\t var now = new Date;\n\t var remaining = wait - (now - previous);\n\t context = this;\n\t args = arguments;\n\t if (remaining <= 0) {\n\t clearTimeout(timeout);\n\t timeout = null;\n\t previous = now;\n\t result = func.apply(context, args);\n\t } else if (!timeout) {\n\t timeout = setTimeout(later, remaining);\n\t }\n\t return result;\n\t };\n\t };\n\t\n\t // Returns a function, that, as long as it continues to be invoked, will not\n\t // be triggered. The function will be called after it stops being called for\n\t // N milliseconds. If `immediate` is passed, trigger the function on the\n\t // leading edge, instead of the trailing.\n\t _.debounce = function(func, wait, immediate) {\n\t var timeout, result;\n\t return function() {\n\t var context = this, args = arguments;\n\t var later = function() {\n\t timeout = null;\n\t if (!immediate) result = func.apply(context, args);\n\t };\n\t var callNow = immediate && !timeout;\n\t clearTimeout(timeout);\n\t timeout = setTimeout(later, wait);\n\t if (callNow) result = func.apply(context, args);\n\t return result;\n\t };\n\t };\n\t\n\t // Returns a function that will be executed at most one time, no matter how\n\t // often you call it. Useful for lazy initialization.\n\t _.once = function(func) {\n\t var ran = false, memo;\n\t return function() {\n\t if (ran) return memo;\n\t ran = true;\n\t memo = func.apply(this, arguments);\n\t func = null;\n\t return memo;\n\t };\n\t };\n\t\n\t // Returns the first function passed as an argument to the second,\n\t // allowing you to adjust arguments, run code before and after, and\n\t // conditionally execute the original function.\n\t _.wrap = function(func, wrapper) {\n\t return function() {\n\t var args = [func];\n\t push.apply(args, arguments);\n\t return wrapper.apply(this, args);\n\t };\n\t };\n\t\n\t // Returns a function that is the composition of a list of functions, each\n\t // consuming the return value of the function that follows.\n\t _.compose = function() {\n\t var funcs = arguments;\n\t return function() {\n\t var args = arguments;\n\t for (var i = funcs.length - 1; i >= 0; i--) {\n\t args = [funcs[i].apply(this, args)];\n\t }\n\t return args[0];\n\t };\n\t };\n\t\n\t // Returns a function that will only be executed after being called N times.\n\t _.after = function(times, func) {\n\t if (times <= 0) return func();\n\t return function() {\n\t if (--times < 1) {\n\t return func.apply(this, arguments);\n\t }\n\t };\n\t };\n\t\n\t // Object Functions\n\t // ----------------\n\t\n\t // Retrieve the names of an object's properties.\n\t // Delegates to **ECMAScript 5**'s native `Object.keys`\n\t _.keys = nativeKeys || function(obj) {\n\t if (obj !== Object(obj)) throw new TypeError('Invalid object');\n\t var keys = [];\n\t for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n\t return keys;\n\t };\n\t\n\t // Retrieve the values of an object's properties.\n\t _.values = function(obj) {\n\t var values = [];\n\t for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);\n\t return values;\n\t };\n\t\n\t // Convert an object into a list of `[key, value]` pairs.\n\t _.pairs = function(obj) {\n\t var pairs = [];\n\t for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]);\n\t return pairs;\n\t };\n\t\n\t // Invert the keys and values of an object. The values must be serializable.\n\t _.invert = function(obj) {\n\t var result = {};\n\t for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key;\n\t return result;\n\t };\n\t\n\t // Return a sorted list of the function names available on the object.\n\t // Aliased as `methods`\n\t _.functions = _.methods = function(obj) {\n\t var names = [];\n\t for (var key in obj) {\n\t if (_.isFunction(obj[key])) names.push(key);\n\t }\n\t return names.sort();\n\t };\n\t\n\t // Extend a given object with all the properties in passed-in object(s).\n\t _.extend = function(obj) {\n\t each(slice.call(arguments, 1), function(source) {\n\t if (source) {\n\t for (var prop in source) {\n\t obj[prop] = source[prop];\n\t }\n\t }\n\t });\n\t return obj;\n\t };\n\t\n\t // Return a copy of the object only containing the whitelisted properties.\n\t _.pick = function(obj) {\n\t var copy = {};\n\t var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t each(keys, function(key) {\n\t if (key in obj) copy[key] = obj[key];\n\t });\n\t return copy;\n\t };\n\t\n\t // Return a copy of the object without the blacklisted properties.\n\t _.omit = function(obj) {\n\t var copy = {};\n\t var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n\t for (var key in obj) {\n\t if (!_.contains(keys, key)) copy[key] = obj[key];\n\t }\n\t return copy;\n\t };\n\t\n\t // Fill in a given object with default properties.\n\t _.defaults = function(obj) {\n\t each(slice.call(arguments, 1), function(source) {\n\t if (source) {\n\t for (var prop in source) {\n\t if (obj[prop] == null) obj[prop] = source[prop];\n\t }\n\t }\n\t });\n\t return obj;\n\t };\n\t\n\t // Create a (shallow-cloned) duplicate of an object.\n\t _.clone = function(obj) {\n\t if (!_.isObject(obj)) return obj;\n\t return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n\t };\n\t\n\t // Invokes interceptor with the obj, and then returns obj.\n\t // The primary purpose of this method is to \"tap into\" a method chain, in\n\t // order to perform operations on intermediate results within the chain.\n\t _.tap = function(obj, interceptor) {\n\t interceptor(obj);\n\t return obj;\n\t };\n\t\n\t // Internal recursive comparison function for `isEqual`.\n\t var eq = function(a, b, aStack, bStack) {\n\t // Identical objects are equal. `0 === -0`, but they aren't identical.\n\t // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n\t if (a === b) return a !== 0 || 1 / a == 1 / b;\n\t // A strict comparison is necessary because `null == undefined`.\n\t if (a == null || b == null) return a === b;\n\t // Unwrap any wrapped objects.\n\t if (a instanceof _) a = a._wrapped;\n\t if (b instanceof _) b = b._wrapped;\n\t // Compare `[[Class]]` names.\n\t var className = toString.call(a);\n\t if (className != toString.call(b)) return false;\n\t switch (className) {\n\t // Strings, numbers, dates, and booleans are compared by value.\n\t case '[object String]':\n\t // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n\t // equivalent to `new String(\"5\")`.\n\t return a == String(b);\n\t case '[object Number]':\n\t // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n\t // other numeric values.\n\t return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n\t case '[object Date]':\n\t case '[object Boolean]':\n\t // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n\t // millisecond representations. Note that invalid dates with millisecond representations\n\t // of `NaN` are not equivalent.\n\t return +a == +b;\n\t // RegExps are compared by their source patterns and flags.\n\t case '[object RegExp]':\n\t return a.source == b.source &&\n\t a.global == b.global &&\n\t a.multiline == b.multiline &&\n\t a.ignoreCase == b.ignoreCase;\n\t }\n\t if (typeof a != 'object' || typeof b != 'object') return false;\n\t // Assume equality for cyclic structures. The algorithm for detecting cyclic\n\t // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\t var length = aStack.length;\n\t while (length--) {\n\t // Linear search. Performance is inversely proportional to the number of\n\t // unique nested structures.\n\t if (aStack[length] == a) return bStack[length] == b;\n\t }\n\t // Add the first object to the stack of traversed objects.\n\t aStack.push(a);\n\t bStack.push(b);\n\t var size = 0, result = true;\n\t // Recursively compare objects and arrays.\n\t if (className == '[object Array]') {\n\t // Compare array lengths to determine if a deep comparison is necessary.\n\t size = a.length;\n\t result = size == b.length;\n\t if (result) {\n\t // Deep compare the contents, ignoring non-numeric properties.\n\t while (size--) {\n\t if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n\t }\n\t }\n\t } else {\n\t // Objects with different constructors are not equivalent, but `Object`s\n\t // from different frames are.\n\t var aCtor = a.constructor, bCtor = b.constructor;\n\t if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n\t _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n\t return false;\n\t }\n\t // Deep compare objects.\n\t for (var key in a) {\n\t if (_.has(a, key)) {\n\t // Count the expected number of properties.\n\t size++;\n\t // Deep compare each member.\n\t if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n\t }\n\t }\n\t // Ensure that both objects contain the same number of properties.\n\t if (result) {\n\t for (key in b) {\n\t if (_.has(b, key) && !(size--)) break;\n\t }\n\t result = !size;\n\t }\n\t }\n\t // Remove the first object from the stack of traversed objects.\n\t aStack.pop();\n\t bStack.pop();\n\t return result;\n\t };\n\t\n\t // Perform a deep comparison to check if two objects are equal.\n\t _.isEqual = function(a, b) {\n\t return eq(a, b, [], []);\n\t };\n\t\n\t // Is a given array, string, or object empty?\n\t // An \"empty\" object has no enumerable own-properties.\n\t _.isEmpty = function(obj) {\n\t if (obj == null) return true;\n\t if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n\t for (var key in obj) if (_.has(obj, key)) return false;\n\t return true;\n\t };\n\t\n\t // Is a given value a DOM element?\n\t _.isElement = function(obj) {\n\t return !!(obj && obj.nodeType === 1);\n\t };\n\t\n\t // Is a given value an array?\n\t // Delegates to ECMA5's native Array.isArray\n\t _.isArray = nativeIsArray || function(obj) {\n\t return toString.call(obj) == '[object Array]';\n\t };\n\t\n\t // Is a given variable an object?\n\t _.isObject = function(obj) {\n\t return obj === Object(obj);\n\t };\n\t\n\t // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n\t each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n\t _['is' + name] = function(obj) {\n\t return toString.call(obj) == '[object ' + name + ']';\n\t };\n\t });\n\t\n\t // Define a fallback version of the method in browsers (ahem, IE), where\n\t // there isn't any inspectable \"Arguments\" type.\n\t if (!_.isArguments(arguments)) {\n\t _.isArguments = function(obj) {\n\t return !!(obj && _.has(obj, 'callee'));\n\t };\n\t }\n\t\n\t // Optimize `isFunction` if appropriate.\n\t if (true) {\n\t _.isFunction = function(obj) {\n\t return typeof obj === 'function';\n\t };\n\t }\n\t\n\t // Is a given object a finite number?\n\t _.isFinite = function(obj) {\n\t return isFinite(obj) && !isNaN(parseFloat(obj));\n\t };\n\t\n\t // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n\t _.isNaN = function(obj) {\n\t return _.isNumber(obj) && obj != +obj;\n\t };\n\t\n\t // Is a given value a boolean?\n\t _.isBoolean = function(obj) {\n\t return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n\t };\n\t\n\t // Is a given value equal to null?\n\t _.isNull = function(obj) {\n\t return obj === null;\n\t };\n\t\n\t // Is a given variable undefined?\n\t _.isUndefined = function(obj) {\n\t return obj === void 0;\n\t };\n\t\n\t // Shortcut function for checking if an object has a given property directly\n\t // on itself (in other words, not on a prototype).\n\t _.has = function(obj, key) {\n\t return hasOwnProperty.call(obj, key);\n\t };\n\t\n\t // Utility Functions\n\t // -----------------\n\t\n\t // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n\t // previous owner. Returns a reference to the Underscore object.\n\t _.noConflict = function() {\n\t root._ = previousUnderscore;\n\t return this;\n\t };\n\t\n\t // Keep the identity function around for default iterators.\n\t _.identity = function(value) {\n\t return value;\n\t };\n\t\n\t // Run a function **n** times.\n\t _.times = function(n, iterator, context) {\n\t var accum = Array(n);\n\t for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n\t return accum;\n\t };\n\t\n\t // Return a random integer between min and max (inclusive).\n\t _.random = function(min, max) {\n\t if (max == null) {\n\t max = min;\n\t min = 0;\n\t }\n\t return min + Math.floor(Math.random() * (max - min + 1));\n\t };\n\t\n\t // List of HTML entities for escaping.\n\t var entityMap = {\n\t escape: {\n\t '&': '&',\n\t '<': '<',\n\t '>': '>',\n\t '\"': '"',\n\t \"'\": ''',\n\t '/': '/'\n\t }\n\t };\n\t entityMap.unescape = _.invert(entityMap.escape);\n\t\n\t // Regexes containing the keys and values listed immediately above.\n\t var entityRegexes = {\n\t escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n\t unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n\t };\n\t\n\t // Functions for escaping and unescaping strings to/from HTML interpolation.\n\t _.each(['escape', 'unescape'], function(method) {\n\t _[method] = function(string) {\n\t if (string == null) return '';\n\t return ('' + string).replace(entityRegexes[method], function(match) {\n\t return entityMap[method][match];\n\t });\n\t };\n\t });\n\t\n\t // If the value of the named property is a function then invoke it;\n\t // otherwise, return it.\n\t _.result = function(object, property) {\n\t if (object == null) return null;\n\t var value = object[property];\n\t return _.isFunction(value) ? value.call(object) : value;\n\t };\n\t\n\t // Add your own custom functions to the Underscore object.\n\t _.mixin = function(obj) {\n\t each(_.functions(obj), function(name){\n\t var func = _[name] = obj[name];\n\t _.prototype[name] = function() {\n\t var args = [this._wrapped];\n\t push.apply(args, arguments);\n\t return result.call(this, func.apply(_, args));\n\t };\n\t });\n\t };\n\t\n\t // Generate a unique integer id (unique within the entire client session).\n\t // Useful for temporary DOM ids.\n\t var idCounter = 0;\n\t _.uniqueId = function(prefix) {\n\t var id = ++idCounter + '';\n\t return prefix ? prefix + id : id;\n\t };\n\t\n\t // By default, Underscore uses ERB-style template delimiters, change the\n\t // following template settings to use alternative delimiters.\n\t _.templateSettings = {\n\t evaluate : /<%([\\s\\S]+?)%>/g,\n\t interpolate : /<%=([\\s\\S]+?)%>/g,\n\t escape : /<%-([\\s\\S]+?)%>/g\n\t };\n\t\n\t // When customizing `templateSettings`, if you don't want to define an\n\t // interpolation, evaluation or escaping regex, we need one that is\n\t // guaranteed not to match.\n\t var noMatch = /(.)^/;\n\t\n\t // Certain characters need to be escaped so that they can be put into a\n\t // string literal.\n\t var escapes = {\n\t \"'\": \"'\",\n\t '\\\\': '\\\\',\n\t '\\r': 'r',\n\t '\\n': 'n',\n\t '\\t': 't',\n\t '\\u2028': 'u2028',\n\t '\\u2029': 'u2029'\n\t };\n\t\n\t var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n\t\n\t // JavaScript micro-templating, similar to John Resig's implementation.\n\t // Underscore templating handles arbitrary delimiters, preserves whitespace,\n\t // and correctly escapes quotes within interpolated code.\n\t _.template = function(text, data, settings) {\n\t var render;\n\t settings = _.defaults({}, settings, _.templateSettings);\n\t\n\t // Combine delimiters into one regular expression via alternation.\n\t var matcher = new RegExp([\n\t (settings.escape || noMatch).source,\n\t (settings.interpolate || noMatch).source,\n\t (settings.evaluate || noMatch).source\n\t ].join('|') + '|$', 'g');\n\t\n\t // Compile the template source, escaping string literals appropriately.\n\t var index = 0;\n\t var source = \"__p+='\";\n\t text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n\t source += text.slice(index, offset)\n\t .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n\t\n\t if (escape) {\n\t source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n\t }\n\t if (interpolate) {\n\t source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n\t }\n\t if (evaluate) {\n\t source += \"';\\n\" + evaluate + \"\\n__p+='\";\n\t }\n\t index = offset + match.length;\n\t return match;\n\t });\n\t source += \"';\\n\";\n\t\n\t // If a variable is not specified, place data values in local scope.\n\t if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\t\n\t source = \"var __t,__p='',__j=Array.prototype.join,\" +\n\t \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n\t source + \"return __p;\\n\";\n\t\n\t try {\n\t render = new Function(settings.variable || 'obj', '_', source);\n\t } catch (e) {\n\t e.source = source;\n\t throw e;\n\t }\n\t\n\t if (data) return render(data, _);\n\t var template = function(data) {\n\t return render.call(this, data, _);\n\t };\n\t\n\t // Provide the compiled function source as a convenience for precompilation.\n\t template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\t\n\t return template;\n\t };\n\t\n\t // Add a \"chain\" function, which will delegate to the wrapper.\n\t _.chain = function(obj) {\n\t return _(obj).chain();\n\t };\n\t\n\t // OOP\n\t // ---------------\n\t // If Underscore is called as a function, it returns a wrapped object that\n\t // can be used OO-style. This wrapper holds altered versions of all the\n\t // underscore functions. Wrapped objects may be chained.\n\t\n\t // Helper function to continue chaining intermediate results.\n\t var result = function(obj) {\n\t return this._chain ? _(obj).chain() : obj;\n\t };\n\t\n\t // Add all of the Underscore functions to the wrapper object.\n\t _.mixin(_);\n\t\n\t // Add all mutator Array functions to the wrapper.\n\t each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n\t var method = ArrayProto[name];\n\t _.prototype[name] = function() {\n\t var obj = this._wrapped;\n\t method.apply(obj, arguments);\n\t if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n\t return result.call(this, obj);\n\t };\n\t });\n\t\n\t // Add all accessor Array functions to the wrapper.\n\t each(['concat', 'join', 'slice'], function(name) {\n\t var method = ArrayProto[name];\n\t _.prototype[name] = function() {\n\t return result.call(this, method.apply(this._wrapped, arguments));\n\t };\n\t });\n\t\n\t _.extend(_.prototype, {\n\t\n\t // Start chaining a wrapped Underscore object.\n\t chain: function() {\n\t this._chain = true;\n\t return this;\n\t },\n\t\n\t // Extracts the result from a wrapped and chained object.\n\t value: function() {\n\t return this._wrapped;\n\t }\n\t\n\t });\n\t\n\t}).call(this);\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * @fileoverview gl-matrix - High performance matrix and vector operations\n\t * @author Brandon Jones\n\t * @author Colin MacKenzie IV\n\t * @version 2.2.1\n\t */\n\t\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation\n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t\n\t(function(_global) {\n\t \"use strict\";\n\t\n\t var shim = {};\n\t if (false) {\n\t if(typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n\t shim.exports = {};\n\t define(function() {\n\t return shim.exports;\n\t });\n\t } else {\n\t // gl-matrix lives in a browser, define its namespaces in global\n\t shim.exports = typeof(window) !== 'undefined' ? window : _global;\n\t }\n\t }\n\t else {\n\t // gl-matrix lives in commonjs, define its namespaces in exports\n\t shim.exports = exports;\n\t }\n\t\n\t (function(exports) {\n\t /* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t\n\tif(!GLMAT_EPSILON) {\n\t var GLMAT_EPSILON = 0.000001;\n\t}\n\t\n\tif(!GLMAT_ARRAY_TYPE) {\n\t var GLMAT_ARRAY_TYPE = (typeof Float32Array !== 'undefined') ? Float32Array : Array;\n\t}\n\t\n\tif(!GLMAT_RANDOM) {\n\t var GLMAT_RANDOM = Math.random;\n\t}\n\t\n\t/**\n\t * @class Common utilities\n\t * @name glMatrix\n\t */\n\tvar glMatrix = {};\n\t\n\t/**\n\t * Sets the type of array used when creating new vectors and matricies\n\t *\n\t * @param {Type} type Array type, such as Float32Array or Array\n\t */\n\tglMatrix.setMatrixArrayType = function(type) {\n\t GLMAT_ARRAY_TYPE = type;\n\t}\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.glMatrix = glMatrix;\n\t}\n\t\n\tvar degree = Math.PI / 180;\n\t\n\t/**\n\t* Convert Degree To Radian\n\t*\n\t* @param {Number} Angle in Degrees\n\t*/\n\tglMatrix.toRadian = function(a){\n\t return a * degree;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 2 Dimensional Vector\n\t * @name vec2\n\t */\n\t\n\tvar vec2 = {};\n\t\n\t/**\n\t * Creates a new, empty vec2\n\t *\n\t * @returns {vec2} a new 2D vector\n\t */\n\tvec2.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(2);\n\t out[0] = 0;\n\t out[1] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec2 initialized with values from an existing vector\n\t *\n\t * @param {vec2} a vector to clone\n\t * @returns {vec2} a new 2D vector\n\t */\n\tvec2.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(2);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec2 initialized with the given values\n\t *\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @returns {vec2} a new 2D vector\n\t */\n\tvec2.fromValues = function(x, y) {\n\t var out = new GLMAT_ARRAY_TYPE(2);\n\t out[0] = x;\n\t out[1] = y;\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one vec2 to another\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the source vector\n\t * @returns {vec2} out\n\t */\n\tvec2.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set the components of a vec2 to the given values\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @returns {vec2} out\n\t */\n\tvec2.set = function(out, x, y) {\n\t out[0] = x;\n\t out[1] = y;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.add = function(out, a, b) {\n\t out[0] = a[0] + b[0];\n\t out[1] = a[1] + b[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Subtracts vector b from vector a\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.subtract = function(out, a, b) {\n\t out[0] = a[0] - b[0];\n\t out[1] = a[1] - b[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.subtract}\n\t * @function\n\t */\n\tvec2.sub = vec2.subtract;\n\t\n\t/**\n\t * Multiplies two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.multiply = function(out, a, b) {\n\t out[0] = a[0] * b[0];\n\t out[1] = a[1] * b[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.multiply}\n\t * @function\n\t */\n\tvec2.mul = vec2.multiply;\n\t\n\t/**\n\t * Divides two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.divide = function(out, a, b) {\n\t out[0] = a[0] / b[0];\n\t out[1] = a[1] / b[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.divide}\n\t * @function\n\t */\n\tvec2.div = vec2.divide;\n\t\n\t/**\n\t * Returns the minimum of two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.min = function(out, a, b) {\n\t out[0] = Math.min(a[0], b[0]);\n\t out[1] = Math.min(a[1], b[1]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns the maximum of two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec2} out\n\t */\n\tvec2.max = function(out, a, b) {\n\t out[0] = Math.max(a[0], b[0]);\n\t out[1] = Math.max(a[1], b[1]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales a vec2 by a scalar number\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the vector to scale\n\t * @param {Number} b amount to scale the vector by\n\t * @returns {vec2} out\n\t */\n\tvec2.scale = function(out, a, b) {\n\t out[0] = a[0] * b;\n\t out[1] = a[1] * b;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec2's after scaling the second operand by a scalar value\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @param {Number} scale the amount to scale b by before adding\n\t * @returns {vec2} out\n\t */\n\tvec2.scaleAndAdd = function(out, a, b, scale) {\n\t out[0] = a[0] + (b[0] * scale);\n\t out[1] = a[1] + (b[1] * scale);\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the euclidian distance between two vec2's\n\t *\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {Number} distance between a and b\n\t */\n\tvec2.distance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1];\n\t return Math.sqrt(x*x + y*y);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.distance}\n\t * @function\n\t */\n\tvec2.dist = vec2.distance;\n\t\n\t/**\n\t * Calculates the squared euclidian distance between two vec2's\n\t *\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {Number} squared distance between a and b\n\t */\n\tvec2.squaredDistance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1];\n\t return x*x + y*y;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.squaredDistance}\n\t * @function\n\t */\n\tvec2.sqrDist = vec2.squaredDistance;\n\t\n\t/**\n\t * Calculates the length of a vec2\n\t *\n\t * @param {vec2} a vector to calculate length of\n\t * @returns {Number} length of a\n\t */\n\tvec2.length = function (a) {\n\t var x = a[0],\n\t y = a[1];\n\t return Math.sqrt(x*x + y*y);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.length}\n\t * @function\n\t */\n\tvec2.len = vec2.length;\n\t\n\t/**\n\t * Calculates the squared length of a vec2\n\t *\n\t * @param {vec2} a vector to calculate squared length of\n\t * @returns {Number} squared length of a\n\t */\n\tvec2.squaredLength = function (a) {\n\t var x = a[0],\n\t y = a[1];\n\t return x*x + y*y;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec2.squaredLength}\n\t * @function\n\t */\n\tvec2.sqrLen = vec2.squaredLength;\n\t\n\t/**\n\t * Negates the components of a vec2\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a vector to negate\n\t * @returns {vec2} out\n\t */\n\tvec2.negate = function(out, a) {\n\t out[0] = -a[0];\n\t out[1] = -a[1];\n\t return out;\n\t};\n\t\n\t/**\n\t * Normalize a vec2\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a vector to normalize\n\t * @returns {vec2} out\n\t */\n\tvec2.normalize = function(out, a) {\n\t var x = a[0],\n\t y = a[1];\n\t var len = x*x + y*y;\n\t if (len > 0) {\n\t //TODO: evaluate use of glm_invsqrt here?\n\t len = 1 / Math.sqrt(len);\n\t out[0] = a[0] * len;\n\t out[1] = a[1] * len;\n\t }\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the dot product of two vec2's\n\t *\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {Number} dot product of a and b\n\t */\n\tvec2.dot = function (a, b) {\n\t return a[0] * b[0] + a[1] * b[1];\n\t};\n\t\n\t/**\n\t * Computes the cross product of two vec2's\n\t * Note that the cross product must by definition produce a 3D vector\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec2.cross = function(out, a, b) {\n\t var z = a[0] * b[1] - a[1] * b[0];\n\t out[0] = out[1] = 0;\n\t out[2] = z;\n\t return out;\n\t};\n\t\n\t/**\n\t * Performs a linear interpolation between two vec2's\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the first operand\n\t * @param {vec2} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {vec2} out\n\t */\n\tvec2.lerp = function (out, a, b, t) {\n\t var ax = a[0],\n\t ay = a[1];\n\t out[0] = ax + t * (b[0] - ax);\n\t out[1] = ay + t * (b[1] - ay);\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a random vector with the given scale\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n\t * @returns {vec2} out\n\t */\n\tvec2.random = function (out, scale) {\n\t scale = scale || 1.0;\n\t var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n\t out[0] = Math.cos(r) * scale;\n\t out[1] = Math.sin(r) * scale;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec2 with a mat2\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the vector to transform\n\t * @param {mat2} m matrix to transform with\n\t * @returns {vec2} out\n\t */\n\tvec2.transformMat2 = function(out, a, m) {\n\t var x = a[0],\n\t y = a[1];\n\t out[0] = m[0] * x + m[2] * y;\n\t out[1] = m[1] * x + m[3] * y;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec2 with a mat2d\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the vector to transform\n\t * @param {mat2d} m matrix to transform with\n\t * @returns {vec2} out\n\t */\n\tvec2.transformMat2d = function(out, a, m) {\n\t var x = a[0],\n\t y = a[1];\n\t out[0] = m[0] * x + m[2] * y + m[4];\n\t out[1] = m[1] * x + m[3] * y + m[5];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec2 with a mat3\n\t * 3rd vector component is implicitly '1'\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the vector to transform\n\t * @param {mat3} m matrix to transform with\n\t * @returns {vec2} out\n\t */\n\tvec2.transformMat3 = function(out, a, m) {\n\t var x = a[0],\n\t y = a[1];\n\t out[0] = m[0] * x + m[3] * y + m[6];\n\t out[1] = m[1] * x + m[4] * y + m[7];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec2 with a mat4\n\t * 3rd vector component is implicitly '0'\n\t * 4th vector component is implicitly '1'\n\t *\n\t * @param {vec2} out the receiving vector\n\t * @param {vec2} a the vector to transform\n\t * @param {mat4} m matrix to transform with\n\t * @returns {vec2} out\n\t */\n\tvec2.transformMat4 = function(out, a, m) {\n\t var x = a[0], \n\t y = a[1];\n\t out[0] = m[0] * x + m[4] * y + m[12];\n\t out[1] = m[1] * x + m[5] * y + m[13];\n\t return out;\n\t};\n\t\n\t/**\n\t * Perform some operation over an array of vec2s.\n\t *\n\t * @param {Array} a the array of vectors to iterate over\n\t * @param {Number} stride Number of elements between the start of each vec2. If 0 assumes tightly packed\n\t * @param {Number} offset Number of elements to skip at the beginning of the array\n\t * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n\t * @param {Function} fn Function to call for each vector in the array\n\t * @param {Object} [arg] additional argument to pass to fn\n\t * @returns {Array} a\n\t * @function\n\t */\n\tvec2.forEach = (function() {\n\t var vec = vec2.create();\n\t\n\t return function(a, stride, offset, count, fn, arg) {\n\t var i, l;\n\t if(!stride) {\n\t stride = 2;\n\t }\n\t\n\t if(!offset) {\n\t offset = 0;\n\t }\n\t \n\t if(count) {\n\t l = Math.min((count * stride) + offset, a.length);\n\t } else {\n\t l = a.length;\n\t }\n\t\n\t for(i = offset; i < l; i += stride) {\n\t vec[0] = a[i]; vec[1] = a[i+1];\n\t fn(vec, vec, arg);\n\t a[i] = vec[0]; a[i+1] = vec[1];\n\t }\n\t \n\t return a;\n\t };\n\t})();\n\t\n\t/**\n\t * Returns a string representation of a vector\n\t *\n\t * @param {vec2} vec vector to represent as a string\n\t * @returns {String} string representation of the vector\n\t */\n\tvec2.str = function (a) {\n\t return 'vec2(' + a[0] + ', ' + a[1] + ')';\n\t};\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.vec2 = vec2;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 3 Dimensional Vector\n\t * @name vec3\n\t */\n\t\n\tvar vec3 = {};\n\t\n\t/**\n\t * Creates a new, empty vec3\n\t *\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec3 initialized with values from an existing vector\n\t *\n\t * @param {vec3} a vector to clone\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec3 initialized with the given values\n\t *\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @returns {vec3} a new 3D vector\n\t */\n\tvec3.fromValues = function(x, y, z) {\n\t var out = new GLMAT_ARRAY_TYPE(3);\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one vec3 to another\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the source vector\n\t * @returns {vec3} out\n\t */\n\tvec3.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set the components of a vec3 to the given values\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @returns {vec3} out\n\t */\n\tvec3.set = function(out, x, y, z) {\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.add = function(out, a, b) {\n\t out[0] = a[0] + b[0];\n\t out[1] = a[1] + b[1];\n\t out[2] = a[2] + b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Subtracts vector b from vector a\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.subtract = function(out, a, b) {\n\t out[0] = a[0] - b[0];\n\t out[1] = a[1] - b[1];\n\t out[2] = a[2] - b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.subtract}\n\t * @function\n\t */\n\tvec3.sub = vec3.subtract;\n\t\n\t/**\n\t * Multiplies two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.multiply = function(out, a, b) {\n\t out[0] = a[0] * b[0];\n\t out[1] = a[1] * b[1];\n\t out[2] = a[2] * b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.multiply}\n\t * @function\n\t */\n\tvec3.mul = vec3.multiply;\n\t\n\t/**\n\t * Divides two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.divide = function(out, a, b) {\n\t out[0] = a[0] / b[0];\n\t out[1] = a[1] / b[1];\n\t out[2] = a[2] / b[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.divide}\n\t * @function\n\t */\n\tvec3.div = vec3.divide;\n\t\n\t/**\n\t * Returns the minimum of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.min = function(out, a, b) {\n\t out[0] = Math.min(a[0], b[0]);\n\t out[1] = Math.min(a[1], b[1]);\n\t out[2] = Math.min(a[2], b[2]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns the maximum of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.max = function(out, a, b) {\n\t out[0] = Math.max(a[0], b[0]);\n\t out[1] = Math.max(a[1], b[1]);\n\t out[2] = Math.max(a[2], b[2]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales a vec3 by a scalar number\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to scale\n\t * @param {Number} b amount to scale the vector by\n\t * @returns {vec3} out\n\t */\n\tvec3.scale = function(out, a, b) {\n\t out[0] = a[0] * b;\n\t out[1] = a[1] * b;\n\t out[2] = a[2] * b;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec3's after scaling the second operand by a scalar value\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @param {Number} scale the amount to scale b by before adding\n\t * @returns {vec3} out\n\t */\n\tvec3.scaleAndAdd = function(out, a, b, scale) {\n\t out[0] = a[0] + (b[0] * scale);\n\t out[1] = a[1] + (b[1] * scale);\n\t out[2] = a[2] + (b[2] * scale);\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the euclidian distance between two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} distance between a and b\n\t */\n\tvec3.distance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2];\n\t return Math.sqrt(x*x + y*y + z*z);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.distance}\n\t * @function\n\t */\n\tvec3.dist = vec3.distance;\n\t\n\t/**\n\t * Calculates the squared euclidian distance between two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} squared distance between a and b\n\t */\n\tvec3.squaredDistance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2];\n\t return x*x + y*y + z*z;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.squaredDistance}\n\t * @function\n\t */\n\tvec3.sqrDist = vec3.squaredDistance;\n\t\n\t/**\n\t * Calculates the length of a vec3\n\t *\n\t * @param {vec3} a vector to calculate length of\n\t * @returns {Number} length of a\n\t */\n\tvec3.length = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t return Math.sqrt(x*x + y*y + z*z);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.length}\n\t * @function\n\t */\n\tvec3.len = vec3.length;\n\t\n\t/**\n\t * Calculates the squared length of a vec3\n\t *\n\t * @param {vec3} a vector to calculate squared length of\n\t * @returns {Number} squared length of a\n\t */\n\tvec3.squaredLength = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t return x*x + y*y + z*z;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec3.squaredLength}\n\t * @function\n\t */\n\tvec3.sqrLen = vec3.squaredLength;\n\t\n\t/**\n\t * Negates the components of a vec3\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a vector to negate\n\t * @returns {vec3} out\n\t */\n\tvec3.negate = function(out, a) {\n\t out[0] = -a[0];\n\t out[1] = -a[1];\n\t out[2] = -a[2];\n\t return out;\n\t};\n\t\n\t/**\n\t * Normalize a vec3\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a vector to normalize\n\t * @returns {vec3} out\n\t */\n\tvec3.normalize = function(out, a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2];\n\t var len = x*x + y*y + z*z;\n\t if (len > 0) {\n\t //TODO: evaluate use of glm_invsqrt here?\n\t len = 1 / Math.sqrt(len);\n\t out[0] = a[0] * len;\n\t out[1] = a[1] * len;\n\t out[2] = a[2] * len;\n\t }\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the dot product of two vec3's\n\t *\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {Number} dot product of a and b\n\t */\n\tvec3.dot = function (a, b) {\n\t return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\t};\n\t\n\t/**\n\t * Computes the cross product of two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @returns {vec3} out\n\t */\n\tvec3.cross = function(out, a, b) {\n\t var ax = a[0], ay = a[1], az = a[2],\n\t bx = b[0], by = b[1], bz = b[2];\n\t\n\t out[0] = ay * bz - az * by;\n\t out[1] = az * bx - ax * bz;\n\t out[2] = ax * by - ay * bx;\n\t return out;\n\t};\n\t\n\t/**\n\t * Performs a linear interpolation between two vec3's\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the first operand\n\t * @param {vec3} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {vec3} out\n\t */\n\tvec3.lerp = function (out, a, b, t) {\n\t var ax = a[0],\n\t ay = a[1],\n\t az = a[2];\n\t out[0] = ax + t * (b[0] - ax);\n\t out[1] = ay + t * (b[1] - ay);\n\t out[2] = az + t * (b[2] - az);\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a random vector with the given scale\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n\t * @returns {vec3} out\n\t */\n\tvec3.random = function (out, scale) {\n\t scale = scale || 1.0;\n\t\n\t var r = GLMAT_RANDOM() * 2.0 * Math.PI;\n\t var z = (GLMAT_RANDOM() * 2.0) - 1.0;\n\t var zScale = Math.sqrt(1.0-z*z) * scale;\n\t\n\t out[0] = Math.cos(r) * zScale;\n\t out[1] = Math.sin(r) * zScale;\n\t out[2] = z * scale;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a mat4.\n\t * 4th vector component is implicitly '1'\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {mat4} m matrix to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformMat4 = function(out, a, m) {\n\t var x = a[0], y = a[1], z = a[2];\n\t out[0] = m[0] * x + m[4] * y + m[8] * z + m[12];\n\t out[1] = m[1] * x + m[5] * y + m[9] * z + m[13];\n\t out[2] = m[2] * x + m[6] * y + m[10] * z + m[14];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a mat3.\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {mat4} m the 3x3 matrix to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformMat3 = function(out, a, m) {\n\t var x = a[0], y = a[1], z = a[2];\n\t out[0] = x * m[0] + y * m[3] + z * m[6];\n\t out[1] = x * m[1] + y * m[4] + z * m[7];\n\t out[2] = x * m[2] + y * m[5] + z * m[8];\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec3 with a quat\n\t *\n\t * @param {vec3} out the receiving vector\n\t * @param {vec3} a the vector to transform\n\t * @param {quat} q quaternion to transform with\n\t * @returns {vec3} out\n\t */\n\tvec3.transformQuat = function(out, a, q) {\n\t // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\t\n\t var x = a[0], y = a[1], z = a[2],\n\t qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\t\n\t // calculate quat * vec\n\t ix = qw * x + qy * z - qz * y,\n\t iy = qw * y + qz * x - qx * z,\n\t iz = qw * z + qx * y - qy * x,\n\t iw = -qx * x - qy * y - qz * z;\n\t\n\t // calculate result * inverse quat\n\t out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t return out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the x-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateX = function(out, a, b, c){\n\t var p = [], r=[];\n\t\t //Translate point to the origin\n\t\t p[0] = a[0] - b[0];\n\t\t p[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t\n\t\t //perform rotation\n\t\t r[0] = p[0];\n\t\t r[1] = p[1]*Math.cos(c) - p[2]*Math.sin(c);\n\t\t r[2] = p[1]*Math.sin(c) + p[2]*Math.cos(c);\n\t\n\t\t //translate to correct position\n\t\t out[0] = r[0] + b[0];\n\t\t out[1] = r[1] + b[1];\n\t\t out[2] = r[2] + b[2];\n\t\n\t \treturn out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the y-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateY = function(out, a, b, c){\n\t \tvar p = [], r=[];\n\t \t//Translate point to the origin\n\t \tp[0] = a[0] - b[0];\n\t \tp[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t \n\t \t//perform rotation\n\t \tr[0] = p[2]*Math.sin(c) + p[0]*Math.cos(c);\n\t \tr[1] = p[1];\n\t \tr[2] = p[2]*Math.cos(c) - p[0]*Math.sin(c);\n\t \n\t \t//translate to correct position\n\t \tout[0] = r[0] + b[0];\n\t \tout[1] = r[1] + b[1];\n\t \tout[2] = r[2] + b[2];\n\t \n\t \treturn out;\n\t};\n\t\n\t/*\n\t* Rotate a 3D vector around the z-axis\n\t* @param {vec3} out The receiving vec3\n\t* @param {vec3} a The vec3 point to rotate\n\t* @param {vec3} b The origin of the rotation\n\t* @param {Number} c The angle of rotation\n\t* @returns {vec3} out\n\t*/\n\tvec3.rotateZ = function(out, a, b, c){\n\t \tvar p = [], r=[];\n\t \t//Translate point to the origin\n\t \tp[0] = a[0] - b[0];\n\t \tp[1] = a[1] - b[1];\n\t \tp[2] = a[2] - b[2];\n\t \n\t \t//perform rotation\n\t \tr[0] = p[0]*Math.cos(c) - p[1]*Math.sin(c);\n\t \tr[1] = p[0]*Math.sin(c) + p[1]*Math.cos(c);\n\t \tr[2] = p[2];\n\t \n\t \t//translate to correct position\n\t \tout[0] = r[0] + b[0];\n\t \tout[1] = r[1] + b[1];\n\t \tout[2] = r[2] + b[2];\n\t \n\t \treturn out;\n\t};\n\t\n\t/**\n\t * Perform some operation over an array of vec3s.\n\t *\n\t * @param {Array} a the array of vectors to iterate over\n\t * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n\t * @param {Number} offset Number of elements to skip at the beginning of the array\n\t * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n\t * @param {Function} fn Function to call for each vector in the array\n\t * @param {Object} [arg] additional argument to pass to fn\n\t * @returns {Array} a\n\t * @function\n\t */\n\tvec3.forEach = (function() {\n\t var vec = vec3.create();\n\t\n\t return function(a, stride, offset, count, fn, arg) {\n\t var i, l;\n\t if(!stride) {\n\t stride = 3;\n\t }\n\t\n\t if(!offset) {\n\t offset = 0;\n\t }\n\t \n\t if(count) {\n\t l = Math.min((count * stride) + offset, a.length);\n\t } else {\n\t l = a.length;\n\t }\n\t\n\t for(i = offset; i < l; i += stride) {\n\t vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2];\n\t fn(vec, vec, arg);\n\t a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2];\n\t }\n\t \n\t return a;\n\t };\n\t})();\n\t\n\t/**\n\t * Returns a string representation of a vector\n\t *\n\t * @param {vec3} vec vector to represent as a string\n\t * @returns {String} string representation of the vector\n\t */\n\tvec3.str = function (a) {\n\t return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';\n\t};\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.vec3 = vec3;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 4 Dimensional Vector\n\t * @name vec4\n\t */\n\t\n\tvar vec4 = {};\n\t\n\t/**\n\t * Creates a new, empty vec4\n\t *\n\t * @returns {vec4} a new 4D vector\n\t */\n\tvec4.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec4 initialized with values from an existing vector\n\t *\n\t * @param {vec4} a vector to clone\n\t * @returns {vec4} a new 4D vector\n\t */\n\tvec4.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new vec4 initialized with the given values\n\t *\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @param {Number} w W component\n\t * @returns {vec4} a new 4D vector\n\t */\n\tvec4.fromValues = function(x, y, z, w) {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t out[3] = w;\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one vec4 to another\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the source vector\n\t * @returns {vec4} out\n\t */\n\tvec4.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set the components of a vec4 to the given values\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @param {Number} w W component\n\t * @returns {vec4} out\n\t */\n\tvec4.set = function(out, x, y, z, w) {\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t out[3] = w;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.add = function(out, a, b) {\n\t out[0] = a[0] + b[0];\n\t out[1] = a[1] + b[1];\n\t out[2] = a[2] + b[2];\n\t out[3] = a[3] + b[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Subtracts vector b from vector a\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.subtract = function(out, a, b) {\n\t out[0] = a[0] - b[0];\n\t out[1] = a[1] - b[1];\n\t out[2] = a[2] - b[2];\n\t out[3] = a[3] - b[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.subtract}\n\t * @function\n\t */\n\tvec4.sub = vec4.subtract;\n\t\n\t/**\n\t * Multiplies two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.multiply = function(out, a, b) {\n\t out[0] = a[0] * b[0];\n\t out[1] = a[1] * b[1];\n\t out[2] = a[2] * b[2];\n\t out[3] = a[3] * b[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.multiply}\n\t * @function\n\t */\n\tvec4.mul = vec4.multiply;\n\t\n\t/**\n\t * Divides two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.divide = function(out, a, b) {\n\t out[0] = a[0] / b[0];\n\t out[1] = a[1] / b[1];\n\t out[2] = a[2] / b[2];\n\t out[3] = a[3] / b[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.divide}\n\t * @function\n\t */\n\tvec4.div = vec4.divide;\n\t\n\t/**\n\t * Returns the minimum of two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.min = function(out, a, b) {\n\t out[0] = Math.min(a[0], b[0]);\n\t out[1] = Math.min(a[1], b[1]);\n\t out[2] = Math.min(a[2], b[2]);\n\t out[3] = Math.min(a[3], b[3]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns the maximum of two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {vec4} out\n\t */\n\tvec4.max = function(out, a, b) {\n\t out[0] = Math.max(a[0], b[0]);\n\t out[1] = Math.max(a[1], b[1]);\n\t out[2] = Math.max(a[2], b[2]);\n\t out[3] = Math.max(a[3], b[3]);\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales a vec4 by a scalar number\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the vector to scale\n\t * @param {Number} b amount to scale the vector by\n\t * @returns {vec4} out\n\t */\n\tvec4.scale = function(out, a, b) {\n\t out[0] = a[0] * b;\n\t out[1] = a[1] * b;\n\t out[2] = a[2] * b;\n\t out[3] = a[3] * b;\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two vec4's after scaling the second operand by a scalar value\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @param {Number} scale the amount to scale b by before adding\n\t * @returns {vec4} out\n\t */\n\tvec4.scaleAndAdd = function(out, a, b, scale) {\n\t out[0] = a[0] + (b[0] * scale);\n\t out[1] = a[1] + (b[1] * scale);\n\t out[2] = a[2] + (b[2] * scale);\n\t out[3] = a[3] + (b[3] * scale);\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the euclidian distance between two vec4's\n\t *\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {Number} distance between a and b\n\t */\n\tvec4.distance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2],\n\t w = b[3] - a[3];\n\t return Math.sqrt(x*x + y*y + z*z + w*w);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.distance}\n\t * @function\n\t */\n\tvec4.dist = vec4.distance;\n\t\n\t/**\n\t * Calculates the squared euclidian distance between two vec4's\n\t *\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {Number} squared distance between a and b\n\t */\n\tvec4.squaredDistance = function(a, b) {\n\t var x = b[0] - a[0],\n\t y = b[1] - a[1],\n\t z = b[2] - a[2],\n\t w = b[3] - a[3];\n\t return x*x + y*y + z*z + w*w;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.squaredDistance}\n\t * @function\n\t */\n\tvec4.sqrDist = vec4.squaredDistance;\n\t\n\t/**\n\t * Calculates the length of a vec4\n\t *\n\t * @param {vec4} a vector to calculate length of\n\t * @returns {Number} length of a\n\t */\n\tvec4.length = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2],\n\t w = a[3];\n\t return Math.sqrt(x*x + y*y + z*z + w*w);\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.length}\n\t * @function\n\t */\n\tvec4.len = vec4.length;\n\t\n\t/**\n\t * Calculates the squared length of a vec4\n\t *\n\t * @param {vec4} a vector to calculate squared length of\n\t * @returns {Number} squared length of a\n\t */\n\tvec4.squaredLength = function (a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2],\n\t w = a[3];\n\t return x*x + y*y + z*z + w*w;\n\t};\n\t\n\t/**\n\t * Alias for {@link vec4.squaredLength}\n\t * @function\n\t */\n\tvec4.sqrLen = vec4.squaredLength;\n\t\n\t/**\n\t * Negates the components of a vec4\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a vector to negate\n\t * @returns {vec4} out\n\t */\n\tvec4.negate = function(out, a) {\n\t out[0] = -a[0];\n\t out[1] = -a[1];\n\t out[2] = -a[2];\n\t out[3] = -a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Normalize a vec4\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a vector to normalize\n\t * @returns {vec4} out\n\t */\n\tvec4.normalize = function(out, a) {\n\t var x = a[0],\n\t y = a[1],\n\t z = a[2],\n\t w = a[3];\n\t var len = x*x + y*y + z*z + w*w;\n\t if (len > 0) {\n\t len = 1 / Math.sqrt(len);\n\t out[0] = a[0] * len;\n\t out[1] = a[1] * len;\n\t out[2] = a[2] * len;\n\t out[3] = a[3] * len;\n\t }\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the dot product of two vec4's\n\t *\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @returns {Number} dot product of a and b\n\t */\n\tvec4.dot = function (a, b) {\n\t return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n\t};\n\t\n\t/**\n\t * Performs a linear interpolation between two vec4's\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the first operand\n\t * @param {vec4} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {vec4} out\n\t */\n\tvec4.lerp = function (out, a, b, t) {\n\t var ax = a[0],\n\t ay = a[1],\n\t az = a[2],\n\t aw = a[3];\n\t out[0] = ax + t * (b[0] - ax);\n\t out[1] = ay + t * (b[1] - ay);\n\t out[2] = az + t * (b[2] - az);\n\t out[3] = aw + t * (b[3] - aw);\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a random vector with the given scale\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n\t * @returns {vec4} out\n\t */\n\tvec4.random = function (out, scale) {\n\t scale = scale || 1.0;\n\t\n\t //TODO: This is a pretty awful way of doing this. Find something better.\n\t out[0] = GLMAT_RANDOM();\n\t out[1] = GLMAT_RANDOM();\n\t out[2] = GLMAT_RANDOM();\n\t out[3] = GLMAT_RANDOM();\n\t vec4.normalize(out, out);\n\t vec4.scale(out, out, scale);\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec4 with a mat4.\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the vector to transform\n\t * @param {mat4} m matrix to transform with\n\t * @returns {vec4} out\n\t */\n\tvec4.transformMat4 = function(out, a, m) {\n\t var x = a[0], y = a[1], z = a[2], w = a[3];\n\t out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n\t out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n\t out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n\t out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transforms the vec4 with a quat\n\t *\n\t * @param {vec4} out the receiving vector\n\t * @param {vec4} a the vector to transform\n\t * @param {quat} q quaternion to transform with\n\t * @returns {vec4} out\n\t */\n\tvec4.transformQuat = function(out, a, q) {\n\t var x = a[0], y = a[1], z = a[2],\n\t qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\t\n\t // calculate quat * vec\n\t ix = qw * x + qy * z - qz * y,\n\t iy = qw * y + qz * x - qx * z,\n\t iz = qw * z + qx * y - qy * x,\n\t iw = -qx * x - qy * y - qz * z;\n\t\n\t // calculate result * inverse quat\n\t out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t return out;\n\t};\n\t\n\t/**\n\t * Perform some operation over an array of vec4s.\n\t *\n\t * @param {Array} a the array of vectors to iterate over\n\t * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n\t * @param {Number} offset Number of elements to skip at the beginning of the array\n\t * @param {Number} count Number of vec2s to iterate over. If 0 iterates over entire array\n\t * @param {Function} fn Function to call for each vector in the array\n\t * @param {Object} [arg] additional argument to pass to fn\n\t * @returns {Array} a\n\t * @function\n\t */\n\tvec4.forEach = (function() {\n\t var vec = vec4.create();\n\t\n\t return function(a, stride, offset, count, fn, arg) {\n\t var i, l;\n\t if(!stride) {\n\t stride = 4;\n\t }\n\t\n\t if(!offset) {\n\t offset = 0;\n\t }\n\t \n\t if(count) {\n\t l = Math.min((count * stride) + offset, a.length);\n\t } else {\n\t l = a.length;\n\t }\n\t\n\t for(i = offset; i < l; i += stride) {\n\t vec[0] = a[i]; vec[1] = a[i+1]; vec[2] = a[i+2]; vec[3] = a[i+3];\n\t fn(vec, vec, arg);\n\t a[i] = vec[0]; a[i+1] = vec[1]; a[i+2] = vec[2]; a[i+3] = vec[3];\n\t }\n\t \n\t return a;\n\t };\n\t})();\n\t\n\t/**\n\t * Returns a string representation of a vector\n\t *\n\t * @param {vec4} vec vector to represent as a string\n\t * @returns {String} string representation of the vector\n\t */\n\tvec4.str = function (a) {\n\t return 'vec4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n\t};\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.vec4 = vec4;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 2x2 Matrix\n\t * @name mat2\n\t */\n\t\n\tvar mat2 = {};\n\t\n\t/**\n\t * Creates a new identity mat2\n\t *\n\t * @returns {mat2} a new 2x2 matrix\n\t */\n\tmat2.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new mat2 initialized with values from an existing matrix\n\t *\n\t * @param {mat2} a matrix to clone\n\t * @returns {mat2} a new 2x2 matrix\n\t */\n\tmat2.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one mat2 to another\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the source matrix\n\t * @returns {mat2} out\n\t */\n\tmat2.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set a mat2 to the identity matrix\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @returns {mat2} out\n\t */\n\tmat2.identity = function(out) {\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transpose the values of a mat2\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the source matrix\n\t * @returns {mat2} out\n\t */\n\tmat2.transpose = function(out, a) {\n\t // If we are transposing ourselves we can skip a few steps but have to cache some values\n\t if (out === a) {\n\t var a1 = a[1];\n\t out[1] = a[2];\n\t out[2] = a1;\n\t } else {\n\t out[0] = a[0];\n\t out[1] = a[2];\n\t out[2] = a[1];\n\t out[3] = a[3];\n\t }\n\t \n\t return out;\n\t};\n\t\n\t/**\n\t * Inverts a mat2\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the source matrix\n\t * @returns {mat2} out\n\t */\n\tmat2.invert = function(out, a) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\t\n\t // Calculate the determinant\n\t det = a0 * a3 - a2 * a1;\n\t\n\t if (!det) {\n\t return null;\n\t }\n\t det = 1.0 / det;\n\t \n\t out[0] = a3 * det;\n\t out[1] = -a1 * det;\n\t out[2] = -a2 * det;\n\t out[3] = a0 * det;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the adjugate of a mat2\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the source matrix\n\t * @returns {mat2} out\n\t */\n\tmat2.adjoint = function(out, a) {\n\t // Caching this value is nessecary if out == a\n\t var a0 = a[0];\n\t out[0] = a[3];\n\t out[1] = -a[1];\n\t out[2] = -a[2];\n\t out[3] = a0;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the determinant of a mat2\n\t *\n\t * @param {mat2} a the source matrix\n\t * @returns {Number} determinant of a\n\t */\n\tmat2.determinant = function (a) {\n\t return a[0] * a[3] - a[2] * a[1];\n\t};\n\t\n\t/**\n\t * Multiplies two mat2's\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the first operand\n\t * @param {mat2} b the second operand\n\t * @returns {mat2} out\n\t */\n\tmat2.multiply = function (out, a, b) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3];\n\t var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3];\n\t out[0] = a0 * b0 + a2 * b1;\n\t out[1] = a1 * b0 + a3 * b1;\n\t out[2] = a0 * b2 + a2 * b3;\n\t out[3] = a1 * b2 + a3 * b3;\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link mat2.multiply}\n\t * @function\n\t */\n\tmat2.mul = mat2.multiply;\n\t\n\t/**\n\t * Rotates a mat2 by the given angle\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat2} out\n\t */\n\tmat2.rotate = function (out, a, rad) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\t s = Math.sin(rad),\n\t c = Math.cos(rad);\n\t out[0] = a0 * c + a2 * s;\n\t out[1] = a1 * c + a3 * s;\n\t out[2] = a0 * -s + a2 * c;\n\t out[3] = a1 * -s + a3 * c;\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales the mat2 by the dimensions in the given vec2\n\t *\n\t * @param {mat2} out the receiving matrix\n\t * @param {mat2} a the matrix to rotate\n\t * @param {vec2} v the vec2 to scale the matrix by\n\t * @returns {mat2} out\n\t **/\n\tmat2.scale = function(out, a, v) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\t v0 = v[0], v1 = v[1];\n\t out[0] = a0 * v0;\n\t out[1] = a1 * v0;\n\t out[2] = a2 * v1;\n\t out[3] = a3 * v1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns a string representation of a mat2\n\t *\n\t * @param {mat2} mat matrix to represent as a string\n\t * @returns {String} string representation of the matrix\n\t */\n\tmat2.str = function (a) {\n\t return 'mat2(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n\t};\n\t\n\t/**\n\t * Returns Frobenius norm of a mat2\n\t *\n\t * @param {mat2} a the matrix to calculate Frobenius norm of\n\t * @returns {Number} Frobenius norm\n\t */\n\tmat2.frob = function (a) {\n\t return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2)))\n\t};\n\t\n\t/**\n\t * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix\n\t * @param {mat2} L the lower triangular matrix \n\t * @param {mat2} D the diagonal matrix \n\t * @param {mat2} U the upper triangular matrix \n\t * @param {mat2} a the input matrix to factorize\n\t */\n\t\n\tmat2.LDU = function (L, D, U, a) { \n\t L[2] = a[2]/a[0]; \n\t U[0] = a[0]; \n\t U[1] = a[1]; \n\t U[3] = a[3] - L[2] * U[1]; \n\t return [L, D, U]; \n\t}; \n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.mat2 = mat2;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 2x3 Matrix\n\t * @name mat2d\n\t * \n\t * @description \n\t * A mat2d contains six elements defined as:\n\t *
\n\t * [a, c, tx,\n\t * b, d, ty]\n\t *\n\t * This is a short form for the 3x3 matrix:\n\t *
\n\t * [a, c, tx,\n\t * b, d, ty,\n\t * 0, 0, 1]\n\t *\n\t * The last row is ignored so the array is shorter and operations are faster.\n\t */\n\t\n\tvar mat2d = {};\n\t\n\t/**\n\t * Creates a new identity mat2d\n\t *\n\t * @returns {mat2d} a new 2x3 matrix\n\t */\n\tmat2d.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(6);\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t out[4] = 0;\n\t out[5] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new mat2d initialized with values from an existing matrix\n\t *\n\t * @param {mat2d} a matrix to clone\n\t * @returns {mat2d} a new 2x3 matrix\n\t */\n\tmat2d.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(6);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one mat2d to another\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the source matrix\n\t * @returns {mat2d} out\n\t */\n\tmat2d.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set a mat2d to the identity matrix\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @returns {mat2d} out\n\t */\n\tmat2d.identity = function(out) {\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t out[4] = 0;\n\t out[5] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Inverts a mat2d\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the source matrix\n\t * @returns {mat2d} out\n\t */\n\tmat2d.invert = function(out, a) {\n\t var aa = a[0], ab = a[1], ac = a[2], ad = a[3],\n\t atx = a[4], aty = a[5];\n\t\n\t var det = aa * ad - ab * ac;\n\t if(!det){\n\t return null;\n\t }\n\t det = 1.0 / det;\n\t\n\t out[0] = ad * det;\n\t out[1] = -ab * det;\n\t out[2] = -ac * det;\n\t out[3] = aa * det;\n\t out[4] = (ac * aty - ad * atx) * det;\n\t out[5] = (ab * atx - aa * aty) * det;\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the determinant of a mat2d\n\t *\n\t * @param {mat2d} a the source matrix\n\t * @returns {Number} determinant of a\n\t */\n\tmat2d.determinant = function (a) {\n\t return a[0] * a[3] - a[1] * a[2];\n\t};\n\t\n\t/**\n\t * Multiplies two mat2d's\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the first operand\n\t * @param {mat2d} b the second operand\n\t * @returns {mat2d} out\n\t */\n\tmat2d.multiply = function (out, a, b) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n\t b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5];\n\t out[0] = a0 * b0 + a2 * b1;\n\t out[1] = a1 * b0 + a3 * b1;\n\t out[2] = a0 * b2 + a2 * b3;\n\t out[3] = a1 * b2 + a3 * b3;\n\t out[4] = a0 * b4 + a2 * b5 + a4;\n\t out[5] = a1 * b4 + a3 * b5 + a5;\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link mat2d.multiply}\n\t * @function\n\t */\n\tmat2d.mul = mat2d.multiply;\n\t\n\t\n\t/**\n\t * Rotates a mat2d by the given angle\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat2d} out\n\t */\n\tmat2d.rotate = function (out, a, rad) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n\t s = Math.sin(rad),\n\t c = Math.cos(rad);\n\t out[0] = a0 * c + a2 * s;\n\t out[1] = a1 * c + a3 * s;\n\t out[2] = a0 * -s + a2 * c;\n\t out[3] = a1 * -s + a3 * c;\n\t out[4] = a4;\n\t out[5] = a5;\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales the mat2d by the dimensions in the given vec2\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the matrix to translate\n\t * @param {vec2} v the vec2 to scale the matrix by\n\t * @returns {mat2d} out\n\t **/\n\tmat2d.scale = function(out, a, v) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n\t v0 = v[0], v1 = v[1];\n\t out[0] = a0 * v0;\n\t out[1] = a1 * v0;\n\t out[2] = a2 * v1;\n\t out[3] = a3 * v1;\n\t out[4] = a4;\n\t out[5] = a5;\n\t return out;\n\t};\n\t\n\t/**\n\t * Translates the mat2d by the dimensions in the given vec2\n\t *\n\t * @param {mat2d} out the receiving matrix\n\t * @param {mat2d} a the matrix to translate\n\t * @param {vec2} v the vec2 to translate the matrix by\n\t * @returns {mat2d} out\n\t **/\n\tmat2d.translate = function(out, a, v) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n\t v0 = v[0], v1 = v[1];\n\t out[0] = a0;\n\t out[1] = a1;\n\t out[2] = a2;\n\t out[3] = a3;\n\t out[4] = a0 * v0 + a2 * v1 + a4;\n\t out[5] = a1 * v0 + a3 * v1 + a5;\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns a string representation of a mat2d\n\t *\n\t * @param {mat2d} a matrix to represent as a string\n\t * @returns {String} string representation of the matrix\n\t */\n\tmat2d.str = function (a) {\n\t return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n\t a[3] + ', ' + a[4] + ', ' + a[5] + ')';\n\t};\n\t\n\t/**\n\t * Returns Frobenius norm of a mat2d\n\t *\n\t * @param {mat2d} a the matrix to calculate Frobenius norm of\n\t * @returns {Number} Frobenius norm\n\t */\n\tmat2d.frob = function (a) { \n\t return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1))\n\t}; \n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.mat2d = mat2d;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 3x3 Matrix\n\t * @name mat3\n\t */\n\t\n\tvar mat3 = {};\n\t\n\t/**\n\t * Creates a new identity mat3\n\t *\n\t * @returns {mat3} a new 3x3 matrix\n\t */\n\tmat3.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(9);\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 1;\n\t out[5] = 0;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Copies the upper-left 3x3 values into the given mat3.\n\t *\n\t * @param {mat3} out the receiving 3x3 matrix\n\t * @param {mat4} a the source 4x4 matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.fromMat4 = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[4];\n\t out[4] = a[5];\n\t out[5] = a[6];\n\t out[6] = a[8];\n\t out[7] = a[9];\n\t out[8] = a[10];\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new mat3 initialized with values from an existing matrix\n\t *\n\t * @param {mat3} a matrix to clone\n\t * @returns {mat3} a new 3x3 matrix\n\t */\n\tmat3.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(9);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[8] = a[8];\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one mat3 to another\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the source matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[8] = a[8];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set a mat3 to the identity matrix\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.identity = function(out) {\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 1;\n\t out[5] = 0;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transpose the values of a mat3\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the source matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.transpose = function(out, a) {\n\t // If we are transposing ourselves we can skip a few steps but have to cache some values\n\t if (out === a) {\n\t var a01 = a[1], a02 = a[2], a12 = a[5];\n\t out[1] = a[3];\n\t out[2] = a[6];\n\t out[3] = a01;\n\t out[5] = a[7];\n\t out[6] = a02;\n\t out[7] = a12;\n\t } else {\n\t out[0] = a[0];\n\t out[1] = a[3];\n\t out[2] = a[6];\n\t out[3] = a[1];\n\t out[4] = a[4];\n\t out[5] = a[7];\n\t out[6] = a[2];\n\t out[7] = a[5];\n\t out[8] = a[8];\n\t }\n\t \n\t return out;\n\t};\n\t\n\t/**\n\t * Inverts a mat3\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the source matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.invert = function(out, a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8],\n\t\n\t b01 = a22 * a11 - a12 * a21,\n\t b11 = -a22 * a10 + a12 * a20,\n\t b21 = a21 * a10 - a11 * a20,\n\t\n\t // Calculate the determinant\n\t det = a00 * b01 + a01 * b11 + a02 * b21;\n\t\n\t if (!det) { \n\t return null; \n\t }\n\t det = 1.0 / det;\n\t\n\t out[0] = b01 * det;\n\t out[1] = (-a22 * a01 + a02 * a21) * det;\n\t out[2] = (a12 * a01 - a02 * a11) * det;\n\t out[3] = b11 * det;\n\t out[4] = (a22 * a00 - a02 * a20) * det;\n\t out[5] = (-a12 * a00 + a02 * a10) * det;\n\t out[6] = b21 * det;\n\t out[7] = (-a21 * a00 + a01 * a20) * det;\n\t out[8] = (a11 * a00 - a01 * a10) * det;\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the adjugate of a mat3\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the source matrix\n\t * @returns {mat3} out\n\t */\n\tmat3.adjoint = function(out, a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8];\n\t\n\t out[0] = (a11 * a22 - a12 * a21);\n\t out[1] = (a02 * a21 - a01 * a22);\n\t out[2] = (a01 * a12 - a02 * a11);\n\t out[3] = (a12 * a20 - a10 * a22);\n\t out[4] = (a00 * a22 - a02 * a20);\n\t out[5] = (a02 * a10 - a00 * a12);\n\t out[6] = (a10 * a21 - a11 * a20);\n\t out[7] = (a01 * a20 - a00 * a21);\n\t out[8] = (a00 * a11 - a01 * a10);\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the determinant of a mat3\n\t *\n\t * @param {mat3} a the source matrix\n\t * @returns {Number} determinant of a\n\t */\n\tmat3.determinant = function (a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8];\n\t\n\t return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n\t};\n\t\n\t/**\n\t * Multiplies two mat3's\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the first operand\n\t * @param {mat3} b the second operand\n\t * @returns {mat3} out\n\t */\n\tmat3.multiply = function (out, a, b) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8],\n\t\n\t b00 = b[0], b01 = b[1], b02 = b[2],\n\t b10 = b[3], b11 = b[4], b12 = b[5],\n\t b20 = b[6], b21 = b[7], b22 = b[8];\n\t\n\t out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n\t out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n\t out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\t\n\t out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n\t out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n\t out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\t\n\t out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n\t out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n\t out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link mat3.multiply}\n\t * @function\n\t */\n\tmat3.mul = mat3.multiply;\n\t\n\t/**\n\t * Translate a mat3 by the given vector\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the matrix to translate\n\t * @param {vec2} v vector to translate by\n\t * @returns {mat3} out\n\t */\n\tmat3.translate = function(out, a, v) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8],\n\t x = v[0], y = v[1];\n\t\n\t out[0] = a00;\n\t out[1] = a01;\n\t out[2] = a02;\n\t\n\t out[3] = a10;\n\t out[4] = a11;\n\t out[5] = a12;\n\t\n\t out[6] = x * a00 + y * a10 + a20;\n\t out[7] = x * a01 + y * a11 + a21;\n\t out[8] = x * a02 + y * a12 + a22;\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a mat3 by the given angle\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat3} out\n\t */\n\tmat3.rotate = function (out, a, rad) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2],\n\t a10 = a[3], a11 = a[4], a12 = a[5],\n\t a20 = a[6], a21 = a[7], a22 = a[8],\n\t\n\t s = Math.sin(rad),\n\t c = Math.cos(rad);\n\t\n\t out[0] = c * a00 + s * a10;\n\t out[1] = c * a01 + s * a11;\n\t out[2] = c * a02 + s * a12;\n\t\n\t out[3] = c * a10 - s * a00;\n\t out[4] = c * a11 - s * a01;\n\t out[5] = c * a12 - s * a02;\n\t\n\t out[6] = a20;\n\t out[7] = a21;\n\t out[8] = a22;\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales the mat3 by the dimensions in the given vec2\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat3} a the matrix to rotate\n\t * @param {vec2} v the vec2 to scale the matrix by\n\t * @returns {mat3} out\n\t **/\n\tmat3.scale = function(out, a, v) {\n\t var x = v[0], y = v[1];\n\t\n\t out[0] = x * a[0];\n\t out[1] = x * a[1];\n\t out[2] = x * a[2];\n\t\n\t out[3] = y * a[3];\n\t out[4] = y * a[4];\n\t out[5] = y * a[5];\n\t\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[8] = a[8];\n\t return out;\n\t};\n\t\n\t/**\n\t * Copies the values from a mat2d into a mat3\n\t *\n\t * @param {mat3} out the receiving matrix\n\t * @param {mat2d} a the matrix to copy\n\t * @returns {mat3} out\n\t **/\n\tmat3.fromMat2d = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = 0;\n\t\n\t out[3] = a[2];\n\t out[4] = a[3];\n\t out[5] = 0;\n\t\n\t out[6] = a[4];\n\t out[7] = a[5];\n\t out[8] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t* Calculates a 3x3 matrix from the given quaternion\n\t*\n\t* @param {mat3} out mat3 receiving operation result\n\t* @param {quat} q Quaternion to create matrix from\n\t*\n\t* @returns {mat3} out\n\t*/\n\tmat3.fromQuat = function (out, q) {\n\t var x = q[0], y = q[1], z = q[2], w = q[3],\n\t x2 = x + x,\n\t y2 = y + y,\n\t z2 = z + z,\n\t\n\t xx = x * x2,\n\t yx = y * x2,\n\t yy = y * y2,\n\t zx = z * x2,\n\t zy = z * y2,\n\t zz = z * z2,\n\t wx = w * x2,\n\t wy = w * y2,\n\t wz = w * z2;\n\t\n\t out[0] = 1 - yy - zz;\n\t out[3] = yx - wz;\n\t out[6] = zx + wy;\n\t\n\t out[1] = yx + wz;\n\t out[4] = 1 - xx - zz;\n\t out[7] = zy - wx;\n\t\n\t out[2] = zx - wy;\n\t out[5] = zy + wx;\n\t out[8] = 1 - xx - yy;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n\t*\n\t* @param {mat3} out mat3 receiving operation result\n\t* @param {mat4} a Mat4 to derive the normal matrix from\n\t*\n\t* @returns {mat3} out\n\t*/\n\tmat3.normalFromMat4 = function (out, a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n\t a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n\t a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n\t a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\t\n\t b00 = a00 * a11 - a01 * a10,\n\t b01 = a00 * a12 - a02 * a10,\n\t b02 = a00 * a13 - a03 * a10,\n\t b03 = a01 * a12 - a02 * a11,\n\t b04 = a01 * a13 - a03 * a11,\n\t b05 = a02 * a13 - a03 * a12,\n\t b06 = a20 * a31 - a21 * a30,\n\t b07 = a20 * a32 - a22 * a30,\n\t b08 = a20 * a33 - a23 * a30,\n\t b09 = a21 * a32 - a22 * a31,\n\t b10 = a21 * a33 - a23 * a31,\n\t b11 = a22 * a33 - a23 * a32,\n\t\n\t // Calculate the determinant\n\t det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\t\n\t if (!det) { \n\t return null; \n\t }\n\t det = 1.0 / det;\n\t\n\t out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n\t out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n\t out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\t\n\t out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n\t out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n\t out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\t\n\t out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n\t out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n\t out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns a string representation of a mat3\n\t *\n\t * @param {mat3} mat matrix to represent as a string\n\t * @returns {String} string representation of the matrix\n\t */\n\tmat3.str = function (a) {\n\t return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n\t a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + \n\t a[6] + ', ' + a[7] + ', ' + a[8] + ')';\n\t};\n\t\n\t/**\n\t * Returns Frobenius norm of a mat3\n\t *\n\t * @param {mat3} a the matrix to calculate Frobenius norm of\n\t * @returns {Number} Frobenius norm\n\t */\n\tmat3.frob = function (a) {\n\t return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)))\n\t};\n\t\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.mat3 = mat3;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class 4x4 Matrix\n\t * @name mat4\n\t */\n\t\n\tvar mat4 = {};\n\t\n\t/**\n\t * Creates a new identity mat4\n\t *\n\t * @returns {mat4} a new 4x4 matrix\n\t */\n\tmat4.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(16);\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 0;\n\t out[5] = 1;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 0;\n\t out[9] = 0;\n\t out[10] = 1;\n\t out[11] = 0;\n\t out[12] = 0;\n\t out[13] = 0;\n\t out[14] = 0;\n\t out[15] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a new mat4 initialized with values from an existing matrix\n\t *\n\t * @param {mat4} a matrix to clone\n\t * @returns {mat4} a new 4x4 matrix\n\t */\n\tmat4.clone = function(a) {\n\t var out = new GLMAT_ARRAY_TYPE(16);\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[8] = a[8];\n\t out[9] = a[9];\n\t out[10] = a[10];\n\t out[11] = a[11];\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t return out;\n\t};\n\t\n\t/**\n\t * Copy the values from one mat4 to another\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the source matrix\n\t * @returns {mat4} out\n\t */\n\tmat4.copy = function(out, a) {\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[8] = a[8];\n\t out[9] = a[9];\n\t out[10] = a[10];\n\t out[11] = a[11];\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t return out;\n\t};\n\t\n\t/**\n\t * Set a mat4 to the identity matrix\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @returns {mat4} out\n\t */\n\tmat4.identity = function(out) {\n\t out[0] = 1;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 0;\n\t out[5] = 1;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 0;\n\t out[9] = 0;\n\t out[10] = 1;\n\t out[11] = 0;\n\t out[12] = 0;\n\t out[13] = 0;\n\t out[14] = 0;\n\t out[15] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Transpose the values of a mat4\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the source matrix\n\t * @returns {mat4} out\n\t */\n\tmat4.transpose = function(out, a) {\n\t // If we are transposing ourselves we can skip a few steps but have to cache some values\n\t if (out === a) {\n\t var a01 = a[1], a02 = a[2], a03 = a[3],\n\t a12 = a[6], a13 = a[7],\n\t a23 = a[11];\n\t\n\t out[1] = a[4];\n\t out[2] = a[8];\n\t out[3] = a[12];\n\t out[4] = a01;\n\t out[6] = a[9];\n\t out[7] = a[13];\n\t out[8] = a02;\n\t out[9] = a12;\n\t out[11] = a[14];\n\t out[12] = a03;\n\t out[13] = a13;\n\t out[14] = a23;\n\t } else {\n\t out[0] = a[0];\n\t out[1] = a[4];\n\t out[2] = a[8];\n\t out[3] = a[12];\n\t out[4] = a[1];\n\t out[5] = a[5];\n\t out[6] = a[9];\n\t out[7] = a[13];\n\t out[8] = a[2];\n\t out[9] = a[6];\n\t out[10] = a[10];\n\t out[11] = a[14];\n\t out[12] = a[3];\n\t out[13] = a[7];\n\t out[14] = a[11];\n\t out[15] = a[15];\n\t }\n\t \n\t return out;\n\t};\n\t\n\t/**\n\t * Inverts a mat4\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the source matrix\n\t * @returns {mat4} out\n\t */\n\tmat4.invert = function(out, a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n\t a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n\t a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n\t a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\t\n\t b00 = a00 * a11 - a01 * a10,\n\t b01 = a00 * a12 - a02 * a10,\n\t b02 = a00 * a13 - a03 * a10,\n\t b03 = a01 * a12 - a02 * a11,\n\t b04 = a01 * a13 - a03 * a11,\n\t b05 = a02 * a13 - a03 * a12,\n\t b06 = a20 * a31 - a21 * a30,\n\t b07 = a20 * a32 - a22 * a30,\n\t b08 = a20 * a33 - a23 * a30,\n\t b09 = a21 * a32 - a22 * a31,\n\t b10 = a21 * a33 - a23 * a31,\n\t b11 = a22 * a33 - a23 * a32,\n\t\n\t // Calculate the determinant\n\t det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\t\n\t if (!det) { \n\t return null; \n\t }\n\t det = 1.0 / det;\n\t\n\t out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n\t out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n\t out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n\t out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n\t out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n\t out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n\t out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n\t out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n\t out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\t out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\t out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\t out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n\t out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n\t out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n\t out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n\t out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the adjugate of a mat4\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the source matrix\n\t * @returns {mat4} out\n\t */\n\tmat4.adjoint = function(out, a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n\t a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n\t a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n\t a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\t\n\t out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n\t out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n\t out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n\t out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n\t out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n\t out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n\t out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n\t out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n\t out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n\t out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n\t out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n\t out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n\t out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n\t out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n\t out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n\t out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the determinant of a mat4\n\t *\n\t * @param {mat4} a the source matrix\n\t * @returns {Number} determinant of a\n\t */\n\tmat4.determinant = function (a) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n\t a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n\t a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n\t a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\t\n\t b00 = a00 * a11 - a01 * a10,\n\t b01 = a00 * a12 - a02 * a10,\n\t b02 = a00 * a13 - a03 * a10,\n\t b03 = a01 * a12 - a02 * a11,\n\t b04 = a01 * a13 - a03 * a11,\n\t b05 = a02 * a13 - a03 * a12,\n\t b06 = a20 * a31 - a21 * a30,\n\t b07 = a20 * a32 - a22 * a30,\n\t b08 = a20 * a33 - a23 * a30,\n\t b09 = a21 * a32 - a22 * a31,\n\t b10 = a21 * a33 - a23 * a31,\n\t b11 = a22 * a33 - a23 * a32;\n\t\n\t // Calculate the determinant\n\t return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\t};\n\t\n\t/**\n\t * Multiplies two mat4's\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the first operand\n\t * @param {mat4} b the second operand\n\t * @returns {mat4} out\n\t */\n\tmat4.multiply = function (out, a, b) {\n\t var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n\t a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n\t a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n\t a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\t\n\t // Cache only the current line of the second matrix\n\t var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; \n\t out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n\t out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n\t out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n\t out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\t\n\t b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n\t out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n\t out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n\t out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n\t out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\t\n\t b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n\t out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n\t out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n\t out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n\t out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\t\n\t b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n\t out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n\t out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n\t out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n\t out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link mat4.multiply}\n\t * @function\n\t */\n\tmat4.mul = mat4.multiply;\n\t\n\t/**\n\t * Translate a mat4 by the given vector\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to translate\n\t * @param {vec3} v vector to translate by\n\t * @returns {mat4} out\n\t */\n\tmat4.translate = function (out, a, v) {\n\t var x = v[0], y = v[1], z = v[2],\n\t a00, a01, a02, a03,\n\t a10, a11, a12, a13,\n\t a20, a21, a22, a23;\n\t\n\t if (a === out) {\n\t out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n\t out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n\t out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n\t out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n\t } else {\n\t a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n\t a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n\t a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\t\n\t out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n\t out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n\t out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\t\n\t out[12] = a00 * x + a10 * y + a20 * z + a[12];\n\t out[13] = a01 * x + a11 * y + a21 * z + a[13];\n\t out[14] = a02 * x + a12 * y + a22 * z + a[14];\n\t out[15] = a03 * x + a13 * y + a23 * z + a[15];\n\t }\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Scales the mat4 by the dimensions in the given vec3\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to scale\n\t * @param {vec3} v the vec3 to scale the matrix by\n\t * @returns {mat4} out\n\t **/\n\tmat4.scale = function(out, a, v) {\n\t var x = v[0], y = v[1], z = v[2];\n\t\n\t out[0] = a[0] * x;\n\t out[1] = a[1] * x;\n\t out[2] = a[2] * x;\n\t out[3] = a[3] * x;\n\t out[4] = a[4] * y;\n\t out[5] = a[5] * y;\n\t out[6] = a[6] * y;\n\t out[7] = a[7] * y;\n\t out[8] = a[8] * z;\n\t out[9] = a[9] * z;\n\t out[10] = a[10] * z;\n\t out[11] = a[11] * z;\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a mat4 by the given angle\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @param {vec3} axis the axis to rotate around\n\t * @returns {mat4} out\n\t */\n\tmat4.rotate = function (out, a, rad, axis) {\n\t var x = axis[0], y = axis[1], z = axis[2],\n\t len = Math.sqrt(x * x + y * y + z * z),\n\t s, c, t,\n\t a00, a01, a02, a03,\n\t a10, a11, a12, a13,\n\t a20, a21, a22, a23,\n\t b00, b01, b02,\n\t b10, b11, b12,\n\t b20, b21, b22;\n\t\n\t if (Math.abs(len) < GLMAT_EPSILON) { return null; }\n\t \n\t len = 1 / len;\n\t x *= len;\n\t y *= len;\n\t z *= len;\n\t\n\t s = Math.sin(rad);\n\t c = Math.cos(rad);\n\t t = 1 - c;\n\t\n\t a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n\t a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n\t a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\t\n\t // Construct the elements of the rotation matrix\n\t b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;\n\t b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;\n\t b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;\n\t\n\t // Perform rotation-specific matrix multiplication\n\t out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n\t out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n\t out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n\t out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n\t out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n\t out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n\t out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n\t out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n\t out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n\t out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n\t out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n\t out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\t\n\t if (a !== out) { // If the source and destination differ, copy the unchanged last row\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t }\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a matrix by the given angle around the X axis\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat4} out\n\t */\n\tmat4.rotateX = function (out, a, rad) {\n\t var s = Math.sin(rad),\n\t c = Math.cos(rad),\n\t a10 = a[4],\n\t a11 = a[5],\n\t a12 = a[6],\n\t a13 = a[7],\n\t a20 = a[8],\n\t a21 = a[9],\n\t a22 = a[10],\n\t a23 = a[11];\n\t\n\t if (a !== out) { // If the source and destination differ, copy the unchanged rows\n\t out[0] = a[0];\n\t out[1] = a[1];\n\t out[2] = a[2];\n\t out[3] = a[3];\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t }\n\t\n\t // Perform axis-specific matrix multiplication\n\t out[4] = a10 * c + a20 * s;\n\t out[5] = a11 * c + a21 * s;\n\t out[6] = a12 * c + a22 * s;\n\t out[7] = a13 * c + a23 * s;\n\t out[8] = a20 * c - a10 * s;\n\t out[9] = a21 * c - a11 * s;\n\t out[10] = a22 * c - a12 * s;\n\t out[11] = a23 * c - a13 * s;\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a matrix by the given angle around the Y axis\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat4} out\n\t */\n\tmat4.rotateY = function (out, a, rad) {\n\t var s = Math.sin(rad),\n\t c = Math.cos(rad),\n\t a00 = a[0],\n\t a01 = a[1],\n\t a02 = a[2],\n\t a03 = a[3],\n\t a20 = a[8],\n\t a21 = a[9],\n\t a22 = a[10],\n\t a23 = a[11];\n\t\n\t if (a !== out) { // If the source and destination differ, copy the unchanged rows\n\t out[4] = a[4];\n\t out[5] = a[5];\n\t out[6] = a[6];\n\t out[7] = a[7];\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t }\n\t\n\t // Perform axis-specific matrix multiplication\n\t out[0] = a00 * c - a20 * s;\n\t out[1] = a01 * c - a21 * s;\n\t out[2] = a02 * c - a22 * s;\n\t out[3] = a03 * c - a23 * s;\n\t out[8] = a00 * s + a20 * c;\n\t out[9] = a01 * s + a21 * c;\n\t out[10] = a02 * s + a22 * c;\n\t out[11] = a03 * s + a23 * c;\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a matrix by the given angle around the Z axis\n\t *\n\t * @param {mat4} out the receiving matrix\n\t * @param {mat4} a the matrix to rotate\n\t * @param {Number} rad the angle to rotate the matrix by\n\t * @returns {mat4} out\n\t */\n\tmat4.rotateZ = function (out, a, rad) {\n\t var s = Math.sin(rad),\n\t c = Math.cos(rad),\n\t a00 = a[0],\n\t a01 = a[1],\n\t a02 = a[2],\n\t a03 = a[3],\n\t a10 = a[4],\n\t a11 = a[5],\n\t a12 = a[6],\n\t a13 = a[7];\n\t\n\t if (a !== out) { // If the source and destination differ, copy the unchanged last row\n\t out[8] = a[8];\n\t out[9] = a[9];\n\t out[10] = a[10];\n\t out[11] = a[11];\n\t out[12] = a[12];\n\t out[13] = a[13];\n\t out[14] = a[14];\n\t out[15] = a[15];\n\t }\n\t\n\t // Perform axis-specific matrix multiplication\n\t out[0] = a00 * c + a10 * s;\n\t out[1] = a01 * c + a11 * s;\n\t out[2] = a02 * c + a12 * s;\n\t out[3] = a03 * c + a13 * s;\n\t out[4] = a10 * c - a00 * s;\n\t out[5] = a11 * c - a01 * s;\n\t out[6] = a12 * c - a02 * s;\n\t out[7] = a13 * c - a03 * s;\n\t return out;\n\t};\n\t\n\t/**\n\t * Creates a matrix from a quaternion rotation and vector translation\n\t * This is equivalent to (but much faster than):\n\t *\n\t * mat4.identity(dest);\n\t * mat4.translate(dest, vec);\n\t * var quatMat = mat4.create();\n\t * quat4.toMat4(quat, quatMat);\n\t * mat4.multiply(dest, quatMat);\n\t *\n\t * @param {mat4} out mat4 receiving operation result\n\t * @param {quat4} q Rotation quaternion\n\t * @param {vec3} v Translation vector\n\t * @returns {mat4} out\n\t */\n\tmat4.fromRotationTranslation = function (out, q, v) {\n\t // Quaternion math\n\t var x = q[0], y = q[1], z = q[2], w = q[3],\n\t x2 = x + x,\n\t y2 = y + y,\n\t z2 = z + z,\n\t\n\t xx = x * x2,\n\t xy = x * y2,\n\t xz = x * z2,\n\t yy = y * y2,\n\t yz = y * z2,\n\t zz = z * z2,\n\t wx = w * x2,\n\t wy = w * y2,\n\t wz = w * z2;\n\t\n\t out[0] = 1 - (yy + zz);\n\t out[1] = xy + wz;\n\t out[2] = xz - wy;\n\t out[3] = 0;\n\t out[4] = xy - wz;\n\t out[5] = 1 - (xx + zz);\n\t out[6] = yz + wx;\n\t out[7] = 0;\n\t out[8] = xz + wy;\n\t out[9] = yz - wx;\n\t out[10] = 1 - (xx + yy);\n\t out[11] = 0;\n\t out[12] = v[0];\n\t out[13] = v[1];\n\t out[14] = v[2];\n\t out[15] = 1;\n\t \n\t return out;\n\t};\n\t\n\tmat4.fromQuat = function (out, q) {\n\t var x = q[0], y = q[1], z = q[2], w = q[3],\n\t x2 = x + x,\n\t y2 = y + y,\n\t z2 = z + z,\n\t\n\t xx = x * x2,\n\t yx = y * x2,\n\t yy = y * y2,\n\t zx = z * x2,\n\t zy = z * y2,\n\t zz = z * z2,\n\t wx = w * x2,\n\t wy = w * y2,\n\t wz = w * z2;\n\t\n\t out[0] = 1 - yy - zz;\n\t out[1] = yx + wz;\n\t out[2] = zx - wy;\n\t out[3] = 0;\n\t\n\t out[4] = yx - wz;\n\t out[5] = 1 - xx - zz;\n\t out[6] = zy + wx;\n\t out[7] = 0;\n\t\n\t out[8] = zx + wy;\n\t out[9] = zy - wx;\n\t out[10] = 1 - xx - yy;\n\t out[11] = 0;\n\t\n\t out[12] = 0;\n\t out[13] = 0;\n\t out[14] = 0;\n\t out[15] = 1;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a frustum matrix with the given bounds\n\t *\n\t * @param {mat4} out mat4 frustum matrix will be written into\n\t * @param {Number} left Left bound of the frustum\n\t * @param {Number} right Right bound of the frustum\n\t * @param {Number} bottom Bottom bound of the frustum\n\t * @param {Number} top Top bound of the frustum\n\t * @param {Number} near Near bound of the frustum\n\t * @param {Number} far Far bound of the frustum\n\t * @returns {mat4} out\n\t */\n\tmat4.frustum = function (out, left, right, bottom, top, near, far) {\n\t var rl = 1 / (right - left),\n\t tb = 1 / (top - bottom),\n\t nf = 1 / (near - far);\n\t out[0] = (near * 2) * rl;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 0;\n\t out[5] = (near * 2) * tb;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = (right + left) * rl;\n\t out[9] = (top + bottom) * tb;\n\t out[10] = (far + near) * nf;\n\t out[11] = -1;\n\t out[12] = 0;\n\t out[13] = 0;\n\t out[14] = (far * near * 2) * nf;\n\t out[15] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a perspective projection matrix with the given bounds\n\t *\n\t * @param {mat4} out mat4 frustum matrix will be written into\n\t * @param {number} fovy Vertical field of view in radians\n\t * @param {number} aspect Aspect ratio. typically viewport width/height\n\t * @param {number} near Near bound of the frustum\n\t * @param {number} far Far bound of the frustum\n\t * @returns {mat4} out\n\t */\n\tmat4.perspective = function (out, fovy, aspect, near, far) {\n\t var f = 1.0 / Math.tan(fovy / 2),\n\t nf = 1 / (near - far);\n\t out[0] = f / aspect;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 0;\n\t out[5] = f;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 0;\n\t out[9] = 0;\n\t out[10] = (far + near) * nf;\n\t out[11] = -1;\n\t out[12] = 0;\n\t out[13] = 0;\n\t out[14] = (2 * far * near) * nf;\n\t out[15] = 0;\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a orthogonal projection matrix with the given bounds\n\t *\n\t * @param {mat4} out mat4 frustum matrix will be written into\n\t * @param {number} left Left bound of the frustum\n\t * @param {number} right Right bound of the frustum\n\t * @param {number} bottom Bottom bound of the frustum\n\t * @param {number} top Top bound of the frustum\n\t * @param {number} near Near bound of the frustum\n\t * @param {number} far Far bound of the frustum\n\t * @returns {mat4} out\n\t */\n\tmat4.ortho = function (out, left, right, bottom, top, near, far) {\n\t var lr = 1 / (left - right),\n\t bt = 1 / (bottom - top),\n\t nf = 1 / (near - far);\n\t out[0] = -2 * lr;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 0;\n\t out[4] = 0;\n\t out[5] = -2 * bt;\n\t out[6] = 0;\n\t out[7] = 0;\n\t out[8] = 0;\n\t out[9] = 0;\n\t out[10] = 2 * nf;\n\t out[11] = 0;\n\t out[12] = (left + right) * lr;\n\t out[13] = (top + bottom) * bt;\n\t out[14] = (far + near) * nf;\n\t out[15] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Generates a look-at matrix with the given eye position, focal point, and up axis\n\t *\n\t * @param {mat4} out mat4 frustum matrix will be written into\n\t * @param {vec3} eye Position of the viewer\n\t * @param {vec3} center Point the viewer is looking at\n\t * @param {vec3} up vec3 pointing up\n\t * @returns {mat4} out\n\t */\n\tmat4.lookAt = function (out, eye, center, up) {\n\t var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n\t eyex = eye[0],\n\t eyey = eye[1],\n\t eyez = eye[2],\n\t upx = up[0],\n\t upy = up[1],\n\t upz = up[2],\n\t centerx = center[0],\n\t centery = center[1],\n\t centerz = center[2];\n\t\n\t if (Math.abs(eyex - centerx) < GLMAT_EPSILON &&\n\t Math.abs(eyey - centery) < GLMAT_EPSILON &&\n\t Math.abs(eyez - centerz) < GLMAT_EPSILON) {\n\t return mat4.identity(out);\n\t }\n\t\n\t z0 = eyex - centerx;\n\t z1 = eyey - centery;\n\t z2 = eyez - centerz;\n\t\n\t len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n\t z0 *= len;\n\t z1 *= len;\n\t z2 *= len;\n\t\n\t x0 = upy * z2 - upz * z1;\n\t x1 = upz * z0 - upx * z2;\n\t x2 = upx * z1 - upy * z0;\n\t len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n\t if (!len) {\n\t x0 = 0;\n\t x1 = 0;\n\t x2 = 0;\n\t } else {\n\t len = 1 / len;\n\t x0 *= len;\n\t x1 *= len;\n\t x2 *= len;\n\t }\n\t\n\t y0 = z1 * x2 - z2 * x1;\n\t y1 = z2 * x0 - z0 * x2;\n\t y2 = z0 * x1 - z1 * x0;\n\t\n\t len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n\t if (!len) {\n\t y0 = 0;\n\t y1 = 0;\n\t y2 = 0;\n\t } else {\n\t len = 1 / len;\n\t y0 *= len;\n\t y1 *= len;\n\t y2 *= len;\n\t }\n\t\n\t out[0] = x0;\n\t out[1] = y0;\n\t out[2] = z0;\n\t out[3] = 0;\n\t out[4] = x1;\n\t out[5] = y1;\n\t out[6] = z1;\n\t out[7] = 0;\n\t out[8] = x2;\n\t out[9] = y2;\n\t out[10] = z2;\n\t out[11] = 0;\n\t out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n\t out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n\t out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n\t out[15] = 1;\n\t\n\t return out;\n\t};\n\t\n\t/**\n\t * Returns a string representation of a mat4\n\t *\n\t * @param {mat4} mat matrix to represent as a string\n\t * @returns {String} string representation of the matrix\n\t */\n\tmat4.str = function (a) {\n\t return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +\n\t a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +\n\t a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + \n\t a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\n\t};\n\t\n\t/**\n\t * Returns Frobenius norm of a mat4\n\t *\n\t * @param {mat4} a the matrix to calculate Frobenius norm of\n\t * @returns {Number} Frobenius norm\n\t */\n\tmat4.frob = function (a) {\n\t return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) ))\n\t};\n\t\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.mat4 = mat4;\n\t}\n\t;\n\t/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\t\n\tRedistribution and use in source and binary forms, with or without modification,\n\tare permitted provided that the following conditions are met:\n\t\n\t * Redistributions of source code must retain the above copyright notice, this\n\t list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright notice,\n\t this list of conditions and the following disclaimer in the documentation \n\t and/or other materials provided with the distribution.\n\t\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n\tANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n\tWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \n\tDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n\tANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\tLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n\tANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n\tSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\t\n\t/**\n\t * @class Quaternion\n\t * @name quat\n\t */\n\t\n\tvar quat = {};\n\t\n\t/**\n\t * Creates a new identity quat\n\t *\n\t * @returns {quat} a new quaternion\n\t */\n\tquat.create = function() {\n\t var out = new GLMAT_ARRAY_TYPE(4);\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Sets a quaternion to represent the shortest rotation from one\n\t * vector to another.\n\t *\n\t * Both vectors are assumed to be unit length.\n\t *\n\t * @param {quat} out the receiving quaternion.\n\t * @param {vec3} a the initial vector\n\t * @param {vec3} b the destination vector\n\t * @returns {quat} out\n\t */\n\tquat.rotationTo = (function() {\n\t var tmpvec3 = vec3.create();\n\t var xUnitVec3 = vec3.fromValues(1,0,0);\n\t var yUnitVec3 = vec3.fromValues(0,1,0);\n\t\n\t return function(out, a, b) {\n\t var dot = vec3.dot(a, b);\n\t if (dot < -0.999999) {\n\t vec3.cross(tmpvec3, xUnitVec3, a);\n\t if (vec3.length(tmpvec3) < 0.000001)\n\t vec3.cross(tmpvec3, yUnitVec3, a);\n\t vec3.normalize(tmpvec3, tmpvec3);\n\t quat.setAxisAngle(out, tmpvec3, Math.PI);\n\t return out;\n\t } else if (dot > 0.999999) {\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t return out;\n\t } else {\n\t vec3.cross(tmpvec3, a, b);\n\t out[0] = tmpvec3[0];\n\t out[1] = tmpvec3[1];\n\t out[2] = tmpvec3[2];\n\t out[3] = 1 + dot;\n\t return quat.normalize(out, out);\n\t }\n\t };\n\t})();\n\t\n\t/**\n\t * Sets the specified quaternion with values corresponding to the given\n\t * axes. Each axis is a vec3 and is expected to be unit length and\n\t * perpendicular to all other specified axes.\n\t *\n\t * @param {vec3} view the vector representing the viewing direction\n\t * @param {vec3} right the vector representing the local \"right\" direction\n\t * @param {vec3} up the vector representing the local \"up\" direction\n\t * @returns {quat} out\n\t */\n\tquat.setAxes = (function() {\n\t var matr = mat3.create();\n\t\n\t return function(out, view, right, up) {\n\t matr[0] = right[0];\n\t matr[3] = right[1];\n\t matr[6] = right[2];\n\t\n\t matr[1] = up[0];\n\t matr[4] = up[1];\n\t matr[7] = up[2];\n\t\n\t matr[2] = -view[0];\n\t matr[5] = -view[1];\n\t matr[8] = -view[2];\n\t\n\t return quat.normalize(out, quat.fromMat3(out, matr));\n\t };\n\t})();\n\t\n\t/**\n\t * Creates a new quat initialized with values from an existing quaternion\n\t *\n\t * @param {quat} a quaternion to clone\n\t * @returns {quat} a new quaternion\n\t * @function\n\t */\n\tquat.clone = vec4.clone;\n\t\n\t/**\n\t * Creates a new quat initialized with the given values\n\t *\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @param {Number} w W component\n\t * @returns {quat} a new quaternion\n\t * @function\n\t */\n\tquat.fromValues = vec4.fromValues;\n\t\n\t/**\n\t * Copy the values from one quat to another\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a the source quaternion\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.copy = vec4.copy;\n\t\n\t/**\n\t * Set the components of a quat to the given values\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {Number} x X component\n\t * @param {Number} y Y component\n\t * @param {Number} z Z component\n\t * @param {Number} w W component\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.set = vec4.set;\n\t\n\t/**\n\t * Set a quat to the identity quaternion\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @returns {quat} out\n\t */\n\tquat.identity = function(out) {\n\t out[0] = 0;\n\t out[1] = 0;\n\t out[2] = 0;\n\t out[3] = 1;\n\t return out;\n\t};\n\t\n\t/**\n\t * Sets a quat from the given angle and rotation axis,\n\t * then returns it.\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {vec3} axis the axis around which to rotate\n\t * @param {Number} rad the angle in radians\n\t * @returns {quat} out\n\t **/\n\tquat.setAxisAngle = function(out, axis, rad) {\n\t rad = rad * 0.5;\n\t var s = Math.sin(rad);\n\t out[0] = s * axis[0];\n\t out[1] = s * axis[1];\n\t out[2] = s * axis[2];\n\t out[3] = Math.cos(rad);\n\t return out;\n\t};\n\t\n\t/**\n\t * Adds two quat's\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a the first operand\n\t * @param {quat} b the second operand\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.add = vec4.add;\n\t\n\t/**\n\t * Multiplies two quat's\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a the first operand\n\t * @param {quat} b the second operand\n\t * @returns {quat} out\n\t */\n\tquat.multiply = function(out, a, b) {\n\t var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n\t bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\t\n\t out[0] = ax * bw + aw * bx + ay * bz - az * by;\n\t out[1] = ay * bw + aw * by + az * bx - ax * bz;\n\t out[2] = az * bw + aw * bz + ax * by - ay * bx;\n\t out[3] = aw * bw - ax * bx - ay * by - az * bz;\n\t return out;\n\t};\n\t\n\t/**\n\t * Alias for {@link quat.multiply}\n\t * @function\n\t */\n\tquat.mul = quat.multiply;\n\t\n\t/**\n\t * Scales a quat by a scalar number\n\t *\n\t * @param {quat} out the receiving vector\n\t * @param {quat} a the vector to scale\n\t * @param {Number} b amount to scale the vector by\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.scale = vec4.scale;\n\t\n\t/**\n\t * Rotates a quaternion by the given angle about the X axis\n\t *\n\t * @param {quat} out quat receiving operation result\n\t * @param {quat} a quat to rotate\n\t * @param {number} rad angle (in radians) to rotate\n\t * @returns {quat} out\n\t */\n\tquat.rotateX = function (out, a, rad) {\n\t rad *= 0.5; \n\t\n\t var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n\t bx = Math.sin(rad), bw = Math.cos(rad);\n\t\n\t out[0] = ax * bw + aw * bx;\n\t out[1] = ay * bw + az * bx;\n\t out[2] = az * bw - ay * bx;\n\t out[3] = aw * bw - ax * bx;\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a quaternion by the given angle about the Y axis\n\t *\n\t * @param {quat} out quat receiving operation result\n\t * @param {quat} a quat to rotate\n\t * @param {number} rad angle (in radians) to rotate\n\t * @returns {quat} out\n\t */\n\tquat.rotateY = function (out, a, rad) {\n\t rad *= 0.5; \n\t\n\t var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n\t by = Math.sin(rad), bw = Math.cos(rad);\n\t\n\t out[0] = ax * bw - az * by;\n\t out[1] = ay * bw + aw * by;\n\t out[2] = az * bw + ax * by;\n\t out[3] = aw * bw - ay * by;\n\t return out;\n\t};\n\t\n\t/**\n\t * Rotates a quaternion by the given angle about the Z axis\n\t *\n\t * @param {quat} out quat receiving operation result\n\t * @param {quat} a quat to rotate\n\t * @param {number} rad angle (in radians) to rotate\n\t * @returns {quat} out\n\t */\n\tquat.rotateZ = function (out, a, rad) {\n\t rad *= 0.5; \n\t\n\t var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n\t bz = Math.sin(rad), bw = Math.cos(rad);\n\t\n\t out[0] = ax * bw + ay * bz;\n\t out[1] = ay * bw - ax * bz;\n\t out[2] = az * bw + aw * bz;\n\t out[3] = aw * bw - az * bz;\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the W component of a quat from the X, Y, and Z components.\n\t * Assumes that quaternion is 1 unit in length.\n\t * Any existing W component will be ignored.\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a quat to calculate W component of\n\t * @returns {quat} out\n\t */\n\tquat.calculateW = function (out, a) {\n\t var x = a[0], y = a[1], z = a[2];\n\t\n\t out[0] = x;\n\t out[1] = y;\n\t out[2] = z;\n\t out[3] = -Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the dot product of two quat's\n\t *\n\t * @param {quat} a the first operand\n\t * @param {quat} b the second operand\n\t * @returns {Number} dot product of a and b\n\t * @function\n\t */\n\tquat.dot = vec4.dot;\n\t\n\t/**\n\t * Performs a linear interpolation between two quat's\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a the first operand\n\t * @param {quat} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.lerp = vec4.lerp;\n\t\n\t/**\n\t * Performs a spherical linear interpolation between two quat\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a the first operand\n\t * @param {quat} b the second operand\n\t * @param {Number} t interpolation amount between the two inputs\n\t * @returns {quat} out\n\t */\n\tquat.slerp = function (out, a, b, t) {\n\t // benchmarks:\n\t // http://jsperf.com/quaternion-slerp-implementations\n\t\n\t var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n\t bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\t\n\t var omega, cosom, sinom, scale0, scale1;\n\t\n\t // calc cosine\n\t cosom = ax * bx + ay * by + az * bz + aw * bw;\n\t // adjust signs (if necessary)\n\t if ( cosom < 0.0 ) {\n\t cosom = -cosom;\n\t bx = - bx;\n\t by = - by;\n\t bz = - bz;\n\t bw = - bw;\n\t }\n\t // calculate coefficients\n\t if ( (1.0 - cosom) > 0.000001 ) {\n\t // standard case (slerp)\n\t omega = Math.acos(cosom);\n\t sinom = Math.sin(omega);\n\t scale0 = Math.sin((1.0 - t) * omega) / sinom;\n\t scale1 = Math.sin(t * omega) / sinom;\n\t } else { \n\t // \"from\" and \"to\" quaternions are very close \n\t // ... so we can do a linear interpolation\n\t scale0 = 1.0 - t;\n\t scale1 = t;\n\t }\n\t // calculate final values\n\t out[0] = scale0 * ax + scale1 * bx;\n\t out[1] = scale0 * ay + scale1 * by;\n\t out[2] = scale0 * az + scale1 * bz;\n\t out[3] = scale0 * aw + scale1 * bw;\n\t \n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the inverse of a quat\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a quat to calculate inverse of\n\t * @returns {quat} out\n\t */\n\tquat.invert = function(out, a) {\n\t var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n\t dot = a0*a0 + a1*a1 + a2*a2 + a3*a3,\n\t invDot = dot ? 1.0/dot : 0;\n\t \n\t // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\t\n\t out[0] = -a0*invDot;\n\t out[1] = -a1*invDot;\n\t out[2] = -a2*invDot;\n\t out[3] = a3*invDot;\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the conjugate of a quat\n\t * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a quat to calculate conjugate of\n\t * @returns {quat} out\n\t */\n\tquat.conjugate = function (out, a) {\n\t out[0] = -a[0];\n\t out[1] = -a[1];\n\t out[2] = -a[2];\n\t out[3] = a[3];\n\t return out;\n\t};\n\t\n\t/**\n\t * Calculates the length of a quat\n\t *\n\t * @param {quat} a vector to calculate length of\n\t * @returns {Number} length of a\n\t * @function\n\t */\n\tquat.length = vec4.length;\n\t\n\t/**\n\t * Alias for {@link quat.length}\n\t * @function\n\t */\n\tquat.len = quat.length;\n\t\n\t/**\n\t * Calculates the squared length of a quat\n\t *\n\t * @param {quat} a vector to calculate squared length of\n\t * @returns {Number} squared length of a\n\t * @function\n\t */\n\tquat.squaredLength = vec4.squaredLength;\n\t\n\t/**\n\t * Alias for {@link quat.squaredLength}\n\t * @function\n\t */\n\tquat.sqrLen = quat.squaredLength;\n\t\n\t/**\n\t * Normalize a quat\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {quat} a quaternion to normalize\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.normalize = vec4.normalize;\n\t\n\t/**\n\t * Creates a quaternion from the given 3x3 rotation matrix.\n\t *\n\t * NOTE: The resultant quaternion is not normalized, so you should be sure\n\t * to renormalize the quaternion yourself where necessary.\n\t *\n\t * @param {quat} out the receiving quaternion\n\t * @param {mat3} m rotation matrix\n\t * @returns {quat} out\n\t * @function\n\t */\n\tquat.fromMat3 = function(out, m) {\n\t // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n\t // article \"Quaternion Calculus and Fast Animation\".\n\t var fTrace = m[0] + m[4] + m[8];\n\t var fRoot;\n\t\n\t if ( fTrace > 0.0 ) {\n\t // |w| > 1/2, may as well choose w > 1/2\n\t fRoot = Math.sqrt(fTrace + 1.0); // 2w\n\t out[3] = 0.5 * fRoot;\n\t fRoot = 0.5/fRoot; // 1/(4w)\n\t out[0] = (m[7]-m[5])*fRoot;\n\t out[1] = (m[2]-m[6])*fRoot;\n\t out[2] = (m[3]-m[1])*fRoot;\n\t } else {\n\t // |w| <= 1/2\n\t var i = 0;\n\t if ( m[4] > m[0] )\n\t i = 1;\n\t if ( m[8] > m[i*3+i] )\n\t i = 2;\n\t var j = (i+1)%3;\n\t var k = (i+2)%3;\n\t \n\t fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0);\n\t out[i] = 0.5 * fRoot;\n\t fRoot = 0.5 / fRoot;\n\t out[3] = (m[k*3+j] - m[j*3+k]) * fRoot;\n\t out[j] = (m[j*3+i] + m[i*3+j]) * fRoot;\n\t out[k] = (m[k*3+i] + m[i*3+k]) * fRoot;\n\t }\n\t \n\t return out;\n\t};\n\t\n\t/**\n\t * Returns a string representation of a quatenion\n\t *\n\t * @param {quat} vec vector to represent as a string\n\t * @returns {String} string representation of the vector\n\t */\n\tquat.str = function (a) {\n\t return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n\t};\n\t\n\tif(typeof(exports) !== 'undefined') {\n\t exports.quat = quat;\n\t}\n\t;\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t })(shim.exports);\n\t})(this);\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports) {\n\n\t// Copyright Joyent, Inc. and other Node contributors.\n\t//\n\t// Permission is hereby granted, free of charge, to any person obtaining a\n\t// copy of this software and associated documentation files (the\n\t// \"Software\"), to deal in the Software without restriction, including\n\t// without limitation the rights to use, copy, modify, merge, publish,\n\t// distribute, sublicense, and/or sell copies of the Software, and to permit\n\t// persons to whom the Software is furnished to do so, subject to the\n\t// following conditions:\n\t//\n\t// The above copyright notice and this permission notice shall be included\n\t// in all copies or substantial portions of the Software.\n\t//\n\t// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n\t// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n\t// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n\t// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n\t// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n\t// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n\t// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\t\n\tfunction EventEmitter() {\n\t this._events = this._events || {};\n\t this._maxListeners = this._maxListeners || undefined;\n\t}\n\tmodule.exports = EventEmitter;\n\t\n\t// Backwards-compat with node 0.10.x\n\tEventEmitter.EventEmitter = EventEmitter;\n\t\n\tEventEmitter.prototype._events = undefined;\n\tEventEmitter.prototype._maxListeners = undefined;\n\t\n\t// By default EventEmitters will print a warning if more than 10 listeners are\n\t// added to it. This is a useful default which helps finding memory leaks.\n\tEventEmitter.defaultMaxListeners = 10;\n\t\n\t// Obviously not all Emitters should be limited to 10. This function allows\n\t// that to be increased. Set to zero for unlimited.\n\tEventEmitter.prototype.setMaxListeners = function(n) {\n\t if (!isNumber(n) || n < 0 || isNaN(n))\n\t throw TypeError('n must be a positive number');\n\t this._maxListeners = n;\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.emit = function(type) {\n\t var er, handler, len, args, i, listeners;\n\t\n\t if (!this._events)\n\t this._events = {};\n\t\n\t // If there is no 'error' event listener then throw.\n\t if (type === 'error') {\n\t if (!this._events.error ||\n\t (isObject(this._events.error) && !this._events.error.length)) {\n\t er = arguments[1];\n\t if (er instanceof Error) {\n\t throw er; // Unhandled 'error' event\n\t } else {\n\t // At least give some kind of context to the user\n\t var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n\t err.context = er;\n\t throw err;\n\t }\n\t }\n\t }\n\t\n\t handler = this._events[type];\n\t\n\t if (isUndefined(handler))\n\t return false;\n\t\n\t if (isFunction(handler)) {\n\t switch (arguments.length) {\n\t // fast cases\n\t case 1:\n\t handler.call(this);\n\t break;\n\t case 2:\n\t handler.call(this, arguments[1]);\n\t break;\n\t case 3:\n\t handler.call(this, arguments[1], arguments[2]);\n\t break;\n\t // slower\n\t default:\n\t args = Array.prototype.slice.call(arguments, 1);\n\t handler.apply(this, args);\n\t }\n\t } else if (isObject(handler)) {\n\t args = Array.prototype.slice.call(arguments, 1);\n\t listeners = handler.slice();\n\t len = listeners.length;\n\t for (i = 0; i < len; i++)\n\t listeners[i].apply(this, args);\n\t }\n\t\n\t return true;\n\t};\n\t\n\tEventEmitter.prototype.addListener = function(type, listener) {\n\t var m;\n\t\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t if (!this._events)\n\t this._events = {};\n\t\n\t // To avoid recursion in the case that type === \"newListener\"! Before\n\t // adding it to the listeners, first emit \"newListener\".\n\t if (this._events.newListener)\n\t this.emit('newListener', type,\n\t isFunction(listener.listener) ?\n\t listener.listener : listener);\n\t\n\t if (!this._events[type])\n\t // Optimize the case of one listener. Don't need the extra array object.\n\t this._events[type] = listener;\n\t else if (isObject(this._events[type]))\n\t // If we've already got an array, just append.\n\t this._events[type].push(listener);\n\t else\n\t // Adding the second element, need to change to array.\n\t this._events[type] = [this._events[type], listener];\n\t\n\t // Check for listener leak\n\t if (isObject(this._events[type]) && !this._events[type].warned) {\n\t if (!isUndefined(this._maxListeners)) {\n\t m = this._maxListeners;\n\t } else {\n\t m = EventEmitter.defaultMaxListeners;\n\t }\n\t\n\t if (m && m > 0 && this._events[type].length > m) {\n\t this._events[type].warned = true;\n\t console.error('(node) warning: possible EventEmitter memory ' +\n\t 'leak detected. %d listeners added. ' +\n\t 'Use emitter.setMaxListeners() to increase limit.',\n\t this._events[type].length);\n\t if (typeof console.trace === 'function') {\n\t // not supported in IE 10\n\t console.trace();\n\t }\n\t }\n\t }\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\t\n\tEventEmitter.prototype.once = function(type, listener) {\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t var fired = false;\n\t\n\t function g() {\n\t this.removeListener(type, g);\n\t\n\t if (!fired) {\n\t fired = true;\n\t listener.apply(this, arguments);\n\t }\n\t }\n\t\n\t g.listener = listener;\n\t this.on(type, g);\n\t\n\t return this;\n\t};\n\t\n\t// emits a 'removeListener' event iff the listener was removed\n\tEventEmitter.prototype.removeListener = function(type, listener) {\n\t var list, position, length, i;\n\t\n\t if (!isFunction(listener))\n\t throw TypeError('listener must be a function');\n\t\n\t if (!this._events || !this._events[type])\n\t return this;\n\t\n\t list = this._events[type];\n\t length = list.length;\n\t position = -1;\n\t\n\t if (list === listener ||\n\t (isFunction(list.listener) && list.listener === listener)) {\n\t delete this._events[type];\n\t if (this._events.removeListener)\n\t this.emit('removeListener', type, listener);\n\t\n\t } else if (isObject(list)) {\n\t for (i = length; i-- > 0;) {\n\t if (list[i] === listener ||\n\t (list[i].listener && list[i].listener === listener)) {\n\t position = i;\n\t break;\n\t }\n\t }\n\t\n\t if (position < 0)\n\t return this;\n\t\n\t if (list.length === 1) {\n\t list.length = 0;\n\t delete this._events[type];\n\t } else {\n\t list.splice(position, 1);\n\t }\n\t\n\t if (this._events.removeListener)\n\t this.emit('removeListener', type, listener);\n\t }\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.removeAllListeners = function(type) {\n\t var key, listeners;\n\t\n\t if (!this._events)\n\t return this;\n\t\n\t // not listening for removeListener, no need to emit\n\t if (!this._events.removeListener) {\n\t if (arguments.length === 0)\n\t this._events = {};\n\t else if (this._events[type])\n\t delete this._events[type];\n\t return this;\n\t }\n\t\n\t // emit removeListener for all listeners on all events\n\t if (arguments.length === 0) {\n\t for (key in this._events) {\n\t if (key === 'removeListener') continue;\n\t this.removeAllListeners(key);\n\t }\n\t this.removeAllListeners('removeListener');\n\t this._events = {};\n\t return this;\n\t }\n\t\n\t listeners = this._events[type];\n\t\n\t if (isFunction(listeners)) {\n\t this.removeListener(type, listeners);\n\t } else if (listeners) {\n\t // LIFO order\n\t while (listeners.length)\n\t this.removeListener(type, listeners[listeners.length - 1]);\n\t }\n\t delete this._events[type];\n\t\n\t return this;\n\t};\n\t\n\tEventEmitter.prototype.listeners = function(type) {\n\t var ret;\n\t if (!this._events || !this._events[type])\n\t ret = [];\n\t else if (isFunction(this._events[type]))\n\t ret = [this._events[type]];\n\t else\n\t ret = this._events[type].slice();\n\t return ret;\n\t};\n\t\n\tEventEmitter.prototype.listenerCount = function(type) {\n\t if (this._events) {\n\t var evlistener = this._events[type];\n\t\n\t if (isFunction(evlistener))\n\t return 1;\n\t else if (evlistener)\n\t return evlistener.length;\n\t }\n\t return 0;\n\t};\n\t\n\tEventEmitter.listenerCount = function(emitter, type) {\n\t return emitter.listenerCount(type);\n\t};\n\t\n\tfunction isFunction(arg) {\n\t return typeof arg === 'function';\n\t}\n\t\n\tfunction isNumber(arg) {\n\t return typeof arg === 'number';\n\t}\n\t\n\tfunction isObject(arg) {\n\t return typeof arg === 'object' && arg !== null;\n\t}\n\t\n\tfunction isUndefined(arg) {\n\t return arg === void 0;\n\t}\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar glMatrix = __webpack_require__(2)\n\t , vec3 = glMatrix.vec3;\n\t\n\t/**\n\t * Constructs a Pointable object.\n\t *\n\t * An uninitialized pointable is considered invalid.\n\t * Get valid Pointable objects from a Frame or a Hand object.\n\t *\n\t * @class Pointable\n\t * @memberof Leap\n\t * @classdesc\n\t * The Pointable class reports the physical characteristics of a detected\n\t * finger or tool.\n\t *\n\t * Both fingers and tools are classified as Pointable objects. Use the\n\t * Pointable.tool property to determine whether a Pointable object represents a\n\t * tool or finger. The Leap classifies a detected entity as a tool when it is\n\t * thinner, straighter, and longer than a typical finger.\n\t *\n\t * Note that Pointable objects can be invalid, which means that they do not\n\t * contain valid tracking data and do not correspond to a physical entity.\n\t * Invalid Pointable objects can be the result of asking for a Pointable object\n\t * using an ID from an earlier frame when no Pointable objects with that ID\n\t * exist in the current frame. A Pointable object created from the Pointable\n\t * constructor is also invalid. Test for validity with the Pointable.valid\n\t * property.\n\t */\n\tvar Pointable = module.exports = function(data) {\n\t /**\n\t * Indicates whether this is a valid Pointable object.\n\t *\n\t * @member valid\n\t * @type {Boolean}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.valid = true;\n\t /**\n\t * A unique ID assigned to this Pointable object, whose value remains the\n\t * same across consecutive frames while the tracked finger or tool remains\n\t * visible. If tracking is lost (for example, when a finger is occluded by\n\t * another finger or when it is withdrawn from the Leap field of view), the\n\t * Leap may assign a new ID when it detects the entity in a future frame.\n\t *\n\t * Use the ID value with the pointable() functions defined for the\n\t * {@link Frame} and {@link Frame.Hand} classes to find this\n\t * Pointable object in future frames.\n\t *\n\t * @member id\n\t * @type {String}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.id = data.id;\n\t this.handId = data.handId;\n\t /**\n\t * The estimated length of the finger or tool in millimeters.\n\t *\n\t * The reported length is the visible length of the finger or tool from the\n\t * hand to tip. If the length isn't known, then a value of 0 is returned.\n\t *\n\t * @member length\n\t * @type {number}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.length = data.length;\n\t /**\n\t * Whether or not the Pointable is believed to be a tool.\n\t * Tools are generally longer, thinner, and straighter than fingers.\n\t *\n\t * If tool is false, then this Pointable must be a finger.\n\t *\n\t * @member tool\n\t * @type {Boolean}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.tool = data.tool;\n\t /**\n\t * The estimated width of the tool in millimeters.\n\t *\n\t * The reported width is the average width of the visible portion of the\n\t * tool from the hand to the tip. If the width isn't known,\n\t * then a value of 0 is returned.\n\t *\n\t * Pointable objects representing fingers do not have a width property.\n\t *\n\t * @member width\n\t * @type {number}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.width = data.width;\n\t /**\n\t * The direction in which this finger or tool is pointing.\n\t *\n\t * The direction is expressed as a unit vector pointing in the same\n\t * direction as the tip.\n\t *\n\t * \n\t * @member direction\n\t * @type {number[]}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.direction = data.direction;\n\t /**\n\t * The tip position in millimeters from the Leap origin.\n\t * Stabilized\n\t *\n\t * @member stabilizedTipPosition\n\t * @type {number[]}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.stabilizedTipPosition = data.stabilizedTipPosition;\n\t /**\n\t * The tip position in millimeters from the Leap origin.\n\t *\n\t * @member tipPosition\n\t * @type {number[]}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.tipPosition = data.tipPosition;\n\t /**\n\t * The rate of change of the tip position in millimeters/second.\n\t *\n\t * @member tipVelocity\n\t * @type {number[]}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.tipVelocity = data.tipVelocity;\n\t /**\n\t * The current touch zone of this Pointable object.\n\t *\n\t * The Leap Motion software computes the touch zone based on a floating touch\n\t * plane that adapts to the user's finger movement and hand posture. The Leap\n\t * Motion software interprets purposeful movements toward this plane as potential touch\n\t * points. When a Pointable moves close to the adaptive touch plane, it enters the\n\t * \"hovering\" zone. When a Pointable reaches or passes through the plane, it enters\n\t * the \"touching\" zone.\n\t *\n\t * The possible states include:\n\t *\n\t * * \"none\" -- The Pointable is outside the hovering zone.\n\t * * \"hovering\" -- The Pointable is close to, but not touching the touch plane.\n\t * * \"touching\" -- The Pointable has penetrated the touch plane.\n\t *\n\t * The touchDistance value provides a normalized indication of the distance to\n\t * the touch plane when the Pointable is in the hovering or touching zones.\n\t *\n\t * @member touchZone\n\t * @type {String}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.touchZone = data.touchZone;\n\t /**\n\t * A value proportional to the distance between this Pointable object and the\n\t * adaptive touch plane.\n\t *\n\t * \n\t *\n\t * The touch distance is a value in the range [-1, 1]. The value 1.0 indicates the\n\t * Pointable is at the far edge of the hovering zone. The value 0 indicates the\n\t * Pointable is just entering the touching zone. A value of -1.0 indicates the\n\t * Pointable is firmly within the touching zone. Values in between are\n\t * proportional to the distance from the plane. Thus, the touchDistance of 0.5\n\t * indicates that the Pointable is halfway into the hovering zone.\n\t *\n\t * You can use the touchDistance value to modulate visual feedback given to the\n\t * user as their fingers close in on a touch target, such as a button.\n\t *\n\t * @member touchDistance\n\t * @type {number}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.touchDistance = data.touchDistance;\n\t\n\t /**\n\t * How long the pointable has been visible in seconds.\n\t *\n\t * @member timeVisible\n\t * @type {number}\n\t * @memberof Leap.Pointable.prototype\n\t */\n\t this.timeVisible = data.timeVisible;\n\t}\n\t\n\t/**\n\t * A string containing a brief, human readable description of the Pointable\n\t * object.\n\t *\n\t * @method toString\n\t * @memberof Leap.Pointable.prototype\n\t * @returns {String} A description of the Pointable object as a string.\n\t */\n\tPointable.prototype.toString = function() {\n\t return \"Pointable [ id:\" + this.id + \" \" + this.length + \"mmx | width:\" + this.width + \"mm | direction:\" + this.direction + ' ]';\n\t}\n\t\n\t/**\n\t * Returns the hand which the pointable is attached to.\n\t */\n\tPointable.prototype.hand = function(){\n\t return this.frame.hand(this.handId);\n\t}\n\t\n\t/**\n\t * An invalid Pointable object.\n\t *\n\t * You can use this Pointable instance in comparisons testing\n\t * whether a given Pointable instance is valid or invalid. (You can also use the\n\t * Pointable.valid property.)\n\t\n\t * @static\n\t * @type {Leap.Pointable}\n\t * @name Invalid\n\t * @memberof Leap.Pointable\n\t */\n\tPointable.Invalid = { valid: false };\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Pointable = __webpack_require__(4),\n\t Bone = __webpack_require__(13)\n\t , Dialog = __webpack_require__(16)\n\t , _ = __webpack_require__(1);\n\t\n\t/**\n\t* Constructs a Finger object.\n\t*\n\t* An uninitialized finger is considered invalid.\n\t* Get valid Finger objects from a Frame or a Hand object.\n\t*\n\t* @class Finger\n\t* @memberof Leap\n\t* @classdesc\n\t* The Finger class reports the physical characteristics of a finger.\n\t*\n\t* Both fingers and tools are classified as Pointable objects. Use the\n\t* Pointable.tool property to determine whether a Pointable object represents a\n\t* tool or finger. The Leap classifies a detected entity as a tool when it is\n\t* thinner, straighter, and longer than a typical finger.\n\t*\n\t* Note that Finger objects can be invalid, which means that they do not\n\t* contain valid tracking data and do not correspond to a physical entity.\n\t* Invalid Finger objects can be the result of asking for a Finger object\n\t* using an ID from an earlier frame when no Finger objects with that ID\n\t* exist in the current frame. A Finger object created from the Finger\n\t* constructor is also invalid. Test for validity with the Pointable.valid\n\t* property.\n\t*/\n\tvar Finger = module.exports = function(data) {\n\t Pointable.call(this, data); // use pointable as super-constructor\n\t \n\t /**\n\t * The position of the distal interphalangeal joint of the finger.\n\t * This joint is closest to the tip.\n\t * \n\t * The distal interphalangeal joint is located between the most extreme segment\n\t * of the finger (the distal phalanx) and the middle segment (the medial\n\t * phalanx).\n\t *\n\t * @member dipPosition\n\t * @type {number[]}\n\t * @memberof Leap.Finger.prototype\n\t */ \n\t this.dipPosition = data.dipPosition;\n\t\n\t /**\n\t * The position of the proximal interphalangeal joint of the finger. This joint is the middle\n\t * joint of a finger.\n\t *\n\t * The proximal interphalangeal joint is located between the two finger segments\n\t * closest to the hand (the proximal and the medial phalanges). On a thumb,\n\t * which lacks an medial phalanx, this joint index identifies the knuckle joint\n\t * between the proximal phalanx and the metacarpal bone.\n\t *\n\t * @member pipPosition\n\t * @type {number[]}\n\t * @memberof Leap.Finger.prototype\n\t */ \n\t this.pipPosition = data.pipPosition;\n\t\n\t /**\n\t * The position of the metacarpopophalangeal joint, or knuckle, of the finger.\n\t *\n\t * The metacarpopophalangeal joint is located at the base of a finger between\n\t * the metacarpal bone and the first phalanx. The common name for this joint is\n\t * the knuckle.\n\t *\n\t * On a thumb, which has one less phalanx than a finger, this joint index\n\t * identifies the thumb joint near the base of the hand, between the carpal\n\t * and metacarpal bones.\n\t *\n\t * @member mcpPosition\n\t * @type {number[]}\n\t * @memberof Leap.Finger.prototype\n\t */ \n\t this.mcpPosition = data.mcpPosition;\n\t\n\t /**\n\t * The position of the Carpometacarpal joint\n\t *\n\t * This is at the distal end of the wrist, and has no common name.\n\t *\n\t */\n\t this.carpPosition = data.carpPosition;\n\t\n\t /**\n\t * Whether or not this finger is in an extended posture.\n\t *\n\t * A finger is considered extended if it is extended straight from the hand as if\n\t * pointing. A finger is not extended when it is bent down and curled towards the \n\t * palm.\n\t * @member extended\n\t * @type {Boolean}\n\t * @memberof Leap.Finger.prototype\n\t */\n\t this.extended = data.extended;\n\t\n\t /**\n\t * An integer code for the name of this finger.\n\t * \n\t * * 0 -- thumb\n\t * * 1 -- index finger\n\t * * 2 -- middle finger\n\t * * 3 -- ring finger\n\t * * 4 -- pinky\n\t *\n\t * @member type\n\t * @type {number}\n\t * @memberof Leap.Finger.prototype\n\t */\n\t this.type = data.type;\n\t\n\t this.finger = true;\n\t \n\t /**\n\t * The joint positions of this finger as an array in the order base to tip.\n\t *\n\t * @member positions\n\t * @type {array[]}\n\t * @memberof Leap.Finger.prototype\n\t */\n\t this.positions = [this.carpPosition, this.mcpPosition, this.pipPosition, this.dipPosition, this.tipPosition];\n\t\n\t if (data.bases){\n\t this.addBones(data);\n\t } else {\n\t Dialog.warnBones();\n\t }\n\t\n\t};\n\t\n\t_.extend(Finger.prototype, Pointable.prototype);\n\t\n\t\n\tFinger.prototype.addBones = function(data){\n\t /**\n\t * Four bones per finger, from wrist outwards:\n\t * metacarpal, proximal, medial, and distal.\n\t *\n\t * See http://en.wikipedia.org/wiki/Interphalangeal_articulations_of_hand\n\t */\n\t this.metacarpal = new Bone(this, {\n\t type: 0,\n\t width: this.width,\n\t prevJoint: this.carpPosition,\n\t nextJoint: this.mcpPosition,\n\t basis: data.bases[0]\n\t });\n\t\n\t this.proximal = new Bone(this, {\n\t type: 1,\n\t width: this.width,\n\t prevJoint: this.mcpPosition,\n\t nextJoint: this.pipPosition,\n\t basis: data.bases[1]\n\t });\n\t\n\t this.medial = new Bone(this, {\n\t type: 2,\n\t width: this.width,\n\t prevJoint: this.pipPosition,\n\t nextJoint: this.dipPosition,\n\t basis: data.bases[2]\n\t });\n\t\n\t /**\n\t * Note that the `distal.nextJoint` position is slightly different from the `finger.tipPosition`.\n\t * The former is at the very end of the bone, where the latter is the center of a sphere positioned at\n\t * the tip of the finger. The btipPosition \"bone tip position\" is a few mm closer to the wrist than\n\t * the tipPosition.\n\t * @type {Bone}\n\t */\n\t this.distal = new Bone(this, {\n\t type: 3,\n\t width: this.width,\n\t prevJoint: this.dipPosition,\n\t nextJoint: data.btipPosition,\n\t basis: data.bases[3]\n\t });\n\t\n\t this.bones = [this.metacarpal, this.proximal, this.medial, this.distal];\n\t};\n\t\n\tFinger.prototype.toString = function() {\n\t return \"Finger [ id:\" + this.id + \" \" + this.length + \"mmx | width:\" + this.width + \"mm | direction:\" + this.direction + ' ]';\n\t};\n\t\n\tFinger.Invalid = { valid: false };\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Pointable = __webpack_require__(4)\n\t , Bone = __webpack_require__(13)\n\t , glMatrix = __webpack_require__(2)\n\t , mat3 = glMatrix.mat3\n\t , vec3 = glMatrix.vec3\n\t , _ = __webpack_require__(1);\n\t\n\t/**\n\t * Constructs a Hand object.\n\t *\n\t * An uninitialized hand is considered invalid.\n\t * Get valid Hand objects from a Frame object.\n\t * @class Hand\n\t * @memberof Leap\n\t * @classdesc\n\t * The Hand class reports the physical characteristics of a detected hand.\n\t *\n\t * Hand tracking data includes a palm position and velocity; vectors for\n\t * the palm normal and direction to the fingers; properties of a sphere fit\n\t * to the hand; and lists of the attached fingers and tools.\n\t *\n\t * Note that Hand objects can be invalid, which means that they do not contain\n\t * valid tracking data and do not correspond to a physical entity. Invalid Hand\n\t * objects can be the result of asking for a Hand object using an ID from an\n\t * earlier frame when no Hand objects with that ID exist in the current frame.\n\t * A Hand object created from the Hand constructor is also invalid.\n\t * Test for validity with the [Hand.valid]{@link Leap.Hand#valid} property.\n\t */\n\tvar Hand = module.exports = function(data) {\n\t /**\n\t * A unique ID assigned to this Hand object, whose value remains the same\n\t * across consecutive frames while the tracked hand remains visible. If\n\t * tracking is lost (for example, when a hand is occluded by another hand\n\t * or when it is withdrawn from or reaches the edge of the Leap field of view),\n\t * the Leap may assign a new ID when it detects the hand in a future frame.\n\t *\n\t * Use the ID value with the {@link Frame.hand}() function to find this\n\t * Hand object in future frames.\n\t *\n\t * @member id\n\t * @memberof Leap.Hand.prototype\n\t * @type {String}\n\t */\n\t this.id = data.id;\n\t /**\n\t * The center position of the palm in millimeters from the Leap origin.\n\t * @member palmPosition\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.palmPosition = data.palmPosition;\n\t /**\n\t * The direction from the palm position toward the fingers.\n\t *\n\t * The direction is expressed as a unit vector pointing in the same\n\t * direction as the directed line from the palm position to the fingers.\n\t *\n\t * @member direction\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.direction = data.direction;\n\t /**\n\t * The rate of change of the palm position in millimeters/second.\n\t *\n\t * @member palmVeclocity\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.palmVelocity = data.palmVelocity;\n\t /**\n\t * The normal vector to the palm. If your hand is flat, this vector will\n\t * point downward, or \"out\" of the front surface of your palm.\n\t *\n\t * \n\t *\n\t * The direction is expressed as a unit vector pointing in the same\n\t * direction as the palm normal (that is, a vector orthogonal to the palm).\n\t * @member palmNormal\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.palmNormal = data.palmNormal;\n\t /**\n\t * The center of a sphere fit to the curvature of this hand.\n\t *\n\t * This sphere is placed roughly as if the hand were holding a ball.\n\t *\n\t * \n\t * @member sphereCenter\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.sphereCenter = data.sphereCenter;\n\t /**\n\t * The radius of a sphere fit to the curvature of this hand, in millimeters.\n\t *\n\t * This sphere is placed roughly as if the hand were holding a ball. Thus the\n\t * size of the sphere decreases as the fingers are curled into a fist.\n\t *\n\t * @member sphereRadius\n\t * @memberof Leap.Hand.prototype\n\t * @type {number}\n\t */\n\t this.sphereRadius = data.sphereRadius;\n\t /**\n\t * Reports whether this is a valid Hand object.\n\t *\n\t * @member valid\n\t * @memberof Leap.Hand.prototype\n\t * @type {boolean}\n\t */\n\t this.valid = true;\n\t /**\n\t * The list of Pointable objects (fingers and tools) detected in this frame\n\t * that are associated with this hand, given in arbitrary order. The list\n\t * can be empty if no fingers or tools associated with this hand are detected.\n\t *\n\t * Use the {@link Pointable} tool property to determine\n\t * whether or not an item in the list represents a tool or finger.\n\t * You can also get only the tools using the Hand.tools[] list or\n\t * only the fingers using the Hand.fingers[] list.\n\t *\n\t * @member pointables[]\n\t * @memberof Leap.Hand.prototype\n\t * @type {Leap.Pointable[]}\n\t */\n\t this.pointables = [];\n\t /**\n\t * The list of fingers detected in this frame that are attached to\n\t * this hand, given in arbitrary order.\n\t *\n\t * The list can be empty if no fingers attached to this hand are detected.\n\t *\n\t * @member fingers[]\n\t * @memberof Leap.Hand.prototype\n\t * @type {Leap.Pointable[]}\n\t */\n\t this.fingers = [];\n\t \n\t if (data.armBasis){\n\t this.arm = new Bone(this, {\n\t type: 4,\n\t width: data.armWidth,\n\t prevJoint: data.elbow,\n\t nextJoint: data.wrist,\n\t basis: data.armBasis\n\t });\n\t }else{\n\t this.arm = null;\n\t }\n\t \n\t /**\n\t * The list of tools detected in this frame that are held by this\n\t * hand, given in arbitrary order.\n\t *\n\t * The list can be empty if no tools held by this hand are detected.\n\t *\n\t * @member tools[]\n\t * @memberof Leap.Hand.prototype\n\t * @type {Leap.Pointable[]}\n\t */\n\t this.tools = [];\n\t this._translation = data.t;\n\t this._rotation = _.flatten(data.r);\n\t this._scaleFactor = data.s;\n\t\n\t /**\n\t * Time the hand has been visible in seconds.\n\t *\n\t * @member timeVisible\n\t * @memberof Leap.Hand.prototype\n\t * @type {number}\n\t */\n\t this.timeVisible = data.timeVisible;\n\t\n\t /**\n\t * The palm position with stabalization\n\t * @member stabilizedPalmPosition\n\t * @memberof Leap.Hand.prototype\n\t * @type {number[]}\n\t */\n\t this.stabilizedPalmPosition = data.stabilizedPalmPosition;\n\t\n\t /**\n\t * Reports whether this is a left or a right hand.\n\t *\n\t * @member type\n\t * @type {String}\n\t * @memberof Leap.Hand.prototype\n\t */\n\t this.type = data.type;\n\t this.grabStrength = data.grabStrength;\n\t this.pinchStrength = data.pinchStrength;\n\t this.confidence = data.confidence;\n\t}\n\t\n\t/**\n\t * The finger with the specified ID attached to this hand.\n\t *\n\t * Use this function to retrieve a Pointable object representing a finger\n\t * attached to this hand using an ID value obtained from a previous frame.\n\t * This function always returns a Pointable object, but if no finger\n\t * with the specified ID is present, an invalid Pointable object is returned.\n\t *\n\t * Note that the ID values assigned to fingers persist across frames, but only\n\t * until tracking of a particular finger is lost. If tracking of a finger is\n\t * lost and subsequently regained, the new Finger object representing that\n\t * finger may have a different ID than that representing the finger in an\n\t * earlier frame.\n\t *\n\t * @method finger\n\t * @memberof Leap.Hand.prototype\n\t * @param {String} id The ID value of a finger from a previous frame.\n\t * @returns {Leap.Pointable} The Finger object with\n\t * the matching ID if one exists for this hand in this frame; otherwise, an\n\t * invalid Finger object is returned.\n\t */\n\tHand.prototype.finger = function(id) {\n\t var finger = this.frame.finger(id);\n\t return (finger && (finger.handId == this.id)) ? finger : Pointable.Invalid;\n\t}\n\t\n\t/**\n\t * The angle of rotation around the rotation axis derived from the change in\n\t * orientation of this hand, and any associated fingers and tools, between the\n\t * current frame and the specified frame.\n\t *\n\t * The returned angle is expressed in radians measured clockwise around the\n\t * rotation axis (using the right-hand rule) between the start and end frames.\n\t * The value is always between 0 and pi radians (0 and 180 degrees).\n\t *\n\t * If a corresponding Hand object is not found in sinceFrame, or if either\n\t * this frame or sinceFrame are invalid Frame objects, then the angle of rotation is zero.\n\t *\n\t * @method rotationAngle\n\t * @memberof Leap.Hand.prototype\n\t * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n\t * @param {numnber[]} [axis] The axis to measure rotation around.\n\t * @returns {number} A positive value representing the heuristically determined\n\t * rotational change of the hand between the current frame and that specified in\n\t * the sinceFrame parameter.\n\t */\n\tHand.prototype.rotationAngle = function(sinceFrame, axis) {\n\t if (!this.valid || !sinceFrame.valid) return 0.0;\n\t var sinceHand = sinceFrame.hand(this.id);\n\t if(!sinceHand.valid) return 0.0;\n\t var rot = this.rotationMatrix(sinceFrame);\n\t var cs = (rot[0] + rot[4] + rot[8] - 1.0)*0.5\n\t var angle = Math.acos(cs);\n\t angle = isNaN(angle) ? 0.0 : angle;\n\t if (axis !== undefined) {\n\t var rotAxis = this.rotationAxis(sinceFrame);\n\t angle *= vec3.dot(rotAxis, vec3.normalize(vec3.create(), axis));\n\t }\n\t return angle;\n\t}\n\t\n\t/**\n\t * The axis of rotation derived from the change in orientation of this hand, and\n\t * any associated fingers and tools, between the current frame and the specified frame.\n\t *\n\t * The returned direction vector is normalized.\n\t *\n\t * If a corresponding Hand object is not found in sinceFrame, or if either\n\t * this frame or sinceFrame are invalid Frame objects, then this method returns a zero vector.\n\t *\n\t * @method rotationAxis\n\t * @memberof Leap.Hand.prototype\n\t * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n\t * @returns {number[]} A normalized direction Vector representing the axis of the heuristically determined\n\t * rotational change of the hand between the current frame and that specified in the sinceFrame parameter.\n\t */\n\tHand.prototype.rotationAxis = function(sinceFrame) {\n\t if (!this.valid || !sinceFrame.valid) return vec3.create();\n\t var sinceHand = sinceFrame.hand(this.id);\n\t if (!sinceHand.valid) return vec3.create();\n\t return vec3.normalize(vec3.create(), [\n\t this._rotation[7] - sinceHand._rotation[5],\n\t this._rotation[2] - sinceHand._rotation[6],\n\t this._rotation[3] - sinceHand._rotation[1]\n\t ]);\n\t}\n\t\n\t/**\n\t * The transform matrix expressing the rotation derived from the change in\n\t * orientation of this hand, and any associated fingers and tools, between\n\t * the current frame and the specified frame.\n\t *\n\t * If a corresponding Hand object is not found in sinceFrame, or if either\n\t * this frame or sinceFrame are invalid Frame objects, then this method returns\n\t * an identity matrix.\n\t *\n\t * @method rotationMatrix\n\t * @memberof Leap.Hand.prototype\n\t * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n\t * @returns {number[]} A transformation Matrix containing the heuristically determined\n\t * rotational change of the hand between the current frame and that specified in the sinceFrame parameter.\n\t */\n\tHand.prototype.rotationMatrix = function(sinceFrame) {\n\t if (!this.valid || !sinceFrame.valid) return mat3.create();\n\t var sinceHand = sinceFrame.hand(this.id);\n\t if(!sinceHand.valid) return mat3.create();\n\t var transpose = mat3.transpose(mat3.create(), this._rotation);\n\t var m = mat3.multiply(mat3.create(), sinceHand._rotation, transpose);\n\t return m;\n\t}\n\t\n\t/**\n\t * The scale factor derived from the hand's motion between the current frame and the specified frame.\n\t *\n\t * The scale factor is always positive. A value of 1.0 indicates no scaling took place.\n\t * Values between 0.0 and 1.0 indicate contraction and values greater than 1.0 indicate expansion.\n\t *\n\t * The Leap derives scaling from the relative inward or outward motion of a hand\n\t * and its associated fingers and tools (independent of translation and rotation).\n\t *\n\t * If a corresponding Hand object is not found in sinceFrame, or if either this frame or sinceFrame\n\t * are invalid Frame objects, then this method returns 1.0.\n\t *\n\t * @method scaleFactor\n\t * @memberof Leap.Hand.prototype\n\t * @param {Leap.Frame} sinceFrame The starting frame for computing the relative scaling.\n\t * @returns {number} A positive value representing the heuristically determined\n\t * scaling change ratio of the hand between the current frame and that specified in the sinceFrame parameter.\n\t */\n\tHand.prototype.scaleFactor = function(sinceFrame) {\n\t if (!this.valid || !sinceFrame.valid) return 1.0;\n\t var sinceHand = sinceFrame.hand(this.id);\n\t if(!sinceHand.valid) return 1.0;\n\t\n\t return Math.exp(this._scaleFactor - sinceHand._scaleFactor);\n\t}\n\t\n\t/**\n\t * The change of position of this hand between the current frame and the specified frame\n\t *\n\t * The returned translation vector provides the magnitude and direction of the\n\t * movement in millimeters.\n\t *\n\t * If a corresponding Hand object is not found in sinceFrame, or if either this frame or\n\t * sinceFrame are invalid Frame objects, then this method returns a zero vector.\n\t *\n\t * @method translation\n\t * @memberof Leap.Hand.prototype\n\t * @param {Leap.Frame} sinceFrame The starting frame for computing the relative translation.\n\t * @returns {number[]} A Vector representing the heuristically determined change in hand\n\t * position between the current frame and that specified in the sinceFrame parameter.\n\t */\n\tHand.prototype.translation = function(sinceFrame) {\n\t if (!this.valid || !sinceFrame.valid) return vec3.create();\n\t var sinceHand = sinceFrame.hand(this.id);\n\t if(!sinceHand.valid) return vec3.create();\n\t return [\n\t this._translation[0] - sinceHand._translation[0],\n\t this._translation[1] - sinceHand._translation[1],\n\t this._translation[2] - sinceHand._translation[2]\n\t ];\n\t}\n\t\n\t/**\n\t * A string containing a brief, human readable description of the Hand object.\n\t * @method toString\n\t * @memberof Leap.Hand.prototype\n\t * @returns {String} A description of the Hand as a string.\n\t */\n\tHand.prototype.toString = function() {\n\t return \"Hand (\" + this.type + \") [ id: \"+ this.id + \" | palm velocity:\"+this.palmVelocity+\" | sphere center:\"+this.sphereCenter+\" ] \";\n\t}\n\t\n\t/**\n\t * The pitch angle in radians.\n\t *\n\t * Pitch is the angle between the negative z-axis and the projection of\n\t * the vector onto the y-z plane. In other words, pitch represents rotation\n\t * around the x-axis.\n\t * If the vector points upward, the returned angle is between 0 and pi radians\n\t * (180 degrees); if it points downward, the angle is between 0 and -pi radians.\n\t *\n\t * @method pitch\n\t * @memberof Leap.Hand.prototype\n\t * @returns {number} The angle of this vector above or below the horizon (x-z plane).\n\t *\n\t */\n\tHand.prototype.pitch = function() {\n\t return Math.atan2(this.direction[1], -this.direction[2]);\n\t}\n\t\n\t/**\n\t * The yaw angle in radians.\n\t *\n\t * Yaw is the angle between the negative z-axis and the projection of\n\t * the vector onto the x-z plane. In other words, yaw represents rotation\n\t * around the y-axis. If the vector points to the right of the negative z-axis,\n\t * then the returned angle is between 0 and pi radians (180 degrees);\n\t * if it points to the left, the angle is between 0 and -pi radians.\n\t *\n\t * @method yaw\n\t * @memberof Leap.Hand.prototype\n\t * @returns {number} The angle of this vector to the right or left of the y-axis.\n\t *\n\t */\n\tHand.prototype.yaw = function() {\n\t return Math.atan2(this.direction[0], -this.direction[2]);\n\t}\n\t\n\t/**\n\t * The roll angle in radians.\n\t *\n\t * Roll is the angle between the y-axis and the projection of\n\t * the vector onto the x-y plane. In other words, roll represents rotation\n\t * around the z-axis. If the vector points to the left of the y-axis,\n\t * then the returned angle is between 0 and pi radians (180 degrees);\n\t * if it points to the right, the angle is between 0 and -pi radians.\n\t *\n\t * @method roll\n\t * @memberof Leap.Hand.prototype\n\t * @returns {number} The angle of this vector to the right or left of the y-axis.\n\t *\n\t */\n\tHand.prototype.roll = function() {\n\t return Math.atan2(this.palmNormal[0], -this.palmNormal[1]);\n\t}\n\t\n\t/**\n\t * An invalid Hand object.\n\t *\n\t * You can use an invalid Hand object in comparisons testing\n\t * whether a given Hand instance is valid or invalid. (You can also use the\n\t * Hand valid property.)\n\t *\n\t * @static\n\t * @type {Leap.Hand}\n\t * @name Invalid\n\t * @memberof Leap.Hand\n\t */\n\tHand.Invalid = {\n\t valid: false,\n\t fingers: [],\n\t tools: [],\n\t pointables: [],\n\t left: false,\n\t pointable: function() { return Pointable.Invalid },\n\t finger: function() { return Pointable.Invalid },\n\t toString: function() { return \"invalid frame\" },\n\t dump: function() { return this.toString(); },\n\t rotationAngle: function() { return 0.0; },\n\t rotationMatrix: function() { return mat3.create(); },\n\t rotationAxis: function() { return vec3.create(); },\n\t scaleFactor: function() { return 1.0; },\n\t translation: function() { return vec3.create(); }\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\t\n\tfunction KeyCombo(keyComboStr) {\n\t this.sourceStr = keyComboStr;\n\t this.subCombos = KeyCombo.parseComboStr(keyComboStr);\n\t this.keyNames = this.subCombos.reduce(function(memo, nextSubCombo) {\n\t return memo.concat(nextSubCombo);\n\t });\n\t}\n\t\n\t// TODO: Add support for key combo sequences\n\tKeyCombo.sequenceDeliminator = '>>';\n\tKeyCombo.comboDeliminator = '>';\n\tKeyCombo.keyDeliminator = '+';\n\t\n\tKeyCombo.parseComboStr = function(keyComboStr) {\n\t var subComboStrs = KeyCombo._splitStr(keyComboStr, KeyCombo.comboDeliminator);\n\t var combo = [];\n\t\n\t for (var i = 0 ; i < subComboStrs.length; i += 1) {\n\t combo.push(KeyCombo._splitStr(subComboStrs[i], KeyCombo.keyDeliminator));\n\t }\n\t return combo;\n\t};\n\t\n\tKeyCombo.prototype.check = function(pressedKeyNames) {\n\t var startingKeyNameIndex = 0;\n\t for (var i = 0; i < this.subCombos.length; i += 1) {\n\t startingKeyNameIndex = this._checkSubCombo(\n\t this.subCombos[i],\n\t startingKeyNameIndex,\n\t pressedKeyNames\n\t );\n\t if (startingKeyNameIndex === -1) { return false; }\n\t }\n\t return true;\n\t};\n\t\n\tKeyCombo.prototype.isEqual = function(otherKeyCombo) {\n\t if (\n\t !otherKeyCombo ||\n\t typeof otherKeyCombo !== 'string' &&\n\t typeof otherKeyCombo !== 'object'\n\t ) { return false; }\n\t\n\t if (typeof otherKeyCombo === 'string') {\n\t otherKeyCombo = new KeyCombo(otherKeyCombo);\n\t }\n\t\n\t if (this.subCombos.length !== otherKeyCombo.subCombos.length) {\n\t return false;\n\t }\n\t for (var i = 0; i < this.subCombos.length; i += 1) {\n\t if (this.subCombos[i].length !== otherKeyCombo.subCombos[i].length) {\n\t return false;\n\t }\n\t }\n\t\n\t for (var i = 0; i < this.subCombos.length; i += 1) {\n\t var subCombo = this.subCombos[i];\n\t var otherSubCombo = otherKeyCombo.subCombos[i].slice(0);\n\t\n\t for (var j = 0; j < subCombo.length; j += 1) {\n\t var keyName = subCombo[j];\n\t var index = otherSubCombo.indexOf(keyName);\n\t\n\t if (index > -1) {\n\t otherSubCombo.splice(index, 1);\n\t }\n\t }\n\t if (otherSubCombo.length !== 0) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t};\n\t\n\tKeyCombo._splitStr = function(str, deliminator) {\n\t var s = str;\n\t var d = deliminator;\n\t var c = '';\n\t var ca = [];\n\t\n\t for (var ci = 0; ci < s.length; ci += 1) {\n\t if (ci > 0 && s[ci] === d && s[ci - 1] !== '\\\\') {\n\t ca.push(c.trim());\n\t c = '';\n\t ci += 1;\n\t }\n\t c += s[ci];\n\t }\n\t if (c) { ca.push(c.trim()); }\n\t\n\t return ca;\n\t};\n\t\n\tKeyCombo.prototype._checkSubCombo = function(subCombo, startingKeyNameIndex, pressedKeyNames) {\n\t subCombo = subCombo.slice(0);\n\t pressedKeyNames = pressedKeyNames.slice(startingKeyNameIndex);\n\t\n\t var endIndex = startingKeyNameIndex;\n\t for (var i = 0; i < subCombo.length; i += 1) {\n\t\n\t var keyName = subCombo[i];\n\t if (keyName[0] === '\\\\') {\n\t var escapedKeyName = keyName.slice(1);\n\t if (\n\t escapedKeyName === KeyCombo.comboDeliminator ||\n\t escapedKeyName === KeyCombo.keyDeliminator\n\t ) {\n\t keyName = escapedKeyName;\n\t }\n\t }\n\t\n\t var index = pressedKeyNames.indexOf(keyName);\n\t if (index > -1) {\n\t subCombo.splice(i, 1);\n\t i -= 1;\n\t if (index > endIndex) {\n\t endIndex = index;\n\t }\n\t if (subCombo.length === 0) {\n\t return endIndex;\n\t }\n\t }\n\t }\n\t return -1;\n\t};\n\t\n\t\n\tmodule.exports = KeyCombo;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Hand = __webpack_require__(6)\n\t , Pointable = __webpack_require__(4)\n\t , createGesture = __webpack_require__(9).createGesture\n\t , glMatrix = __webpack_require__(2)\n\t , mat3 = glMatrix.mat3\n\t , vec3 = glMatrix.vec3\n\t , InteractionBox = __webpack_require__(17)\n\t , Finger = __webpack_require__(5)\n\t , _ = __webpack_require__(1);\n\t\n\t/**\n\t * Constructs a Frame object.\n\t *\n\t * Frame instances created with this constructor are invalid.\n\t * Get valid Frame objects by calling the\n\t * [Controller.frame]{@link Leap.Controller#frame}() function.\n\t *
\n * [a, c, tx,\n * b, d, ty]\n *\n * This is a short form for the 3x3 matrix:\n *
\n * [a, c, tx,\n * b, d, ty,\n * 0, 0, 1]\n *\n * The last row is ignored so the array is shorter and operations are faster.\n */\n\nvar mat2d = {};\n\n/**\n * Creates a new identity mat2d\n *\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.create = function() {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Creates a new mat2d initialized with values from an existing matrix\n *\n * @param {mat2d} a matrix to clone\n * @returns {mat2d} a new 2x3 matrix\n */\nmat2d.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(6);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Copy the values from one mat2d to another\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n return out;\n};\n\n/**\n * Set a mat2d to the identity matrix\n *\n * @param {mat2d} out the receiving matrix\n * @returns {mat2d} out\n */\nmat2d.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n};\n\n/**\n * Inverts a mat2d\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the source matrix\n * @returns {mat2d} out\n */\nmat2d.invert = function(out, a) {\n var aa = a[0], ab = a[1], ac = a[2], ad = a[3],\n atx = a[4], aty = a[5];\n\n var det = aa * ad - ab * ac;\n if(!det){\n return null;\n }\n det = 1.0 / det;\n\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n};\n\n/**\n * Calculates the determinant of a mat2d\n *\n * @param {mat2d} a the source matrix\n * @returns {Number} determinant of a\n */\nmat2d.determinant = function (a) {\n return a[0] * a[3] - a[1] * a[2];\n};\n\n/**\n * Multiplies two mat2d's\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the first operand\n * @param {mat2d} b the second operand\n * @returns {mat2d} out\n */\nmat2d.multiply = function (out, a, b) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5];\n out[0] = a0 * b0 + a2 * b1;\n out[1] = a1 * b0 + a3 * b1;\n out[2] = a0 * b2 + a2 * b3;\n out[3] = a1 * b2 + a3 * b3;\n out[4] = a0 * b4 + a2 * b5 + a4;\n out[5] = a1 * b4 + a3 * b5 + a5;\n return out;\n};\n\n/**\n * Alias for {@link mat2d.multiply}\n * @function\n */\nmat2d.mul = mat2d.multiply;\n\n\n/**\n * Rotates a mat2d by the given angle\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat2d} out\n */\nmat2d.rotate = function (out, a, rad) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = a0 * c + a2 * s;\n out[1] = a1 * c + a3 * s;\n out[2] = a0 * -s + a2 * c;\n out[3] = a1 * -s + a3 * c;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Scales the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat2d} out\n **/\nmat2d.scale = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0 * v0;\n out[1] = a1 * v0;\n out[2] = a2 * v1;\n out[3] = a3 * v1;\n out[4] = a4;\n out[5] = a5;\n return out;\n};\n\n/**\n * Translates the mat2d by the dimensions in the given vec2\n *\n * @param {mat2d} out the receiving matrix\n * @param {mat2d} a the matrix to translate\n * @param {vec2} v the vec2 to translate the matrix by\n * @returns {mat2d} out\n **/\nmat2d.translate = function(out, a, v) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3], a4 = a[4], a5 = a[5],\n v0 = v[0], v1 = v[1];\n out[0] = a0;\n out[1] = a1;\n out[2] = a2;\n out[3] = a3;\n out[4] = a0 * v0 + a2 * v1 + a4;\n out[5] = a1 * v0 + a3 * v1 + a5;\n return out;\n};\n\n/**\n * Returns a string representation of a mat2d\n *\n * @param {mat2d} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat2d.str = function (a) {\n return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat2d\n *\n * @param {mat2d} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat2d.frob = function (a) { \n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + 1))\n}; \n\nif(typeof(exports) !== 'undefined') {\n exports.mat2d = mat2d;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 3x3 Matrix\n * @name mat3\n */\n\nvar mat3 = {};\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.create = function() {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {mat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\nmat3.fromMat4 = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n};\n\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {mat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\nmat3.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\nmat3.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b01 = a22 * a11 - a12 * a21,\n b11 = -a22 * a10 + a12 * a20,\n b21 = a21 * a10 - a11 * a20,\n\n // Calculate the determinant\n det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nmat3.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n out[0] = (a11 * a22 - a12 * a21);\n out[1] = (a02 * a21 - a01 * a22);\n out[2] = (a01 * a12 - a02 * a11);\n out[3] = (a12 * a20 - a10 * a22);\n out[4] = (a00 * a22 - a02 * a20);\n out[5] = (a02 * a10 - a00 * a12);\n out[6] = (a10 * a21 - a11 * a20);\n out[7] = (a01 * a20 - a00 * a21);\n out[8] = (a00 * a11 - a01 * a10);\n return out;\n};\n\n/**\n * Calculates the determinant of a mat3\n *\n * @param {mat3} a the source matrix\n * @returns {Number} determinant of a\n */\nmat3.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8];\n\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n};\n\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the first operand\n * @param {mat3} b the second operand\n * @returns {mat3} out\n */\nmat3.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n b00 = b[0], b01 = b[1], b02 = b[2],\n b10 = b[3], b11 = b[4], b12 = b[5],\n b20 = b[6], b21 = b[7], b22 = b[8];\n\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n};\n\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\nmat3.mul = mat3.multiply;\n\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to translate\n * @param {vec2} v vector to translate by\n * @returns {mat3} out\n */\nmat3.translate = function(out, a, v) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n x = v[0], y = v[1];\n\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n};\n\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\nmat3.rotate = function (out, a, rad) {\n var a00 = a[0], a01 = a[1], a02 = a[2],\n a10 = a[3], a11 = a[4], a12 = a[5],\n a20 = a[6], a21 = a[7], a22 = a[8],\n\n s = Math.sin(rad),\n c = Math.cos(rad);\n\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n};\n\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the matrix to rotate\n * @param {vec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\nmat3.scale = function(out, a, v) {\n var x = v[0], y = v[1];\n\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n};\n\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {mat2d} a the matrix to copy\n * @returns {mat3} out\n **/\nmat3.fromMat2d = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n};\n\n/**\n* Calculates a 3x3 matrix from the given quaternion\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {quat} q Quaternion to create matrix from\n*\n* @returns {mat3} out\n*/\nmat3.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n\n return out;\n};\n\n/**\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n*\n* @param {mat3} out mat3 receiving operation result\n* @param {mat4} a Mat4 to derive the normal matrix from\n*\n* @returns {mat3} out\n*/\nmat3.normalFromMat4 = function (out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat3\n *\n * @param {mat3} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat3.str = function (a) {\n return 'mat3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + \n a[3] + ', ' + a[4] + ', ' + a[5] + ', ' + \n a[6] + ', ' + a[7] + ', ' + a[8] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {mat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat3.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2)))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat3 = mat3;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class 4x4 Matrix\n * @name mat4\n */\n\nvar mat4 = {};\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.create = function() {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {mat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nmat4.clone = function(a) {\n var out = new GLMAT_ARRAY_TYPE(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.copy = function(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nmat4.identity = function(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.transpose = function(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a03 = a[3],\n a12 = a[6], a13 = a[7],\n a23 = a[11];\n\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n \n return out;\n};\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.invert = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n};\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nmat4.adjoint = function(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n};\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {mat4} a the source matrix\n * @returns {Number} determinant of a\n */\nmat4.determinant = function (a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n};\n\n/**\n * Multiplies two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nmat4.multiply = function (out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; \n out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n return out;\n};\n\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\nmat4.mul = mat4.multiply;\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nmat4.translate = function (out, a, v) {\n var x = v[0], y = v[1], z = v[2],\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n};\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nmat4.scale = function(out, a, v) {\n var x = v[0], y = v[1], z = v[2];\n\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};\n\n/**\n * Rotates a mat4 by the given angle\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nmat4.rotate = function (out, a, rad, axis) {\n var x = axis[0], y = axis[1], z = axis[2],\n len = Math.sqrt(x * x + y * y + z * z),\n s, c, t,\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n b00, b01, b02,\n b10, b11, b12,\n b20, b21, b22;\n\n if (Math.abs(len) < GLMAT_EPSILON) { return null; }\n \n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;\n b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;\n b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateX = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateY = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n};\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nmat4.rotateZ = function (out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n};\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * var quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {vec3} v Translation vector\n * @returns {mat4} out\n */\nmat4.fromRotationTranslation = function (out, q, v) {\n // Quaternion math\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n xy = x * y2,\n xz = x * z2,\n yy = y * y2,\n yz = y * z2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n \n return out;\n};\n\nmat4.fromQuat = function (out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.frustum = function (out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left),\n tb = 1 / (top - bottom),\n nf = 1 / (near - far);\n out[0] = (near * 2) * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = (near * 2) * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (far * near * 2) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.perspective = function (out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (2 * far * near) * nf;\n out[15] = 0;\n return out;\n};\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nmat4.ortho = function (out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right),\n bt = 1 / (bottom - top),\n nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} center Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nmat4.lookAt = function (out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2],\n centerx = center[0],\n centery = center[1],\n centerz = center[2];\n\n if (Math.abs(eyex - centerx) < GLMAT_EPSILON &&\n Math.abs(eyey - centery) < GLMAT_EPSILON &&\n Math.abs(eyez - centerz) < GLMAT_EPSILON) {\n return mat4.identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n\n return out;\n};\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {mat4} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nmat4.str = function (a) {\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +\n a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +\n a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + \n a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\n};\n\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {mat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\nmat4.frob = function (a) {\n return(Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2) + Math.pow(a[2], 2) + Math.pow(a[3], 2) + Math.pow(a[4], 2) + Math.pow(a[5], 2) + Math.pow(a[6], 2) + Math.pow(a[6], 2) + Math.pow(a[7], 2) + Math.pow(a[8], 2) + Math.pow(a[9], 2) + Math.pow(a[10], 2) + Math.pow(a[11], 2) + Math.pow(a[12], 2) + Math.pow(a[13], 2) + Math.pow(a[14], 2) + Math.pow(a[15], 2) ))\n};\n\n\nif(typeof(exports) !== 'undefined') {\n exports.mat4 = mat4;\n}\n;\n/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation \n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE \nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */\n\n/**\n * @class Quaternion\n * @name quat\n */\n\nvar quat = {};\n\n/**\n * Creates a new identity quat\n *\n * @returns {quat} a new quaternion\n */\nquat.create = function() {\n var out = new GLMAT_ARRAY_TYPE(4);\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quaternion to represent the shortest rotation from one\n * vector to another.\n *\n * Both vectors are assumed to be unit length.\n *\n * @param {quat} out the receiving quaternion.\n * @param {vec3} a the initial vector\n * @param {vec3} b the destination vector\n * @returns {quat} out\n */\nquat.rotationTo = (function() {\n var tmpvec3 = vec3.create();\n var xUnitVec3 = vec3.fromValues(1,0,0);\n var yUnitVec3 = vec3.fromValues(0,1,0);\n\n return function(out, a, b) {\n var dot = vec3.dot(a, b);\n if (dot < -0.999999) {\n vec3.cross(tmpvec3, xUnitVec3, a);\n if (vec3.length(tmpvec3) < 0.000001)\n vec3.cross(tmpvec3, yUnitVec3, a);\n vec3.normalize(tmpvec3, tmpvec3);\n quat.setAxisAngle(out, tmpvec3, Math.PI);\n return out;\n } else if (dot > 0.999999) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n } else {\n vec3.cross(tmpvec3, a, b);\n out[0] = tmpvec3[0];\n out[1] = tmpvec3[1];\n out[2] = tmpvec3[2];\n out[3] = 1 + dot;\n return quat.normalize(out, out);\n }\n };\n})();\n\n/**\n * Sets the specified quaternion with values corresponding to the given\n * axes. Each axis is a vec3 and is expected to be unit length and\n * perpendicular to all other specified axes.\n *\n * @param {vec3} view the vector representing the viewing direction\n * @param {vec3} right the vector representing the local \"right\" direction\n * @param {vec3} up the vector representing the local \"up\" direction\n * @returns {quat} out\n */\nquat.setAxes = (function() {\n var matr = mat3.create();\n\n return function(out, view, right, up) {\n matr[0] = right[0];\n matr[3] = right[1];\n matr[6] = right[2];\n\n matr[1] = up[0];\n matr[4] = up[1];\n matr[7] = up[2];\n\n matr[2] = -view[0];\n matr[5] = -view[1];\n matr[8] = -view[2];\n\n return quat.normalize(out, quat.fromMat3(out, matr));\n };\n})();\n\n/**\n * Creates a new quat initialized with values from an existing quaternion\n *\n * @param {quat} a quaternion to clone\n * @returns {quat} a new quaternion\n * @function\n */\nquat.clone = vec4.clone;\n\n/**\n * Creates a new quat initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} a new quaternion\n * @function\n */\nquat.fromValues = vec4.fromValues;\n\n/**\n * Copy the values from one quat to another\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the source quaternion\n * @returns {quat} out\n * @function\n */\nquat.copy = vec4.copy;\n\n/**\n * Set the components of a quat to the given values\n *\n * @param {quat} out the receiving quaternion\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {quat} out\n * @function\n */\nquat.set = vec4.set;\n\n/**\n * Set a quat to the identity quaternion\n *\n * @param {quat} out the receiving quaternion\n * @returns {quat} out\n */\nquat.identity = function(out) {\n out[0] = 0;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n return out;\n};\n\n/**\n * Sets a quat from the given angle and rotation axis,\n * then returns it.\n *\n * @param {quat} out the receiving quaternion\n * @param {vec3} axis the axis around which to rotate\n * @param {Number} rad the angle in radians\n * @returns {quat} out\n **/\nquat.setAxisAngle = function(out, axis, rad) {\n rad = rad * 0.5;\n var s = Math.sin(rad);\n out[0] = s * axis[0];\n out[1] = s * axis[1];\n out[2] = s * axis[2];\n out[3] = Math.cos(rad);\n return out;\n};\n\n/**\n * Adds two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n * @function\n */\nquat.add = vec4.add;\n\n/**\n * Multiplies two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {quat} out\n */\nquat.multiply = function(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n out[0] = ax * bw + aw * bx + ay * bz - az * by;\n out[1] = ay * bw + aw * by + az * bx - ax * bz;\n out[2] = az * bw + aw * bz + ax * by - ay * bx;\n out[3] = aw * bw - ax * bx - ay * by - az * bz;\n return out;\n};\n\n/**\n * Alias for {@link quat.multiply}\n * @function\n */\nquat.mul = quat.multiply;\n\n/**\n * Scales a quat by a scalar number\n *\n * @param {quat} out the receiving vector\n * @param {quat} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {quat} out\n * @function\n */\nquat.scale = vec4.scale;\n\n/**\n * Rotates a quaternion by the given angle about the X axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateX = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + aw * bx;\n out[1] = ay * bw + az * bx;\n out[2] = az * bw - ay * bx;\n out[3] = aw * bw - ax * bx;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Y axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateY = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n by = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw - az * by;\n out[1] = ay * bw + aw * by;\n out[2] = az * bw + ax * by;\n out[3] = aw * bw - ay * by;\n return out;\n};\n\n/**\n * Rotates a quaternion by the given angle about the Z axis\n *\n * @param {quat} out quat receiving operation result\n * @param {quat} a quat to rotate\n * @param {number} rad angle (in radians) to rotate\n * @returns {quat} out\n */\nquat.rotateZ = function (out, a, rad) {\n rad *= 0.5; \n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bz = Math.sin(rad), bw = Math.cos(rad);\n\n out[0] = ax * bw + ay * bz;\n out[1] = ay * bw - ax * bz;\n out[2] = az * bw + aw * bz;\n out[3] = aw * bw - az * bz;\n return out;\n};\n\n/**\n * Calculates the W component of a quat from the X, Y, and Z components.\n * Assumes that quaternion is 1 unit in length.\n * Any existing W component will be ignored.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate W component of\n * @returns {quat} out\n */\nquat.calculateW = function (out, a) {\n var x = a[0], y = a[1], z = a[2];\n\n out[0] = x;\n out[1] = y;\n out[2] = z;\n out[3] = -Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n return out;\n};\n\n/**\n * Calculates the dot product of two quat's\n *\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @returns {Number} dot product of a and b\n * @function\n */\nquat.dot = vec4.dot;\n\n/**\n * Performs a linear interpolation between two quat's\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n * @function\n */\nquat.lerp = vec4.lerp;\n\n/**\n * Performs a spherical linear interpolation between two quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a the first operand\n * @param {quat} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {quat} out\n */\nquat.slerp = function (out, a, b, t) {\n // benchmarks:\n // http://jsperf.com/quaternion-slerp-implementations\n\n var ax = a[0], ay = a[1], az = a[2], aw = a[3],\n bx = b[0], by = b[1], bz = b[2], bw = b[3];\n\n var omega, cosom, sinom, scale0, scale1;\n\n // calc cosine\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n // adjust signs (if necessary)\n if ( cosom < 0.0 ) {\n cosom = -cosom;\n bx = - bx;\n by = - by;\n bz = - bz;\n bw = - bw;\n }\n // calculate coefficients\n if ( (1.0 - cosom) > 0.000001 ) {\n // standard case (slerp)\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else { \n // \"from\" and \"to\" quaternions are very close \n // ... so we can do a linear interpolation\n scale0 = 1.0 - t;\n scale1 = t;\n }\n // calculate final values\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n \n return out;\n};\n\n/**\n * Calculates the inverse of a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate inverse of\n * @returns {quat} out\n */\nquat.invert = function(out, a) {\n var a0 = a[0], a1 = a[1], a2 = a[2], a3 = a[3],\n dot = a0*a0 + a1*a1 + a2*a2 + a3*a3,\n invDot = dot ? 1.0/dot : 0;\n \n // TODO: Would be faster to return [0,0,0,0] immediately if dot == 0\n\n out[0] = -a0*invDot;\n out[1] = -a1*invDot;\n out[2] = -a2*invDot;\n out[3] = a3*invDot;\n return out;\n};\n\n/**\n * Calculates the conjugate of a quat\n * If the quaternion is normalized, this function is faster than quat.inverse and produces the same result.\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quat to calculate conjugate of\n * @returns {quat} out\n */\nquat.conjugate = function (out, a) {\n out[0] = -a[0];\n out[1] = -a[1];\n out[2] = -a[2];\n out[3] = a[3];\n return out;\n};\n\n/**\n * Calculates the length of a quat\n *\n * @param {quat} a vector to calculate length of\n * @returns {Number} length of a\n * @function\n */\nquat.length = vec4.length;\n\n/**\n * Alias for {@link quat.length}\n * @function\n */\nquat.len = quat.length;\n\n/**\n * Calculates the squared length of a quat\n *\n * @param {quat} a vector to calculate squared length of\n * @returns {Number} squared length of a\n * @function\n */\nquat.squaredLength = vec4.squaredLength;\n\n/**\n * Alias for {@link quat.squaredLength}\n * @function\n */\nquat.sqrLen = quat.squaredLength;\n\n/**\n * Normalize a quat\n *\n * @param {quat} out the receiving quaternion\n * @param {quat} a quaternion to normalize\n * @returns {quat} out\n * @function\n */\nquat.normalize = vec4.normalize;\n\n/**\n * Creates a quaternion from the given 3x3 rotation matrix.\n *\n * NOTE: The resultant quaternion is not normalized, so you should be sure\n * to renormalize the quaternion yourself where necessary.\n *\n * @param {quat} out the receiving quaternion\n * @param {mat3} m rotation matrix\n * @returns {quat} out\n * @function\n */\nquat.fromMat3 = function(out, m) {\n // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n // article \"Quaternion Calculus and Fast Animation\".\n var fTrace = m[0] + m[4] + m[8];\n var fRoot;\n\n if ( fTrace > 0.0 ) {\n // |w| > 1/2, may as well choose w > 1/2\n fRoot = Math.sqrt(fTrace + 1.0); // 2w\n out[3] = 0.5 * fRoot;\n fRoot = 0.5/fRoot; // 1/(4w)\n out[0] = (m[7]-m[5])*fRoot;\n out[1] = (m[2]-m[6])*fRoot;\n out[2] = (m[3]-m[1])*fRoot;\n } else {\n // |w| <= 1/2\n var i = 0;\n if ( m[4] > m[0] )\n i = 1;\n if ( m[8] > m[i*3+i] )\n i = 2;\n var j = (i+1)%3;\n var k = (i+2)%3;\n \n fRoot = Math.sqrt(m[i*3+i]-m[j*3+j]-m[k*3+k] + 1.0);\n out[i] = 0.5 * fRoot;\n fRoot = 0.5 / fRoot;\n out[3] = (m[k*3+j] - m[j*3+k]) * fRoot;\n out[j] = (m[j*3+i] + m[i*3+j]) * fRoot;\n out[k] = (m[k*3+i] + m[i*3+k]) * fRoot;\n }\n \n return out;\n};\n\n/**\n * Returns a string representation of a quatenion\n *\n * @param {quat} vec vector to represent as a string\n * @returns {String} string representation of the vector\n */\nquat.str = function (a) {\n return 'quat(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ')';\n};\n\nif(typeof(exports) !== 'undefined') {\n exports.quat = quat;\n}\n;\n\n\n\n\n\n\n\n\n\n\n\n\n\n })(shim.exports);\n})(this);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-matrix/dist/gl-matrix.js\n ** module id = 2\n ** module chunks = 0\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 } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\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 args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\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 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 if (listeners) {\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.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/events/events.js\n ** module id = 3\n ** module chunks = 0\n **/","var glMatrix = require(\"gl-matrix\")\n , vec3 = glMatrix.vec3;\n\n/**\n * Constructs a Pointable object.\n *\n * An uninitialized pointable is considered invalid.\n * Get valid Pointable objects from a Frame or a Hand object.\n *\n * @class Pointable\n * @memberof Leap\n * @classdesc\n * The Pointable class reports the physical characteristics of a detected\n * finger or tool.\n *\n * Both fingers and tools are classified as Pointable objects. Use the\n * Pointable.tool property to determine whether a Pointable object represents a\n * tool or finger. The Leap classifies a detected entity as a tool when it is\n * thinner, straighter, and longer than a typical finger.\n *\n * Note that Pointable objects can be invalid, which means that they do not\n * contain valid tracking data and do not correspond to a physical entity.\n * Invalid Pointable objects can be the result of asking for a Pointable object\n * using an ID from an earlier frame when no Pointable objects with that ID\n * exist in the current frame. A Pointable object created from the Pointable\n * constructor is also invalid. Test for validity with the Pointable.valid\n * property.\n */\nvar Pointable = module.exports = function(data) {\n /**\n * Indicates whether this is a valid Pointable object.\n *\n * @member valid\n * @type {Boolean}\n * @memberof Leap.Pointable.prototype\n */\n this.valid = true;\n /**\n * A unique ID assigned to this Pointable object, whose value remains the\n * same across consecutive frames while the tracked finger or tool remains\n * visible. If tracking is lost (for example, when a finger is occluded by\n * another finger or when it is withdrawn from the Leap field of view), the\n * Leap may assign a new ID when it detects the entity in a future frame.\n *\n * Use the ID value with the pointable() functions defined for the\n * {@link Frame} and {@link Frame.Hand} classes to find this\n * Pointable object in future frames.\n *\n * @member id\n * @type {String}\n * @memberof Leap.Pointable.prototype\n */\n this.id = data.id;\n this.handId = data.handId;\n /**\n * The estimated length of the finger or tool in millimeters.\n *\n * The reported length is the visible length of the finger or tool from the\n * hand to tip. If the length isn't known, then a value of 0 is returned.\n *\n * @member length\n * @type {number}\n * @memberof Leap.Pointable.prototype\n */\n this.length = data.length;\n /**\n * Whether or not the Pointable is believed to be a tool.\n * Tools are generally longer, thinner, and straighter than fingers.\n *\n * If tool is false, then this Pointable must be a finger.\n *\n * @member tool\n * @type {Boolean}\n * @memberof Leap.Pointable.prototype\n */\n this.tool = data.tool;\n /**\n * The estimated width of the tool in millimeters.\n *\n * The reported width is the average width of the visible portion of the\n * tool from the hand to the tip. If the width isn't known,\n * then a value of 0 is returned.\n *\n * Pointable objects representing fingers do not have a width property.\n *\n * @member width\n * @type {number}\n * @memberof Leap.Pointable.prototype\n */\n this.width = data.width;\n /**\n * The direction in which this finger or tool is pointing.\n *\n * The direction is expressed as a unit vector pointing in the same\n * direction as the tip.\n *\n * \n * @member direction\n * @type {number[]}\n * @memberof Leap.Pointable.prototype\n */\n this.direction = data.direction;\n /**\n * The tip position in millimeters from the Leap origin.\n * Stabilized\n *\n * @member stabilizedTipPosition\n * @type {number[]}\n * @memberof Leap.Pointable.prototype\n */\n this.stabilizedTipPosition = data.stabilizedTipPosition;\n /**\n * The tip position in millimeters from the Leap origin.\n *\n * @member tipPosition\n * @type {number[]}\n * @memberof Leap.Pointable.prototype\n */\n this.tipPosition = data.tipPosition;\n /**\n * The rate of change of the tip position in millimeters/second.\n *\n * @member tipVelocity\n * @type {number[]}\n * @memberof Leap.Pointable.prototype\n */\n this.tipVelocity = data.tipVelocity;\n /**\n * The current touch zone of this Pointable object.\n *\n * The Leap Motion software computes the touch zone based on a floating touch\n * plane that adapts to the user's finger movement and hand posture. The Leap\n * Motion software interprets purposeful movements toward this plane as potential touch\n * points. When a Pointable moves close to the adaptive touch plane, it enters the\n * \"hovering\" zone. When a Pointable reaches or passes through the plane, it enters\n * the \"touching\" zone.\n *\n * The possible states include:\n *\n * * \"none\" -- The Pointable is outside the hovering zone.\n * * \"hovering\" -- The Pointable is close to, but not touching the touch plane.\n * * \"touching\" -- The Pointable has penetrated the touch plane.\n *\n * The touchDistance value provides a normalized indication of the distance to\n * the touch plane when the Pointable is in the hovering or touching zones.\n *\n * @member touchZone\n * @type {String}\n * @memberof Leap.Pointable.prototype\n */\n this.touchZone = data.touchZone;\n /**\n * A value proportional to the distance between this Pointable object and the\n * adaptive touch plane.\n *\n * \n *\n * The touch distance is a value in the range [-1, 1]. The value 1.0 indicates the\n * Pointable is at the far edge of the hovering zone. The value 0 indicates the\n * Pointable is just entering the touching zone. A value of -1.0 indicates the\n * Pointable is firmly within the touching zone. Values in between are\n * proportional to the distance from the plane. Thus, the touchDistance of 0.5\n * indicates that the Pointable is halfway into the hovering zone.\n *\n * You can use the touchDistance value to modulate visual feedback given to the\n * user as their fingers close in on a touch target, such as a button.\n *\n * @member touchDistance\n * @type {number}\n * @memberof Leap.Pointable.prototype\n */\n this.touchDistance = data.touchDistance;\n\n /**\n * How long the pointable has been visible in seconds.\n *\n * @member timeVisible\n * @type {number}\n * @memberof Leap.Pointable.prototype\n */\n this.timeVisible = data.timeVisible;\n}\n\n/**\n * A string containing a brief, human readable description of the Pointable\n * object.\n *\n * @method toString\n * @memberof Leap.Pointable.prototype\n * @returns {String} A description of the Pointable object as a string.\n */\nPointable.prototype.toString = function() {\n return \"Pointable [ id:\" + this.id + \" \" + this.length + \"mmx | width:\" + this.width + \"mm | direction:\" + this.direction + ' ]';\n}\n\n/**\n * Returns the hand which the pointable is attached to.\n */\nPointable.prototype.hand = function(){\n return this.frame.hand(this.handId);\n}\n\n/**\n * An invalid Pointable object.\n *\n * You can use this Pointable instance in comparisons testing\n * whether a given Pointable instance is valid or invalid. (You can also use the\n * Pointable.valid property.)\n\n * @static\n * @type {Leap.Pointable}\n * @name Invalid\n * @memberof Leap.Pointable\n */\nPointable.Invalid = { valid: false };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/leapjs/lib/pointable.js\n ** module id = 4\n ** module chunks = 0\n **/","var Pointable = require('./pointable'),\n Bone = require('./bone')\n , Dialog = require('./dialog')\n , _ = require('underscore');\n\n/**\n* Constructs a Finger object.\n*\n* An uninitialized finger is considered invalid.\n* Get valid Finger objects from a Frame or a Hand object.\n*\n* @class Finger\n* @memberof Leap\n* @classdesc\n* The Finger class reports the physical characteristics of a finger.\n*\n* Both fingers and tools are classified as Pointable objects. Use the\n* Pointable.tool property to determine whether a Pointable object represents a\n* tool or finger. The Leap classifies a detected entity as a tool when it is\n* thinner, straighter, and longer than a typical finger.\n*\n* Note that Finger objects can be invalid, which means that they do not\n* contain valid tracking data and do not correspond to a physical entity.\n* Invalid Finger objects can be the result of asking for a Finger object\n* using an ID from an earlier frame when no Finger objects with that ID\n* exist in the current frame. A Finger object created from the Finger\n* constructor is also invalid. Test for validity with the Pointable.valid\n* property.\n*/\nvar Finger = module.exports = function(data) {\n Pointable.call(this, data); // use pointable as super-constructor\n \n /**\n * The position of the distal interphalangeal joint of the finger.\n * This joint is closest to the tip.\n * \n * The distal interphalangeal joint is located between the most extreme segment\n * of the finger (the distal phalanx) and the middle segment (the medial\n * phalanx).\n *\n * @member dipPosition\n * @type {number[]}\n * @memberof Leap.Finger.prototype\n */ \n this.dipPosition = data.dipPosition;\n\n /**\n * The position of the proximal interphalangeal joint of the finger. This joint is the middle\n * joint of a finger.\n *\n * The proximal interphalangeal joint is located between the two finger segments\n * closest to the hand (the proximal and the medial phalanges). On a thumb,\n * which lacks an medial phalanx, this joint index identifies the knuckle joint\n * between the proximal phalanx and the metacarpal bone.\n *\n * @member pipPosition\n * @type {number[]}\n * @memberof Leap.Finger.prototype\n */ \n this.pipPosition = data.pipPosition;\n\n /**\n * The position of the metacarpopophalangeal joint, or knuckle, of the finger.\n *\n * The metacarpopophalangeal joint is located at the base of a finger between\n * the metacarpal bone and the first phalanx. The common name for this joint is\n * the knuckle.\n *\n * On a thumb, which has one less phalanx than a finger, this joint index\n * identifies the thumb joint near the base of the hand, between the carpal\n * and metacarpal bones.\n *\n * @member mcpPosition\n * @type {number[]}\n * @memberof Leap.Finger.prototype\n */ \n this.mcpPosition = data.mcpPosition;\n\n /**\n * The position of the Carpometacarpal joint\n *\n * This is at the distal end of the wrist, and has no common name.\n *\n */\n this.carpPosition = data.carpPosition;\n\n /**\n * Whether or not this finger is in an extended posture.\n *\n * A finger is considered extended if it is extended straight from the hand as if\n * pointing. A finger is not extended when it is bent down and curled towards the \n * palm.\n * @member extended\n * @type {Boolean}\n * @memberof Leap.Finger.prototype\n */\n this.extended = data.extended;\n\n /**\n * An integer code for the name of this finger.\n * \n * * 0 -- thumb\n * * 1 -- index finger\n * * 2 -- middle finger\n * * 3 -- ring finger\n * * 4 -- pinky\n *\n * @member type\n * @type {number}\n * @memberof Leap.Finger.prototype\n */\n this.type = data.type;\n\n this.finger = true;\n \n /**\n * The joint positions of this finger as an array in the order base to tip.\n *\n * @member positions\n * @type {array[]}\n * @memberof Leap.Finger.prototype\n */\n this.positions = [this.carpPosition, this.mcpPosition, this.pipPosition, this.dipPosition, this.tipPosition];\n\n if (data.bases){\n this.addBones(data);\n } else {\n Dialog.warnBones();\n }\n\n};\n\n_.extend(Finger.prototype, Pointable.prototype);\n\n\nFinger.prototype.addBones = function(data){\n /**\n * Four bones per finger, from wrist outwards:\n * metacarpal, proximal, medial, and distal.\n *\n * See http://en.wikipedia.org/wiki/Interphalangeal_articulations_of_hand\n */\n this.metacarpal = new Bone(this, {\n type: 0,\n width: this.width,\n prevJoint: this.carpPosition,\n nextJoint: this.mcpPosition,\n basis: data.bases[0]\n });\n\n this.proximal = new Bone(this, {\n type: 1,\n width: this.width,\n prevJoint: this.mcpPosition,\n nextJoint: this.pipPosition,\n basis: data.bases[1]\n });\n\n this.medial = new Bone(this, {\n type: 2,\n width: this.width,\n prevJoint: this.pipPosition,\n nextJoint: this.dipPosition,\n basis: data.bases[2]\n });\n\n /**\n * Note that the `distal.nextJoint` position is slightly different from the `finger.tipPosition`.\n * The former is at the very end of the bone, where the latter is the center of a sphere positioned at\n * the tip of the finger. The btipPosition \"bone tip position\" is a few mm closer to the wrist than\n * the tipPosition.\n * @type {Bone}\n */\n this.distal = new Bone(this, {\n type: 3,\n width: this.width,\n prevJoint: this.dipPosition,\n nextJoint: data.btipPosition,\n basis: data.bases[3]\n });\n\n this.bones = [this.metacarpal, this.proximal, this.medial, this.distal];\n};\n\nFinger.prototype.toString = function() {\n return \"Finger [ id:\" + this.id + \" \" + this.length + \"mmx | width:\" + this.width + \"mm | direction:\" + this.direction + ' ]';\n};\n\nFinger.Invalid = { valid: false };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/leapjs/lib/finger.js\n ** module id = 5\n ** module chunks = 0\n **/","var Pointable = require(\"./pointable\")\n , Bone = require('./bone')\n , glMatrix = require(\"gl-matrix\")\n , mat3 = glMatrix.mat3\n , vec3 = glMatrix.vec3\n , _ = require(\"underscore\");\n\n/**\n * Constructs a Hand object.\n *\n * An uninitialized hand is considered invalid.\n * Get valid Hand objects from a Frame object.\n * @class Hand\n * @memberof Leap\n * @classdesc\n * The Hand class reports the physical characteristics of a detected hand.\n *\n * Hand tracking data includes a palm position and velocity; vectors for\n * the palm normal and direction to the fingers; properties of a sphere fit\n * to the hand; and lists of the attached fingers and tools.\n *\n * Note that Hand objects can be invalid, which means that they do not contain\n * valid tracking data and do not correspond to a physical entity. Invalid Hand\n * objects can be the result of asking for a Hand object using an ID from an\n * earlier frame when no Hand objects with that ID exist in the current frame.\n * A Hand object created from the Hand constructor is also invalid.\n * Test for validity with the [Hand.valid]{@link Leap.Hand#valid} property.\n */\nvar Hand = module.exports = function(data) {\n /**\n * A unique ID assigned to this Hand object, whose value remains the same\n * across consecutive frames while the tracked hand remains visible. If\n * tracking is lost (for example, when a hand is occluded by another hand\n * or when it is withdrawn from or reaches the edge of the Leap field of view),\n * the Leap may assign a new ID when it detects the hand in a future frame.\n *\n * Use the ID value with the {@link Frame.hand}() function to find this\n * Hand object in future frames.\n *\n * @member id\n * @memberof Leap.Hand.prototype\n * @type {String}\n */\n this.id = data.id;\n /**\n * The center position of the palm in millimeters from the Leap origin.\n * @member palmPosition\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.palmPosition = data.palmPosition;\n /**\n * The direction from the palm position toward the fingers.\n *\n * The direction is expressed as a unit vector pointing in the same\n * direction as the directed line from the palm position to the fingers.\n *\n * @member direction\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.direction = data.direction;\n /**\n * The rate of change of the palm position in millimeters/second.\n *\n * @member palmVeclocity\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.palmVelocity = data.palmVelocity;\n /**\n * The normal vector to the palm. If your hand is flat, this vector will\n * point downward, or \"out\" of the front surface of your palm.\n *\n * \n *\n * The direction is expressed as a unit vector pointing in the same\n * direction as the palm normal (that is, a vector orthogonal to the palm).\n * @member palmNormal\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.palmNormal = data.palmNormal;\n /**\n * The center of a sphere fit to the curvature of this hand.\n *\n * This sphere is placed roughly as if the hand were holding a ball.\n *\n * \n * @member sphereCenter\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.sphereCenter = data.sphereCenter;\n /**\n * The radius of a sphere fit to the curvature of this hand, in millimeters.\n *\n * This sphere is placed roughly as if the hand were holding a ball. Thus the\n * size of the sphere decreases as the fingers are curled into a fist.\n *\n * @member sphereRadius\n * @memberof Leap.Hand.prototype\n * @type {number}\n */\n this.sphereRadius = data.sphereRadius;\n /**\n * Reports whether this is a valid Hand object.\n *\n * @member valid\n * @memberof Leap.Hand.prototype\n * @type {boolean}\n */\n this.valid = true;\n /**\n * The list of Pointable objects (fingers and tools) detected in this frame\n * that are associated with this hand, given in arbitrary order. The list\n * can be empty if no fingers or tools associated with this hand are detected.\n *\n * Use the {@link Pointable} tool property to determine\n * whether or not an item in the list represents a tool or finger.\n * You can also get only the tools using the Hand.tools[] list or\n * only the fingers using the Hand.fingers[] list.\n *\n * @member pointables[]\n * @memberof Leap.Hand.prototype\n * @type {Leap.Pointable[]}\n */\n this.pointables = [];\n /**\n * The list of fingers detected in this frame that are attached to\n * this hand, given in arbitrary order.\n *\n * The list can be empty if no fingers attached to this hand are detected.\n *\n * @member fingers[]\n * @memberof Leap.Hand.prototype\n * @type {Leap.Pointable[]}\n */\n this.fingers = [];\n \n if (data.armBasis){\n this.arm = new Bone(this, {\n type: 4,\n width: data.armWidth,\n prevJoint: data.elbow,\n nextJoint: data.wrist,\n basis: data.armBasis\n });\n }else{\n this.arm = null;\n }\n \n /**\n * The list of tools detected in this frame that are held by this\n * hand, given in arbitrary order.\n *\n * The list can be empty if no tools held by this hand are detected.\n *\n * @member tools[]\n * @memberof Leap.Hand.prototype\n * @type {Leap.Pointable[]}\n */\n this.tools = [];\n this._translation = data.t;\n this._rotation = _.flatten(data.r);\n this._scaleFactor = data.s;\n\n /**\n * Time the hand has been visible in seconds.\n *\n * @member timeVisible\n * @memberof Leap.Hand.prototype\n * @type {number}\n */\n this.timeVisible = data.timeVisible;\n\n /**\n * The palm position with stabalization\n * @member stabilizedPalmPosition\n * @memberof Leap.Hand.prototype\n * @type {number[]}\n */\n this.stabilizedPalmPosition = data.stabilizedPalmPosition;\n\n /**\n * Reports whether this is a left or a right hand.\n *\n * @member type\n * @type {String}\n * @memberof Leap.Hand.prototype\n */\n this.type = data.type;\n this.grabStrength = data.grabStrength;\n this.pinchStrength = data.pinchStrength;\n this.confidence = data.confidence;\n}\n\n/**\n * The finger with the specified ID attached to this hand.\n *\n * Use this function to retrieve a Pointable object representing a finger\n * attached to this hand using an ID value obtained from a previous frame.\n * This function always returns a Pointable object, but if no finger\n * with the specified ID is present, an invalid Pointable object is returned.\n *\n * Note that the ID values assigned to fingers persist across frames, but only\n * until tracking of a particular finger is lost. If tracking of a finger is\n * lost and subsequently regained, the new Finger object representing that\n * finger may have a different ID than that representing the finger in an\n * earlier frame.\n *\n * @method finger\n * @memberof Leap.Hand.prototype\n * @param {String} id The ID value of a finger from a previous frame.\n * @returns {Leap.Pointable} The Finger object with\n * the matching ID if one exists for this hand in this frame; otherwise, an\n * invalid Finger object is returned.\n */\nHand.prototype.finger = function(id) {\n var finger = this.frame.finger(id);\n return (finger && (finger.handId == this.id)) ? finger : Pointable.Invalid;\n}\n\n/**\n * The angle of rotation around the rotation axis derived from the change in\n * orientation of this hand, and any associated fingers and tools, between the\n * current frame and the specified frame.\n *\n * The returned angle is expressed in radians measured clockwise around the\n * rotation axis (using the right-hand rule) between the start and end frames.\n * The value is always between 0 and pi radians (0 and 180 degrees).\n *\n * If a corresponding Hand object is not found in sinceFrame, or if either\n * this frame or sinceFrame are invalid Frame objects, then the angle of rotation is zero.\n *\n * @method rotationAngle\n * @memberof Leap.Hand.prototype\n * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n * @param {numnber[]} [axis] The axis to measure rotation around.\n * @returns {number} A positive value representing the heuristically determined\n * rotational change of the hand between the current frame and that specified in\n * the sinceFrame parameter.\n */\nHand.prototype.rotationAngle = function(sinceFrame, axis) {\n if (!this.valid || !sinceFrame.valid) return 0.0;\n var sinceHand = sinceFrame.hand(this.id);\n if(!sinceHand.valid) return 0.0;\n var rot = this.rotationMatrix(sinceFrame);\n var cs = (rot[0] + rot[4] + rot[8] - 1.0)*0.5\n var angle = Math.acos(cs);\n angle = isNaN(angle) ? 0.0 : angle;\n if (axis !== undefined) {\n var rotAxis = this.rotationAxis(sinceFrame);\n angle *= vec3.dot(rotAxis, vec3.normalize(vec3.create(), axis));\n }\n return angle;\n}\n\n/**\n * The axis of rotation derived from the change in orientation of this hand, and\n * any associated fingers and tools, between the current frame and the specified frame.\n *\n * The returned direction vector is normalized.\n *\n * If a corresponding Hand object is not found in sinceFrame, or if either\n * this frame or sinceFrame are invalid Frame objects, then this method returns a zero vector.\n *\n * @method rotationAxis\n * @memberof Leap.Hand.prototype\n * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n * @returns {number[]} A normalized direction Vector representing the axis of the heuristically determined\n * rotational change of the hand between the current frame and that specified in the sinceFrame parameter.\n */\nHand.prototype.rotationAxis = function(sinceFrame) {\n if (!this.valid || !sinceFrame.valid) return vec3.create();\n var sinceHand = sinceFrame.hand(this.id);\n if (!sinceHand.valid) return vec3.create();\n return vec3.normalize(vec3.create(), [\n this._rotation[7] - sinceHand._rotation[5],\n this._rotation[2] - sinceHand._rotation[6],\n this._rotation[3] - sinceHand._rotation[1]\n ]);\n}\n\n/**\n * The transform matrix expressing the rotation derived from the change in\n * orientation of this hand, and any associated fingers and tools, between\n * the current frame and the specified frame.\n *\n * If a corresponding Hand object is not found in sinceFrame, or if either\n * this frame or sinceFrame are invalid Frame objects, then this method returns\n * an identity matrix.\n *\n * @method rotationMatrix\n * @memberof Leap.Hand.prototype\n * @param {Leap.Frame} sinceFrame The starting frame for computing the relative rotation.\n * @returns {number[]} A transformation Matrix containing the heuristically determined\n * rotational change of the hand between the current frame and that specified in the sinceFrame parameter.\n */\nHand.prototype.rotationMatrix = function(sinceFrame) {\n if (!this.valid || !sinceFrame.valid) return mat3.create();\n var sinceHand = sinceFrame.hand(this.id);\n if(!sinceHand.valid) return mat3.create();\n var transpose = mat3.transpose(mat3.create(), this._rotation);\n var m = mat3.multiply(mat3.create(), sinceHand._rotation, transpose);\n return m;\n}\n\n/**\n * The scale factor derived from the hand's motion between the current frame and the specified frame.\n *\n * The scale factor is always positive. A value of 1.0 indicates no scaling took place.\n * Values between 0.0 and 1.0 indicate contraction and values greater than 1.0 indicate expansion.\n *\n * The Leap derives scaling from the relative inward or outward motion of a hand\n * and its associated fingers and tools (independent of translation and rotation).\n *\n * If a corresponding Hand object is not found in sinceFrame, or if either this frame or sinceFrame\n * are invalid Frame objects, then this method returns 1.0.\n *\n * @method scaleFactor\n * @memberof Leap.Hand.prototype\n * @param {Leap.Frame} sinceFrame The starting frame for computing the relative scaling.\n * @returns {number} A positive value representing the heuristically determined\n * scaling change ratio of the hand between the current frame and that specified in the sinceFrame parameter.\n */\nHand.prototype.scaleFactor = function(sinceFrame) {\n if (!this.valid || !sinceFrame.valid) return 1.0;\n var sinceHand = sinceFrame.hand(this.id);\n if(!sinceHand.valid) return 1.0;\n\n return Math.exp(this._scaleFactor - sinceHand._scaleFactor);\n}\n\n/**\n * The change of position of this hand between the current frame and the specified frame\n *\n * The returned translation vector provides the magnitude and direction of the\n * movement in millimeters.\n *\n * If a corresponding Hand object is not found in sinceFrame, or if either this frame or\n * sinceFrame are invalid Frame objects, then this method returns a zero vector.\n *\n * @method translation\n * @memberof Leap.Hand.prototype\n * @param {Leap.Frame} sinceFrame The starting frame for computing the relative translation.\n * @returns {number[]} A Vector representing the heuristically determined change in hand\n * position between the current frame and that specified in the sinceFrame parameter.\n */\nHand.prototype.translation = function(sinceFrame) {\n if (!this.valid || !sinceFrame.valid) return vec3.create();\n var sinceHand = sinceFrame.hand(this.id);\n if(!sinceHand.valid) return vec3.create();\n return [\n this._translation[0] - sinceHand._translation[0],\n this._translation[1] - sinceHand._translation[1],\n this._translation[2] - sinceHand._translation[2]\n ];\n}\n\n/**\n * A string containing a brief, human readable description of the Hand object.\n * @method toString\n * @memberof Leap.Hand.prototype\n * @returns {String} A description of the Hand as a string.\n */\nHand.prototype.toString = function() {\n return \"Hand (\" + this.type + \") [ id: \"+ this.id + \" | palm velocity:\"+this.palmVelocity+\" | sphere center:\"+this.sphereCenter+\" ] \";\n}\n\n/**\n * The pitch angle in radians.\n *\n * Pitch is the angle between the negative z-axis and the projection of\n * the vector onto the y-z plane. In other words, pitch represents rotation\n * around the x-axis.\n * If the vector points upward, the returned angle is between 0 and pi radians\n * (180 degrees); if it points downward, the angle is between 0 and -pi radians.\n *\n * @method pitch\n * @memberof Leap.Hand.prototype\n * @returns {number} The angle of this vector above or below the horizon (x-z plane).\n *\n */\nHand.prototype.pitch = function() {\n return Math.atan2(this.direction[1], -this.direction[2]);\n}\n\n/**\n * The yaw angle in radians.\n *\n * Yaw is the angle between the negative z-axis and the projection of\n * the vector onto the x-z plane. In other words, yaw represents rotation\n * around the y-axis. If the vector points to the right of the negative z-axis,\n * then the returned angle is between 0 and pi radians (180 degrees);\n * if it points to the left, the angle is between 0 and -pi radians.\n *\n * @method yaw\n * @memberof Leap.Hand.prototype\n * @returns {number} The angle of this vector to the right or left of the y-axis.\n *\n */\nHand.prototype.yaw = function() {\n return Math.atan2(this.direction[0], -this.direction[2]);\n}\n\n/**\n * The roll angle in radians.\n *\n * Roll is the angle between the y-axis and the projection of\n * the vector onto the x-y plane. In other words, roll represents rotation\n * around the z-axis. If the vector points to the left of the y-axis,\n * then the returned angle is between 0 and pi radians (180 degrees);\n * if it points to the right, the angle is between 0 and -pi radians.\n *\n * @method roll\n * @memberof Leap.Hand.prototype\n * @returns {number} The angle of this vector to the right or left of the y-axis.\n *\n */\nHand.prototype.roll = function() {\n return Math.atan2(this.palmNormal[0], -this.palmNormal[1]);\n}\n\n/**\n * An invalid Hand object.\n *\n * You can use an invalid Hand object in comparisons testing\n * whether a given Hand instance is valid or invalid. (You can also use the\n * Hand valid property.)\n *\n * @static\n * @type {Leap.Hand}\n * @name Invalid\n * @memberof Leap.Hand\n */\nHand.Invalid = {\n valid: false,\n fingers: [],\n tools: [],\n pointables: [],\n left: false,\n pointable: function() { return Pointable.Invalid },\n finger: function() { return Pointable.Invalid },\n toString: function() { return \"invalid frame\" },\n dump: function() { return this.toString(); },\n rotationAngle: function() { return 0.0; },\n rotationMatrix: function() { return mat3.create(); },\n rotationAxis: function() { return vec3.create(); },\n scaleFactor: function() { return 1.0; },\n translation: function() { return vec3.create(); }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/leapjs/lib/hand.js\n ** module id = 6\n ** module chunks = 0\n **/","\nfunction KeyCombo(keyComboStr) {\n this.sourceStr = keyComboStr;\n this.subCombos = KeyCombo.parseComboStr(keyComboStr);\n this.keyNames = this.subCombos.reduce(function(memo, nextSubCombo) {\n return memo.concat(nextSubCombo);\n });\n}\n\n// TODO: Add support for key combo sequences\nKeyCombo.sequenceDeliminator = '>>';\nKeyCombo.comboDeliminator = '>';\nKeyCombo.keyDeliminator = '+';\n\nKeyCombo.parseComboStr = function(keyComboStr) {\n var subComboStrs = KeyCombo._splitStr(keyComboStr, KeyCombo.comboDeliminator);\n var combo = [];\n\n for (var i = 0 ; i < subComboStrs.length; i += 1) {\n combo.push(KeyCombo._splitStr(subComboStrs[i], KeyCombo.keyDeliminator));\n }\n return combo;\n};\n\nKeyCombo.prototype.check = function(pressedKeyNames) {\n var startingKeyNameIndex = 0;\n for (var i = 0; i < this.subCombos.length; i += 1) {\n startingKeyNameIndex = this._checkSubCombo(\n this.subCombos[i],\n startingKeyNameIndex,\n pressedKeyNames\n );\n if (startingKeyNameIndex === -1) { return false; }\n }\n return true;\n};\n\nKeyCombo.prototype.isEqual = function(otherKeyCombo) {\n if (\n !otherKeyCombo ||\n typeof otherKeyCombo !== 'string' &&\n typeof otherKeyCombo !== 'object'\n ) { return false; }\n\n if (typeof otherKeyCombo === 'string') {\n otherKeyCombo = new KeyCombo(otherKeyCombo);\n }\n\n if (this.subCombos.length !== otherKeyCombo.subCombos.length) {\n return false;\n }\n for (var i = 0; i < this.subCombos.length; i += 1) {\n if (this.subCombos[i].length !== otherKeyCombo.subCombos[i].length) {\n return false;\n }\n }\n\n for (var i = 0; i < this.subCombos.length; i += 1) {\n var subCombo = this.subCombos[i];\n var otherSubCombo = otherKeyCombo.subCombos[i].slice(0);\n\n for (var j = 0; j < subCombo.length; j += 1) {\n var keyName = subCombo[j];\n var index = otherSubCombo.indexOf(keyName);\n\n if (index > -1) {\n otherSubCombo.splice(index, 1);\n }\n }\n if (otherSubCombo.length !== 0) {\n return false;\n }\n }\n\n return true;\n};\n\nKeyCombo._splitStr = function(str, deliminator) {\n var s = str;\n var d = deliminator;\n var c = '';\n var ca = [];\n\n for (var ci = 0; ci < s.length; ci += 1) {\n if (ci > 0 && s[ci] === d && s[ci - 1] !== '\\\\') {\n ca.push(c.trim());\n c = '';\n ci += 1;\n }\n c += s[ci];\n }\n if (c) { ca.push(c.trim()); }\n\n return ca;\n};\n\nKeyCombo.prototype._checkSubCombo = function(subCombo, startingKeyNameIndex, pressedKeyNames) {\n subCombo = subCombo.slice(0);\n pressedKeyNames = pressedKeyNames.slice(startingKeyNameIndex);\n\n var endIndex = startingKeyNameIndex;\n for (var i = 0; i < subCombo.length; i += 1) {\n\n var keyName = subCombo[i];\n if (keyName[0] === '\\\\') {\n var escapedKeyName = keyName.slice(1);\n if (\n escapedKeyName === KeyCombo.comboDeliminator ||\n escapedKeyName === KeyCombo.keyDeliminator\n ) {\n keyName = escapedKeyName;\n }\n }\n\n var index = pressedKeyNames.indexOf(keyName);\n if (index > -1) {\n subCombo.splice(i, 1);\n i -= 1;\n if (index > endIndex) {\n endIndex = index;\n }\n if (subCombo.length === 0) {\n return endIndex;\n }\n }\n }\n return -1;\n};\n\n\nmodule.exports = KeyCombo;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/keyboardjs/lib/key-combo.js\n ** module id = 7\n ** module chunks = 0\n **/","var Hand = require(\"./hand\")\n , Pointable = require(\"./pointable\")\n , createGesture = require(\"./gesture\").createGesture\n , glMatrix = require(\"gl-matrix\")\n , mat3 = glMatrix.mat3\n , vec3 = glMatrix.vec3\n , InteractionBox = require(\"./interaction_box\")\n , Finger = require('./finger')\n , _ = require(\"underscore\");\n\n/**\n * Constructs a Frame object.\n *\n * Frame instances created with this constructor are invalid.\n * Get valid Frame objects by calling the\n * [Controller.frame]{@link Leap.Controller#frame}() function.\n *