--- /dev/null
+/**
+@license
+The MIT License (MIT)
+
+Copyright (c) 2013 Chris Roberson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+!function(e,r,t){"use strict";r.module("angular-promise-cache",[]).factory("promiseCache",["$q","$rootScope",function(t,n){var o={},a=5e3,c="$",i=/\s+/g,s={},u=e.localStorage||{setItem:function(){},removeItem:function(){},getItem:function(){}},p=Object.prototype.hasOwnProperty,l=Object.prototype.toString,f=function(e,r){u.setItem(e,JSON.stringify(r))},m=function(e){u.removeItem(e)},g=function(e){var r=u.getItem(e);try{r=JSON.parse(r)}catch(t){console.warn("Unable to parse json response from local storage",r)}return r},h=function(e,r){return parseInt(e.split(c)[1])||s[r]},v=function(e){return c+e+c},b=function(e){return e.key||e.promise.toString().replace(i,"")},y=function(e){return!!e.localStorageEnabled},d=function(e,r){return e.localStorageKey||r},w=function(e,r){var t=+new Date+"",n=function(){var o=n.cache,a=r?r.apply(this,arguments):t+arguments[0];return p.call(o,a)?o[a]:o[a]=e.apply(this,arguments)};return n.cache={},n},j=function(e){var c,i,u,l,j=e.promise,I=parseInt(e.ttl)||a,O=!!e.bustCache,S=e.expireOnFailure,x=e.args,$=(new Date).getTime(),E=b(e),k=y(e),A=d(e,E),D=g(A);return s[E]=s[E]||$,k&&(D&&"object"==typeof D&&p.call(D,"resolver")&&p.call(D,"response")?(c=h(D.resolver,E),u=c+I-$,o[E]=w(j,function(){return v(c)}),i=o[E].cache||{},l=t.defer(),l.resolve(D.response),i[v(c)]=l.promise,o[E].cache=i):D={}),p.call(o,E)?(o[E].opts=e,o[E].cache=function(){var e,r,t,a={},i=o[E].cache,u=!!o[E].forceExpiration;for(e in i)r=h(e,E),t=O||u||I>0&&$>r+I,t?(n.$broadcast("angular-promise-cache.expired",e,E),s[E]=$,k&&(c=s[E],m(A))):(n.$broadcast("angular-promise-cache.active",e,r+I,E),a[e]=i[e]);return o[E].forceExpiration=!1,a}()):(o[E]=w(j,function(){return v(s[E])}),o[E].opts=e,n.$broadcast("angular-promise-cache.new",v(s[E]),E)),o[E].apply(this,x||[]).then(function(e){return k&&(D.response=arguments[0],D.resolver=v(c||s[E]),f(A,D)),e},function(e){return r.isFunction(S)&&S.apply(this,arguments)&&(o[E].forceExpiration=!0),t.reject(e)})};return j.remove=function(e,r){var t=[];if("object"==typeof e){l.call(e);switch(l.call(e)){case"[object RegExp]":t=Object.keys(o).filter(function(r){return e.test(r)});break;case"[object Array]":t=e.slice(0);break;default:throw"Unsupported parameter to .remove(). Acceptable paramters are: string, array, regexp"}}else t.push(e);t.forEach(function(e){if(o[e]){var t=o[e].opts;s[e]=(new Date).getTime(),!r&&y(t)&&m(d(t,e)),delete o[e],n.$broadcast("angular-promise-cache.removed",e)}})},j.removeAll=function(e){j.remove(Object.keys(o),e)},j}])}(window,window.angular);
\ No newline at end of file