text: /**
   * @license AngularJS v1.1.5
   * (c) 2010-2012 Google, Inc. http://angularjs.org
   * License: MIT
   *
   * TODO(vojta): wrap whole file into closure during build
   */
  
  function createHttpBackendMock(e,t,n){function u(e,t,n){return angular.isFunction(e)?e:function(){return angular
  .isNumber(e)?[e,t,n]:[200,e,t]}}function a(e,u,a,f,l,c){function v(e){return angular.isString(e)||angular
  .isFunction(e)||e instanceof RegExp?e:angular.toJson(e)}function m(t){function r(){var n=t.response(e
  ,u,a,l);h.$$respHeaders=n[2],f(n[0],n[1],h.getAllResponseHeaders())}function i(){for(var e=0,t=s.length
  ;e<t;e++)if(s[e]===r){s.splice(e,1),f(-1,undefined,"");break}}return!n&&c&&c.then&&c.then(i),r}var h=new 
  MockXhr,p=i[0],d=!1;if(p&&p.match(e,u)){if(!p.matchData(a))throw Error("Expected "+p+" with different data\n"+"EXPECTED: "+
  v(p.data)+"\nGOT:      "+a);if(!p.matchHeaders(l))throw Error("Expected "+p+" with different headers\n"+"EXPECTED: "+
  v(p.headers)+"\nGOT:      "+v(l));i.shift();if(p.response){s.push(m(p));return}d=!0}var g=-1,y;while(
  y=r[++g])if(y.match(e,u,a,l||{})){if(y.response)(n?n.defer:o)(m(y));else{if(!y.passThrough)throw Error
  ("No response defined !");t(e,u,a,f,l,c)}return}throw d?Error("No response defined !"):Error("Unexpected request: "+
  e+" "+u+"\n"+(p?"Expected "+p:"No more request expected"))}function f(e){angular.forEach(["GET","DELETE"
  ,"JSONP"],function(t){a[e+t]=function(n,r){return a[e](t,n,undefined,r)}}),angular.forEach(["PUT","POST"
  ,"PATCH"],function(t){a[e+t]=function(n,r,i){return a[e](t,n,r,i)}})}var r=[],i=[],s=[],o=angular.bind
  (s,s.push);return a.when=function(e,t,i,s){var o=new MockHttpExpectation(e,t,i,s),a={respond:function(
  e,t,n){o.response=u(e,t,n)}};return n&&(a.passThrough=function(){o.passThrough=!0}),r.push(o),a},f("when"
  ),a.expect=function(e,t,n,r){var s=new MockHttpExpectation(e,t,n,r);return i.push(s),{respond:function(
  e,t,n){s.response=u(e,t,n)}}},f("expect"),a.flush=function(t){e.$digest();if(!s.length)throw Error("No pending request to flush !"
  );if(angular.isDefined(t))while(t--){if(!s.length)throw Error("No more pending request to flush !");s
  .shift()()}else while(s.length)s.shift()();a.verifyNoOutstandingExpectation()},a.verifyNoOutstandingExpectation=
  function(){e.$digest();if(i.length)throw Error("Unsatisfied requests: "+i.join(", "))},a.verifyNoOutstandingRequest=
  function(){if(s.length)throw Error("Unflushed requests: "+s.length)},a.resetExpectations=function(){i
  .length=0,s.length=0},a}function MockHttpExpectation(e,t,n,r){this.data=n,this.headers=r,this.match=function(
  t,n,r,i){return e!=t?!1:this.matchUrl(n)?angular.isDefined(r)&&!this.matchData(r)?!1:angular.isDefined
  (i)&&!this.matchHeaders(i)?!1:!0:!1},this.matchUrl=function(e){return t?angular.isFunction(t.test)?t.
  test(e):t==e:!0},this.matchHeaders=function(e){return angular.isUndefined(r)?!0:angular.isFunction(r)?
  r(e):angular.equals(r,e)},this.matchData=function(e){return angular.isUndefined(n)?!0:n&&angular.isFunction
  (n.test)?n.test(e):n&&!angular.isString(n)?angular.toJson(n)==e:n==e},this.toString=function(){return e+" "+
  t}}function MockXhr(){MockXhr.$$lastInstance=this,this.open=function(e,t,n){this.$$method=e,this.$$url=
  t,this.$$async=n,this.$$reqHeaders={},this.$$respHeaders={}},this.send=function(e){this.$$data=e},this
  .setRequestHeader=function(e,t){this.$$reqHeaders[e]=t},this.getResponseHeader=function(e){var t=this
  .$$respHeaders[e];return t?t:(e=angular.lowercase(e),t=this.$$respHeaders[e],t?t:(t=undefined,angular
  .forEach(this.$$respHeaders,function(n,r){!t&&angular.lowercase(r)==e&&(t=n)}),t))},this.getAllResponseHeaders=
  function(){var e=[];return angular.forEach(this.$$respHeaders,function(t,n){e.push(n+": "+t)}),e.join
  ("\n")},this.abort=angular.noop}angular.mock={},angular.mock.$BrowserProvider=function(){this.$get=function(
  ){return new angular.mock.$Browser}},angular.mock.$Browser=function(){var e=this;this.isMock=!0,e.$$url="http://server/"
  ,e.$$lastUrl=e.$$url,e.pollFns=[],e.$$completeOutstandingRequest=angular.noop,e.$$incOutstandingRequestCount=
  angular.noop,e.onUrlChange=function(t){return e.pollFns.push(function(){e.$$lastUrl!=e.$$url&&(e.$$lastUrl=
  e.$$url,t(e.$$url))}),t},e.cookieHash={},e.lastCookieHash={},e.deferredFns=[],e.deferredNextId=0,e.defer=
  function(t,n){return n=n||0,e.deferredFns.push({time:e.defer.now+n,fn:t,id:e.deferredNextId}),e.deferredFns
  .sort(function(e,t){return e.time-t.time}),e.deferredNextId++},e.defer.now=0,e.defer.cancel=function(
  t){var n;return angular.forEach(e.deferredFns,function(e,r){e.id===t&&(n=r)}),n!==undefined?(e.deferredFns
  .splice(n,1),!0):!1},e.defer.flush=function(t){if(angular.isDefined(t))e.defer.now+=t;else{if(!e.deferredFns
  .length)throw Error("No deferred tasks to be flushed");e.defer.now=e.deferredFns[e.deferredFns.length-1
  ].time}while(e.deferredFns.length&&e.deferredFns[0].time<=e.defer.now)e.deferredFns.shift().fn()},e.$$baseHref=""
  ,e.baseHref=function(){return this.$$baseHref}},angular.mock.$Browser.prototype={poll:function(){angular
  .forEach(this.pollFns,function(e){e()})},addPollFn:function(e){return this.pollFns.push(e),e},url:function(
  e,t){return e?(this.$$url=e,this):this.$$url},cookies:function(e,t){if(!e)return angular.equals(this.
  cookieHash,this.lastCookieHash)||(this.lastCookieHash=angular.copy(this.cookieHash),this.cookieHash=angular
  .copy(this.cookieHash)),this.cookieHash;t==undefined?delete this.cookieHash[e]:angular.isString(t)&&t
  .length<=4096&&(this.cookieHash[e]=t)},notifyWhenNoOutstandingRequests:function(e){e()}},angular.mock
  .$ExceptionHandlerProvider=function(){var e;this.mode=function(t){switch(t){case"rethrow":e=function(
  e){throw e};break;case"log":var n=[];e=function(e){arguments.length==1?n.push(e):n.push([].slice.call
  (arguments,0))},e.errors=n;break;default:throw Error("Unknown mode '"+t+"', only 'log'/'rethrow' modes are allowed!"
  )}},this.$get=function(){return e},this.mode("rethrow")},angular.mock.$LogProvider=function(){function e
  (e,t,n){return e.concat(Array.prototype.slice.call(t,n))}this.$get=function(){var t={log:function(){t
  .log.logs.push(e([],arguments,0))},warn:function(){t.warn.logs.push(e([],arguments,0))},info:function(
  ){t.info.logs.push(e([],arguments,0))},error:function(){t.error.logs.push(e([],arguments,0))}};return t
  .reset=function(){t.log.logs=[],t.warn.logs=[],t.info.logs=[],t.error.logs=[]},t.assertEmpty=function(
  ){var e=[];angular.forEach(["error","warn","info","log"],function(n){angular.forEach(t[n].logs,function(
  t){angular.forEach(t,function(t){e.push("MOCK $log ("+n+"): "+String(t)+"\n"+(t.stack||""))})})});if(
  e.length)throw e.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or an expected log message was not checked and removed:"
  ),e.push(""),new Error(e.join("\n---------\n"))},t.reset(),t}},function(){function t(t){var r;if(r=t.
  match(e)){var i=new Date(0),s=0,o=0;return r[9]&&(s=n(r[9]+r[10]),o=n(r[9]+r[11])),i.setUTCFullYear(n
  (r[1]),n(r[2])-1,n(r[3])),i.setUTCHours(n(r[4]||0)-s,n(r[5]||0)-o,n(r[6]||0),n(r[7]||0)),i}return t}function n
  (e){return parseInt(e,10)}function r(e,t,n){var r="";e<0&&(r="-",e=-e),e=""+e;while(e.length<t)e="0"+
  e;return n&&(e=e.substr(e.length-t)),r+e}var e=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/
  ;angular.mock.TzDate=function(e,n){var i=new Date(0);if(angular.isString(n)){var s=n;i.origDate=t(n),
  n=i.origDate.getTime();if(isNaN(n))throw{name:"Illegal Argument",message:"Arg '"+s+"' passed into TzDate constructor is not a valid date string"
  }}else i.origDate=new Date(n);var o=(new Date(n)).getTimezoneOffset();i.offsetDiff=o*60*1e3-e*1e3*60*60
  ,i.date=new Date(n+i.offsetDiff),i.getTime=function(){return i.date.getTime()-i.offsetDiff},i.toLocaleDateString=
  function(){return i.date.toLocaleDateString()},i.getFullYear=function(){return i.date.getFullYear()},
  i.getMonth=function(){return i.date.getMonth()},i.getDate=function(){return i.date.getDate()},i.getHours=
  function(){return i.date.getHours()},i.getMinutes=function(){return i.date.getMinutes()},i.getSeconds=
  function(){return i.date.getSeconds()},i.getMilliseconds=function(){return i.date.getMilliseconds()},
  i.getTimezoneOffset=function(){return e*60},i.getUTCFullYear=function(){return i.origDate.getUTCFullYear
  ()},i.getUTCMonth=function(){return i.origDate.getUTCMonth()},i.getUTCDate=function(){return i.origDate
  .getUTCDate()},i.getUTCHours=function(){return i.origDate.getUTCHours()},i.getUTCMinutes=function(){return i
  .origDate.getUTCMinutes()},i.getUTCSeconds=function(){return i.origDate.getUTCSeconds()},i.getUTCMilliseconds=
  function(){return i.origDate.getUTCMilliseconds()},i.getDay=function(){return i.date.getDay()},i.toISOString&&
  (i.toISOString=function(){return r(i.origDate.getUTCFullYear(),4)+"-"+r(i.origDate.getUTCMonth()+1,2)+"-"+
  r(i.origDate.getUTCDate(),2)+"T"+r(i.origDate.getUTCHours(),2)+":"+r(i.origDate.getUTCMinutes(),2)+":"+
  r(i.origDate.getUTCSeconds(),2)+"."+r(i.origDate.getUTCMilliseconds(),3)+"Z"});var u=["getUTCDay","getYear"
  ,"setDate","setFullYear","setHours","setMilliseconds","setMinutes","setMonth","setSeconds","setTime","setUTCDate"
  ,"setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes","setUTCMonth","setUTCSeconds","setYear"
  ,"toDateString","toGMTString","toJSON","toLocaleFormat","toLocaleString","toLocaleTimeString","toSource"
  ,"toString","toTimeString","toUTCString","valueOf"];return angular.forEach(u,function(e){i[e]=function(
  ){throw Error("Method '"+e+"' is not implemented in the TzDate mock")}}),i},angular.mock.TzDate.prototype=
  Date.prototype}(),angular.mock.createMockWindow=function(){var e={},t=[];return e.document=window.document
  ,e.getComputedStyle=angular.bind(window,window.getComputedStyle),e.scrollTo=angular.bind(window,window
  .scrollTo),e.navigator=window.navigator,e.setTimeout=function(e,n){t.push({fn:e,delay:n})},e.setTimeout
  .queue=t,e.setTimeout.expect=function(e){if(t.length>0)return{process:function(){var n=t.shift();expect
  (n.delay).toEqual(e),n.fn()}};expect("SetTimoutQueue empty. Expecting delay of ").toEqual(e)},e},angular
  .mock.dump=function(e){function t(e){var r;return angular.isElement(e)?(e=angular.element(e),r=angular
  .element("<div></div>"),angular.forEach(e,function(e){r.append(angular.element(e).clone())}),r=r.html
  ()):angular.isArray(e)?(r=[],angular.forEach(e,function(e){r.push(t(e))}),r="[ "+r.join(", ")+" ]"):angular
  .isObject(e)?angular.isFunction(e.$eval)&&angular.isFunction(e.$apply)?r=n(e):e instanceof Error?r=e.
  stack||""+e.name+": "+e.message:r=angular.toJson(e,!0):r=String(e),r}function n(e,t){t=t||"  ";var r=
  [t+"Scope("+e.$id+"): {"];for(var i in e)e.hasOwnProperty(i)&&!i.match(/^(\$|this)/)&&r.push("  "+i+": "+
  angular.toJson(e[i]));var s=e.$$childHead;while(s)r.push(n(s,t+"  ")),s=s.$$nextSibling;return r.push
  ("}"),r.join("\n"+t)}return t(e)},angular.mock.$HttpBackendProvider=function(){this.$get=["$rootScope"
  ,createHttpBackendMock]},angular.mock.$TimeoutDecorator=function(e,t){function n(e){var t=[];return angular
  .forEach(e,function(e){t.push("{id: "+e.id+", "+"time: "+e.time+"}")}),t.join(", ")}return e.flush=function(
  ){t.defer.flush()},e.verifyNoPendingTasks=function(){if(t.deferredFns.length)throw Error("Deferred tasks to flush ("+
  t.deferredFns.length+"): "+n(t.deferredFns))},e},angular.mock.$RootElementProvider=function(){this.$get=
  function(){return angular.element("<div ng-app></div>")}},angular.module("ngMock",["ng"]).provider({$browser
  :angular.mock.$BrowserProvider,$exceptionHandler:angular.mock.$ExceptionHandlerProvider,$log:angular.
  mock.$LogProvider,$httpBackend:angular.mock.$HttpBackendProvider,$rootElement:angular.mock.$RootElementProvider
  }).config(function(e){e.decorator("$timeout",angular.mock.$TimeoutDecorator)}),angular.module("ngMockE2E"
  ,["ng"]).config(function(e){e.decorator("$httpBackend",angular.mock.e2e.$httpBackendDecorator)}),angular
  .mock.e2e={},angular.mock.e2e.$httpBackendDecorator=["$rootScope","$delegate","$browser",createHttpBackendMock
  ],angular.mock.clearDataCache=function(){var e,t=angular.element.cache;for(e in t)if(t.hasOwnProperty
  (e)){var n=t[e].handle;n&&angular.element(n.elem).unbind(),delete t[e]}},window.jstestdriver&&function(
  e){e.dump=function(){var t=[];angular.forEach(arguments,function(e){t.push(angular.mock.dump(e))}),jstestdriver
  .console.log.apply(jstestdriver.console,t),e.console&&e.console.log.apply(e.console,t)}}(window),(window
  .jasmine||window.mocha)&&function(e){function n(){return t&&(e.mocha||t.queue.running)}var t=null;beforeEach
  (function(){t=this}),afterEach(function(){var e=t.$injector;t.$injector=null,t.$modules=null,t=null,e&&
  (e.get("$rootElement").unbind(),e.get("$browser").pollFns.length=0),angular.mock.clearDataCache(),angular
  .forEach(angular.element.fragments,function(e,t){delete angular.element.fragments[t]}),MockXhr.$$lastInstance=
  null,angular.forEach(angular.callbacks,function(e,t){delete angular.callbacks[t]}),angular.callbacks.
  counter=0}),e.module=angular.mock.module=function(){function r(){if(t.$injector)throw Error("Injector already created, can not register a module!"
  );var n=t.$modules||(t.$modules=[]);angular.forEach(e,function(e){n.push(e)})}var e=Array.prototype.slice
  .call(arguments,0);return n()?r():r},e.inject=angular.mock.inject=function(){function i(){var n=t.$modules||
  [];n.unshift("ngMock"),n.unshift("ng");var i=t.$injector;i||(i=t.$injector=angular.injector(n));for(var s=0
  ,o=e.length;s<o;s++)try{i.invoke(e[s]||angular.noop,this)}catch(u){throw u.stack&&r&&(u.stack+="\n"+r
  .stack),u}finally{r=null}}var e=Array.prototype.slice.call(arguments,0),r=new Error("Declaration Location"
  );return n()?i():i}}(window);