Template:Heidelberg/angularplasmidmin/JS

! function(t, e, n) {

   "use strict";
   function r(t, e) {
       return e = e || Error,
           function() {
               var n, r, i = arguments[0],
                   a = "[" + (t ? t + ":" : "") + i + "] ",
                   o = arguments[1],
                   s = arguments;
               for (n = a + o.replace(/\{\d+\}/g, function(t) {
                       var e = +t.slice(1, -1);
                       return e + 2 < s.length ? de(s[e + 2]) : t
                   }), n = n + "\nhttp://errors.angularjs.org/1.3.13/" + (t ? t + "/" : "") + i, r = 2; r < arguments.length; r++) n = n + (2 == r ? "?" : "&") + "p" + (r - 2) + "=" + encodeURIComponent(de(arguments[r]));
               return new e(n)
           }
   }
   function i(t) {
       if (null == t || C(t)) return !1;
       var e = t.length;
       return t.nodeType === gi && e ? !0 : b(t) || ci(t) || 0 === e || "number" == typeof e && e > 0 && e - 1 in t
   }
   function a(t, e, n) {
       var r, o;
       if (t)
           if (k(t))
               for (r in t) "prototype" == r || "length" == r || "name" == r || t.hasOwnProperty && !t.hasOwnProperty(r) || e.call(n, t[r], r, t);
           else if (ci(t) || i(t)) {
           var s = "object" != typeof t;
           for (r = 0, o = t.length; o > r; r++)(s || r in t) && e.call(n, t[r], r, t)
       } else if (t.forEach && t.forEach !== a) t.forEach(e, n, t);
       else
           for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);
       return t
   }
   function o(t) {
       return Object.keys(t).sort()
   }
   function s(t, e, n) {
       for (var r = o(t), i = 0; i < r.length; i++) e.call(n, t[r[i]], r[i]);
       return r
   }
   function u(t) {
       return function(e, n) {
           t(n, e)
       }
   }
   function l() {
       return ++ui
   }
   function c(t, e) {
       e ? t.$$hashKey = e : delete t.$$hashKey
   }
   function f(t) {
       for (var e = t.$$hashKey, n = 1, r = arguments.length; r > n; n++) {
           var i = arguments[n];
           if (i)
               for (var a = Object.keys(i), o = 0, s = a.length; s > o; o++) {
                   var u = a[o];
                   t[u] = i[u]
               }
       }
       return c(t, e), t
   }
   function d(t) {
       return parseInt(t, 10)
   }
   function h(t, e) {
       return f(Object.create(t), e)
   }
   function p() {}
   function $(t) {
       return t
   }
   function m(t) {
       return function() {
           return t
       }
   }
   function g(t) {
       return "undefined" == typeof t
   }
   function v(t) {
       return "undefined" != typeof t
   }
   function y(t) {
       return null !== t && "object" == typeof t
   }
   function b(t) {
       return "string" == typeof t
   }
   function w(t) {
       return "number" == typeof t
   }
   function x(t) {
       return "[object Date]" === ai.call(t)
   }
   function k(t) {
       return "function" == typeof t
   }
   function S(t) {
       return "[object RegExp]" === ai.call(t)
   }
   function C(t) {
       return t && t.window === t
   }
   function A(t) {
       return t && t.$evalAsync && t.$watch
   }
   function O(t) {
       return "[object File]" === ai.call(t)
   }
   function E(t) {
       return "[object FormData]" === ai.call(t)
   }
   function j(t) {
       return "[object Blob]" === ai.call(t)
   }
   function N(t) {
       return "boolean" == typeof t
   }
   function T(t) {
       return t && k(t.then)
   }
   function M(t) {
       return !(!t || !(t.nodeName || t.prop && t.attr && t.find))
   }
   function P(t) {
       var e, n = {},
           r = t.split(",");
       for (e = 0; e < r.length; e++) n[r[e]] = !0;
       return n
   }
   function V(t) {
       return Wr(t.nodeName || t[0] && t[0].nodeName)
   }
   function q(t, e) {
       var n = t.indexOf(e);
       return n >= 0 && t.splice(n, 1), e
   }
   function D(t, e, n, r) {
       if (C(t) || A(t)) throw oi("cpws", "Can't copy! Making copies of Window or Scope instances is not supported.");
       if (e) {
           if (t === e) throw oi("cpi", "Can't copy! Source and destination are identical.");
           if (n = n || [], r = r || [], y(t)) {
               var i = n.indexOf(t);
               if (-1 !== i) return r[i];
               n.push(t), r.push(e)
           }
           var o;
           if (ci(t)) {
               e.length = 0;
               for (var s = 0; s < t.length; s++) o = D(t[s], null, n, r), y(t[s]) && (n.push(t[s]), r.push(o)), e.push(o)
           } else {
               var u = e.$$hashKey;
               ci(e) ? e.length = 0 : a(e, function(t, n) {
                   delete e[n]
               });
               for (var l in t) t.hasOwnProperty(l) && (o = D(t[l], null, n, r), y(t[l]) && (n.push(t[l]), r.push(o)), e[l] = o);
               c(e, u)
           }
       } else if (e = t, t)
           if (ci(t)) e = D(t, [], n, r);
           else if (x(t)) e = new Date(t.getTime());
       else if (S(t)) e = new RegExp(t.source, t.toString().match(/[^\/]*$/)[0]), e.lastIndex = t.lastIndex;
       else if (y(t)) {
           var f = Object.create(Object.getPrototypeOf(t));
           e = D(t, f, n, r)
       }
       return e
   }
   function R(t, e) {
       if (ci(t)) {
           e = e || [];
           for (var n = 0, r = t.length; r > n; n++) e[n] = t[n]
       } else if (y(t)) {
           e = e || {};
           for (var i in t)("$" !== i.charAt(0) || "$" !== i.charAt(1)) && (e[i] = t[i])
       }
       return e || t
   }
   function I(t, e) {
       if (t === e) return !0;
       if (null === t || null === e) return !1;
       if (t !== t && e !== e) return !0;
       var r, i, a, o = typeof t,
           s = typeof e;
       if (o == s && "object" == o) {
           if (!ci(t)) {
               if (x(t)) return x(e) ? I(t.getTime(), e.getTime()) : !1;
               if (S(t) && S(e)) return t.toString() == e.toString();
               if (A(t) || A(e) || C(t) || C(e) || ci(e)) return !1;
               a = {};
               for (i in t)
                   if ("$" !== i.charAt(0) && !k(t[i])) {
                       if (!I(t[i], e[i])) return !1;
                       a[i] = !0
                   }
               for (i in e)
                   if (!a.hasOwnProperty(i) && "$" !== i.charAt(0) && e[i] !== n && !k(e[i])) return !1;
               return !0
           }
           if (!ci(e)) return !1;
           if ((r = t.length) == e.length) {
               for (i = 0; r > i; i++)
                   if (!I(t[i], e[i])) return !1;
               return !0
           }
       }
       return !1
   }
   function _(t, e, n) {
       return t.concat(ni.call(e, n))
   }
   function U(t, e) {
       return ni.call(t, e || 0)
   }
   function L(t, e) {
       var n = arguments.length > 2 ? U(arguments, 2) : [];
       return !k(e) || e instanceof RegExp ? e : n.length ? function() {
           return arguments.length ? e.apply(t, _(n, arguments, 0)) : e.apply(t, n)
       } : function() {
           return arguments.length ? e.apply(t, arguments) : e.call(t)
       }
   }
   function F(t, r) {
       var i = r;
       return "string" == typeof t && "$" === t.charAt(0) && "$" === t.charAt(1) ? i = n : C(r) ? i = "$WINDOW" : r && e === r ? i = "$DOCUMENT" : A(r) && (i = "$SCOPE"), i
   }
   function H(t, e) {
       return "undefined" == typeof t ? n : (w(e) || (e = e ? 2 : null), JSON.stringify(t, F, e))
   }
   function B(t) {
       return b(t) ? JSON.parse(t) : t
   }
   function z(t) {
       t = Qr(t).clone();
       try {
           t.empty()
       } catch (e) {}
var n = Qr("
").append(t).html();
       try {
           return t[0].nodeType === vi ? Wr(n) : n.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function(t, e) {
               return "<" + Wr(e)
           })
       } catch (e) {
           return Wr(n)
       }
   }
   function G(t) {
       try {
           return decodeURIComponent(t)
       } catch (e) {}
   }
   function W(t) {
       var e, n, r = {};
       return a((t || "").split("&"), function(t) {
           if (t && (e = t.replace(/\+/g, "%20").split("="), n = G(e[0]), v(n))) {
               var i = v(e[1]) ? G(e[1]) : !0;
               Jr.call(r, n) ? ci(r[n]) ? r[n].push(i) : r[n] = [r[n], i] : r[n] = i
           }
       }), r
   }
   function J(t) {
       var e = [];
       return a(t, function(t, n) {
           ci(t) ? a(t, function(t) {
               e.push(Z(n, !0) + (t === !0 ? "" : "=" + Z(t, !0)))
           }) : e.push(Z(n, !0) + (t === !0 ? "" : "=" + Z(t, !0)))
       }), e.length ? e.join("&") : ""
   }
   function Y(t) {
       return Z(t, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
   }
   function Z(t, e) {
       return encodeURIComponent(t).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, e ? "%20" : "+")
   }
   function K(t, e) {
       var n, r, i = pi.length;
       for (t = Qr(t), r = 0; i > r; ++r)
           if (n = pi[r] + e, b(n = t.attr(n))) return n;
       return null
   }
   function X(t, e) {
       var n, r, i = {};
       a(pi, function(e) {
           var i = e + "app";
           !n && t.hasAttribute && t.hasAttribute(i) && (n = t, r = t.getAttribute(i))
       }), a(pi, function(e) {
           var i, a = e + "app";
           !n && (i = t.querySelector("[" + a.replace(":", "\\:") + "]")) && (n = i, r = i.getAttribute(a))
       }), n && (i.strictDi = null !== K(n, "strict-di"), e(n, r ? [r] : [], i))
   }
   function Q(n, r, i) {
       y(i) || (i = {});
       var o = {
           strictDi: !1
       };
       i = f(o, i);
       var s = function() {
               if (n = Qr(n), n.injector()) {
                   var t = n[0] === e ? "document" : z(n);
                   throw oi("btstrpd", "App Already Bootstrapped with this Element '{0}'", t.replace(/</, "<").replace(/>/, ">"))
               }
               r = r || [], r.unshift(["$provide", function(t) {
                   t.value("$rootElement", n)
               }]), i.debugInfoEnabled && r.push(["$compileProvider", function(t) {
                   t.debugInfoEnabled(!0)
               }]), r.unshift("ng");
               var a = Be(r, i.strictDi);
               return a.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function(t, e, n, r) {
                   t.$apply(function() {
                       e.data("$injector", r), n(e)(t)
                   })
               }]), a
           },
           u = /^NG_ENABLE_DEBUG_INFO!/,
           l = /^NG_DEFER_BOOTSTRAP!/;
       return t && u.test(t.name) && (i.debugInfoEnabled = !0, t.name = t.name.replace(u, "")), t && !l.test(t.name) ? s() : (t.name = t.name.replace(l, ""), si.resumeBootstrap = function(t) {
           return a(t, function(t) {
               r.push(t)
           }), s()
       }, k(si.resumeDeferredBootstrap) && si.resumeDeferredBootstrap(), void 0)
   }
   function te() {
       t.name = "NG_ENABLE_DEBUG_INFO!" + t.name, t.location.reload()
   }
   function ee(t) {
       var e = si.element(t).injector();
       if (!e) throw oi("test", "no injector found for element argument to getTestability");
       return e.get("$$testability")
   }
   function ne(t, e) {
       return e = e || "_", t.replace($i, function(t, n) {
           return (n ? e : "") + t.toLowerCase()
       })
   }
   function re() {
       var e;
       mi || (ti = t.jQuery, ti && ti.fn.on ? (Qr = ti, f(ti.fn, {
           scope: Di.scope,
           isolateScope: Di.isolateScope,
           controller: Di.controller,
           injector: Di.injector,
           inheritedData: Di.inheritedData
       }), e = ti.cleanData, ti.cleanData = function(t) {
           var n;
           if (li) li = !1;
           else
               for (var r, i = 0; null != (r = t[i]); i++) n = ti._data(r, "events"), n && n.$destroy && ti(r).triggerHandler("$destroy");
           e(t)
       }) : Qr = be, si.element = Qr, mi = !0)
   }
   function ie(t, e, n) {
       if (!t) throw oi("areq", "Argument '{0}' is {1}", e || "?", n || "required");
       return t
   }
   function ae(t, e, n) {
       return n && ci(t) && (t = t[t.length - 1]), ie(k(t), e, "not a function, got " + (t && "object" == typeof t ? t.constructor.name || "Object" : typeof t)), t
   }
   function oe(t, e) {
       if ("hasOwnProperty" === t) throw oi("badname", "hasOwnProperty is not a valid {0} name", e)
   }
   function se(t, e, n) {
       if (!e) return t;
       for (var r, i = e.split("."), a = t, o = i.length, s = 0; o > s; s++) r = i[s], t && (t = (a = t)[r]);
       return !n && k(t) ? L(a, t) : t
   }
   function ue(t) {
       var e = t[0],
           n = t[t.length - 1],
           r = [e];
       do {
           if (e = e.nextSibling, !e) break;
           r.push(e)
       } while (e !== n);
       return Qr(r)
   }
   function le() {
       return Object.create(null)
   }
   function ce(t) {
       function e(t, e, n) {
           return t[e] || (t[e] = n())
       }
       var n = r("$injector"),
           i = r("ng"),
           a = e(t, "angular", Object);
       return a.$$minErr = a.$$minErr || r, e(a, "module", function() {
           var t = {};
           return function(r, a, o) {
               var s = function(t, e) {
                   if ("hasOwnProperty" === t) throw i("badname", "hasOwnProperty is not a valid {0} name", e)
               };
               return s(r, "module"), a && t.hasOwnProperty(r) && (t[r] = null), e(t, r, function() {
                   function t(t, n, r, i) {
                       return i || (i = e),
                           function() {
                               return i[r || "push"]([t, n, arguments]), l
                           }
                   }
                   if (!a) throw n("nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", r);
                   var e = [],
                       i = [],
                       s = [],
                       u = t("$injector", "invoke", "push", i),
                       l = {
                           _invokeQueue: e,
                           _configBlocks: i,
                           _runBlocks: s,
                           requires: a,
                           name: r,
                           provider: t("$provide", "provider"),
                           factory: t("$provide", "factory"),
                           service: t("$provide", "service"),
                           value: t("$provide", "value"),
                           constant: t("$provide", "constant", "unshift"),
                           animation: t("$animateProvider", "register"),
                           filter: t("$filterProvider", "register"),
                           controller: t("$controllerProvider", "register"),
                           directive: t("$compileProvider", "directive"),
                           config: u,
                           run: function(t) {
                               return s.push(t), this
                           }
                       };
                   return o && u(o), l
               })
           }
       })
   }
   function fe(t) {
       var e = [];
       return JSON.stringify(t, function(t, n) {
           if (n = F(t, n), y(n)) {
               if (e.indexOf(n) >= 0) return "<<already seen>>";
               e.push(n)
           }
           return n
       })
   }
   function de(t) {
       return "function" == typeof t ? t.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof t ? "undefined" : "string" != typeof t ? fe(t) : t
   }
   function he(e) {
       f(e, {
           bootstrap: Q,
           copy: D,
           extend: f,
           equals: I,
           element: Qr,
           forEach: a,
           injector: Be,
           noop: p,
           bind: L,
           toJson: H,
           fromJson: B,
           identity: $,
           isUndefined: g,
           isDefined: v,
           isString: b,
           isFunction: k,
           isObject: y,
           isNumber: w,
           isElement: M,
           isArray: ci,
           version: xi,
           isDate: x,
           lowercase: Wr,
           uppercase: Yr,
           callbacks: {
               counter: 0
           },
           getTestability: ee,
           $$minErr: r,
           $$csp: hi,
           reloadWithDebugInfo: te
       }), ei = ce(t);
       try {
           ei("ngLocale")
       } catch (n) {
           ei("ngLocale", []).provider("$locale", gn)
       }
       ei("ng", ["ngLocale"], ["$provide", function(t) {
           t.provider({
               $$sanitizeUri: Yn
           }), t.provider("$compile", Ke).directive({
               a: Ea,
               input: za,
               textarea: za,
               form: Pa,
               script: qo,
               select: Io,
               style: Uo,
               option: _o,
               ngBind: Ja,
               ngBindHtml: Za,
               ngBindTemplate: Ya,
               ngClass: Xa,
               ngClassEven: to,
               ngClassOdd: Qa,
               ngCloak: eo,
               ngController: no,
               ngForm: Va,
               ngHide: jo,
               ngIf: ao,
               ngInclude: oo,
               ngInit: uo,
               ngNonBindable: ko,
               ngPluralize: So,
               ngRepeat: Co,
               ngShow: Eo,
               ngStyle: No,
               ngSwitch: To,
               ngSwitchWhen: Mo,
               ngSwitchDefault: Po,
               ngOptions: Ro,
               ngTransclude: Vo,
               ngModel: bo,
               ngList: lo,
               ngChange: Ka,
               pattern: Fo,
               ngPattern: Fo,
               required: Lo,
               ngRequired: Lo,
               minlength: Bo,
               ngMinlength: Bo,
               maxlength: Ho,
               ngMaxlength: Ho,
               ngValue: Wa,
               ngModelOptions: xo
           }).directive({
               ngInclude: so
           }).directive(ja).directive(ro), t.provider({
               $anchorScroll: ze,
               $animate: Gi,
               $browser: Je,
               $cacheFactory: Ye,
               $controller: en,
               $document: nn,
               $exceptionHandler: rn,
               $filter: sr,
               $interpolate: $n,
               $interval: mn,
               $http: fn,
               $httpBackend: hn,
               $location: Tn,
               $log: Mn,
               $parse: Hn,
               $rootScope: Jn,
               $q: Bn,
               $$q: zn,
               $sce: Qn,
               $sceDelegate: Xn,
               $sniffer: tr,
               $templateCache: Ze,
               $templateRequest: er,
               $$testability: nr,
               $timeout: rr,
               $window: or,
               $$rAF: Wn,
               $$asyncCallback: Ge,
               $$jqLite: _e
           })
       }])
   }
   function pe() {
       return ++Si
   }
   function $e(t) {
       return t.replace(Oi, function(t, e, n, r) {
           return r ? n.toUpperCase() : n
       }).replace(Ei, "Moz$1")
   }
   function me(t) {
       return !Mi.test(t)
   }
   function ge(t) {
       var e = t.nodeType;
       return e === gi || !e || e === bi
   }
   function ve(t, e) {
       var n, r, i, o, s = e.createDocumentFragment(),
           u = [];
       if (me(t)) u.push(e.createTextNode(t));
       else {
           for (n = n || s.appendChild(e.createElement("div")), r = (Pi.exec(t) || ["", ""])[1].toLowerCase(), i = qi[r] || qi._default, n.innerHTML = i[1] + t.replace(Vi, "<$1></$2>") + i[2], o = i[0]; o--;) n = n.lastChild;
           u = _(u, n.childNodes), n = s.firstChild, n.textContent = ""
       }
       return s.textContent = "", s.innerHTML = "", a(u, function(t) {
           s.appendChild(t)
       }), s
   }
   function ye(t, n) {
       n = n || e;
       var r;
       return (r = Ti.exec(t)) ? [n.createElement(r[1])] : (r = ve(t, n)) ? r.childNodes : []
   }
   function be(t) {
       if (t instanceof be) return t;
       var e;
       if (b(t) && (t = fi(t), e = !0), !(this instanceof be)) {
           if (e && "<" != t.charAt(0)) throw Ni("nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");
           return new be(t)
       }
       e ? Ne(this, ye(t)) : Ne(this, t)
   }
   function we(t) {
       return t.cloneNode(!0)
   }
   function xe(t, e) {
       if (e || Se(t), t.querySelectorAll)
           for (var n = t.querySelectorAll("*"), r = 0, i = n.length; i > r; r++) Se(n[r])
   }
   function ke(t, e, n, r) {
       if (v(r)) throw Ni("offargs", "jqLite#off() does not support the `selector` argument");
       var i = Ce(t),
           o = i && i.events,
           s = i && i.handle;
       if (s)
           if (e) a(e.split(" "), function(e) {
               if (v(n)) {
                   var r = o[e];
                   if (q(r || [], n), r && r.length > 0) return
               }
               Ai(t, e, s), delete o[e]
           });
           else
               for (e in o) "$destroy" !== e && Ai(t, e, s), delete o[e]
   }
   function Se(t, e) {
       var r = t.ng339,
           i = r && ki[r];
       if (i) {
           if (e) return delete i.data[e], void 0;
           i.handle && (i.events.$destroy && i.handle({}, "$destroy"), ke(t)), delete ki[r], t.ng339 = n
       }
   }
   function Ce(t, e) {
       var r = t.ng339,
           i = r && ki[r];
       return e && !i && (t.ng339 = r = pe(), i = ki[r] = {
           events: {},
           data: {},
           handle: n
       }), i
   }
   function Ae(t, e, n) {
       if (ge(t)) {
           var r = v(n),
               i = !r && e && !y(e),
               a = !e,
               o = Ce(t, !i),
               s = o && o.data;
           if (r) s[e] = n;
           else {
               if (a) return s;
               if (i) return s && s[e];
               f(s, e)
           }
       }
   }
   function Oe(t, e) {
       return t.getAttribute ? (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + e + " ") > -1 : !1
   }
   function Ee(t, e) {
       e && t.setAttribute && a(e.split(" "), function(e) {
           t.setAttribute("class", fi((" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + fi(e) + " ", " ")))
       })
   }
   function je(t, e) {
       if (e && t.setAttribute) {
           var n = (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
           a(e.split(" "), function(t) {
               t = fi(t), -1 === n.indexOf(" " + t + " ") && (n += t + " ")
           }), t.setAttribute("class", fi(n))
       }
   }
   function Ne(t, e) {
       if (e)
           if (e.nodeType) t[t.length++] = e;
           else {
               var n = e.length;
               if ("number" == typeof n && e.window !== e) {
                   if (n)
                       for (var r = 0; n > r; r++) t[t.length++] = e[r]
               } else t[t.length++] = e
           }
   }
   function Te(t, e) {
       return Me(t, "$" + (e || "ngController") + "Controller")
   }
   function Me(t, e, r) {
       t.nodeType == bi && (t = t.documentElement);
       for (var i = ci(e) ? e : [e]; t;) {
           for (var a = 0, o = i.length; o > a; a++)
               if ((r = Qr.data(t, i[a])) !== n) return r;
           t = t.parentNode || t.nodeType === wi && t.host
       }
   }
   function Pe(t) {
       for (xe(t, !0); t.firstChild;) t.removeChild(t.firstChild)
   }
   function Ve(t, e) {
       e || xe(t);
       var n = t.parentNode;
       n && n.removeChild(t)
   }
   function qe(e, n) {
       n = n || t, "complete" === n.document.readyState ? n.setTimeout(e) : Qr(n).on("load", e)
   }
   function De(t, e) {
       var n = Ri[e.toLowerCase()];
       return n && Ii[V(t)] && n
   }
   function Re(t, e) {
       var n = t.nodeName;
       return ("INPUT" === n || "TEXTAREA" === n) && _i[e]
   }
   function Ie(t, e) {
       var n = function(n, r) {
           n.isDefaultPrevented = function() {
               return n.defaultPrevented
           };
           var i = e[r || n.type],
               a = i ? i.length : 0;
           if (a) {
               if (g(n.immediatePropagationStopped)) {
                   var o = n.stopImmediatePropagation;
                   n.stopImmediatePropagation = function() {
                       n.immediatePropagationStopped = !0, n.stopPropagation && n.stopPropagation(), o && o.call(n)
                   }
               }
               n.isImmediatePropagationStopped = function() {
                   return n.immediatePropagationStopped === !0
               }, a > 1 && (i = R(i));
               for (var s = 0; a > s; s++) n.isImmediatePropagationStopped() || i[s].call(t, n)
           }
       };
       return n.elem = t, n
   }
   function _e() {
       this.$get = function() {
           return f(be, {
               hasClass: function(t, e) {
                   return t.attr && (t = t[0]), Oe(t, e)
               },
               addClass: function(t, e) {
                   return t.attr && (t = t[0]), je(t, e)
               },
               removeClass: function(t, e) {
                   return t.attr && (t = t[0]), Ee(t, e)
               }
           })
       }
   }
   function Ue(t, e) {
       var n = t && t.$$hashKey;
       if (n) return "function" == typeof n && (n = t.$$hashKey()), n;
       var r = typeof t;
       return n = "function" == r || "object" == r && null !== t ? t.$$hashKey = r + ":" + (e || l)() : r + ":" + t
   }
   function Le(t, e) {
       if (e) {
           var n = 0;
           this.nextUid = function() {
               return ++n
           }
       }
       a(t, this.put, this)
   }
   function Fe(t) {
       var e = t.toString().replace(Hi, ""),
           n = e.match(Ui);
       return n ? "function(" + (n[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn"
   }
   function He(t, e, n) {
       var r, i, o, s;
       if ("function" == typeof t) {
           if (!(r = t.$inject)) {
               if (r = [], t.length) {
                   if (e) throw b(n) && n || (n = t.name || Fe(t)), Bi("strictdi", "{0} is not using explicit annotation and cannot be invoked in strict mode", n);
                   i = t.toString().replace(Hi, ""), o = i.match(Ui), a(o[1].split(Li), function(t) {
                       t.replace(Fi, function(t, e, n) {
                           r.push(n)
                       })
                   })
               }
               t.$inject = r
           }
       } else ci(t) ? (s = t.length - 1, ae(t[s], "fn"), r = t.slice(0, s)) : ae(t, "fn", !0);
       return r
   }
   function Be(t, e) {
       function r(t) {
           return function(e, n) {
               return y(e) ? (a(e, u(t)), void 0) : t(e, n)
           }
       }
       function i(t, e) {
           if (oe(t, "service"), (k(e) || ci(e)) && (e = A.instantiate(e)), !e.$get) throw Bi("pget", "Provider '{0}' must define $get factory method.", t);
           return C[t + w] = e
       }
       function o(t, e) {
           return function() {
               var n = E.invoke(e, this);
               if (g(n)) throw Bi("undef", "Provider '{0}' must return a value from $get factory method.", t);
               return n
           }
       }
       function s(t, e, n) {
           return i(t, {
               $get: n !== !1 ? o(t, e) : e
           })
       }
       function l(t, e) {
           return s(t, ["$injector", function(t) {
               return t.instantiate(e)
           }])
       }
       function c(t, e) {
           return s(t, m(e), !1)
       }
       function f(t, e) {
           oe(t, "constant"), C[t] = e, O[t] = e
       }
       function d(t, e) {
           var n = A.get(t + w),
               r = n.$get;
           n.$get = function() {
               var t = E.invoke(r, n);
               return E.invoke(e, null, {
                   $delegate: t
               })
           }
       }
       function h(t) {
           var e, n = [];
           return a(t, function(t) {
               function r(t) {
                   var e, n;
                   for (e = 0, n = t.length; n > e; e++) {
                       var r = t[e],
                           i = A.get(r[0]);
                       i[r[1]].apply(i, r[2])
                   }
               }
               if (!S.get(t)) {
                   S.put(t, !0);
                   try {
                       b(t) ? (e = ei(t), n = n.concat(h(e.requires)).concat(e._runBlocks), r(e._invokeQueue), r(e._configBlocks)) : k(t) ? n.push(A.invoke(t)) : ci(t) ? n.push(A.invoke(t)) : ae(t, "module")
                   } catch (i) {
                       throw ci(t) && (t = t[t.length - 1]), i.message && i.stack && -1 == i.stack.indexOf(i.message) && (i = i.message + "\n" + i.stack), Bi("modulerr", "Failed to instantiate module {0} due to:\n{1}", t, i.stack || i.message || i)
                   }
               }
           }), n
       }
       function $(t, n) {
           function r(e, r) {
               if (t.hasOwnProperty(e)) {
                   if (t[e] === v) throw Bi("cdep", "Circular dependency found: {0}", e + " <- " + x.join(" <- "));
                   return t[e]
               }
               try {
                   return x.unshift(e), t[e] = v, t[e] = n(e, r)
               } catch (i) {
                   throw t[e] === v && delete t[e], i
               } finally {
                   x.shift()
               }
           }
           function i(t, n, i, a) {
               "string" == typeof i && (a = i, i = null);
               var o, s, u, l = [],
                   c = Be.$$annotate(t, e, a);
               for (s = 0, o = c.length; o > s; s++) {
                   if (u = c[s], "string" != typeof u) throw Bi("itkn", "Incorrect injection token! Expected service name as string, got {0}", u);
                   l.push(i && i.hasOwnProperty(u) ? i[u] : r(u, a))
               }
               return ci(t) && (t = t[o]), t.apply(n, l)
           }
           function a(t, e, n) {
               var r = Object.create((ci(t) ? t[t.length - 1] : t).prototype || null),
                   a = i(t, r, e, n);
               return y(a) || k(a) ? a : r
           }
           return {
               invoke: i,
               instantiate: a,
               get: r,
               annotate: Be.$$annotate,
               has: function(e) {
                   return C.hasOwnProperty(e + w) || t.hasOwnProperty(e)
               }
           }
       }
       e = e === !0;
       var v = {},
           w = "Provider",
           x = [],
           S = new Le([], !0),
           C = {
               $provide: {
                   provider: r(i),
                   factory: r(s),
                   service: r(l),
                   value: r(c),
                   constant: r(f),
                   decorator: d
               }
           },
           A = C.$injector = $(C, function(t, e) {
               throw si.isString(e) && x.push(e), Bi("unpr", "Unknown provider: {0}", x.join(" <- "))
           }),
           O = {},
           E = O.$injector = $(O, function(t, e) {
               var r = A.get(t + w, e);
               return E.invoke(r.$get, r, n, t)
           });
       return a(h(t), function(t) {
           E.invoke(t || p)
       }), E
   }
   function ze() {
       var t = !0;
       this.disableAutoScrolling = function() {
           t = !1
       }, this.$get = ["$window", "$location", "$rootScope", function(e, n, r) {
           function i(t) {
               var e = null;
               return Array.prototype.some.call(t, function(t) {
                   return "a" === V(t) ? (e = t, !0) : void 0
               }), e
           }
           function a() {
               var t = s.yOffset;
               if (k(t)) t = t();
               else if (M(t)) {
                   var n = t[0],
                       r = e.getComputedStyle(n);
                   t = "fixed" !== r.position ? 0 : n.getBoundingClientRect().bottom
               } else w(t) || (t = 0);
               return t
           }
           function o(t) {
               if (t) {
                   t.scrollIntoView();
                   var n = a();
                   if (n) {
                       var r = t.getBoundingClientRect().top;
                       e.scrollBy(0, r - n)
                   }
               } else e.scrollTo(0, 0)
           }
           function s() {
               var t, e = n.hash();
               e ? (t = u.getElementById(e)) ? o(t) : (t = i(u.getElementsByName(e))) ? o(t) : "top" === e && o(null) : o(null)
           }
           var u = e.document;
           return t && r.$watch(function() {
               return n.hash()
           }, function(t, e) {
               (t !== e || "" !== t) && qe(function() {
                   r.$evalAsync(s)
               })
           }), s
       }]
   }
   function Ge() {
       this.$get = ["$$rAF", "$timeout", function(t, e) {
           return t.supported ? function(e) {
               return t(e)
           } : function(t) {
               return e(t, 0, !1)
           }
       }]
   }
   function We(t, e, r, i) {
       function o(t) {
           try {
               t.apply(null, U(arguments, 1))
           } finally {
               if (k--, 0 === k)
                   for (; S.length;) try {
                       S.pop()()
                   } catch (e) {
                       r.error(e)
                   }
           }
       }
       function s(t) {
           var e = t.indexOf("#");
           return -1 === e ? "" : t.substr(e + 1)
       }
       function u(t, e) {
           ! function n() {
               a(A, function(t) {
                   t()
               }), C = e(n, t)
           }()
       }
       function l() {
           c(), f()
       }
       function c() {
           O = t.history.state, O = g(O) ? null : O, I(O, V) && (O = V), V = O
       }
       function f() {
           (j !== h.url() || E !== O) && (j = h.url(), E = O, a(M, function(t) {
               t(h.url(), O)
           }))
       }
       function d(t) {
           try {
               return decodeURIComponent(t)
           } catch (e) {
               return t
           }
       }
       var h = this,
           $ = e[0],
           m = t.location,
           v = t.history,
           y = t.setTimeout,
           w = t.clearTimeout,
           x = {};
       h.isMock = !1;
       var k = 0,
           S = [];
       h.$$completeOutstandingRequest = o, h.$$incOutstandingRequestCount = function() {
           k++
       }, h.notifyWhenNoOutstandingRequests = function(t) {
           a(A, function(t) {
               t()
           }), 0 === k ? t() : S.push(t)
       };
       var C, A = [];
       h.addPollFn = function(t) {
           return g(C) && u(100, y), A.push(t), t
       };
       var O, E, j = m.href,
           N = e.find("base"),
           T = null;
       c(), E = O, h.url = function(e, n, r) {
           if (g(r) && (r = null), m !== t.location && (m = t.location), v !== t.history && (v = t.history), e) {
               var a = E === r;
               if (j === e && (!i.history || a)) return h;
               var o = j && xn(j) === xn(e);
               return j = e, E = r, !i.history || o && a ? (o || (T = e), n ? m.replace(e) : o ? m.hash = s(e) : m.href = e) : (v[n ? "replaceState" : "pushState"](r, "", e), c(), E = O), h
           }
           return T || m.href.replace(/%27/g, "'")
       }, h.state = function() {
           return O
       };
       var M = [],
           P = !1,
           V = null;
       h.onUrlChange = function(e) {
           return P || (i.history && Qr(t).on("popstate", l), Qr(t).on("hashchange", l), P = !0), M.push(e), e
       }, h.$$checkUrlChange = f, h.baseHref = function() {
           var t = N.attr("href");
           return t ? t.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
       };
       var q = {},
           D = "",
           R = h.baseHref();
       h.cookies = function(t, e) {
           var i, a, o, s, u;
           if (!t) {
               if ($.cookie !== D)
                   for (D = $.cookie, a = D.split("; "), q = {}, s = 0; s < a.length; s++) o = a[s], u = o.indexOf("="), u > 0 && (t = d(o.substring(0, u)), q[t] === n && (q[t] = d(o.substring(u + 1))));
               return q
           }
           e === n ? $.cookie = encodeURIComponent(t) + "=;path=" + R + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : b(e) && (i = ($.cookie = encodeURIComponent(t) + "=" + encodeURIComponent(e) + ";path=" + R).length + 1, i > 4096 && r.warn("Cookie '" + t + "' possibly not set or overflowed because it was too large (" + i + " > 4096 bytes)!"))
       }, h.defer = function(t, e) {
           var n;
           return k++, n = y(function() {
               delete x[n], o(t)
           }, e || 0), x[n] = !0, n
       }, h.defer.cancel = function(t) {
           return x[t] ? (delete x[t], w(t), o(p), !0) : !1
       }
   }
   function Je() {
       this.$get = ["$window", "$log", "$sniffer", "$document", function(t, e, n, r) {
           return new We(t, r, e, n)
       }]
   }
   function Ye() {
       this.$get = function() {
           function t(t, n) {
               function i(t) {
                   t != d && (h ? h == t && (h = t.n) : h = t, a(t.n, t.p), a(t, d), d = t, d.n = null)
               }
               function a(t, e) {
                   t != e && (t && (t.p = e), e && (e.n = t))
               }
               if (t in e) throw r("$cacheFactory")("iid", "CacheId '{0}' is already taken!", t);
               var o = 0,
                   s = f({}, n, {
                       id: t
                   }),
                   u = {},
                   l = n && n.capacity || Number.MAX_VALUE,
                   c = {},
                   d = null,
                   h = null;
               return e[t] = {
                   put: function(t, e) {
                       if (l < Number.MAX_VALUE) {
                           var n = c[t] || (c[t] = {
                               key: t
                           });
                           i(n)
                       }
                       if (!g(e)) return t in u || o++, u[t] = e, o > l && this.remove(h.key), e
                   },
                   get: function(t) {
                       if (l < Number.MAX_VALUE) {
                           var e = c[t];
                           if (!e) return;
                           i(e)
                       }
                       return u[t]
                   },
                   remove: function(t) {
                       if (l < Number.MAX_VALUE) {
                           var e = c[t];
                           if (!e) return;
                           e == d && (d = e.p), e == h && (h = e.n), a(e.n, e.p), delete c[t]
                       }
                       delete u[t], o--
                   },
                   removeAll: function() {
                       u = {}, o = 0, c = {}, d = h = null
                   },
                   destroy: function() {
                       u = null, s = null, c = null, delete e[t]
                   },
                   info: function() {
                       return f({}, s, {
                           size: o
                       })
                   }
               }
           }
           var e = {};
           return t.info = function() {
               var t = {};
               return a(e, function(e, n) {
                   t[n] = e.info()
               }), t
           }, t.get = function(t) {
               return e[t]
           }, t
       }
   }
   function Ze() {
       this.$get = ["$cacheFactory", function(t) {
           return t("templates")
       }]
   }
   function Ke(t, r) {
       function i(t, e) {
           var n = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,
               r = {};
           return a(t, function(t, i) {
               var a = t.match(n);
               if (!a) throw Wi("iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", e, i, t);
               r[i] = {
                   mode: a[1][0],
                   collection: "*" === a[2],
                   optional: "?" === a[3],
                   attrName: a[4] || i
               }
           }), r
       }
       var o = {},
           s = "Directive",
           l = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
           c = /(([\w\-]+)(?:\:([^;]+))?;?)/,
           d = P("ngSrc,ngSrcset,src,srcset"),
           g = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/,
           w = /^(on[a-z]+|formaction)$/;
       this.directive = function S(e, n) {
           return oe(e, "directive"), b(e) ? (ie(n, "directiveFactory"), o.hasOwnProperty(e) || (o[e] = [], t.factory(e + s, ["$injector", "$exceptionHandler", function(t, n) {
               var r = [];
               return a(o[e], function(a, o) {
                   try {
                       var s = t.invoke(a);
                       k(s) ? s = {
                           compile: m(s)
                       } : !s.compile && s.link && (s.compile = m(s.link)), s.priority = s.priority || 0, s.index = o, s.name = s.name || e, s.require = s.require || s.controller && s.name, s.restrict = s.restrict || "EA", y(s.scope) && (s.$$isolateBindings = i(s.scope, s.name)), r.push(s)
                   } catch (u) {
                       n(u)
                   }
               }), r
           }])), o[e].push(n)) : a(e, u(S)), this
       }, this.aHrefSanitizationWhitelist = function(t) {
           return v(t) ? (r.aHrefSanitizationWhitelist(t), this) : r.aHrefSanitizationWhitelist()
       }, this.imgSrcSanitizationWhitelist = function(t) {
           return v(t) ? (r.imgSrcSanitizationWhitelist(t), this) : r.imgSrcSanitizationWhitelist()
       };
       var x = !0;
       this.debugInfoEnabled = function(t) {
           return v(t) ? (x = t, this) : x
       }, this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function(t, r, i, u, m, v, S, C, O, E, j) {
           function N(t, e) {
               try {
                   t.addClass(e)
               } catch (n) {}
           }
           function T(t, e, n, r, i) {
               t instanceof Qr || (t = Qr(t)), a(t, function(e, n) {
                   e.nodeType == vi && e.nodeValue.match(/\S+/) && (t[n] = Qr(e).wrap("").parent()[0])
               });
               var o = P(t, e, t, n, r, i);
               T.$$addScopeClass(t);
               var s = null;
               return function(e, n, r) {
                   ie(e, "scope"), r = r || {};
                   var i = r.parentBoundTranscludeFn,
                       a = r.transcludeControllers,
                       u = r.futureParentElement;
                   i && i.$$boundTransclude && (i = i.$$boundTransclude), s || (s = M(u));
                   var l;
if (l = "html" !== s ? Qr(X(s, Qr("
").append(t).html())) : n ? Di.clone.call(t) : t, a)
                       for (var c in a) l.data("$" + c + "Controller", a[c].instance);
                   return T.$$addScopeInfo(l, e), n && n(l, e), o && o(e, l, l, i), l
               }
           }
           function M(t) {
               var e = t && t[0];
               return e ? "foreignobject" !== V(e) && e.toString().match(/SVG/) ? "svg" : "html" : "html"
           }
           function P(t, e, r, i, a, o) {
               function s(t, r, i, a) {
                   var o, s, u, l, c, f, d, h, m;
                   if (p) {
                       var g = r.length;
                       for (m = new Array(g), c = 0; c < $.length; c += 3) d = $[c], m[d] = r[d]
                   } else m = r;
                   for (c = 0, f = $.length; f > c;) u = m[$[c++]], o = $[c++], s = $[c++], o ? (o.scope ? (l = t.$new(), T.$$addScopeInfo(Qr(u), l)) : l = t, h = o.transcludeOnThisElement ? D(t, o.transclude, a, o.elementTranscludeOnThisElement) : !o.templateOnThisElement && a ? a : !a && e ? D(t, e) : null, o(s, l, u, i, h)) : s && s(t, u.childNodes, n, a)
               }
               for (var u, l, c, f, d, h, p, $ = [], m = 0; m < t.length; m++) u = new oe, l = R(t[m], [], u, 0 === m ? i : n, a), c = l.length ? F(l, t[m], u, e, r, null, [], [], o) : null, c && c.scope && T.$$addScopeClass(u.$$element), d = c && c.terminal || !(f = t[m].childNodes) || !f.length ? null : P(f, c ? (c.transcludeOnThisElement || !c.templateOnThisElement) && c.transclude : e), (c || d) && ($.push(m, c, d), h = !0, p = p || c), o = null;
               return h ? s : null
           }
           function D(t, e, n) {
               var r = function(r, i, a, o, s) {
                   return r || (r = t.$new(!1, s), r.$$transcluded = !0), e(r, i, {
                       parentBoundTranscludeFn: n,
                       transcludeControllers: a,
                       futureParentElement: o
                   })
               };
               return r
           }
           function R(t, e, n, r, i) {
               var a, o, s = t.nodeType,
                   u = n.$attr;
               switch (s) {
                   case gi:
                       B(e, Xe(V(t)), "E", r, i);
                       for (var f, d, h, p, $, m, g = t.attributes, v = 0, w = g && g.length; w > v; v++) {
                           var x = !1,
                               k = !1;
                           f = g[v], d = f.name, $ = fi(f.value), p = Xe(d), (m = fe.test(p)) && (d = d.replace(Ji, "").substr(8).replace(/_(.)/g, function(t, e) {
                               return e.toUpperCase()
                           }));
                           var S = p.replace(/(Start|End)$/, "");
                           G(S) && p === S + "Start" && (x = d, k = d.substr(0, d.length - 5) + "end", d = d.substr(0, d.length - 6)), h = Xe(d.toLowerCase()), u[h] = d, (m || !n.hasOwnProperty(h)) && (n[h] = $, De(t, h) && (n[h] = !0)), te(t, e, $, h, m), B(e, h, "A", r, i, x, k)
                       }
                       if (o = t.className, y(o) && (o = o.animVal), b(o) && "" !== o)
                           for (; a = c.exec(o);) h = Xe(a[2]), B(e, h, "C", r, i) && (n[h] = fi(a[3])), o = o.substr(a.index + a[0].length);
                       break;
                   case vi:
                       K(e, t.nodeValue);
                       break;
                   case yi:
                       try {
                           a = l.exec(t.nodeValue), a && (h = Xe(a[1]), B(e, h, "M", r, i) && (n[h] = fi(a[2])))
                       } catch (C) {}
               }
               return e.sort(Y), e
           }
           function _(t, e, n) {
               var r = [],
                   i = 0;
               if (e && t.hasAttribute && t.hasAttribute(e)) {
                   do {
                       if (!t) throw Wi("uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", e, n);
                       t.nodeType == gi && (t.hasAttribute(e) && i++, t.hasAttribute(n) && i--), r.push(t), t = t.nextSibling
                   } while (i > 0)
               } else r.push(t);
               return Qr(r)
           }
           function L(t, e, n) {
               return function(r, i, a, o, s) {
                   return i = _(i[0], e, n), t(r, i, a, o, s)
               }
           }
           function F(t, o, s, u, l, c, f, d, h) {
               function p(t, e, n, r) {
                   t && (n && (t = L(t, n, r)), t.require = C.require, t.directiveName = O, (V === C || C.$$isolateScope) && (t = re(t, {
                       isolateScope: !0
                   })), f.push(t)), e && (n && (e = L(e, n, r)), e.require = C.require, e.directiveName = O, (V === C || C.$$isolateScope) && (e = re(e, {
                       isolateScope: !0
                   })), d.push(e))
               }
               function $(t, e, n, r) {
                   var i, o, s = "data",
                       u = !1,
                       l = n;
                   if (b(e)) {
                       if (o = e.match(g), e = e.substring(o[0].length), o[3] && (o[1] ? o[3] = null : o[1] = o[3]), "^" === o[1] ? s = "inheritedData" : "^^" === o[1] && (s = "inheritedData", l = n.parent()), "?" === o[2] && (u = !0), i = null, r && "data" === s && (i = r[e]) && (i = i.instance), i = i || l[s]("$" + e + "Controller"), !i && !u) throw Wi("ctreq", "Controller '{0}', required by directive '{1}', can't be found!", e, t);
                       return i || null
                   }
                   return ci(e) && (i = [], a(e, function(e) {
                       i.push($(t, e, n, r))
                   })), i
               }
               function w(t, e, i, u, l) {
                   function c(t, e, r) {
                       var i;
                       return A(t) || (r = e, e = t, t = n), G && (i = w), r || (r = G ? k.parent() : k), l(t, e, i, r, j)
                   }
                   var h, p, g, y, b, w, x, k, C;
                   if (o === i ? (C = s, k = s.$$element) : (k = Qr(i), C = new oe(k, s)), V && (b = e.$new(!0)), l && (x = c, x.$$boundTransclude = l), P && (S = {}, w = {}, a(P, function(t) {
                           var n, r = {
                               $scope: t === V || t.$$isolateScope ? b : e,
                               $element: k,
                               $attrs: C,
                               $transclude: x
                           };
                           y = t.controller, "@" == y && (y = C[t.name]), n = v(y, r, !0, t.controllerAs), w[t.name] = n, G || k.data("$" + t.name + "Controller", n.instance), S[t.name] = n
                       })), V) {
                       T.$$addScopeInfo(k, b, !0, !(q && (q === V || q === V.$$originalDirective))), T.$$addScopeClass(k, !0);
                       var O = S && S[V.name],
                           E = b;
                       O && O.identifier && V.bindToController === !0 && (E = O.instance), a(b.$$isolateBindings = V.$$isolateBindings, function(t, n) {
                           var i, a, o, s, u = t.attrName,
                               l = t.optional,
                               c = t.mode;
                           switch (c) {
                               case "@":
                                   C.$observe(u, function(t) {
                                       E[n] = t
                                   }), C.$$observers[u].$$scope = e, C[u] && (E[n] = r(C[u])(e));
                                   break;
                               case "=":
                                   if (l && !C[u]) return;
                                   a = m(C[u]), s = a.literal ? I : function(t, e) {
                                       return t === e || t !== t && e !== e
                                   }, o = a.assign || function() {
                                       throw i = E[n] = a(e), Wi("nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", C[u], V.name)
                                   }, i = E[n] = a(e);
                                   var f = function(t) {
                                       return s(t, E[n]) || (s(t, i) ? o(e, t = E[n]) : E[n] = t), i = t
                                   };
                                   f.$stateful = !0;
                                   var d;
                                   d = t.collection ? e.$watchCollection(C[u], f) : e.$watch(m(C[u], f), null, a.literal), b.$on("$destroy", d);
                                   break;
                               case "&":
                                   a = m(C[u]), E[n] = function(t) {
                                       return a(e, t)
                                   }
                           }
                       })
                   }
                   for (S && (a(S, function(t) {
                           t()
                       }), S = null), h = 0, p = f.length; p > h; h++) g = f[h], ae(g, g.isolateScope ? b : e, k, C, g.require && $(g.directiveName, g.require, k, w), x);
                   var j = e;
                   for (V && (V.template || null === V.templateUrl) && (j = b), t && t(j, i.childNodes, n, l), h = d.length - 1; h >= 0; h--) g = d[h], ae(g, g.isolateScope ? b : e, k, C, g.require && $(g.directiveName, g.require, k, w), x)
               }
               h = h || {};
               for (var x, S, C, O, E, j, N, M = -Number.MAX_VALUE, P = h.controllerDirectives, V = h.newIsolateScopeDirective, q = h.templateDirective, D = h.nonTlbTranscludeDirective, F = !1, B = !1, G = h.hasElementTranscludeDirective, Y = s.$$element = Qr(o), K = c, Q = u, te = 0, ne = t.length; ne > te; te++) {
                   C = t[te];
                   var ie = C.$$start,
                       se = C.$$end;
                   if (ie && (Y = _(o, ie, se)), E = n, M > C.priority) break;
                   if ((N = C.scope) && (C.templateUrl || (y(N) ? (Z("new/isolated scope", V || x, C, Y), V = C) : Z("new/isolated scope", V, C, Y)), x = x || C), O = C.name, !C.templateUrl && C.controller && (N = C.controller, P = P || {}, Z("'" + O + "' controller", P[O], C, Y), P[O] = C), (N = C.transclude) && (F = !0, C.$$tlb || (Z("transclusion", D, C, Y), D = C), "element" == N ? (G = !0, M = C.priority, E = Y, Y = s.$$element = Qr(e.createComment(" " + O + ": " + s[O] + " ")), o = Y[0], ee(l, U(E), o), Q = T(E, u, M, K && K.name, {
                           nonTlbTranscludeDirective: D
                       })) : (E = Qr(we(o)).contents(), Y.empty(), Q = T(E, u))), C.template)
                       if (B = !0, Z("template", q, C, Y), q = C, N = k(C.template) ? C.template(Y, s) : C.template, N = ce(N), C.replace) {
                           if (K = C, E = me(N) ? [] : tn(X(C.templateNamespace, fi(N))), o = E[0], 1 != E.length || o.nodeType !== gi) throw Wi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", O, "");
                           ee(l, Y, o);
                           var ue = {
                                   $attr: {}
                               },
                               le = R(o, [], ue),
                               fe = t.splice(te + 1, t.length - (te + 1));
                           V && H(le), t = t.concat(le).concat(fe), W(s, ue), ne = t.length
                       } else Y.html(N);
                   if (C.templateUrl) B = !0, Z("template", q, C, Y), q = C, C.replace && (K = C), w = J(t.splice(te, t.length - te), Y, s, l, F && Q, f, d, {
                       controllerDirectives: P,
                       newIsolateScopeDirective: V,
                       templateDirective: q,
                       nonTlbTranscludeDirective: D
                   }), ne = t.length;
                   else if (C.compile) try {
                       j = C.compile(Y, s, Q), k(j) ? p(null, j, ie, se) : j && p(j.pre, j.post, ie, se)
                   } catch (de) {
                       i(de, z(Y))
                   }
                   C.terminal && (w.terminal = !0, M = Math.max(M, C.priority))
               }
               return w.scope = x && x.scope === !0, w.transcludeOnThisElement = F, w.elementTranscludeOnThisElement = G, w.templateOnThisElement = B, w.transclude = Q, h.hasElementTranscludeDirective = G, w
           }
           function H(t) {
               for (var e = 0, n = t.length; n > e; e++) t[e] = h(t[e], {
                   $$isolateScope: !0
               })
           }
           function B(e, r, a, u, l, c, f) {
               if (r === l) return null;
               var d = null;
               if (o.hasOwnProperty(r))
                   for (var p, $ = t.get(r + s), m = 0, g = $.length; g > m; m++) try {
                       p = $[m], (u === n || u > p.priority) && -1 != p.restrict.indexOf(a) && (c && (p = h(p, {
                           $$start: c,
                           $$end: f
                       })), e.push(p), d = p)
                   } catch (v) {
                       i(v)
                   }
               return d
           }
           function G(e) {
               if (o.hasOwnProperty(e))
                   for (var n, r = t.get(e + s), i = 0, a = r.length; a > i; i++)
                       if (n = r[i], n.multiElement) return !0;
               return !1
           }
           function W(t, e) {
               var n = e.$attr,
                   r = t.$attr,
                   i = t.$$element;
               a(t, function(r, i) {
                   "$" != i.charAt(0) && (e[i] && e[i] !== r && (r += ("style" === i ? ";" : " ") + e[i]), t.$set(i, r, !0, n[i]))
               }), a(e, function(e, a) {
                   "class" == a ? (N(i, e), t["class"] = (t["class"] ? t["class"] + " " : "") + e) : "style" == a ? (i.attr("style", i.attr("style") + ";" + e), t.style = (t.style ? t.style + ";" : "") + e) : "$" == a.charAt(0) || t.hasOwnProperty(a) || (t[a] = e, r[a] = n[a])
               })
           }
           function J(t, e, n, r, i, o, s, l) {
               var c, f, d = [],
                   p = e[0],
                   $ = t.shift(),
                   m = h($, {
                       templateUrl: null,
                       transclude: null,
                       replace: null,
                       $$originalDirective: $
                   }),
                   g = k($.templateUrl) ? $.templateUrl(e, n) : $.templateUrl,
                   v = $.templateNamespace;
               return e.empty(), u(O.getTrustedResourceUrl(g)).then(function(u) {
                       var h, b, w, x;
                       if (u = ce(u), $.replace) {
                           if (w = me(u) ? [] : tn(X(v, fi(u))), h = w[0], 1 != w.length || h.nodeType !== gi) throw Wi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", $.name, g);
                           b = {
                               $attr: {}
                           }, ee(r, e, h);
                           var k = R(h, [], b);
                           y($.scope) && H(k), t = k.concat(t), W(n, b)
                       } else h = p, e.html(u);
                       for (t.unshift(m), c = F(t, h, n, i, e, $, o, s, l), a(r, function(t, n) {
                               t == h && (r[n] = e[0])
                           }), f = P(e[0].childNodes, i); d.length;) {
                           var S = d.shift(),
                               C = d.shift(),
                               A = d.shift(),
                               O = d.shift(),
                               E = e[0];
                           if (!S.$$destroyed) {
                               if (C !== p) {
                                   var j = C.className;
                                   l.hasElementTranscludeDirective && $.replace || (E = we(h)), ee(A, Qr(C), E), N(Qr(E), j)
                               }
                               x = c.transcludeOnThisElement ? D(S, c.transclude, O) : O, c(f, S, E, r, x)
                           }
                       }
                       d = null
                   }),
                   function(t, e, n, r, i) {
                       var a = i;
                       e.$$destroyed || (d ? d.push(e, n, r, a) : (c.transcludeOnThisElement && (a = D(e, c.transclude, i)), c(f, e, n, r, a)))
                   }
           }
           function Y(t, e) {
               var n = e.priority - t.priority;
               return 0 !== n ? n : t.name !== e.name ? t.name < e.name ? -1 : 1 : t.index - e.index
           }
           function Z(t, e, n, r) {
               if (e) throw Wi("multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", e.name, n.name, t, z(r))
           }
           function K(t, e) {
               var n = r(e, !0);
               n && t.push({
                   priority: 0,
                   compile: function(t) {
                       var e = t.parent(),
                           r = !!e.length;
                       return r && T.$$addBindingClass(e),
                           function(t, e) {
                               var i = e.parent();
                               r || T.$$addBindingClass(i), T.$$addBindingInfo(i, n.expressions), t.$watch(n, function(t) {
                                   e[0].nodeValue = t
                               })
                           }
                   }
               })
           }
           function X(t, n) {
               switch (t = Wr(t || "html")) {
                   case "svg":
                   case "math":
                       var r = e.createElement("div");
                       return r.innerHTML = "<" + t + ">" + n + "</" + t + ">", r.childNodes[0].childNodes;
                   default:
                       return n
               }
           }
           function Q(t, e) {
               if ("srcdoc" == e) return O.HTML;
               var n = V(t);
               return "xlinkHref" == e || "form" == n && "action" == e || "img" != n && ("src" == e || "ngSrc" == e) ? O.RESOURCE_URL : void 0
           }
           function te(t, e, n, i, a) {
               var o = Q(t, i);
               a = d[i] || a;
               var s = r(n, !0, o, a);
               if (s) {
                   if ("multiple" === i && "select" === V(t)) throw Wi("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", z(t));
                   e.push({
                       priority: 100,
                       compile: function() {
                           return {
                               pre: function(t, e, u) {
                                   var l = u.$$observers || (u.$$observers = {});
                                   if (w.test(i)) throw Wi("nodomevents", "Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");
                                   var c = u[i];
                                   c !== n && (s = c && r(c, !0, o, a), n = c), s && (u[i] = s(t), (l[i] || (l[i] = [])).$$inter = !0, (u.$$observers && u.$$observers[i].$$scope || t).$watch(s, function(t, e) {
                                       "class" === i && t != e ? u.$updateClass(t, e) : u.$set(i, t)
                                   }))
                               }
                           }
                       }
                   })
               }
           }
           function ee(t, n, r) {
               var i, a, o = n[0],
                   s = n.length,
                   u = o.parentNode;
               if (t)
                   for (i = 0, a = t.length; a > i; i++)
                       if (t[i] == o) {
                           t[i++] = r;
                           for (var l = i, c = l + s - 1, f = t.length; f > l; l++, c++) f > c ? t[l] = t[c] : delete t[l];
                           t.length -= s - 1, t.context === o && (t.context = r);
                           break
                       }
               u && u.replaceChild(r, o);
               var d = e.createDocumentFragment();
               d.appendChild(o), Qr(r).data(Qr(o).data()), ti ? (li = !0, ti.cleanData([o])) : delete Qr.cache[o[Qr.expando]];
               for (var h = 1, p = n.length; p > h; h++) {
                   var $ = n[h];
                   Qr($).remove(), d.appendChild($), delete n[h]
               }
               n[0] = r, n.length = 1
           }
           function re(t, e) {
               return f(function() {
                   return t.apply(null, arguments)
               }, t, e)
           }
           function ae(t, e, n, r, a, o) {
               try {
                   t(e, n, r, a, o)
               } catch (s) {
                   i(s, z(n))
               }
           }
           var oe = function(t, e) {
               if (e) {
                   var n, r, i, a = Object.keys(e);
                   for (n = 0, r = a.length; r > n; n++) i = a[n], this[i] = e[i]
               } else this.$attr = {};
               this.$$element = t
           };
           oe.prototype = {
               $normalize: Xe,
               $addClass: function(t) {
                   t && t.length > 0 && E.addClass(this.$$element, t)
               },
               $removeClass: function(t) {
                   t && t.length > 0 && E.removeClass(this.$$element, t)
               },
               $updateClass: function(t, e) {
                   var n = Qe(t, e);
                   n && n.length && E.addClass(this.$$element, n);
                   var r = Qe(e, t);
                   r && r.length && E.removeClass(this.$$element, r)
               },
               $set: function(t, e, r, o) {
                   var s, u = this.$$element[0],
                       l = De(u, t),
                       c = Re(u, t),
                       f = t;
                   if (l ? (this.$$element.prop(t, e), o = l) : c && (this[c] = e, f = c), this[t] = e, o ? this.$attr[t] = o : (o = this.$attr[t], o || (this.$attr[t] = o = ne(t, "-"))), s = V(this.$$element), "a" === s && "href" === t || "img" === s && "src" === t) this[t] = e = j(e, "src" === t);
                   else if ("img" === s && "srcset" === t) {
                       for (var d = "", h = fi(e), p = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, $ = /\s/.test(h) ? p : /(,)/, m = h.split($), g = Math.floor(m.length / 2), v = 0; g > v; v++) {
                           var y = 2 * v;
                           d += j(fi(m[y]), !0), d += " " + fi(m[y + 1])
                       }
                       var b = fi(m[2 * v]).split(/\s/);
                       d += j(fi(b[0]), !0), 2 === b.length && (d += " " + fi(b[1])), this[t] = e = d
                   }
                   r !== !1 && (null === e || e === n ? this.$$element.removeAttr(o) : this.$$element.attr(o, e));
                   var w = this.$$observers;
                   w && a(w[f], function(t) {
                       try {
                           t(e)
                       } catch (n) {
                           i(n)
                       }
                   })
               },
               $observe: function(t, e) {
                   var n = this,
                       r = n.$$observers || (n.$$observers = le()),
                       i = r[t] || (r[t] = []);
                   return i.push(e), S.$evalAsync(function() {
                           !i.$$inter && n.hasOwnProperty(t) && e(n[t])
                       }),
                       function() {
                           q(i, e)
                       }
               }
           };
           var se = r.startSymbol(),
               ue = r.endSymbol(),
               ce = "Template:" == se" == ue ? $ : function(t) {
                   return t.replace(/\{\{/g, se).replace(/}}/g, ue)
               },
               fe = /^ngAttr[A-Z]/;
           return T.$$addBindingInfo = x ? function(t, e) {
               var n = t.data("$binding") || [];
               ci(e) ? n = n.concat(e) : n.push(e), t.data("$binding", n)
           } : p, T.$$addBindingClass = x ? function(t) {
               N(t, "ng-binding")
           } : p, T.$$addScopeInfo = x ? function(t, e, n, r) {
               var i = n ? r ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope";
               t.data(i, e)
           } : p, T.$$addScopeClass = x ? function(t, e) {
               N(t, e ? "ng-isolate-scope" : "ng-scope")
           } : p, T
       }]
   }
   function Xe(t) {
       return $e(t.replace(Ji, ""))
   }
   function Qe(t, e) {
       var n = "",
           r = t.split(/\s+/),
           i = e.split(/\s+/);
       t: for (var a = 0; a < r.length; a++) {
           for (var o = r[a], s = 0; s < i.length; s++)
               if (o == i[s]) continue t;
           n += (n.length > 0 ? " " : "") + o
       }
       return n
   }
   function tn(t) {
       t = Qr(t);
       var e = t.length;
       if (1 >= e) return t;
       for (; e--;) {
           var n = t[e];
           n.nodeType === yi && ri.call(t, e, 1)
       }
       return t
   }
   function en() {
       var t = {},
           e = !1,
           i = /^(\S+)(\s+as\s+(\w+))?$/;
       this.register = function(e, n) {
           oe(e, "controller"), y(e) ? f(t, e) : t[e] = n
       }, this.allowGlobals = function() {
           e = !0
       }, this.$get = ["$injector", "$window", function(a, o) {
           function s(t, e, n, i) {
               if (!t || !y(t.$scope)) throw r("$controller")("noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", i, e);
               t.$scope[e] = n
           }
           return function(r, u, l, c) {
               var d, h, p, $;
               if (l = l === !0, c && b(c) && ($ = c), b(r)) {
                   if (h = r.match(i), !h) throw Yi("ctrlfmt", "Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.", r);
                   p = h[1], $ = $ || h[3], r = t.hasOwnProperty(p) ? t[p] : se(u.$scope, p, !0) || (e ? se(o, p, !0) : n), ae(r, p, !0)
               }
               if (l) {
                   var m = (ci(r) ? r[r.length - 1] : r).prototype;
                   return d = Object.create(m || null), $ && s(u, $, d, p || r.name), f(function() {
                       return a.invoke(r, d, u, p), d
                   }, {
                       instance: d,
                       identifier: $
                   })
               }
               return d = a.instantiate(r, u, p), $ && s(u, $, d, p || r.name), d
           }
       }]
   }
   function nn() {
       this.$get = ["$window", function(t) {
           return Qr(t.document)
       }]
   }
   function rn() {
       this.$get = ["$log", function(t) {
           return function() {
               t.error.apply(t, arguments)
           }
       }]
   }
   function an(t, e) {
       if (b(t)) {
           var n = t.replace(ta, "").trim();
           if (n) {
               var r = e("Content-Type");
               (r && 0 === r.indexOf(Zi) || on(n)) && (t = B(n))
           }
       }
       return t
   }
   function on(t) {
       var e = t.match(Xi);
       return e && Qi[e[0]].test(t)
   }
   function sn(t) {
       var e, n, r, i = le();
       return t ? (a(t.split("\n"), function(t) {
           r = t.indexOf(":"), e = Wr(fi(t.substr(0, r))), n = fi(t.substr(r + 1)), e && (i[e] = i[e] ? i[e] + ", " + n : n)
       }), i) : i
   }
   function un(t) {
       var e = y(t) ? t : n;
       return function(n) {
           if (e || (e = sn(t)), n) {
               var r = e[Wr(n)];
               return void 0 === r && (r = null), r
           }
           return e
       }
   }
   function ln(t, e, n, r) {
       return k(r) ? r(t, e, n) : (a(r, function(r) {
           t = r(t, e, n)
       }), t)
   }
   function cn(t) {
       return t >= 200 && 300 > t
   }
   function fn() {
       var t = this.defaults = {
               transformResponse: [an],
               transformRequest: [function(t) {
                   return !y(t) || O(t) || j(t) || E(t) ? t : H(t)
               }],
               headers: {
                   common: {
                       Accept: "application/json, text/plain, */*"
                   },
                   post: R(Ki),
                   put: R(Ki),
                   patch: R(Ki)
               },
               xsrfCookieName: "XSRF-TOKEN",
               xsrfHeaderName: "X-XSRF-TOKEN"
           },
           e = !1;
       this.useApplyAsync = function(t) {
           return v(t) ? (e = !!t, this) : e
       };
       var i = this.interceptors = [];
       this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function(o, u, l, c, d, h) {
           function p(e) {
               function i(t) {
                   var e = f({}, t);
                   return e.data = t.data ? ln(t.data, t.headers, t.status, u.transformResponse) : t.data, cn(t.status) ? e : d.reject(e)
               }
               function o(t) {
                   var e, n = {};
                   return a(t, function(t, r) {
                       k(t) ? (e = t(), null != e && (n[r] = e)) : n[r] = t
                   }), n
               }
               function s(e) {
                   var n, r, i, a = t.headers,
                       s = f({}, e.headers);
                   a = f({}, a.common, a[Wr(e.method)]);
                   t: for (n in a) {
                       r = Wr(n);
                       for (i in s)
                           if (Wr(i) === r) continue t;
                       s[n] = a[n]
                   }
                   return o(s)
               }
               if (!si.isObject(e)) throw r("$http")("badreq", "Http request configuration must be an object.  Received: {0}", e);
               var u = f({
                   method: "get",
                   transformRequest: t.transformRequest,
                   transformResponse: t.transformResponse
               }, e);
               u.headers = s(e), u.method = Yr(u.method);
               var l = function(e) {
                       var r = e.headers,
                           o = ln(e.data, un(r), n, e.transformRequest);
                       return g(o) && a(r, function(t, e) {
                           "content-type" === Wr(e) && delete r[e]
                       }), g(e.withCredentials) && !g(t.withCredentials) && (e.withCredentials = t.withCredentials), w(e, o).then(i, i)
                   },
                   c = [l, n],
                   h = d.when(u);
               for (a(A, function(t) {
                       (t.request || t.requestError) && c.unshift(t.request, t.requestError), (t.response || t.responseError) && c.push(t.response, t.responseError)
                   }); c.length;) {
                   var p = c.shift(),
                       $ = c.shift();
                   h = h.then(p, $)
               }
               return h.success = function(t) {
                   return h.then(function(e) {
                       t(e.data, e.status, e.headers, u)
                   }), h
               }, h.error = function(t) {
                   return h.then(null, function(e) {
                       t(e.data, e.status, e.headers, u)
                   }), h
               }, h
           }
           function $() {
               a(arguments, function(t) {
                   p[t] = function(e, n) {
                       return p(f(n || {}, {
                           method: t,
                           url: e
                       }))
                   }
               })
           }
           function m() {
               a(arguments, function(t) {
                   p[t] = function(e, n, r) {
                       return p(f(r || {}, {
                           method: t,
                           url: e,
                           data: n
                       }))
                   }
               })
           }
           function w(r, i) {
               function a(t, n, r, i) {
                   function a() {
                       s(n, t, r, i)
                   }
                   h && (cn(t) ? h.put(x, [t, n, sn(r), i]) : h.remove(x)), e ? c.$applyAsync(a) : (a(), c.$$phase || c.$apply())
               }
               function s(t, e, n, i) {
                   e = Math.max(e, 0), (cn(e) ? m.resolve : m.reject)({
                       data: t,
                       status: e,
                       headers: un(n),
                       config: r,
                       statusText: i
                   })
               }
               function l(t) {
                   s(t.data, t.status, R(t.headers()), t.statusText)
               }
               function f() {
                   var t = p.pendingRequests.indexOf(r); - 1 !== t && p.pendingRequests.splice(t, 1)
               }
               var h, $, m = d.defer(),
                   b = m.promise,
                   w = r.headers,
                   x = S(r.url, r.params);
               if (p.pendingRequests.push(r), b.then(f, f), !r.cache && !t.cache || r.cache === !1 || "GET" !== r.method && "JSONP" !== r.method || (h = y(r.cache) ? r.cache : y(t.cache) ? t.cache : C), h && ($ = h.get(x), v($) ? T($) ? $.then(l, l) : ci($) ? s($[1], $[0], R($[2]), $[3]) : s($, 200, {}, "OK") : h.put(x, b)), g($)) {
                   var k = ar(r.url) ? u.cookies()[r.xsrfCookieName || t.xsrfCookieName] : n;
                   k && (w[r.xsrfHeaderName || t.xsrfHeaderName] = k), o(r.method, x, i, a, w, r.timeout, r.withCredentials, r.responseType)
               }
               return b
           }
           function S(t, e) {
               if (!e) return t;
               var n = [];
               return s(e, function(t, e) {
                   null === t || g(t) || (ci(t) || (t = [t]), a(t, function(t) {
                       y(t) && (t = x(t) ? t.toISOString() : H(t)), n.push(Z(e) + "=" + Z(t))
                   }))
               }), n.length > 0 && (t += (-1 == t.indexOf("?") ? "?" : "&") + n.join("&")), t
           }
           var C = l("$http"),
               A = [];
           return a(i, function(t) {
               A.unshift(b(t) ? h.get(t) : h.invoke(t))
           }), p.pendingRequests = [], $("get", "delete", "head", "jsonp"), m("post", "put", "patch"), p.defaults = t, p
       }]
   }
   function dn() {
       return new t.XMLHttpRequest
   }
   function hn() {
       this.$get = ["$browser", "$window", "$document", function(t, e, n) {
           return pn(t, dn, t.defer, e.angular.callbacks, n[0])
       }]
   }
   function pn(t, e, r, i, o) {
       function s(t, e, n) {
           var r = o.createElement("script"),
               a = null;
           return r.type = "text/javascript", r.src = t, r.async = !0, a = function(t) {
               Ai(r, "load", a), Ai(r, "error", a), o.body.removeChild(r), r = null;
               var s = -1,
                   u = "unknown";
               t && ("load" !== t.type || i[e].called || (t = {
                   type: "error"
               }), u = t.type, s = "error" === t.type ? 404 : 200), n && n(s, u)
           }, Ci(r, "load", a), Ci(r, "error", a), o.body.appendChild(r), a
       }
       return function(o, u, l, c, f, d, h, $) {
           function m() {
               b && b(), w && w.abort()
           }
           function g(e, i, a, o, s) {
               S !== n && r.cancel(S), b = w = null, e(i, a, o, s), t.$$completeOutstandingRequest(p)
           }
           if (t.$$incOutstandingRequestCount(), u = u || t.url(), "jsonp" == Wr(o)) {
               var y = "_" + (i.counter++).toString(36);
               i[y] = function(t) {
                   i[y].data = t, i[y].called = !0
               };
               var b = s(u.replace("JSON_CALLBACK", "angular.callbacks." + y), y, function(t, e) {
                   g(c, t, i[y].data, "", e), i[y] = p
               })
           } else {
               var w = e();
               w.open(o, u, !0), a(f, function(t, e) {
                   v(t) && w.setRequestHeader(e, t)
               }), w.onload = function() {
                   var t = w.statusText || "",
                       e = "response" in w ? w.response : w.responseText,
                       n = 1223 === w.status ? 204 : w.status;
                   0 === n && (n = e ? 200 : "file" == ir(u).protocol ? 404 : 0), g(c, n, e, w.getAllResponseHeaders(), t)
               };
               var x = function() {
                   g(c, -1, null, null, "")
               };
               if (w.onerror = x, w.onabort = x, h && (w.withCredentials = !0), $) try {
                   w.responseType = $
               } catch (k) {
                   if ("json" !== $) throw k
               }
               w.send(l || null)
           }
           if (d > 0) var S = r(m, d);
           else T(d) && d.then(m)
       }
   }
   function $n() {
       var t = "{{",
           e = "}}";
       this.startSymbol = function(e) {
           return e ? (t = e, this) : t
       }, this.endSymbol = function(t) {
           return t ? (e = t, this) : e
       }, this.$get = ["$parse", "$exceptionHandler", "$sce", function(n, r, i) {
           function a(t) {
               return "\\\\\\" + t
           }
           function o(a, o, d, h) {
               function p(n) {
                   return n.replace(l, t).replace(c, e)
               }
               function $(t) {
                   try {
                       return t = j(t), h && !v(t) ? t : N(t)
                   } catch (e) {
                       var n = ea("interr", "Can't interpolate: {0}\n{1}", a, e.toString());
                       r(n)
                   }
               }
               h = !!h;
               for (var m, y, b, w = 0, x = [], S = [], C = a.length, A = [], O = []; C > w;) {
                   if (-1 == (m = a.indexOf(t, w)) || -1 == (y = a.indexOf(e, m + s))) {
                       w !== C && A.push(p(a.substring(w)));
                       break
                   }
                   w !== m && A.push(p(a.substring(w, m))), b = a.substring(m + s, y), x.push(b), S.push(n(b, $)), w = y + u, O.push(A.length), A.push("")
               }
               if (d && A.length > 1) throw ea("noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce", a);
               if (!o || x.length) {
                   var E = function(t) {
                           for (var e = 0, n = x.length; n > e; e++) {
                               if (h && g(t[e])) return;
                               A[O[e]] = t[e]
                           }
                           return A.join("")
                       },
                       j = function(t) {
                           return d ? i.getTrusted(d, t) : i.valueOf(t)
                       },
                       N = function(t) {
                           if (null == t) return "";
                           switch (typeof t) {
                               case "string":
                                   break;
                               case "number":
                                   t = "" + t;
                                   break;
                               default:
                                   t = H(t)
                           }
                           return t
                       };
                   return f(function(t) {
                       var e = 0,
                           n = x.length,
                           i = new Array(n);
                       try {
                           for (; n > e; e++) i[e] = S[e](t);
                           return E(i)
                       } catch (o) {
                           var s = ea("interr", "Can't interpolate: {0}\n{1}", a, o.toString());
                           r(s)
                       }
                   }, {
                       exp: a,
                       expressions: x,
                       $$watchDelegate: function(t, e, n) {
                           var r;
                           return t.$watchGroup(S, function(n, i) {
                               var a = E(n);
                               k(e) && e.call(this, a, n !== i ? r : a, t), r = a
                           }, n)
                       }
                   })
               }
           }
           var s = t.length,
               u = e.length,
               l = new RegExp(t.replace(/./g, a), "g"),
               c = new RegExp(e.replace(/./g, a), "g");
           return o.startSymbol = function() {
               return t
           }, o.endSymbol = function() {
               return e
           }, o
       }]
   }
   function mn() {
       this.$get = ["$rootScope", "$window", "$q", "$$q", function(t, e, n, r) {
           function i(i, o, s, u) {
               var l = e.setInterval,
                   c = e.clearInterval,
                   f = 0,
                   d = v(u) && !u,
                   h = (d ? r : n).defer(),
                   p = h.promise;
               return s = v(s) ? s : 0, p.then(null, null, i), p.$$intervalId = l(function() {
                   h.notify(f++), s > 0 && f >= s && (h.resolve(f), c(p.$$intervalId), delete a[p.$$intervalId]), d || t.$apply()
               }, o), a[p.$$intervalId] = h, p
           }
           var a = {};
           return i.cancel = function(t) {
               return t && t.$$intervalId in a ? (a[t.$$intervalId].reject("canceled"), e.clearInterval(t.$$intervalId), delete a[t.$$intervalId], !0) : !1
           }, i
       }]
   }
   function gn() {
       this.$get = function() {
           return {
               id: "en-us",
               NUMBER_FORMATS: {
                   DECIMAL_SEP: ".",
                   GROUP_SEP: ",",
                   PATTERNS: [{
                       minInt: 1,
                       minFrac: 0,
                       maxFrac: 3,
                       posPre: "",
                       posSuf: "",
                       negPre: "-",
                       negSuf: "",
                       gSize: 3,
                       lgSize: 3
                   }, {
                       minInt: 1,
                       minFrac: 2,
                       maxFrac: 2,
                       posPre: "¤",
                       posSuf: "",
                       negPre: "(¤",
                       negSuf: ")",
                       gSize: 3,
                       lgSize: 3
                   }],
                   CURRENCY_SYM: "$"
               },
               DATETIME_FORMATS: {
                   MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split(","),
                   SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),
                   DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
                   SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),
                   AMPMS: ["AM", "PM"],
                   medium: "MMM d, y h:mm:ss a",
                   "short": "M/d/yy h:mm a",
                   fullDate: "EEEE, MMMM d, y",
                   longDate: "MMMM d, y",
                   mediumDate: "MMM d, y",
                   shortDate: "M/d/yy",
                   mediumTime: "h:mm:ss a",
                   shortTime: "h:mm a"
               },
               pluralCat: function(t) {
                   return 1 === t ? "one" : "other"
               }
           }
       }
   }
   function vn(t) {
       for (var e = t.split("/"), n = e.length; n--;) e[n] = Y(e[n]);
       return e.join("/")
   }
   function yn(t, e) {
       var n = ir(t);
       e.$$protocol = n.protocol, e.$$host = n.hostname, e.$$port = d(n.port) || ra[n.protocol] || null
   }
   function bn(t, e) {
       var n = "/" !== t.charAt(0);
       n && (t = "/" + t);
       var r = ir(t);
       e.$$path = decodeURIComponent(n && "/" === r.pathname.charAt(0) ? r.pathname.substring(1) : r.pathname), e.$$search = W(r.search), e.$$hash = decodeURIComponent(r.hash), e.$$path && "/" != e.$$path.charAt(0) && (e.$$path = "/" + e.$$path)
   }
   function wn(t, e) {
       return 0 === e.indexOf(t) ? e.substr(t.length) : void 0
   }
   function xn(t) {
       var e = t.indexOf("#");
       return -1 == e ? t : t.substr(0, e)
   }
   function kn(t) {
       return t.replace(/(#.+)|#$/, "$1")
   }
   function Sn(t) {
       return t.substr(0, xn(t).lastIndexOf("/") + 1)
   }
   function Cn(t) {
       return t.substring(0, t.indexOf("/", t.indexOf("//") + 2))
   }
   function An(t, e) {
       this.$$html5 = !0, e = e || "";
       var r = Sn(t);
       yn(t, this), this.$$parse = function(t) {
           var e = wn(r, t);
           if (!b(e)) throw ia("ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', t, r);
           bn(e, this), this.$$path || (this.$$path = "/"), this.$$compose()
       }, this.$$compose = function() {
           var t = J(this.$$search),
               e = this.$$hash ? "#" + Y(this.$$hash) : "";
           this.$$url = vn(this.$$path) + (t ? "?" + t : "") + e, this.$$absUrl = r + this.$$url.substr(1)
       }, this.$$parseLinkUrl = function(i, a) {
           if (a && "#" === a[0]) return this.hash(a.slice(1)), !0;
           var o, s, u;
           return (o = wn(t, i)) !== n ? (s = o, u = (o = wn(e, o)) !== n ? r + (wn("/", o) || o) : t + s) : (o = wn(r, i)) !== n ? u = r + o : r == i + "/" && (u = r), u && this.$$parse(u), !!u
       }
   }
   function On(t, e) {
       var n = Sn(t);
       yn(t, this), this.$$parse = function(r) {
           function i(t, e, n) {
               var r, i = /^\/[A-Z]:(\/.*)/;
               return 0 === e.indexOf(n) && (e = e.replace(n, "")), i.exec(e) ? t : (r = i.exec(t), r ? r[1] : t)
           }
           var a, o = wn(t, r) || wn(n, r);
           "#" === o.charAt(0) ? (a = wn(e, o), g(a) && (a = o)) : a = this.$$html5 ? o : "", bn(a, this), this.$$path = i(this.$$path, a, t), this.$$compose()
       }, this.$$compose = function() {
           var n = J(this.$$search),
               r = this.$$hash ? "#" + Y(this.$$hash) : "";
           this.$$url = vn(this.$$path) + (n ? "?" + n : "") + r, this.$$absUrl = t + (this.$$url ? e + this.$$url : "")
       }, this.$$parseLinkUrl = function(e) {
           return xn(t) == xn(e) ? (this.$$parse(e), !0) : !1
       }
   }
   function En(t, e) {
       this.$$html5 = !0, On.apply(this, arguments);
       var n = Sn(t);
       this.$$parseLinkUrl = function(r, i) {
           if (i && "#" === i[0]) return this.hash(i.slice(1)), !0;
           var a, o;
           return t == xn(r) ? a = r : (o = wn(n, r)) ? a = t + e + o : n === r + "/" && (a = n), a && this.$$parse(a), !!a
       }, this.$$compose = function() {
           var n = J(this.$$search),
               r = this.$$hash ? "#" + Y(this.$$hash) : "";
           this.$$url = vn(this.$$path) + (n ? "?" + n : "") + r, this.$$absUrl = t + e + this.$$url
       }
   }
   function jn(t) {
       return function() {
           return this[t]
       }
   }
   function Nn(t, e) {
       return function(n) {
           return g(n) ? this[t] : (this[t] = e(n), this.$$compose(), this)
       }
   }
   function Tn() {
       var t = "",
           e = {
               enabled: !1,
               requireBase: !0,
               rewriteLinks: !0
           };
       this.hashPrefix = function(e) {
           return v(e) ? (t = e, this) : t
       }, this.html5Mode = function(t) {
           return N(t) ? (e.enabled = t, this) : y(t) ? (N(t.enabled) && (e.enabled = t.enabled), N(t.requireBase) && (e.requireBase = t.requireBase), N(t.rewriteLinks) && (e.rewriteLinks = t.rewriteLinks), this) : e
       }, this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function(n, r, i, a, o) {
           function s(t, e, n) {
               var i = l.url(),
                   a = l.$$state;
               try {
                   r.url(t, e, n), l.$$state = r.state()
               } catch (o) {
                   throw l.url(i), l.$$state = a, o
               }
           }
           function u(t, e) {
               n.$broadcast("$locationChangeSuccess", l.absUrl(), t, l.$$state, e)
           }
           var l, c, f, d = r.baseHref(),
               h = r.url();
           if (e.enabled) {
               if (!d && e.requireBase) throw ia("nobase", "$location in HTML5 mode requires a <base> tag to be present!");
               f = Cn(h) + (d || "/"), c = i.history ? An : En
           } else f = xn(h), c = On;
           l = new c(f, "#" + t), l.$$parseLinkUrl(h, h), l.$$state = r.state();
           var p = /^\s*(javascript|mailto):/i;
           a.on("click", function(t) {
               if (e.rewriteLinks && !t.ctrlKey && !t.metaKey && !t.shiftKey && 2 != t.which && 2 != t.button) {
                   for (var i = Qr(t.target);
                       "a" !== V(i[0]);)
                       if (i[0] === a[0] || !(i = i.parent())[0]) return;
                   var s = i.prop("href"),
                       u = i.attr("href") || i.attr("xlink:href");
                   y(s) && "[object SVGAnimatedString]" === s.toString() && (s = ir(s.animVal).href), p.test(s) || !s || i.attr("target") || t.isDefaultPrevented() || l.$$parseLinkUrl(s, u) && (t.preventDefault(), l.absUrl() != r.url() && (n.$apply(), o.angular["ff-684208-preventDefault"] = !0))
               }
           }), kn(l.absUrl()) != kn(h) && r.url(l.absUrl(), !0);
           var $ = !0;
           return r.onUrlChange(function(t, e) {
               n.$evalAsync(function() {
                   var r, i = l.absUrl(),
                       a = l.$$state;
                   l.$$parse(t), l.$$state = e, r = n.$broadcast("$locationChangeStart", t, i, e, a).defaultPrevented, l.absUrl() === t && (r ? (l.$$parse(i), l.$$state = a, s(i, !1, a)) : ($ = !1, u(i, a)))
               }), n.$$phase || n.$digest()
           }), n.$watch(function() {
               var t = kn(r.url()),
                   e = kn(l.absUrl()),
                   a = r.state(),
                   o = l.$$replace,
                   c = t !== e || l.$$html5 && i.history && a !== l.$$state;
               ($ || c) && ($ = !1, n.$evalAsync(function() {
                   var e = l.absUrl(),
                       r = n.$broadcast("$locationChangeStart", e, t, l.$$state, a).defaultPrevented;
                   l.absUrl() === e && (r ? (l.$$parse(t), l.$$state = a) : (c && s(e, o, a === l.$$state ? null : l.$$state), u(t, a)))
               })), l.$$replace = !1
           }), l
       }]
   }
   function Mn() {
       var t = !0,
           e = this;
       this.debugEnabled = function(e) {
           return v(e) ? (t = e, this) : t
       }, this.$get = ["$window", function(n) {
           function r(t) {
               return t instanceof Error && (t.stack ? t = t.message && -1 === t.stack.indexOf(t.message) ? "Error: " + t.message + "\n" + t.stack : t.stack : t.sourceURL && (t = t.message + "\n" + t.sourceURL + ":" + t.line)), t
           }
           function i(t) {
               var e = n.console || {},
                   i = e[t] || e.log || p,
                   o = !1;
               try {
                   o = !!i.apply
               } catch (s) {}
               return o ? function() {
                   var t = [];
                   return a(arguments, function(e) {
                       t.push(r(e))
                   }), i.apply(e, t)
               } : function(t, e) {
                   i(t, null == e ? "" : e)
               }
           }
           return {
               log: i("log"),
               info: i("info"),
               warn: i("warn"),
               error: i("error"),
               debug: function() {
                   var n = i("debug");
                   return function() {
                       t && n.apply(e, arguments)
                   }
               }()
           }
       }]
   }
   function Pn(t, e) {
       if ("__defineGetter__" === t || "__defineSetter__" === t || "__lookupGetter__" === t || "__lookupSetter__" === t || "__proto__" === t) throw oa("isecfld", "Attempting to access a disallowed field in Angular expressions! Expression: {0}", e);
       return t
   }
   function Vn(t, e) {
       if (t) {
           if (t.constructor === t) throw oa("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
           if (t.window === t) throw oa("isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", e);
           if (t.children && (t.nodeName || t.prop && t.attr && t.find)) throw oa("isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", e);
           if (t === Object) throw oa("isecobj", "Referencing Object in Angular expressions is disallowed! Expression: {0}", e)
       }
       return t
   }
   function qn(t, e) {
       if (t) {
           if (t.constructor === t) throw oa("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
           if (t === sa || t === ua || t === la) throw oa("isecff", "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}", e)
       }
   }
   function Dn(t) {
       return t.constant
   }
   function Rn(t, e, n, r, i) {
       Vn(t, i), Vn(e, i);
       for (var a, o = n.split("."), s = 0; o.length > 1; s++) {
           a = Pn(o.shift(), i);
           var u = 0 === s && e && e[a] || t[a];
           u || (u = {}, t[a] = u), t = Vn(u, i)
       }
       return a = Pn(o.shift(), i), Vn(t[a], i), t[a] = r, r
   }
   function In(t) {
       return "constructor" == t
   }
   function _n(t, e, r, i, a, o, s) {
       Pn(t, o), Pn(e, o), Pn(r, o), Pn(i, o), Pn(a, o);
       var u = function(t) {
               return Vn(t, o)
           },
           l = s || In(t) ? u : $,
           c = s || In(e) ? u : $,
           f = s || In(r) ? u : $,
           d = s || In(i) ? u : $,
           h = s || In(a) ? u : $;
       return function(o, s) {
           var u = s && s.hasOwnProperty(t) ? s : o;
           return null == u ? u : (u = l(u[t]), e ? null == u ? n : (u = c(u[e]), r ? null == u ? n : (u = f(u[r]), i ? null == u ? n : (u = d(u[i]), a ? null == u ? n : u = h(u[a]) : u) : u) : u) : u)
       }
   }
   function Un(t, e) {
       return function(n, r) {
           return t(n, r, Vn, e)
       }
   }
   function Ln(t, e, r) {
       var i = e.expensiveChecks,
           o = i ? ma : $a,
           s = o[t];
       if (s) return s;
       var u = t.split("."),
           l = u.length;
       if (e.csp) s = 6 > l ? _n(u[0], u[1], u[2], u[3], u[4], r, i) : function(t, e) {
           var a, o = 0;
           do a = _n(u[o++], u[o++], u[o++], u[o++], u[o++], r, i)(t, e), e = n, t = a; while (l > o);
           return a
       };
       else {
           var c = "";
           i && (c += "s = eso(s, fe);\nl = eso(l, fe);\n");
           var f = i;
           a(u, function(t, e) {
               Pn(t, r);
               var n = (e ? "s" : '((l&&l.hasOwnProperty("' + t + '"))?l:s)') + "." + t;
               (i || In(t)) && (n = "eso(" + n + ", fe)", f = !0), c += "if(s == null) return undefined;\ns=" + n + ";\n"
           }), c += "return s;";
           var d = new Function("s", "l", "eso", "fe", c);
           d.toString = m(c), f && (d = Un(d, r)), s = d
       }
       return s.sharedGetter = !0, s.assign = function(e, n, r) {
           return Rn(e, r, t, n, t)
       }, o[t] = s, s
   }
   function Fn(t) {
       return k(t.valueOf) ? t.valueOf() : ga.call(t)
   }
   function Hn() {
       var t = le(),
           e = le();
       this.$get = ["$filter", "$sniffer", function(n, r) {
           function i(t) {
               var e = t;
               return t.sharedGetter && (e = function(e, n) {
                   return t(e, n)
               }, e.literal = t.literal, e.constant = t.constant, e.assign = t.assign), e
           }
           function o(t, e) {
               for (var n = 0, r = t.length; r > n; n++) {
                   var i = t[n];
                   i.constant || (i.inputs ? o(i.inputs, e) : -1 === e.indexOf(i) && e.push(i))
               }
               return e
           }
           function s(t, e) {
               return null == t || null == e ? t === e : "object" == typeof t && (t = Fn(t), "object" == typeof t) ? !1 : t === e || t !== t && e !== e
           }
           function u(t, e, n, r) {
               var i, a = r.$$inputs || (r.$$inputs = o(r.inputs, []));
               if (1 === a.length) {
                   var u = s;
                   return a = a[0], t.$watch(function(t) {
                       var e = a(t);
                       return s(e, u) || (i = r(t), u = e && Fn(e)), i
                   }, e, n)
               }
               for (var l = [], c = 0, f = a.length; f > c; c++) l[c] = s;
               return t.$watch(function(t) {
                   for (var e = !1, n = 0, o = a.length; o > n; n++) {
                       var u = a[n](t);
                       (e || (e = !s(u, l[n]))) && (l[n] = u && Fn(u))
                   }
                   return e && (i = r(t)), i
               }, e, n)
           }
           function l(t, e, n, r) {
               var i, a;
               return i = t.$watch(function(t) {
                   return r(t)
               }, function(t, n, r) {
                   a = t, k(e) && e.apply(this, arguments), v(t) && r.$$postDigest(function() {
                       v(a) && i()
                   })
               }, n)
           }
           function c(t, e, n, r) {
               function i(t) {
                   var e = !0;
                   return a(t, function(t) {
                       v(t) || (e = !1)
                   }), e
               }
               var o, s;
               return o = t.$watch(function(t) {
                   return r(t)
               }, function(t, n, r) {
                   s = t, k(e) && e.call(this, t, n, r), i(t) && r.$$postDigest(function() {
                       i(s) && o()
                   })
               }, n)
           }
           function f(t, e, n, r) {
               var i;
               return i = t.$watch(function(t) {
                   return r(t)
               }, function() {
                   k(e) && e.apply(this, arguments), i()
               }, n)
           }
           function d(t, e) {
               if (!e) return t;
               var n = t.$$watchDelegate,
                   r = n !== c && n !== l,
                   i = r ? function(n, r) {
                       var i = t(n, r);
                       return e(i, n, r)
                   } : function(n, r) {
                       var i = t(n, r),
                           a = e(i, n, r);
                       return v(i) ? a : i
                   };
               return t.$$watchDelegate && t.$$watchDelegate !== u ? i.$$watchDelegate = t.$$watchDelegate : e.$stateful || (i.$$watchDelegate = u, i.inputs = [t]), i
           }
           var h = {
                   csp: r.csp,
                   expensiveChecks: !1
               },
               $ = {
                   csp: r.csp,
                   expensiveChecks: !0
               };
           return function(r, a, o) {
               var s, m, g;
               switch (typeof r) {
                   case "string":
                       g = r = r.trim();
                       var v = o ? e : t;
                       if (s = v[g], !s) {
                           ":" === r.charAt(0) && ":" === r.charAt(1) && (m = !0, r = r.substring(2));
                           var y = o ? $ : h,
                               b = new ha(y),
                               w = new pa(b, n, y);
                           s = w.parse(r), s.constant ? s.$$watchDelegate = f : m ? (s = i(s), s.$$watchDelegate = s.literal ? c : l) : s.inputs && (s.$$watchDelegate = u), v[g] = s
                       }
                       return d(s, a);
                   case "function":
                       return d(r, a);
                   default:
                       return d(p, a)
               }
           }
       }]
   }
   function Bn() {
       this.$get = ["$rootScope", "$exceptionHandler", function(t, e) {
           return Gn(function(e) {
               t.$evalAsync(e)
           }, e)
       }]
   }
   function zn() {
       this.$get = ["$browser", "$exceptionHandler", function(t, e) {
           return Gn(function(e) {
               t.defer(e)
           }, e)
       }]
   }
   function Gn(t, e) {
       function i(t, e, n) {
           function r(e) {
               return function(n) {
                   i || (i = !0, e.call(t, n))
               }
           }
           var i = !1;
           return [r(e), r(n)]
       }
       function o() {
           this.$$state = {
               status: 0
           }
       }
       function s(t, e) {
           return function(n) {
               e.call(t, n)
           }
       }
       function u(t) {
           var r, i, a;
           a = t.pending, t.processScheduled = !1, t.pending = n;
           for (var o = 0, s = a.length; s > o; ++o) {
               i = a[o][0], r = a[o][t.status];
               try {
                   k(r) ? i.resolve(r(t.value)) : 1 === t.status ? i.resolve(t.value) : i.reject(t.value)
               } catch (u) {
                   i.reject(u), e(u)
               }
           }
       }
       function l(e) {
           !e.processScheduled && e.pending && (e.processScheduled = !0, t(function() {
               u(e)
           }))
       }
       function c() {
           this.promise = new o, this.resolve = s(this, this.resolve), this.reject = s(this, this.reject), this.notify = s(this, this.notify)
       }
       function f(t) {
           var e = new c,
               n = 0,
               r = ci(t) ? [] : {};
           return a(t, function(t, i) {
               n++, g(t).then(function(t) {
                   r.hasOwnProperty(i) || (r[i] = t, --n || e.resolve(r))
               }, function(t) {
                   r.hasOwnProperty(i) || e.reject(t)
               })
           }), 0 === n && e.resolve(r), e.promise
       }
       var d = r("$q", TypeError),
           h = function() {
               return new c
           };
       o.prototype = {
           then: function(t, e, n) {
               var r = new c;
               return this.$$state.pending = this.$$state.pending || [], this.$$state.pending.push([r, t, e, n]), this.$$state.status > 0 && l(this.$$state), r.promise
           },
           "catch": function(t) {
               return this.then(null, t)
           },
           "finally": function(t, e) {
               return this.then(function(e) {
                   return m(e, !0, t)
               }, function(e) {
                   return m(e, !1, t)
               }, e)
           }
       }, c.prototype = {
           resolve: function(t) {
               this.promise.$$state.status || (t === this.promise ? this.$$reject(d("qcycle", "Expected promise to be resolved with value other than itself '{0}'", t)) : this.$$resolve(t))
           },
           $$resolve: function(t) {
               var n, r;
               r = i(this, this.$$resolve, this.$$reject);
               try {
                   (y(t) || k(t)) && (n = t && t.then), k(n) ? (this.promise.$$state.status = -1, n.call(t, r[0], r[1], this.notify)) : (this.promise.$$state.value = t, this.promise.$$state.status = 1, l(this.promise.$$state))
               } catch (a) {
                   r[1](a), e(a)
               }
           },
           reject: function(t) {
               this.promise.$$state.status || this.$$reject(t)
           },
           $$reject: function(t) {
               this.promise.$$state.value = t, this.promise.$$state.status = 2, l(this.promise.$$state)
           },
           notify: function(n) {
               var r = this.promise.$$state.pending;
               this.promise.$$state.status <= 0 && r && r.length && t(function() {
                   for (var t, i, a = 0, o = r.length; o > a; a++) {
                       i = r[a][0], t = r[a][3];
                       try {
                           i.notify(k(t) ? t(n) : n)
                       } catch (s) {
                           e(s)
                       }
                   }
               })
           }
       };
       var p = function(t) {
               var e = new c;
               return e.reject(t), e.promise
           },
           $ = function(t, e) {
               var n = new c;
               return e ? n.resolve(t) : n.reject(t), n.promise
           },
           m = function(t, e, n) {
               var r = null;
               try {
                   k(n) && (r = n())
               } catch (i) {
                   return $(i, !1)
               }
               return T(r) ? r.then(function() {
                   return $(t, e)
               }, function(t) {
                   return $(t, !1)
               }) : $(t, e)
           },
           g = function(t, e, n, r) {
               var i = new c;
               return i.resolve(t), i.promise.then(e, n, r)
           },
           v = function b(t) {
               function e(t) {
                   r.resolve(t)
               }
               function n(t) {
                   r.reject(t)
               }
               if (!k(t)) throw d("norslvr", "Expected resolverFn, got '{0}'", t);
               if (!(this instanceof b)) return new b(t);
               var r = new c;
               return t(e, n), r.promise
           };
       return v.defer = h, v.reject = p, v.when = g, v.all = f, v
   }
   function Wn() {
       this.$get = ["$window", "$timeout", function(t, e) {
           var n = t.requestAnimationFrame || t.webkitRequestAnimationFrame,
               r = t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.webkitCancelRequestAnimationFrame,
               i = !!n,
               a = i ? function(t) {
                   var e = n(t);
                   return function() {
                       r(e)
                   }
               } : function(t) {
                   var n = e(t, 16.66, !1);
                   return function() {
                       e.cancel(n)
                   }
               };
           return a.supported = i, a
       }]
   }
   function Jn() {
       var t = 10,
           e = r("$rootScope"),
           n = null,
           o = null;
       this.digestTtl = function(e) {
           return arguments.length && (t = e), t
       }, this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function(r, s, u, c) {
           function f() {
               this.$id = l(), this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null, this.$root = this, this.$$destroyed = !1, this.$$listeners = {}, this.$$listenerCount = {}, this.$$isolateBindings = null
           }
           function d(t) {
               if (w.$$phase) throw e("inprog", "{0} already in progress", w.$$phase);
               w.$$phase = t
           }
           function h() {
               w.$$phase = null
           }
           function $(t, e, n) {
               do t.$$listenerCount[n] -= e, 0 === t.$$listenerCount[n] && delete t.$$listenerCount[n]; while (t = t.$parent)
           }
           function m() {}
           function v() {
               for (; C.length;) try {
                   C.shift()()
               } catch (t) {
                   s(t)
               }
               o = null
           }
           function b() {
               null === o && (o = c.defer(function() {
                   w.$apply(v)
               }))
           }
           f.prototype = {
               constructor: f,
               $new: function(t, e) {
                   function n() {
                       r.$$destroyed = !0
                   }
                   var r;
                   return e = e || this, t ? (r = new f, r.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = function() {
                       this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null, this.$$listeners = {}, this.$$listenerCount = {}, this.$id = l(), this.$$ChildScope = null
                   }, this.$$ChildScope.prototype = this), r = new this.$$ChildScope), r.$parent = e, r.$$prevSibling = e.$$childTail, e.$$childHead ? (e.$$childTail.$$nextSibling = r, e.$$childTail = r) : e.$$childHead = e.$$childTail = r, (t || e != this) && r.$on("$destroy", n), r
               },
               $watch: function(t, e, r) {
                   var i = u(t);
                   if (i.$$watchDelegate) return i.$$watchDelegate(this, e, r, i);
                   var a = this,
                       o = a.$$watchers,
                       s = {
                           fn: e,
                           last: m,
                           get: i,
                           exp: t,
                           eq: !!r
                       };
                   return n = null, k(e) || (s.fn = p), o || (o = a.$$watchers = []), o.unshift(s),
                       function() {
                           q(o, s), n = null
                       }
               },
               $watchGroup: function(t, e) {
                   function n() {
                       u = !1, l ? (l = !1, e(i, i, s)) : e(i, r, s)
                   }
                   var r = new Array(t.length),
                       i = new Array(t.length),
                       o = [],
                       s = this,
                       u = !1,
                       l = !0;
                   if (!t.length) {
                       var c = !0;
                       return s.$evalAsync(function() {
                               c && e(i, i, s)
                           }),
                           function() {
                               c = !1
                           }
                   }
                   return 1 === t.length ? this.$watch(t[0], function(t, n, a) {
                       i[0] = t, r[0] = n, e(i, t === n ? i : r, a)
                   }) : (a(t, function(t, e) {
                       var a = s.$watch(t, function(t, a) {
                           i[e] = t, r[e] = a, u || (u = !0, s.$evalAsync(n))
                       });
                       o.push(a)
                   }), function() {
                       for (; o.length;) o.shift()()
                   })
               },
               $watchCollection: function(t, e) {
                   function n(t) {
                       a = t;
                       var e, n, r, s, u;
                       if (!g(a)) {
                           if (y(a))
                               if (i(a)) {
                                   o !== h && (o = h, m = o.length = 0, f++), e = a.length, m !== e && (f++, o.length = m = e);
                                   for (var l = 0; e > l; l++) u = o[l], s = a[l], r = u !== u && s !== s, r || u === s || (f++, o[l] = s)
                               } else {
                                   o !== p && (o = p = {}, m = 0, f++), e = 0;
                                   for (n in a) a.hasOwnProperty(n) && (e++, s = a[n], u = o[n], n in o ? (r = u !== u && s !== s, r || u === s || (f++, o[n] = s)) : (m++, o[n] = s, f++));
                                   if (m > e) {
                                       f++;
                                       for (n in o) a.hasOwnProperty(n) || (m--, delete o[n])
                                   }
                               } else o !== a && (o = a, f++);
                           return f
                       }
                   }
                   function r() {
                       if ($ ? ($ = !1, e(a, a, l)) : e(a, s, l), c)
                           if (y(a))
                               if (i(a)) {
                                   s = new Array(a.length);
                                   for (var t = 0; t < a.length; t++) s[t] = a[t]
                               } else {
                                   s = {};
                                   for (var n in a) Jr.call(a, n) && (s[n] = a[n])
                               } else s = a
                   }
                   n.$stateful = !0;
                   var a, o, s, l = this,
                       c = e.length > 1,
                       f = 0,
                       d = u(t, n),
                       h = [],
                       p = {},
                       $ = !0,
                       m = 0;
                   return this.$watch(d, r)
               },
               $digest: function() {
                   var r, i, a, u, l, f, p, $, g, y, b = t,
                       C = this,
                       A = [];
                   d("$digest"), c.$$checkUrlChange(), this === w && null !== o && (c.defer.cancel(o), v()), n = null;
                   do {
                       for (f = !1, $ = C; x.length;) {
                           try {
                               y = x.shift(), y.scope.$eval(y.expression, y.locals)
                           } catch (O) {
                               s(O)
                           }
                           n = null
                       }
                       t: do {
                           if (u = $.$$watchers)
                               for (l = u.length; l--;) try {
                                   if (r = u[l])
                                       if ((i = r.get($)) === (a = r.last) || (r.eq ? I(i, a) : "number" == typeof i && "number" == typeof a && isNaN(i) && isNaN(a))) {
                                           if (r === n) {
                                               f = !1;
                                               break t
                                           }
                                       } else f = !0, n = r, r.last = r.eq ? D(i, null) : i, r.fn(i, a === m ? i : a, $), 5 > b && (g = 4 - b, A[g] || (A[g] = []), A[g].push({
                                           msg: k(r.exp) ? "fn: " + (r.exp.name || r.exp.toString()) : r.exp,
                                           newVal: i,
                                           oldVal: a
                                       }))
                               } catch (O) {
                                   s(O)
                               }
                           if (!(p = $.$$childHead || $ !== C && $.$$nextSibling))
                               for (; $ !== C && !(p = $.$$nextSibling);) $ = $.$parent
                       } while ($ = p);
                       if ((f || x.length) && !b--) throw h(), e("infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", t, A)
                   } while (f || x.length);
                   for (h(); S.length;) try {
                       S.shift()()
                   } catch (O) {
                       s(O)
                   }
               },
               $destroy: function() {
                   if (!this.$$destroyed) {
                       var t = this.$parent;
                       if (this.$broadcast("$destroy"), this.$$destroyed = !0, this !== w) {
                           for (var e in this.$$listenerCount) $(this, this.$$listenerCount[e], e);
                           t.$$childHead == this && (t.$$childHead = this.$$nextSibling), t.$$childTail == this && (t.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = p, this.$on = this.$watch = this.$watchGroup = function() {
                               return p
                           }, this.$$listeners = {}, this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = this.$$watchers = null
                       }
                   }
               },
               $eval: function(t, e) {
                   return u(t)(this, e)
               },
               $evalAsync: function(t, e) {
                   w.$$phase || x.length || c.defer(function() {
                       x.length && w.$digest()
                   }), x.push({
                       scope: this,
                       expression: t,
                       locals: e
                   })
               },
               $$postDigest: function(t) {
                   S.push(t)
               },
               $apply: function(t) {
                   try {
                       return d("$apply"), this.$eval(t)
                   } catch (e) {
                       s(e)
                   } finally {
                       h();
                       try {
                           w.$digest()
                       } catch (e) {
                           throw s(e), e
                       }
                   }
               },
               $applyAsync: function(t) {
                   function e() {
                       n.$eval(t)
                   }
                   var n = this;
                   t && C.push(e), b()
               },
               $on: function(t, e) {
                   var n = this.$$listeners[t];
                   n || (this.$$listeners[t] = n = []), n.push(e);
                   var r = this;
                   do r.$$listenerCount[t] || (r.$$listenerCount[t] = 0), r.$$listenerCount[t]++; while (r = r.$parent);
                   var i = this;
                   return function() {
                       var r = n.indexOf(e); - 1 !== r && (n[r] = null, $(i, 1, t))
                   }
               },
               $emit: function(t) {
                   var e, n, r, i = [],
                       a = this,
                       o = !1,
                       u = {
                           name: t,
                           targetScope: a,
                           stopPropagation: function() {
                               o = !0
                           },
                           preventDefault: function() {
                               u.defaultPrevented = !0
                           },
                           defaultPrevented: !1
                       },
                       l = _([u], arguments, 1);
                   do {
                       for (e = a.$$listeners[t] || i, u.currentScope = a, n = 0, r = e.length; r > n; n++)
                           if (e[n]) try {
                               e[n].apply(null, l)
                           } catch (c) {
                               s(c)
                           } else e.splice(n, 1), n--, r--;
                       if (o) return u.currentScope = null, u;
                       a = a.$parent
                   } while (a);
                   return u.currentScope = null, u
               },
               $broadcast: function(t) {
                   var e = this,
                       n = e,
                       r = e,
                       i = {
                           name: t,
                           targetScope: e,
                           preventDefault: function() {
                               i.defaultPrevented = !0
                           },
                           defaultPrevented: !1
                       };
                   if (!e.$$listenerCount[t]) return i;
                   for (var a, o, u, l = _([i], arguments, 1); n = r;) {
                       for (i.currentScope = n, a = n.$$listeners[t] || [], o = 0, u = a.length; u > o; o++)
                           if (a[o]) try {
                               a[o].apply(null, l)
                           } catch (c) {
                               s(c)
                           } else a.splice(o, 1), o--, u--;
                       if (!(r = n.$$listenerCount[t] && n.$$childHead || n !== e && n.$$nextSibling))
                           for (; n !== e && !(r = n.$$nextSibling);) n = n.$parent
                   }
                   return i.currentScope = null, i
               }
           };
           var w = new f,
               x = w.$$asyncQueue = [],
               S = w.$$postDigestQueue = [],
               C = w.$$applyAsyncQueue = [];
           return w
       }]
   }
   function Yn() {
       var t = /^\s*(https?|ftp|mailto|tel|file):/,
           e = /^\s*((https?|ftp|file|blob):|data:image\/)/;
       this.aHrefSanitizationWhitelist = function(e) {
           return v(e) ? (t = e, this) : t
       }, this.imgSrcSanitizationWhitelist = function(t) {
           return v(t) ? (e = t, this) : e
       }, this.$get = function() {
           return function(n, r) {
               var i, a = r ? e : t;
               return i = ir(n).href, "" === i || i.match(a) ? n : "unsafe:" + i
           }
       }
   }
   function Zn(t) {
       if ("self" === t) return t;
       if (b(t)) {
           if (t.indexOf("***") > -1) throw va("iwcard", "Illegal sequence *** in string matcher.  String: {0}", t);
           return t = di(t).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"), new RegExp("^" + t + "$")
       }
       if (S(t)) return new RegExp("^" + t.source + "$");
       throw va("imatcher", 'Matchers may only be "self", string patterns or RegExp objects')
   }
   function Kn(t) {
       var e = [];
       return v(t) && a(t, function(t) {
           e.push(Zn(t))
       }), e
   }
   function Xn() {
       this.SCE_CONTEXTS = ya;
       var t = ["self"],
           e = [];
       this.resourceUrlWhitelist = function(e) {
           return arguments.length && (t = Kn(e)), t
       }, this.resourceUrlBlacklist = function(t) {
           return arguments.length && (e = Kn(t)), e
       }, this.$get = ["$injector", function(r) {
           function i(t, e) {
               return "self" === t ? ar(e) : !!t.exec(e.href)
           }
           function a(n) {
               var r, a, o = ir(n.toString()),
                   s = !1;
               for (r = 0, a = t.length; a > r; r++)
                   if (i(t[r], o)) {
                       s = !0;
                       break
                   }
               if (s)
                   for (r = 0, a = e.length; a > r; r++)
                       if (i(e[r], o)) {
                           s = !1;
                           break
                       }
               return s
           }
           function o(t) {
               var e = function(t) {
                   this.$$unwrapTrustedValue = function() {
                       return t
                   }
               };
               return t && (e.prototype = new t), e.prototype.valueOf = function() {
                   return this.$$unwrapTrustedValue()
               }, e.prototype.toString = function() {
                   return this.$$unwrapTrustedValue().toString()
               }, e
           }
           function s(t, e) {
               var r = d.hasOwnProperty(t) ? d[t] : null;
               if (!r) throw va("icontext", "Attempted to trust a value in invalid context. Context: {0}; Value: {1}", t, e);
               if (null === e || e === n || "" === e) return e;
               if ("string" != typeof e) throw va("itype", "Attempted to trust a non-string value in a content requiring a string: Context: {0}", t);
               return new r(e)
           }
           function u(t) {
               return t instanceof f ? t.$$unwrapTrustedValue() : t
           }
           function l(t, e) {
               if (null === e || e === n || "" === e) return e;
               var r = d.hasOwnProperty(t) ? d[t] : null;
               if (r && e instanceof r) return e.$$unwrapTrustedValue();
               if (t === ya.RESOURCE_URL) {
                   if (a(e)) return e;
                   throw va("insecurl", "Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}", e.toString())
               }
               if (t === ya.HTML) return c(e);
               throw va("unsafe", "Attempting to use an unsafe value in a safe context.")
           }
           var c = function() {
               throw va("unsafe", "Attempting to use an unsafe value in a safe context.")
           };
           r.has("$sanitize") && (c = r.get("$sanitize"));
           var f = o(),
               d = {};
           return d[ya.HTML] = o(f), d[ya.CSS] = o(f), d[ya.URL] = o(f), d[ya.JS] = o(f), d[ya.RESOURCE_URL] = o(d[ya.URL]), {
               trustAs: s,
               getTrusted: l,
               valueOf: u
           }
       }]
   }
   function Qn() {
       var t = !0;
       this.enabled = function(e) {
           return arguments.length && (t = !!e), t
       }, this.$get = ["$parse", "$sceDelegate", function(e, n) {
           if (t && 8 > Xr) throw va("iequirks", "Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");
           var r = R(ya);
           r.isEnabled = function() {
               return t
           }, r.trustAs = n.trustAs, r.getTrusted = n.getTrusted, r.valueOf = n.valueOf, t || (r.trustAs = r.getTrusted = function(t, e) {
               return e
           }, r.valueOf = $), r.parseAs = function(t, n) {
               var i = e(n);
               return i.literal && i.constant ? i : e(n, function(e) {
                   return r.getTrusted(t, e)
               })
           };
           var i = r.parseAs,
               o = r.getTrusted,
               s = r.trustAs;
           return a(ya, function(t, e) {
               var n = Wr(e);
               r[$e("parse_as_" + n)] = function(e) {
                   return i(t, e)
               }, r[$e("get_trusted_" + n)] = function(e) {
                   return o(t, e)
               }, r[$e("trust_as_" + n)] = function(e) {
                   return s(t, e)
               }
           }), r
       }]
   }
   function tr() {
       this.$get = ["$window", "$document", function(t, e) {
           var n, r, i = {},
               a = d((/android (\d+)/.exec(Wr((t.navigator || {}).userAgent)) || [])[1]),
               o = /Boxee/i.test((t.navigator || {}).userAgent),
               s = e[0] || {},
               u = /^(Moz|webkit|ms)(?=[A-Z])/,
               l = s.body && s.body.style,
               c = !1,
               f = !1;
           if (l) {
               for (var h in l)
                   if (r = u.exec(h)) {
                       n = r[0], n = n.substr(0, 1).toUpperCase() + n.substr(1);
                       break
                   }
               n || (n = "WebkitOpacity" in l && "webkit"), c = !!("transition" in l || n + "Transition" in l), f = !!("animation" in l || n + "Animation" in l), !a || c && f || (c = b(s.body.style.webkitTransition), f = b(s.body.style.webkitAnimation))
           }
           return {
               history: !(!t.history || !t.history.pushState || 4 > a || o),
               hasEvent: function(t) {
                   if ("input" === t && 11 >= Xr) return !1;
                   if (g(i[t])) {
                       var e = s.createElement("div");
                       i[t] = "on" + t in e
                   }
                   return i[t]
               },
               csp: hi(),
               vendorPrefix: n,
               transitions: c,
               animations: f,
               android: a
           }
       }]
   }
   function er() {
       this.$get = ["$templateCache", "$http", "$q", function(t, e, n) {
           function r(i, a) {
               function o(t) {
                   if (!a) throw Wi("tpload", "Failed to load template: {0}", i);
                   return n.reject(t)
               }
               r.totalPendingRequests++;
               var s = e.defaults && e.defaults.transformResponse;
               ci(s) ? s = s.filter(function(t) {
                   return t !== an
               }) : s === an && (s = null);
               var u = {
                   cache: t,
                   transformResponse: s
               };
               return e.get(i, u).finally(function() {
                   r.totalPendingRequests--
               }).then(function(t) {
                   return t.data
               }, o)
           }
           return r.totalPendingRequests = 0, r
       }]
   }
   function nr() {
       this.$get = ["$rootScope", "$browser", "$location", function(t, e, n) {
           var r = {};
           return r.findBindings = function(t, e, n) {
               var r = t.getElementsByClassName("ng-binding"),
                   i = [];
               return a(r, function(t) {
                   var r = si.element(t).data("$binding");
                   r && a(r, function(r) {
                       if (n) {
                           var a = new RegExp("(^|\\s)" + di(e) + "(\\s|\\||$)");
                           a.test(r) && i.push(t)
                       } else -1 != r.indexOf(e) && i.push(t)
                   })
               }), i
           }, r.findModels = function(t, e, n) {
               for (var r = ["ng-", "data-ng-", "ng\\:"], i = 0; i < r.length; ++i) {
                   var a = n ? "=" : "*=",
                       o = "[" + r[i] + "model" + a + '"' + e + '"]',
                       s = t.querySelectorAll(o);
                   if (s.length) return s
               }
           }, r.getLocation = function() {
               return n.url()
           }, r.setLocation = function(e) {
               e !== n.url() && (n.url(e), t.$digest())
           }, r.whenStable = function(t) {
               e.notifyWhenNoOutstandingRequests(t)
           }, r
       }]
   }
   function rr() {
       this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function(t, e, n, r, i) {
           function a(a, s, u) {
               var l, c = v(u) && !u,
                   f = (c ? r : n).defer(),
                   d = f.promise;
               return l = e.defer(function() {
                   try {
                       f.resolve(a())
                   } catch (e) {
                       f.reject(e), i(e)
                   } finally {
                       delete o[d.$$timeoutId]
                   }
                   c || t.$apply()
               }, s), d.$$timeoutId = l, o[l] = f, d
           }
           var o = {};
           return a.cancel = function(t) {
               return t && t.$$timeoutId in o ? (o[t.$$timeoutId].reject("canceled"), delete o[t.$$timeoutId], e.defer.cancel(t.$$timeoutId)) : !1
           }, a
       }]
   }
   function ir(t) {
       var e = t;
       return Xr && (ba.setAttribute("href", e), e = ba.href), ba.setAttribute("href", e), {
           href: ba.href,
           protocol: ba.protocol ? ba.protocol.replace(/:$/, "") : "",
           host: ba.host,
           search: ba.search ? ba.search.replace(/^\?/, "") : "",
           hash: ba.hash ? ba.hash.replace(/^#/, "") : "",
           hostname: ba.hostname,
           port: ba.port,
           pathname: "/" === ba.pathname.charAt(0) ? ba.pathname : "/" + ba.pathname
       }
   }
   function ar(t) {
       var e = b(t) ? ir(t) : t;
       return e.protocol === wa.protocol && e.host === wa.host
   }
   function or() {
       this.$get = m(t)
   }
   function sr(t) {
       function e(r, i) {
           if (y(r)) {
               var o = {};
               return a(r, function(t, n) {
                   o[n] = e(n, t)
               }), o
           }
           return t.factory(r + n, i)
       }
       var n = "Filter";
       this.register = e, this.$get = ["$injector", function(t) {
           return function(e) {
               return t.get(e + n)
           }
       }], e("currency", fr), e("date", xr), e("filter", ur), e("json", kr), e("limitTo", Sr), e("lowercase", Aa), e("number", dr), e("orderBy", Cr), e("uppercase", Oa)
   }
   function ur() {
       return function(t, e, n) {
           if (!ci(t)) return t;
           var r, i;
           switch (typeof e) {
               case "function":
                   r = e;
                   break;
               case "boolean":
               case "number":
               case "string":
                   i = !0;
               case "object":
                   r = lr(e, n, i);
                   break;
               default:
                   return t
           }
           return t.filter(r)
       }
   }
   function lr(t, e, n) {
       var r, i = y(t) && "$" in t;
       return e === !0 ? e = I : k(e) || (e = function(t, e) {
           return y(t) || y(e) ? !1 : (t = Wr("" + t), e = Wr("" + e), -1 !== t.indexOf(e))
       }), r = function(r) {
           return i && !y(r) ? cr(r, t.$, e, !1) : cr(r, t, e, n)
       }
   }
   function cr(t, e, n, r, i) {
       var a = typeof t,
           o = typeof e;
       if ("string" === o && "!" === e.charAt(0)) return !cr(t, e.substring(1), n, r);
       if (ci(t)) return t.some(function(t) {
           return cr(t, e, n, r)
       });
       switch (a) {
           case "object":
               var s;
               if (r) {
                   for (s in t)
                       if ("$" !== s.charAt(0) && cr(t[s], e, n, !0)) return !0;
                   return i ? !1 : cr(t, e, n, !1)
               }
               if ("object" === o) {
                   for (s in e) {
                       var u = e[s];
                       if (!k(u)) {
                           var l = "$" === s,
                               c = l ? t : t[s];
                           if (!cr(c, u, n, l, l)) return !1
                       }
                   }
                   return !0
               }
               return n(t, e);
           case "function":
               return !1;
           default:
               return n(t, e)
       }
   }
   function fr(t) {
       var e = t.NUMBER_FORMATS;
       return function(t, n, r) {
           return g(n) && (n = e.CURRENCY_SYM), g(r) && (r = e.PATTERNS[1].maxFrac), null == t ? t : hr(t, e.PATTERNS[1], e.GROUP_SEP, e.DECIMAL_SEP, r).replace(/\u00A4/g, n)
       }
   }
   function dr(t) {
       var e = t.NUMBER_FORMATS;
       return function(t, n) {
           return null == t ? t : hr(t, e.PATTERNS[0], e.GROUP_SEP, e.DECIMAL_SEP, n)
       }
   }
   function hr(t, e, n, r, i) {
       if (!isFinite(t) || y(t)) return "";
       var a = 0 > t;
       t = Math.abs(t);
       var o = t + "",
           s = "",
           u = [],
           l = !1;
       if (-1 !== o.indexOf("e")) {
           var c = o.match(/([\d\.]+)e(-?)(\d+)/);
           c && "-" == c[2] && c[3] > i + 1 ? t = 0 : (s = o, l = !0)
       }
       if (l) i > 0 && 1 > t && (s = t.toFixed(i), t = parseFloat(s));
       else {
           var f = (o.split(xa)[1] || "").length;
           g(i) && (i = Math.min(Math.max(e.minFrac, f), e.maxFrac)), t = +(Math.round(+(t.toString() + "e" + i)).toString() + "e" + -i);
           var d = ("" + t).split(xa),
               h = d[0];
           d = d[1] || "";
           var p, $ = 0,
               m = e.lgSize,
               v = e.gSize;
           if (h.length >= m + v)
               for ($ = h.length - m, p = 0; $ > p; p++)($ - p) % v === 0 && 0 !== p && (s += n), s += h.charAt(p);
           for (p = $; p < h.length; p++)(h.length - p) % m === 0 && 0 !== p && (s += n), s += h.charAt(p);
           for (; d.length < i;) d += "0";
           i && "0" !== i && (s += r + d.substr(0, i))
       }
       return 0 === t && (a = !1), u.push(a ? e.negPre : e.posPre, s, a ? e.negSuf : e.posSuf), u.join("")
   }
   function pr(t, e, n) {
       var r = "";
       for (0 > t && (r = "-", t = -t), t = "" + t; t.length < e;) t = "0" + t;
       return n && (t = t.substr(t.length - e)), r + t
   }
   function $r(t, e, n, r) {
       return n = n || 0,
           function(i) {
               var a = i["get" + t]();
               return (n > 0 || a > -n) && (a += n), 0 === a && -12 == n && (a = 12), pr(a, e, r)
           }
   }
   function mr(t, e) {
       return function(n, r) {
           var i = n["get" + t](),
               a = Yr(e ? "SHORT" + t : t);
           return r[a][i]
       }
   }
   function gr(t) {
       var e = -1 * t.getTimezoneOffset(),
           n = e >= 0 ? "+" : "";
       return n += pr(Math[e > 0 ? "floor" : "ceil"](e / 60), 2) + pr(Math.abs(e % 60), 2)
   }
   function vr(t) {
       var e = new Date(t, 0, 1).getDay();
       return new Date(t, 0, (4 >= e ? 5 : 12) - e)
   }
   function yr(t) {
       return new Date(t.getFullYear(), t.getMonth(), t.getDate() + (4 - t.getDay()))
   }
   function br(t) {
       return function(e) {
           var n = vr(e.getFullYear()),
               r = yr(e),
               i = +r - +n,
               a = 1 + Math.round(i / 6048e5);
           return pr(a, t)
       }
   }
   function wr(t, e) {
       return t.getHours() < 12 ? e.AMPMS[0] : e.AMPMS[1]
   }
   function xr(t) {
       function e(t) {
           var e;
           if (e = t.match(n)) {
               var r = new Date(0),
                   i = 0,
                   a = 0,
                   o = e[8] ? r.setUTCFullYear : r.setFullYear,
                   s = e[8] ? r.setUTCHours : r.setHours;
               e[9] && (i = d(e[9] + e[10]), a = d(e[9] + e[11])), o.call(r, d(e[1]), d(e[2]) - 1, d(e[3]));
               var u = d(e[4] || 0) - i,
                   l = d(e[5] || 0) - a,
                   c = d(e[6] || 0),
                   f = Math.round(1e3 * parseFloat("0." + (e[7] || 0)));
               return s.call(r, u, l, c, f), r
           }
           return t
       }
       var n = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
       return function(n, r, i) {
           var o, s, u = "",
               l = [];
           if (r = r || "mediumDate", r = t.DATETIME_FORMATS[r] || r, b(n) && (n = Ca.test(n) ? d(n) : e(n)), w(n) && (n = new Date(n)), !x(n)) return n;
           for (; r;) s = Sa.exec(r), s ? (l = _(l, s, 1), r = l.pop()) : (l.push(r), r = null);
           return i && "UTC" === i && (n = new Date(n.getTime()), n.setMinutes(n.getMinutes() + n.getTimezoneOffset())), a(l, function(e) {
               o = ka[e], u += o ? o(n, t.DATETIME_FORMATS) : e.replace(/(^'|'$)/g, "").replace(//g, "'")
           }), u
       }
   }
   function kr() {
       return function(t, e) {
           return g(e) && (e = 2), H(t, e)
       }
   }
   function Sr() {
       return function(t, e) {
           return w(t) && (t = t.toString()), ci(t) || b(t) ? (e = 1 / 0 === Math.abs(Number(e)) ? Number(e) : d(e), e ? e > 0 ? t.slice(0, e) : t.slice(e) : b(t) ? "" : []) : t
       }
   }
   function Cr(t) {
       return function(e, n, r) {
           function a(t, e) {
               for (var r = 0; r < n.length; r++) {
                   var i = n[r](t, e);
                   if (0 !== i) return i
               }
               return 0
           }
           function o(t, e) {
               return e ? function(e, n) {
                   return t(n, e)
               } : t
           }
           function s(t) {
               switch (typeof t) {
                   case "number":
                   case "boolean":
                   case "string":
                       return !0;
                   default:
                       return !1
               }
           }
           function u(t) {
               return null === t ? "null" : "function" == typeof t.valueOf && (t = t.valueOf(), s(t)) ? t : "function" == typeof t.toString && (t = t.toString(), s(t)) ? t : ""
           }
           function l(t, e) {
               var n = typeof t,
                   r = typeof e;
               return n === r && "object" === n && (t = u(t), e = u(e)), n === r ? ("string" === n && (t = t.toLowerCase(), e = e.toLowerCase()), t === e ? 0 : e > t ? -1 : 1) : r > n ? -1 : 1
           }
           return i(e) ? (n = ci(n) ? n : [n], 0 === n.length && (n = ["+"]), n = n.map(function(e) {
               var n = !1,
                   r = e || $;
               if (b(e)) {
                   if (("+" == e.charAt(0) || "-" == e.charAt(0)) && (n = "-" == e.charAt(0), e = e.substring(1)), "" === e) return o(l, n);
                   if (r = t(e), r.constant) {
                       var i = r();
                       return o(function(t, e) {
                           return l(t[i], e[i])
                       }, n)
                   }
               }
               return o(function(t, e) {
                   return l(r(t), r(e))
               }, n)
           }), ni.call(e).sort(o(a, r))) : e
       }
   }
   function Ar(t) {
       return k(t) && (t = {
           link: t
       }), t.restrict = t.restrict || "AC", m(t)
   }
   function Or(t, e) {
       t.$name = e
   }
   function Er(t, e, r, i, o) {
       var s = this,
           u = [],
           l = s.$$parentForm = t.parent().controller("form") || Na;
       s.$error = {}, s.$$success = {}, s.$pending = n, s.$name = o(e.name || e.ngForm || "")(r), s.$dirty = !1, s.$pristine = !0, s.$valid = !0, s.$invalid = !1, s.$submitted = !1, l.$addControl(s), s.$rollbackViewValue = function() {
           a(u, function(t) {
               t.$rollbackViewValue()
           })
       }, s.$commitViewValue = function() {
           a(u, function(t) {
               t.$commitViewValue()
           })
       }, s.$addControl = function(t) {
           oe(t.$name, "input"), u.push(t), t.$name && (s[t.$name] = t)
       }, s.$$renameControl = function(t, e) {
           var n = t.$name;
           s[n] === t && delete s[n], s[e] = t, t.$name = e
       }, s.$removeControl = function(t) {
           t.$name && s[t.$name] === t && delete s[t.$name], a(s.$pending, function(e, n) {
               s.$setValidity(n, null, t)
           }), a(s.$error, function(e, n) {
               s.$setValidity(n, null, t)
           }), a(s.$$success, function(e, n) {
               s.$setValidity(n, null, t)
           }), q(u, t)
       }, Hr({
           ctrl: this,
           $element: t,
           set: function(t, e, n) {
               var r = t[e];
               if (r) {
                   var i = r.indexOf(n); - 1 === i && r.push(n)
               } else t[e] = [n]
           },
           unset: function(t, e, n) {
               var r = t[e];
               r && (q(r, n), 0 === r.length && delete t[e])
           },
           parentForm: l,
           $animate: i
       }), s.$setDirty = function() {
           i.removeClass(t, ho), i.addClass(t, po), s.$dirty = !0, s.$pristine = !1, l.$setDirty()
       }, s.$setPristine = function() {
           i.setClass(t, ho, po + " " + Ta), s.$dirty = !1, s.$pristine = !0, s.$submitted = !1, a(u, function(t) {
               t.$setPristine()
           })
       }, s.$setUntouched = function() {
           a(u, function(t) {
               t.$setUntouched()
           })
       }, s.$setSubmitted = function() {
           i.addClass(t, Ta), s.$submitted = !0, l.$setSubmitted()
       }
   }
   function jr(t) {
       t.$formatters.push(function(e) {
           return t.$isEmpty(e) ? e : e.toString()
       })
   }
   function Nr(t, e, n, r, i, a) {
       Tr(t, e, n, r, i, a), jr(r)
   }
   function Tr(t, e, n, r, i, a) {
       var o = Wr(e[0].type);
       if (!i.android) {
           var s = !1;
           e.on("compositionstart", function() {
               s = !0
           }), e.on("compositionend", function() {
               s = !1, u()
           })
       }
       var u = function(t) {
           if (l && (a.defer.cancel(l), l = null), !s) {
               var i = e.val(),
                   u = t && t.type;
               "password" === o || n.ngTrim && "false" === n.ngTrim || (i = fi(i)), (r.$viewValue !== i || "" === i && r.$$hasNativeValidators) && r.$setViewValue(i, u)
           }
       };
       if (i.hasEvent("input")) e.on("input", u);
       else {
           var l, c = function(t, e, n) {
               l || (l = a.defer(function() {
                   l = null, e && e.value === n || u(t)
               }))
           };
           e.on("keydown", function(t) {
               var e = t.keyCode;
               91 === e || e > 15 && 19 > e || e >= 37 && 40 >= e || c(t, this, this.value)
           }), i.hasEvent("paste") && e.on("paste cut", c)
       }
       e.on("change", u), r.$render = function() {
           e.val(r.$isEmpty(r.$viewValue) ? "" : r.$viewValue)
       }
   }
   function Mr(t, e) {
       if (x(t)) return t;
       if (b(t)) {
           La.lastIndex = 0;
           var n = La.exec(t);
           if (n) {
               var r = +n[1],
                   i = +n[2],
                   a = 0,
                   o = 0,
                   s = 0,
                   u = 0,
                   l = vr(r),
                   c = 7 * (i - 1);
               return e && (a = e.getHours(), o = e.getMinutes(), s = e.getSeconds(), u = e.getMilliseconds()), new Date(r, 0, l.getDate() + c, a, o, s, u)
           }
       }
       return 0 / 0
   }
   function Pr(t, e) {
       return function(n, r) {
           var i, o;
           if (x(n)) return n;
           if (b(n)) {
               if ('"' == n.charAt(0) && '"' == n.charAt(n.length - 1) && (n = n.substring(1, n.length - 1)), qa.test(n)) return new Date(n);
               if (t.lastIndex = 0, i = t.exec(n)) return i.shift(), o = r ? {
                   yyyy: r.getFullYear(),
                   MM: r.getMonth() + 1,
                   dd: r.getDate(),
                   HH: r.getHours(),
                   mm: r.getMinutes(),
                   ss: r.getSeconds(),
                   sss: r.getMilliseconds() / 1e3
               } : {
                   yyyy: 1970,
                   MM: 1,
                   dd: 1,
                   HH: 0,
                   mm: 0,
                   ss: 0,
                   sss: 0
               }, a(i, function(t, n) {
                   n < e.length && (o[e[n]] = +t)
               }), new Date(o.yyyy, o.MM - 1, o.dd, o.HH, o.mm, o.ss || 0, 1e3 * o.sss || 0)
           }
           return 0 / 0
       }
   }
   function Vr(t, e, r, i) {
       return function(a, o, s, u, l, c, f) {
           function d(t) {
               return t && !(t.getTime && t.getTime() !== t.getTime())
           }
           function h(t) {
               return v(t) ? x(t) ? t : r(t) : n
           }
           qr(a, o, s, u), Tr(a, o, s, u, l, c);
           var p, $ = u && u.$options && u.$options.timezone;
           if (u.$$parserName = t, u.$parsers.push(function(t) {
                   if (u.$isEmpty(t)) return null;
                   if (e.test(t)) {
                       var i = r(t, p);
                       return "UTC" === $ && i.setMinutes(i.getMinutes() - i.getTimezoneOffset()), i
                   }
                   return n
               }), u.$formatters.push(function(t) {
                   if (t && !x(t)) throw vo("datefmt", "Expected `{0}` to be a date", t);
                   if (d(t)) {
                       if (p = t, p && "UTC" === $) {
                           var e = 6e4 * p.getTimezoneOffset();
                           p = new Date(p.getTime() + e)
                       }
                       return f("date")(t, i, $)
                   }
                   return p = null, ""
               }), v(s.min) || s.ngMin) {
               var m;
               u.$validators.min = function(t) {
                   return !d(t) || g(m) || r(t) >= m
               }, s.$observe("min", function(t) {
                   m = h(t), u.$validate()
               })
           }
           if (v(s.max) || s.ngMax) {
               var y;
               u.$validators.max = function(t) {
                   return !d(t) || g(y) || r(t) <= y
               }, s.$observe("max", function(t) {
                   y = h(t), u.$validate()
               })
           }
       }
   }
   function qr(t, e, r, i) {
       var a = e[0],
           o = i.$$hasNativeValidators = y(a.validity);
       o && i.$parsers.push(function(t) {
           var r = e.prop(Gr) || {};
           return r.badInput && !r.typeMismatch ? n : t
       })
   }
   function Dr(t, e, r, i, a, o) {
       if (qr(t, e, r, i), Tr(t, e, r, i, a, o), i.$$parserName = "number", i.$parsers.push(function(t) {
               return i.$isEmpty(t) ? null : Ia.test(t) ? parseFloat(t) : n
           }), i.$formatters.push(function(t) {
               if (!i.$isEmpty(t)) {
                   if (!w(t)) throw vo("numfmt", "Expected `{0}` to be a number", t);
                   t = t.toString()
               }
               return t
           }), r.min || r.ngMin) {
           var s;
           i.$validators.min = function(t) {
               return i.$isEmpty(t) || g(s) || t >= s
           }, r.$observe("min", function(t) {
               v(t) && !w(t) && (t = parseFloat(t, 10)), s = w(t) && !isNaN(t) ? t : n, i.$validate()
           })
       }
       if (r.max || r.ngMax) {
           var u;
           i.$validators.max = function(t) {
               return i.$isEmpty(t) || g(u) || u >= t
           }, r.$observe("max", function(t) {
               v(t) && !w(t) && (t = parseFloat(t, 10)), u = w(t) && !isNaN(t) ? t : n, i.$validate()
           })
       }
   }
   function Rr(t, e, n, r, i, a) {
       Tr(t, e, n, r, i, a), jr(r), r.$$parserName = "url", r.$validators.url = function(t, e) {
           var n = t || e;
           return r.$isEmpty(n) || Da.test(n)
       }
   }
   function Ir(t, e, n, r, i, a) {
       Tr(t, e, n, r, i, a), jr(r), r.$$parserName = "email", r.$validators.email = function(t, e) {
           var n = t || e;
           return r.$isEmpty(n) || Ra.test(n)
       }
   }
   function _r(t, e, n, r) {
       g(n.name) && e.attr("name", l());
       var i = function(t) {
           e[0].checked && r.$setViewValue(n.value, t && t.type)
       };
       e.on("click", i), r.$render = function() {
           var t = n.value;
           e[0].checked = t == r.$viewValue
       }, n.$observe("value", r.$render)
   }
   function Ur(t, e, n, i, a) {
       var o;
       if (v(i)) {
           if (o = t(i), !o.constant) throw r("ngModel")("constexpr", "Expected constant expression for `{0}`, but saw `{1}`.", n, i);
           return o(e)
       }
       return a
   }
   function Lr(t, e, n, r, i, a, o, s) {
       var u = Ur(s, t, "ngTrueValue", n.ngTrueValue, !0),
           l = Ur(s, t, "ngFalseValue", n.ngFalseValue, !1),
           c = function(t) {
               r.$setViewValue(e[0].checked, t && t.type)
           };
       e.on("click", c), r.$render = function() {
           e[0].checked = r.$viewValue
       }, r.$isEmpty = function(t) {
           return t === !1
       }, r.$formatters.push(function(t) {
           return I(t, u)
       }), r.$parsers.push(function(t) {
           return t ? u : l
       })
   }
   function Fr(t, e) {
       return t = "ngClass" + t, ["$animate", function(n) {
           function r(t, e) {
               var n = [];
               t: for (var r = 0; r < t.length; r++) {
                   for (var i = t[r], a = 0; a < e.length; a++)
                       if (i == e[a]) continue t;
                   n.push(i)
               }
               return n
           }
           function i(t) {
               if (ci(t)) return t;
               if (b(t)) return t.split(" ");
               if (y(t)) {
                   var e = [];
                   return a(t, function(t, n) {
                       t && (e = e.concat(n.split(" ")))
                   }), e
               }
               return t
           }
           return {
               restrict: "AC",
               link: function(o, s, u) {
                   function l(t) {
                       var e = f(t, 1);
                       u.$addClass(e)
                   }
                   function c(t) {
                       var e = f(t, -1);
                       u.$removeClass(e)
                   }
                   function f(t, e) {
                       var n = s.data("$classCounts") || {},
                           r = [];
                       return a(t, function(t) {
                           (e > 0 || n[t]) && (n[t] = (n[t] || 0) + e, n[t] === +(e > 0) && r.push(t))
                       }), s.data("$classCounts", n), r.join(" ")
                   }
                   function d(t, e) {
                       var i = r(e, t),
                           a = r(t, e);
                       i = f(i, 1), a = f(a, -1), i && i.length && n.addClass(s, i), a && a.length && n.removeClass(s, a)
                   }
                   function h(t) {
                       if (e === !0 || o.$index % 2 === e) {
                           var n = i(t || []);
                           if (p) {
                               if (!I(t, p)) {
                                   var r = i(p);
                                   d(r, n)
                               }
                           } else l(n)
                       }
                       p = R(t)
                   }
                   var p;
                   o.$watch(u[t], h, !0), u.$observe("class", function() {
                       h(o.$eval(u[t]))
                   }), "ngClass" !== t && o.$watch("$index", function(n, r) {
                       var a = 1 & n;
                       if (a !== (1 & r)) {
                           var s = i(o.$eval(u[t]));
                           a === e ? l(s) : c(s)
                       }
                   })
               }
           }
       }]
   }
   function Hr(t) {
       function e(t, e, u) {
           e === n ? r("$pending", t, u) : i("$pending", t, u), N(e) ? e ? (f(s.$error, t, u), c(s.$$success, t, u)) : (c(s.$error, t, u), f(s.$$success, t, u)) : (f(s.$error, t, u), f(s.$$success, t, u)), s.$pending ? (a(go, !0), s.$valid = s.$invalid = n, o("", null)) : (a(go, !1), s.$valid = Br(s.$error), s.$invalid = !s.$valid, o("", s.$valid));
           var l;
           l = s.$pending && s.$pending[t] ? n : s.$error[t] ? !1 : s.$$success[t] ? !0 : null, o(t, l), d.$setValidity(t, l, s)
       }
       function r(t, e, n) {
           s[t] || (s[t] = {}), c(s[t], e, n)
       }
       function i(t, e, r) {
           s[t] && f(s[t], e, r), Br(s[t]) && (s[t] = n)
       }
       function a(t, e) {
           e && !l[t] ? (h.addClass(u, t), l[t] = !0) : !e && l[t] && (h.removeClass(u, t), l[t] = !1)
       }
       function o(t, e) {
           t = t ? "-" + ne(t, "-") : "", a(co + t, e === !0), a(fo + t, e === !1)
       }
       var s = t.ctrl,
           u = t.$element,
           l = {},
           c = t.set,
           f = t.unset,
           d = t.parentForm,
           h = t.$animate;
       l[fo] = !(l[co] = u.hasClass(co)), s.$setValidity = e
   }
   function Br(t) {
       if (t)
           for (var e in t) return !1;
       return !0
   }
   var zr = /^\/(.+)\/([a-z]*)$/,
       Gr = "validity",
       Wr = function(t) {
           return b(t) ? t.toLowerCase() : t
       },
       Jr = Object.prototype.hasOwnProperty,
       Yr = function(t) {
           return b(t) ? t.toUpperCase() : t
       },
       Zr = function(t) {
           return b(t) ? t.replace(/[A-Z]/g, function(t) {
               return String.fromCharCode(32 | t.charCodeAt(0))
           }) : t
       },
       Kr = function(t) {
           return b(t) ? t.replace(/[a-z]/g, function(t) {
               return String.fromCharCode(-33 & t.charCodeAt(0))
           }) : t
       };
   "i" !== "I".toLowerCase() && (Wr = Zr, Yr = Kr);
   var Xr, Qr, ti, ei, ni = [].slice,
       ri = [].splice,
       ii = [].push,
       ai = Object.prototype.toString,
       oi = r("ng"),
       si = t.angular || (t.angular = {}),
       ui = 0;
   Xr = e.documentMode, p.$inject = [], $.$inject = [];
   var li, ci = Array.isArray,
       fi = function(t) {
           return b(t) ? t.trim() : t
       },
       di = function(t) {
           return t.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
       },
       hi = function() {
           if (v(hi.isActive_)) return hi.isActive_;
           var t = !(!e.querySelector("[ng-csp]") && !e.querySelector("[data-ng-csp]"));
           if (!t) try {
               new Function("")
           } catch (n) {
               t = !0
           }
           return hi.isActive_ = t
       },
       pi = ["ng-", "data-ng-", "ng:", "x-ng-"],
       $i = /[A-Z]/g,
       mi = !1,
       gi = 1,
       vi = 3,
       yi = 8,
       bi = 9,
       wi = 11,
       xi = {
           full: "1.3.13",
           major: 1,
           minor: 3,
           dot: 13,
           codeName: "meticulous-riffleshuffle"
       };
   be.expando = "ng339";
   var ki = be.cache = {},
       Si = 1,
       Ci = function(t, e, n) {
           t.addEventListener(e, n, !1)
       },
       Ai = function(t, e, n) {
           t.removeEventListener(e, n, !1)
       };
   be._data = function(t) {
       return this.cache[t[this.expando]] || {}
   };
   var Oi = /([\:\-\_]+(.))/g,
       Ei = /^moz([A-Z])/,
       ji = {
           mouseleave: "mouseout",
           mouseenter: "mouseover"
       },
       Ni = r("jqLite"),
       Ti = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
       Mi = /<|&#?\w+;/,
       Pi = /<([\w:]+)/,
       Vi = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
       qi = {
           option: [1, '<select multiple="multiple">', "</select>"],
thead: [1, "", "
"], col: [2, "<colgroup>", "</colgroup>
"], tr: [2, "<tbody>", "</tbody>
"], td: [3, "<tbody>", "</tbody>
"],
           _default: [0, "", ""]
       };
   qi.optgroup = qi.option, qi.tbody = qi.tfoot = qi.colgroup = qi.caption = qi.thead, qi.th = qi.td;
   var Di = be.prototype = {
           ready: function(n) {
               function r() {
                   i || (i = !0, n())
               }
               var i = !1;
               "complete" === e.readyState ? setTimeout(r) : (this.on("DOMContentLoaded", r), be(t).on("load", r))
           },
           toString: function() {
               var t = [];
               return a(this, function(e) {
                   t.push("" + e)
               }), "[" + t.join(", ") + "]"
           },
           eq: function(t) {
               return t >= 0 ? Qr(this[t]) : Qr(this[this.length + t])
           },
           length: 0,
           push: ii,
           sort: [].sort,
           splice: [].splice
       },
       Ri = {};
   a("multiple,selected,checked,disabled,readOnly,required,open".split(","), function(t) {
       Ri[Wr(t)] = t
   });
   var Ii = {};
   a("input,select,option,textarea,button,form,details".split(","), function(t) {
       Ii[t] = !0
   });
   var _i = {
       ngMinlength: "minlength",
       ngMaxlength: "maxlength",
       ngMin: "min",
       ngMax: "max",
       ngPattern: "pattern"
   };
   a({
       data: Ae,
       removeData: Se
   }, function(t, e) {
       be[e] = t
   }), a({
       data: Ae,
       inheritedData: Me,
       scope: function(t) {
           return Qr.data(t, "$scope") || Me(t.parentNode || t, ["$isolateScope", "$scope"])
       },
       isolateScope: function(t) {
           return Qr.data(t, "$isolateScope") || Qr.data(t, "$isolateScopeNoTemplate")
       },
       controller: Te,
       injector: function(t) {
           return Me(t, "$injector")
       },
       removeAttr: function(t, e) {
           t.removeAttribute(e)
       },
       hasClass: Oe,
       css: function(t, e, n) {
           return e = $e(e), v(n) ? (t.style[e] = n, void 0) : t.style[e]
       },
       attr: function(t, e, r) {
           var i = Wr(e);
           if (Ri[i]) {
               if (!v(r)) return t[e] || (t.attributes.getNamedItem(e) || p).specified ? i : n;
               r ? (t[e] = !0, t.setAttribute(e, i)) : (t[e] = !1, t.removeAttribute(i))
           } else if (v(r)) t.setAttribute(e, r);
           else if (t.getAttribute) {
               var a = t.getAttribute(e, 2);
               return null === a ? n : a
           }
       },
       prop: function(t, e, n) {
           return v(n) ? (t[e] = n, void 0) : t[e]
       },
       text: function() {
           function t(t, e) {
               if (g(e)) {
                   var n = t.nodeType;
                   return n === gi || n === vi ? t.textContent : ""
               }
               t.textContent = e
           }
           return t.$dv = "", t
       }(),
       val: function(t, e) {
           if (g(e)) {
               if (t.multiple && "select" === V(t)) {
                   var n = [];
                   return a(t.options, function(t) {
                       t.selected && n.push(t.value || t.text)
                   }), 0 === n.length ? null : n
               }
               return t.value
           }
           t.value = e
       },
       html: function(t, e) {
           return g(e) ? t.innerHTML : (xe(t, !0), t.innerHTML = e, void 0)
       },
       empty: Pe
   }, function(t, e) {
       be.prototype[e] = function(e, r) {
           var i, a, o = this.length;
           if (t !== Pe && (2 == t.length && t !== Oe && t !== Te ? e : r) === n) {
               if (y(e)) {
                   for (i = 0; o > i; i++)
                       if (t === Ae) t(this[i], e);
                       else
                           for (a in e) t(this[i], a, e[a]);
                   return this
               }
               for (var s = t.$dv, u = s === n ? Math.min(o, 1) : o, l = 0; u > l; l++) {
                   var c = t(this[l], e, r);
                   s = s ? s + c : c
               }
               return s
           }
           for (i = 0; o > i; i++) t(this[i], e, r);
           return this
       }
   }), a({
       removeData: Se,
       on: function zo(t, e, n, r) {
           if (v(r)) throw Ni("onargs", "jqLite#on() does not support the `selector` or `eventData` parameters");
           if (ge(t)) {
               var i = Ce(t, !0),
                   a = i.events,
                   o = i.handle;
               o || (o = i.handle = Ie(t, a));
               for (var s = e.indexOf(" ") >= 0 ? e.split(" ") : [e], u = s.length; u--;) {
                   e = s[u];
                   var l = a[e];
                   l || (a[e] = [], "mouseenter" === e || "mouseleave" === e ? zo(t, ji[e], function(t) {
                       var n = this,
                           r = t.relatedTarget;
                       (!r || r !== n && !n.contains(r)) && o(t, e)
                   }) : "$destroy" !== e && Ci(t, e, o), l = a[e]), l.push(n)
               }
           }
       },
       off: ke,
       one: function(t, e, n) {
           t = Qr(t), t.on(e, function r() {
               t.off(e, n), t.off(e, r)
           }), t.on(e, n)
       },
       replaceWith: function(t, e) {
           var n, r = t.parentNode;
           xe(t), a(new be(e), function(e) {
               n ? r.insertBefore(e, n.nextSibling) : r.replaceChild(e, t), n = e
           })
       },
       children: function(t) {
           var e = [];
           return a(t.childNodes, function(t) {
               t.nodeType === gi && e.push(t)
           }), e
       },
       contents: function(t) {
           return t.contentDocument || t.childNodes || []
       },
       append: function(t, e) {
           var n = t.nodeType;
           if (n === gi || n === wi) {
               e = new be(e);
               for (var r = 0, i = e.length; i > r; r++) {
                   var a = e[r];
                   t.appendChild(a)
               }
           }
       },
       prepend: function(t, e) {
           if (t.nodeType === gi) {
               var n = t.firstChild;
               a(new be(e), function(e) {
                   t.insertBefore(e, n)
               })
           }
       },
       wrap: function(t, e) {
           e = Qr(e).eq(0).clone()[0];
           var n = t.parentNode;
           n && n.replaceChild(e, t), e.appendChild(t)
       },
       remove: Ve,
       detach: function(t) {
           Ve(t, !0)
       },
       after: function(t, e) {
           var n = t,
               r = t.parentNode;
           e = new be(e);
           for (var i = 0, a = e.length; a > i; i++) {
               var o = e[i];
               r.insertBefore(o, n.nextSibling), n = o
           }
       },
       addClass: je,
       removeClass: Ee,
       toggleClass: function(t, e, n) {
           e && a(e.split(" "), function(e) {
               var r = n;
               g(r) && (r = !Oe(t, e)), (r ? je : Ee)(t, e)
           })
       },
       parent: function(t) {
           var e = t.parentNode;
           return e && e.nodeType !== wi ? e : null
       },
       next: function(t) {
           return t.nextElementSibling
       },
       find: function(t, e) {
           return t.getElementsByTagName ? t.getElementsByTagName(e) : []
       },
       clone: we,
       triggerHandler: function(t, e, n) {
           var r, i, o, s = e.type || e,
               u = Ce(t),
               l = u && u.events,
               c = l && l[s];
           c && (r = {
               preventDefault: function() {
                   this.defaultPrevented = !0
               },
               isDefaultPrevented: function() {
                   return this.defaultPrevented === !0
               },
               stopImmediatePropagation: function() {
                   this.immediatePropagationStopped = !0
               },
               isImmediatePropagationStopped: function() {
                   return this.immediatePropagationStopped === !0
               },
               stopPropagation: p,
               type: s,
               target: t
           }, e.type && (r = f(r, e)), i = R(c), o = n ? [r].concat(n) : [r], a(i, function(e) {
               r.isImmediatePropagationStopped() || e.apply(t, o)
           }))
       }
   }, function(t, e) {
       be.prototype[e] = function(e, n, r) {
           for (var i, a = 0, o = this.length; o > a; a++) g(i) ? (i = t(this[a], e, n, r), v(i) && (i = Qr(i))) : Ne(i, t(this[a], e, n, r));
           return v(i) ? i : this
       }, be.prototype.bind = be.prototype.on, be.prototype.unbind = be.prototype.off
   }), Le.prototype = {
       put: function(t, e) {
           this[Ue(t, this.nextUid)] = e
       },
       get: function(t) {
           return this[Ue(t, this.nextUid)]
       },
       remove: function(t) {
           var e = this[t = Ue(t, this.nextUid)];
           return delete this[t], e
       }
   };
   var Ui = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
       Li = /,/,
       Fi = /^\s*(_?)(\S+?)\1\s*$/,
       Hi = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
       Bi = r("$injector");
   Be.$$annotate = He;
   var zi = r("$animate"),
       Gi = ["$provide", function(t) {
           this.$$selectors = {}, this.register = function(e, n) {
               var r = e + "-animation";
               if (e && "." != e.charAt(0)) throw zi("notcsel", "Expecting class selector starting with '.' got '{0}'.", e);
               this.$$selectors[e.substr(1)] = r, t.factory(r, n)
           }, this.classNameFilter = function(t) {
               return 1 === arguments.length && (this.$$classNameFilter = t instanceof RegExp ? t : null), this.$$classNameFilter
           }, this.$get = ["$$q", "$$asyncCallback", "$rootScope", function(t, e, n) {
               function r(e) {
                   var r, i = t.defer();
                   return i.promise.$$cancelFn = function() {
                       r && r()
                   }, n.$$postDigest(function() {
                       r = e(function() {
                           i.resolve()
                       })
                   }), i.promise
               }
               function i(t, e) {
                   var n = [],
                       r = [],
                       i = le();
                   return a((t.attr("class") || "").split(/\s+/), function(t) {
                       i[t] = !0
                   }), a(e, function(t, e) {
                       var a = i[e];
                       t === !1 && a ? r.push(e) : t !== !0 || a || n.push(e)
                   }), n.length + r.length > 0 && [n.length ? n : null, r.length ? r : null]
               }
               function o(t, e, n) {
                   for (var r = 0, i = e.length; i > r; ++r) {
                       var a = e[r];
                       t[a] = n
                   }
               }
               function s() {
                   return l || (l = t.defer(), e(function() {
                       l.resolve(), l = null
                   })), l.promise
               }
               function u(t, e) {
                   if (si.isObject(e)) {
                       var n = f(e.from || {}, e.to || {});
                       t.css(n)
                   }
               }
               var l;
               return {
                   animate: function(t, e, n) {
                       return u(t, {
                           from: e,
                           to: n
                       }), s()
                   },
                   enter: function(t, e, n, r) {
                       return u(t, r), n ? n.after(t) : e.prepend(t), s()
                   },
                   leave: function(t) {
                       return t.remove(), s()
                   },
                   move: function(t, e, n, r) {
                       return this.enter(t, e, n, r)
                   },
                   addClass: function(t, e, n) {
                       return this.setClass(t, e, [], n)
                   },
                   $$addClassImmediately: function(t, e, n) {
                       return t = Qr(t), e = b(e) ? e : ci(e) ? e.join(" ") : "", a(t, function(t) {
                           je(t, e)
                       }), u(t, n), s()
                   },
                   removeClass: function(t, e, n) {
                       return this.setClass(t, [], e, n)
                   },
                   $$removeClassImmediately: function(t, e, n) {
                       return t = Qr(t), e = b(e) ? e : ci(e) ? e.join(" ") : "", a(t, function(t) {
                           Ee(t, e)
                       }), u(t, n), s()
                   },
                   setClass: function(t, e, n, a) {
                       var s = this,
                           u = "$$animateClasses",
                           l = !1;
                       t = Qr(t);
                       var c = t.data(u);
                       c ? a && c.options && (c.options = si.extend(c.options || {}, a)) : (c = {
                           classes: {},
                           options: a
                       }, l = !0);
                       var f = c.classes;
                       return e = ci(e) ? e : e.split(" "), n = ci(n) ? n : n.split(" "), o(f, e, !0), o(f, n, !1), l && (c.promise = r(function(e) {
                           var n = t.data(u);
                           if (t.removeData(u), n) {
                               var r = i(t, n.classes);
                               r && s.$$setClassImmediately(t, r[0], r[1], n.options)
                           }
                           e()
                       }), t.data(u, c)), c.promise
                   },
                   $$setClassImmediately: function(t, e, n, r) {
                       return e && this.$$addClassImmediately(t, e), n && this.$$removeClassImmediately(t, n), u(t, r), s()
                   },
                   enabled: p,
                   cancel: p
               }
           }]
       }],
       Wi = r("$compile");
   Ke.$inject = ["$provide", "$$sanitizeUriProvider"];
   var Ji = /^((?:x|data)[\:\-_])/i,
       Yi = r("$controller"),
       Zi = "application/json",
       Ki = {
           "Content-Type": Zi + ";charset=utf-8"
       },
       Xi = /^\[|^\{(?!\{)/,
       Qi = {
           "[": /]$/,
           "{": /}$/
       },
       ta = /^\)\]\}',?\n/,
       ea = r("$interpolate"),
       na = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
       ra = {
           http: 80,
           https: 443,
           ftp: 21
       },
       ia = r("$location"),
       aa = {
           $$html5: !1,
           $$replace: !1,
           absUrl: jn("$$absUrl"),
           url: function(t) {
               if (g(t)) return this.$$url;
               var e = na.exec(t);
               return (e[1] || "" === t) && this.path(decodeURIComponent(e[1])), (e[2] || e[1] || "" === t) && this.search(e[3] || ""), this.hash(e[5] || ""), this
           },
           protocol: jn("$$protocol"),
           host: jn("$$host"),
           port: jn("$$port"),
           path: Nn("$$path", function(t) {
               return t = null !== t ? t.toString() : "", "/" == t.charAt(0) ? t : "/" + t
           }),
           search: function(t, e) {
               switch (arguments.length) {
                   case 0:
                       return this.$$search;
                   case 1:
                       if (b(t) || w(t)) t = t.toString(), this.$$search = W(t);
                       else {
                           if (!y(t)) throw ia("isrcharg", "The first argument of the `$location#search()` call must be a string or an object.");
                           t = D(t, {}), a(t, function(e, n) {
                               null == e && delete t[n]
                           }), this.$$search = t
                       }
                       break;
                   default:
                       g(e) || null === e ? delete this.$$search[t] : this.$$search[t] = e
               }
               return this.$$compose(), this
           },
           hash: Nn("$$hash", function(t) {
               return null !== t ? t.toString() : ""
           }),
           replace: function() {
               return this.$$replace = !0, this
           }
       };
   a([En, On, An], function(t) {
       t.prototype = Object.create(aa), t.prototype.state = function(e) {
           if (!arguments.length) return this.$$state;
           if (t !== An || !this.$$html5) throw ia("nostate", "History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");
           return this.$$state = g(e) ? null : e, this
       }
   });
   var oa = r("$parse"),
       sa = Function.prototype.call,
       ua = Function.prototype.apply,
       la = Function.prototype.bind,
       ca = le();
   a({
       "null": function() {
           return null
       },
       "true": function() {
           return !0
       },
       "false": function() {
           return !1
       },
       undefined: function() {}
   }, function(t, e) {
       t.constant = t.literal = t.sharedGetter = !0, ca[e] = t
   }), ca["this"] = function(t) {
       return t
   }, ca["this"].sharedGetter = !0;
   var fa = f(le(), {
           "+": function(t, e, r, i) {
               return r = r(t, e), i = i(t, e), v(r) ? v(i) ? r + i : r : v(i) ? i : n
           },
           "-": function(t, e, n, r) {
               return n = n(t, e), r = r(t, e), (v(n) ? n : 0) - (v(r) ? r : 0)
           },
           "*": function(t, e, n, r) {
               return n(t, e) * r(t, e)
           },
           "/": function(t, e, n, r) {
               return n(t, e) / r(t, e)
           },
           "%": function(t, e, n, r) {
               return n(t, e) % r(t, e)
           },
           "===": function(t, e, n, r) {
               return n(t, e) === r(t, e)
           },
           "!==": function(t, e, n, r) {
               return n(t, e) !== r(t, e)
           },
           "==": function(t, e, n, r) {
               return n(t, e) == r(t, e)
           },
           "!=": function(t, e, n, r) {
               return n(t, e) != r(t, e)
           },
           "<": function(t, e, n, r) {
               return n(t, e) < r(t, e)
           },
           ">": function(t, e, n, r) {
               return n(t, e) > r(t, e)
           },
           "<=": function(t, e, n, r) {
               return n(t, e) <= r(t, e)
           },
           ">=": function(t, e, n, r) {
               return n(t, e) >= r(t, e)
           },
           "&&": function(t, e, n, r) {
               return n(t, e) && r(t, e)
           },
           "||": function(t, e, n, r) {
               return n(t, e) || r(t, e)
           },
           "!": function(t, e, n) {
               return !n(t, e)
           },
           "=": !0,
           "|": !0
       }),
       da = {
           n: "\n",
           f: "\f",
           r: "\r",
           t: "	",
           v: "�",
           "'": "'",
           '"': '"'
       },
       ha = function(t) {
           this.options = t
       };
   ha.prototype = {
       constructor: ha,
       lex: function(t) {
           for (this.text = t, this.index = 0, this.tokens = []; this.index < this.text.length;) {
               var e = this.text.charAt(this.index);
               if ('"' === e || "'" === e) this.readString(e);
               else if (this.isNumber(e) || "." === e && this.isNumber(this.peek())) this.readNumber();
               else if (this.isIdent(e)) this.readIdent();
               else if (this.is(e, "(){}[].,;:?")) this.tokens.push({
                   index: this.index,
                   text: e
               }), this.index++;
               else if (this.isWhitespace(e)) this.index++;
               else {
                   var n = e + this.peek(),
                       r = n + this.peek(2),
                       i = fa[e],
                       a = fa[n],
                       o = fa[r];
                   if (i || a || o) {
                       var s = o ? r : a ? n : e;
                       this.tokens.push({
                           index: this.index,
                           text: s,
                           operator: !0
                       }), this.index += s.length
                   } else this.throwError("Unexpected next character ", this.index, this.index + 1)
               }
           }
           return this.tokens
       },
       is: function(t, e) {
           return -1 !== e.indexOf(t)
       },
       peek: function(t) {
           var e = t || 1;
           return this.index + e < this.text.length ? this.text.charAt(this.index + e) : !1
       },
       isNumber: function(t) {
           return t >= "0" && "9" >= t && "string" == typeof t
       },
       isWhitespace: function(t) {
           return " " === t || "\r" === t || "	" === t || "\n" === t || "�" === t || " " === t
       },
       isIdent: function(t) {
           return t >= "a" && "z" >= t || t >= "A" && "Z" >= t || "_" === t || "$" === t
       },
       isExpOperator: function(t) {
           return "-" === t || "+" === t || this.isNumber(t)
       },
       throwError: function(t, e, n) {
           n = n || this.index;
           var r = v(e) ? "s " + e + "-" + this.index + " [" + this.text.substring(e, n) + "]" : " " + n;
           throw oa("lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", t, r, this.text)
       },
       readNumber: function() {
           for (var t = "", e = this.index; this.index < this.text.length;) {
               var n = Wr(this.text.charAt(this.index));
               if ("." == n || this.isNumber(n)) t += n;
               else {
                   var r = this.peek();
                   if ("e" == n && this.isExpOperator(r)) t += n;
                   else if (this.isExpOperator(n) && r && this.isNumber(r) && "e" == t.charAt(t.length - 1)) t += n;
                   else {
                       if (!this.isExpOperator(n) || r && this.isNumber(r) || "e" != t.charAt(t.length - 1)) break;
                       this.throwError("Invalid exponent")
                   }
               }
               this.index++
           }
           this.tokens.push({
               index: e,
               text: t,
               constant: !0,
               value: Number(t)
           })
       },
       readIdent: function() {
           for (var t = this.index; this.index < this.text.length;) {
               var e = this.text.charAt(this.index);
               if (!this.isIdent(e) && !this.isNumber(e)) break;
               this.index++
           }
           this.tokens.push({
               index: t,
               text: this.text.slice(t, this.index),
               identifier: !0
           })
       },
       readString: function(t) {
           var e = this.index;
           this.index++;
           for (var n = "", r = t, i = !1; this.index < this.text.length;) {
               var a = this.text.charAt(this.index);
               if (r += a, i) {
                   if ("u" === a) {
                       var o = this.text.substring(this.index + 1, this.index + 5);
                       o.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + o + "]"), this.index += 4, n += String.fromCharCode(parseInt(o, 16))
                   } else {
                       var s = da[a];
                       n += s || a
                   }
                   i = !1
               } else if ("\\" === a) i = !0;
               else {
                   if (a === t) return this.index++, this.tokens.push({
                       index: e,
                       text: r,
                       constant: !0,
                       value: n
                   }), void 0;
                   n += a
               }
               this.index++
           }
           this.throwError("Unterminated quote", e)
       }
   };
   var pa = function(t, e, n) {
       this.lexer = t, this.$filter = e, this.options = n
   };
   pa.ZERO = f(function() {
       return 0
   }, {
       sharedGetter: !0,
       constant: !0
   }), pa.prototype = {
       constructor: pa,
       parse: function(t) {
           this.text = t, this.tokens = this.lexer.lex(t);
           var e = this.statements();
           return 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]), e.literal = !!e.literal, e.constant = !!e.constant, e
       },
       primary: function() {
           var t;
           this.expect("(") ? (t = this.filterChain(), this.consume(")")) : this.expect("[") ? t = this.arrayDeclaration() : this.expect("{") ? t = this.object() : this.peek().identifier && this.peek().text in ca ? t = ca[this.consume().text] : this.peek().identifier ? t = this.identifier() : this.peek().constant ? t = this.constant() : this.throwError("not a primary expression", this.peek());
           for (var e, n; e = this.expect("(", "[", ".");) "(" === e.text ? (t = this.functionCall(t, n), n = null) : "[" === e.text ? (n = t, t = this.objectIndex(t)) : "." === e.text ? (n = t, t = this.fieldAccess(t)) : this.throwError("IMPOSSIBLE");
           return t
       },
       throwError: function(t, e) {
           throw oa("syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", e.text, t, e.index + 1, this.text, this.text.substring(e.index))
       },
       peekToken: function() {
           if (0 === this.tokens.length) throw oa("ueoe", "Unexpected end of expression: {0}", this.text);
           return this.tokens[0]
       },
       peek: function(t, e, n, r) {
           return this.peekAhead(0, t, e, n, r)
       },
       peekAhead: function(t, e, n, r, i) {
           if (this.tokens.length > t) {
               var a = this.tokens[t],
                   o = a.text;
               if (o === e || o === n || o === r || o === i || !e && !n && !r && !i) return a
           }
           return !1
       },
       expect: function(t, e, n, r) {
           var i = this.peek(t, e, n, r);
           return i ? (this.tokens.shift(), i) : !1
       },
       consume: function(t) {
           if (0 === this.tokens.length) throw oa("ueoe", "Unexpected end of expression: {0}", this.text);
           var e = this.expect(t);
           return e || this.throwError("is unexpected, expecting [" + t + "]", this.peek()), e
       },
       unaryFn: function(t, e) {
           var n = fa[t];
           return f(function(t, r) {
               return n(t, r, e)
           }, {
               constant: e.constant,
               inputs: [e]
           })
       },
       binaryFn: function(t, e, n, r) {
           var i = fa[e];
           return f(function(e, r) {
               return i(e, r, t, n)
           }, {
               constant: t.constant && n.constant,
               inputs: !r && [t, n]
           })
       },
       identifier: function() {
           for (var t = this.consume().text; this.peek(".") && this.peekAhead(1).identifier && !this.peekAhead(2, "(");) t += this.consume().text + this.consume().text;
           return Ln(t, this.options, this.text)
       },
       constant: function() {
           var t = this.consume().value;
           return f(function() {
               return t
           }, {
               constant: !0,
               literal: !0
           })
       },
       statements: function() {
           for (var t = [];;)
               if (this.tokens.length > 0 && !this.peek("}", ")", ";", "]") && t.push(this.filterChain()), !this.expect(";")) return 1 === t.length ? t[0] : function(e, n) {
                   for (var r, i = 0, a = t.length; a > i; i++) r = t[i](e, n);
                   return r
               }
       },
       filterChain: function() {
           for (var t, e = this.expression(); t = this.expect("|");) e = this.filter(e);
           return e
       },
       filter: function(t) {
           var e, r, i = this.$filter(this.consume().text);
           if (this.peek(":"))
               for (e = [], r = []; this.expect(":");) e.push(this.expression());
           var a = [t].concat(e || []);
           return f(function(a, o) {
               var s = t(a, o);
               if (r) {
                   r[0] = s;
                   for (var u = e.length; u--;) r[u + 1] = e[u](a, o);
                   return i.apply(n, r)
               }
               return i(s)
           }, {
               constant: !i.$stateful && a.every(Dn),
               inputs: !i.$stateful && a
           })
       },
       expression: function() {
           return this.assignment()
       },
       assignment: function() {
           var t, e, n = this.ternary();
           return (e = this.expect("=")) ? (n.assign || this.throwError("implies assignment but [" + this.text.substring(0, e.index) + "] can not be assigned to", e), t = this.ternary(), f(function(e, r) {
               return n.assign(e, t(e, r), r)
           }, {
               inputs: [n, t]
           })) : n
       },
       ternary: function() {
           var t, e, n = this.logicalOR();
           if ((e = this.expect("?")) && (t = this.assignment(), this.consume(":"))) {
               var r = this.assignment();
               return f(function(e, i) {
                   return n(e, i) ? t(e, i) : r(e, i)
               }, {
                   constant: n.constant && t.constant && r.constant
               })
           }
           return n
       },
       logicalOR: function() {
           for (var t, e = this.logicalAND(); t = this.expect("||");) e = this.binaryFn(e, t.text, this.logicalAND(), !0);
           return e
       },
       logicalAND: function() {
           for (var t, e = this.equality(); t = this.expect("&&");) e = this.binaryFn(e, t.text, this.equality(), !0);
           return e
       },
       equality: function() {
           for (var t, e = this.relational(); t = this.expect("==", "!=", "===", "!==");) e = this.binaryFn(e, t.text, this.relational());
           return e
       },
       relational: function() {
           for (var t, e = this.additive(); t = this.expect("<", ">", "<=", ">=");) e = this.binaryFn(e, t.text, this.additive());
           return e
       },
       additive: function() {
           for (var t, e = this.multiplicative(); t = this.expect("+", "-");) e = this.binaryFn(e, t.text, this.multiplicative());
           return e
       },
       multiplicative: function() {
           for (var t, e = this.unary(); t = this.expect("*", "/", "%");) e = this.binaryFn(e, t.text, this.unary());
           return e
       },
       unary: function() {
           var t;
           return this.expect("+") ? this.primary() : (t = this.expect("-")) ? this.binaryFn(pa.ZERO, t.text, this.unary()) : (t = this.expect("!")) ? this.unaryFn(t.text, this.unary()) : this.primary()
       },
       fieldAccess: function(t) {
           var e = this.identifier();
           return f(function(r, i, a) {
               var o = a || t(r, i);
               return null == o ? n : e(o)
           }, {
               assign: function(n, r, i) {
                   var a = t(n, i);
                   return a || t.assign(n, a = {}, i), e.assign(a, r)
               }
           })
       },
       objectIndex: function(t) {
           var e = this.text,
               r = this.expression();
           return this.consume("]"), f(function(i, a) {
               var o, s = t(i, a),
                   u = r(i, a);
               return Pn(u, e), s ? o = Vn(s[u], e) : n
           }, {
               assign: function(n, i, a) {
                   var o = Pn(r(n, a), e),
                       s = Vn(t(n, a), e);
                   return s || t.assign(n, s = {}, a), s[o] = i
               }
           })
       },
       functionCall: function(t, e) {
           var r = [];
           if (")" !== this.peekToken().text)
               do r.push(this.expression()); while (this.expect(","));
           this.consume(")");
           var i = this.text,
               a = r.length ? [] : null;
           return function(o, s) {
               var u = e ? e(o, s) : v(e) ? n : o,
                   l = t(o, s, u) || p;
               if (a)
                   for (var c = r.length; c--;) a[c] = Vn(r[c](o, s), i);
               Vn(u, i), qn(l, i);
               var f = l.apply ? l.apply(u, a) : l(a[0], a[1], a[2], a[3], a[4]);
               return a && (a.length = 0), Vn(f, i)
           }
       },
       arrayDeclaration: function() {
           var t = [];
           if ("]" !== this.peekToken().text)
               do {
                   if (this.peek("]")) break;
                   t.push(this.expression())
               } while (this.expect(","));
           return this.consume("]"), f(function(e, n) {
               for (var r = [], i = 0, a = t.length; a > i; i++) r.push(t[i](e, n));
               return r
           }, {
               literal: !0,
               constant: t.every(Dn),
               inputs: t
           })
       },
       object: function() {
           var t = [],
               e = [];
           if ("}" !== this.peekToken().text)
               do {
                   if (this.peek("}")) break;
                   var n = this.consume();
                   n.constant ? t.push(n.value) : n.identifier ? t.push(n.text) : this.throwError("invalid key", n), this.consume(":"), e.push(this.expression())
               } while (this.expect(","));
           return this.consume("}"), f(function(n, r) {
               for (var i = {}, a = 0, o = e.length; o > a; a++) i[t[a]] = e[a](n, r);
               return i
           }, {
               literal: !0,
               constant: e.every(Dn),
               inputs: e
           })
       }
   };
   var $a = le(),
       ma = le(),
       ga = Object.prototype.valueOf,
       va = r("$sce"),
       ya = {
           HTML: "html",
           CSS: "css",
           URL: "url",
           RESOURCE_URL: "resourceUrl",
           JS: "js"
       },
       Wi = r("$compile"),
       ba = e.createElement("a"),
       wa = ir(t.location.href);
   sr.$inject = ["$provide"], fr.$inject = ["$locale"], dr.$inject = ["$locale"];
   var xa = ".",
       ka = {
           yyyy: $r("FullYear", 4),
           yy: $r("FullYear", 2, 0, !0),
           y: $r("FullYear", 1),
           MMMM: mr("Month"),
           MMM: mr("Month", !0),
           MM: $r("Month", 2, 1),
           M: $r("Month", 1, 1),
           dd: $r("Date", 2),
           d: $r("Date", 1),
           HH: $r("Hours", 2),
           H: $r("Hours", 1),
           hh: $r("Hours", 2, -12),
           h: $r("Hours", 1, -12),
           mm: $r("Minutes", 2),
           m: $r("Minutes", 1),
           ss: $r("Seconds", 2),
           s: $r("Seconds", 1),
           sss: $r("Milliseconds", 3),
           EEEE: mr("Day"),
           EEE: mr("Day", !0),
           a: wr,
           Z: gr,
           ww: br(2),
           w: br(1)
       },
       Sa = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|)*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
       Ca = /^\-?\d+$/;
   xr.$inject = ["$locale"];
   var Aa = m(Wr),
       Oa = m(Yr);
   Cr.$inject = ["$parse"];
   var Ea = m({
           restrict: "E",
           compile: function(t, e) {
               return e.href || e.xlinkHref || e.name ? void 0 : function(t, e) {
                   if ("a" === e[0].nodeName.toLowerCase()) {
                       var n = "[object SVGAnimatedString]" === ai.call(e.prop("href")) ? "xlink:href" : "href";
                       e.on("click", function(t) {
                           e.attr(n) || t.preventDefault()
                       })
                   }
               }
           }
       }),
       ja = {};
   a(Ri, function(t, e) {
       if ("multiple" != t) {
           var n = Xe("ng-" + e);
           ja[n] = function() {
               return {
                   restrict: "A",
                   priority: 100,
                   link: function(t, r, i) {
                       t.$watch(i[n], function(t) {
                           i.$set(e, !!t)
                       })
                   }
               }
           }
       }
   }), a(_i, function(t, e) {
       ja[e] = function() {
           return {
               priority: 100,
               link: function(t, n, r) {
                   if ("ngPattern" === e && "/" == r.ngPattern.charAt(0)) {
                       var i = r.ngPattern.match(zr);
                       if (i) return r.$set("ngPattern", new RegExp(i[1], i[2])), void 0
                   }
                   t.$watch(r[e], function(t) {
                       r.$set(e, t)
                   })
               }
           }
       }
   }), a(["src", "srcset", "href"], function(t) {
       var e = Xe("ng-" + t);
       ja[e] = function() {
           return {
               priority: 99,
               link: function(n, r, i) {
                   var a = t,
                       o = t;
                   "href" === t && "[object SVGAnimatedString]" === ai.call(r.prop("href")) && (o = "xlinkHref", i.$attr[o] = "xlink:href", a = null), i.$observe(e, function(e) {
                       return e ? (i.$set(o, e), Xr && a && r.prop(a, i[o]), void 0) : ("href" === t && i.$set(o, null), void 0)
                   })
               }
           }
       }
   });
   var Na = {
           $addControl: p,
           $$renameControl: Or,
           $removeControl: p,
           $setValidity: p,
           $setDirty: p,
           $setPristine: p,
           $setSubmitted: p
       },
       Ta = "ng-submitted";
   Er.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"];
   var Ma = function(t) {
           return ["$timeout", function(e) {
               var r = {
                   name: "form",
                   restrict: t ? "EAC" : "E",
                   controller: Er,
                   compile: function(t) {
                       return t.addClass(ho).addClass(co), {
                           pre: function(t, r, i, a) {
                               if (!("action" in i)) {
                                   var o = function(e) {
                                       t.$apply(function() {
                                           a.$commitViewValue(), a.$setSubmitted()
                                       }), e.preventDefault()
                                   };
                                   Ci(r[0], "submit", o), r.on("$destroy", function() {
                                       e(function() {
                                           Ai(r[0], "submit", o)
                                       }, 0, !1)
                                   })
                               }
                               var s = a.$$parentForm,
                                   u = a.$name;
                               u && (Rn(t, null, u, a, u), i.$observe(i.name ? "name" : "ngForm", function(e) {
                                   u !== e && (Rn(t, null, u, n, u), u = e, Rn(t, null, u, a, u), s.$$renameControl(a, u))
                               })), r.on("$destroy", function() {
                                   s.$removeControl(a), u && Rn(t, null, u, n, u), f(a, Na)
                               })
                           }
                       }
                   }
               };
               return r
           }]
       },
       Pa = Ma(),
       Va = Ma(!0),
       qa = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,
       Da = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
       Ra = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
       Ia = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
       _a = /^(\d{4})-(\d{2})-(\d{2})$/,
       Ua = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
       La = /^(\d{4})-W(\d\d)$/,
       Fa = /^(\d{4})-(\d\d)$/,
       Ha = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
       Ba = {
           text: Nr,
           date: Vr("date", _a, Pr(_a, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"),
           "datetime-local": Vr("datetimelocal", Ua, Pr(Ua, ["yyyy", "MM", "dd", "HH", "mm", "ss", "sss"]), "yyyy-MM-ddTHH:mm:ss.sss"),
           time: Vr("time", Ha, Pr(Ha, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"),
           week: Vr("week", La, Mr, "yyyy-Www"),
           month: Vr("month", Fa, Pr(Fa, ["yyyy", "MM"]), "yyyy-MM"),
           number: Dr,
           url: Rr,
           email: Ir,
           radio: _r,
           checkbox: Lr,
           hidden: p,
           button: p,
           submit: p,
           reset: p,
           file: p
       },
       za = ["$browser", "$sniffer", "$filter", "$parse", function(t, e, n, r) {
           return {
               restrict: "E",
               require: ["?ngModel"],
               link: {
                   pre: function(i, a, o, s) {
                       s[0] && (Ba[Wr(o.type)] || Ba.text)(i, a, o, s[0], e, t, n, r)
                   }
               }
           }
       }],
       Ga = /^(true|false|\d+)$/,
       Wa = function() {
           return {
               restrict: "A",
               priority: 100,
               compile: function(t, e) {
                   return Ga.test(e.ngValue) ? function(t, e, n) {
                       n.$set("value", t.$eval(n.ngValue))
                   } : function(t, e, n) {
                       t.$watch(n.ngValue, function(t) {
                           n.$set("value", t)
                       })
                   }
               }
           }
       },
       Ja = ["$compile", function(t) {
           return {
               restrict: "AC",
               compile: function(e) {
                   return t.$$addBindingClass(e),
                       function(e, r, i) {
                           t.$$addBindingInfo(r, i.ngBind), r = r[0], e.$watch(i.ngBind, function(t) {
                               r.textContent = t === n ? "" : t
                           })
                       }
               }
           }
       }],
       Ya = ["$interpolate", "$compile", function(t, e) {
           return {
               compile: function(r) {
                   return e.$$addBindingClass(r),
                       function(r, i, a) {
                           var o = t(i.attr(a.$attr.ngBindTemplate));
                           e.$$addBindingInfo(i, o.expressions), i = i[0], a.$observe("ngBindTemplate", function(t) {
                               i.textContent = t === n ? "" : t
                           })
                       }
               }
           }
       }],
       Za = ["$sce", "$parse", "$compile", function(t, e, n) {
           return {
               restrict: "A",
               compile: function(r, i) {
                   var a = e(i.ngBindHtml),
                       o = e(i.ngBindHtml, function(t) {
                           return (t || "").toString()
                       });
                   return n.$$addBindingClass(r),
                       function(e, r, i) {
                           n.$$addBindingInfo(r, i.ngBindHtml), e.$watch(o, function() {
                               r.html(t.getTrustedHtml(a(e)) || "")
                           })
                       }
               }
           }
       }],
       Ka = m({
           restrict: "A",
           require: "ngModel",
           link: function(t, e, n, r) {
               r.$viewChangeListeners.push(function() {
                   t.$eval(n.ngChange)
               })
           }
       }),
       Xa = Fr("", !0),
       Qa = Fr("Odd", 0),
       to = Fr("Even", 1),
       eo = Ar({
           compile: function(t, e) {
               e.$set("ngCloak", n), t.removeClass("ng-cloak")
           }
       }),
       no = [function() {
           return {
               restrict: "A",
               scope: !0,
               controller: "@",
               priority: 500
           }
       }],
       ro = {},
       io = {
           blur: !0,
           focus: !0
       };
   a("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function(t) {
       var e = Xe("ng-" + t);
       ro[e] = ["$parse", "$rootScope", function(n, r) {
           return {
               restrict: "A",
               compile: function(i, a) {
                   var o = n(a[e], null, !0);
                   return function(e, n) {
                       n.on(t, function(n) {
                           var i = function() {
                               o(e, {
                                   $event: n
                               })
                           };
                           io[t] && r.$$phase ? e.$evalAsync(i) : e.$apply(i)
                       })
                   }
               }
           }
       }]
   });
   var ao = ["$animate", function(t) {
           return {
               multiElement: !0,
               transclude: "element",
               priority: 600,
               terminal: !0,
               restrict: "A",
               $$tlb: !0,
               link: function(n, r, i, a, o) {
                   var s, u, l;
                   n.$watch(i.ngIf, function(n) {
                       n ? u || o(function(n, a) {
                           u = a, n[n.length++] = e.createComment(" end ngIf: " + i.ngIf + " "), s = {
                               clone: n
                           }, t.enter(n, r.parent(), r)
                       }) : (l && (l.remove(), l = null), u && (u.$destroy(), u = null), s && (l = ue(s.clone), t.leave(l).then(function() {
                           l = null
                       }), s = null))
                   })
               }
           }
       }],
       oo = ["$templateRequest", "$anchorScroll", "$animate", "$sce", function(t, e, n, r) {
           return {
               restrict: "ECA",
               priority: 400,
               terminal: !0,
               transclude: "element",
               controller: si.noop,
               compile: function(i, a) {
                   var o = a.ngInclude || a.src,
                       s = a.onload || "",
                       u = a.autoscroll;
                   return function(i, a, l, c, f) {
                       var d, h, p, $ = 0,
                           m = function() {
                               h && (h.remove(), h = null), d && (d.$destroy(), d = null), p && (n.leave(p).then(function() {
                                   h = null
                               }), h = p, p = null)
                           };
                       i.$watch(r.parseAsResourceUrl(o), function(r) {
                           var o = function() {
                                   !v(u) || u && !i.$eval(u) || e()
                               },
                               l = ++$;
                           r ? (t(r, !0).then(function(t) {
                               if (l === $) {
                                   var e = i.$new();
                                   c.template = t;
                                   var u = f(e, function(t) {
                                       m(), n.enter(t, null, a).then(o)
                                   });
                                   d = e, p = u, d.$emit("$includeContentLoaded", r), i.$eval(s)
                               }
                           }, function() {
                               l === $ && (m(), i.$emit("$includeContentError", r))
                           }), i.$emit("$includeContentRequested", r)) : (m(), c.template = null)
                       })
                   }
               }
           }
       }],
       so = ["$compile", function(t) {
           return {
               restrict: "ECA",
               priority: -400,
               require: "ngInclude",
               link: function(n, r, i, a) {
                   return /SVG/.test(r[0].toString()) ? (r.empty(), t(ve(a.template, e).childNodes)(n, function(t) {
                       r.append(t)
                   }, {
                       futureParentElement: r
                   }), void 0) : (r.html(a.template), t(r.contents())(n), void 0)
               }
           }
       }],
       uo = Ar({
           priority: 450,
           compile: function() {
               return {
                   pre: function(t, e, n) {
                       t.$eval(n.ngInit)
                   }
               }
           }
       }),
       lo = function() {
           return {
               restrict: "A",
               priority: 100,
               require: "ngModel",
               link: function(t, e, r, i) {
                   var o = e.attr(r.$attr.ngList) || ", ",
                       s = "false" !== r.ngTrim,
                       u = s ? fi(o) : o,
                       l = function(t) {
                           if (!g(t)) {
                               var e = [];
                               return t && a(t.split(u), function(t) {
                                   t && e.push(s ? fi(t) : t)
                               }), e
                           }
                       };
                   i.$parsers.push(l), i.$formatters.push(function(t) {
                       return ci(t) ? t.join(o) : n
                   }), i.$isEmpty = function(t) {
                       return !t || !t.length
                   }
               }
           }
       },
       co = "ng-valid",
       fo = "ng-invalid",
       ho = "ng-pristine",
       po = "ng-dirty",
       $o = "ng-untouched",
       mo = "ng-touched",
       go = "ng-pending",
       vo = new r("ngModel"),
       yo = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function(t, e, r, i, o, s, u, l, c, f) {
           this.$viewValue = Number.NaN, this.$modelValue = Number.NaN, this.$$rawModelValue = n, this.$validators = {}, this.$asyncValidators = {}, this.$parsers = [], this.$formatters = [], this.$viewChangeListeners = [], this.$untouched = !0, this.$touched = !1, this.$pristine = !0, this.$dirty = !1, this.$valid = !0, this.$invalid = !1, this.$error = {}, this.$$success = {}, this.$pending = n, this.$name = f(r.name || "", !1)(t);
           var d = o(r.ngModel),
               h = d.assign,
               $ = d,
               m = h,
               y = null,
               b = this;
           this.$$setOptions = function(t) {
               if (b.$options = t, t && t.getterSetter) {
                   var e = o(r.ngModel + "()"),
                       n = o(r.ngModel + "($$$p)");
                   $ = function(t) {
                       var n = d(t);
                       return k(n) && (n = e(t)), n
                   }, m = function(t) {
                       k(d(t)) ? n(t, {
                           $$$p: b.$modelValue
                       }) : h(t, b.$modelValue)
                   }
               } else if (!d.assign) throw vo("nonassign", "Expression '{0}' is non-assignable. Element: {1}", r.ngModel, z(i))
           }, this.$render = p, this.$isEmpty = function(t) {
               return g(t) || "" === t || null === t || t !== t
           };
           var x = i.inheritedData("$formController") || Na,
               S = 0;
           Hr({
               ctrl: this,
               $element: i,
               set: function(t, e) {
                   t[e] = !0
               },
               unset: function(t, e) {
                   delete t[e]
               },
               parentForm: x,
               $animate: s
           }), this.$setPristine = function() {
               b.$dirty = !1, b.$pristine = !0, s.removeClass(i, po), s.addClass(i, ho)
           }, this.$setDirty = function() {
               b.$dirty = !0, b.$pristine = !1, s.removeClass(i, ho), s.addClass(i, po), x.$setDirty()
           }, this.$setUntouched = function() {
               b.$touched = !1, b.$untouched = !0, s.setClass(i, $o, mo)
           }, this.$setTouched = function() {
               b.$touched = !0, b.$untouched = !1, s.setClass(i, mo, $o)
           }, this.$rollbackViewValue = function() {
               u.cancel(y), b.$viewValue = b.$$lastCommittedViewValue, b.$render()
           }, this.$validate = function() {
               if (!w(b.$modelValue) || !isNaN(b.$modelValue)) {
                   var t = b.$$lastCommittedViewValue,
                       e = b.$$rawModelValue,
                       r = b.$$parserName || "parse",
                       i = b.$error[r] ? !1 : n,
                       a = b.$valid,
                       o = b.$modelValue,
                       s = b.$options && b.$options.allowInvalid;
                   b.$$runValidators(i, e, t, function(t) {
                       s || a === t || (b.$modelValue = t ? e : n, b.$modelValue !== o && b.$$writeModelToScope())
                   })
               }
           }, this.$$runValidators = function(t, e, r, i) {
               function o(t) {
                   var e = b.$$parserName || "parse";
                   if (t === n) l(e, null);
                   else if (l(e, t), !t) return a(b.$validators, function(t, e) {
                       l(e, null)
                   }), a(b.$asyncValidators, function(t, e) {
                       l(e, null)
                   }), !1;
                   return !0
               }
               function s() {
                   var t = !0;
                   return a(b.$validators, function(n, i) {
                       var a = n(e, r);
                       t = t && a, l(i, a)
                   }), t ? !0 : (a(b.$asyncValidators, function(t, e) {
                       l(e, null)
                   }), !1)
               }
               function u() {
                   var t = [],
                       i = !0;
                   a(b.$asyncValidators, function(a, o) {
                       var s = a(e, r);
                       if (!T(s)) throw vo("$asyncValidators", "Expected asynchronous validator to return a promise but got '{0}' instead.", s);
                       l(o, n), t.push(s.then(function() {
                           l(o, !0)
                       }, function() {
                           i = !1, l(o, !1)
                       }))
                   }), t.length ? c.all(t).then(function() {
                       f(i)
                   }, p) : f(!0)
               }
               function l(t, e) {
                   d === S && b.$setValidity(t, e)
               }
               function f(t) {
                   d === S && i(t)
               }
               S++;
               var d = S;
               return o(t) ? s() ? (u(), void 0) : (f(!1), void 0) : (f(!1), void 0)
           }, this.$commitViewValue = function() {
               var t = b.$viewValue;
               u.cancel(y), (b.$$lastCommittedViewValue !== t || "" === t && b.$$hasNativeValidators) && (b.$$lastCommittedViewValue = t, b.$pristine && this.$setDirty(), this.$$parseAndValidate())
           }, this.$$parseAndValidate = function() {
               function e() {
                   b.$modelValue !== s && b.$$writeModelToScope()
               }
               var r = b.$$lastCommittedViewValue,
                   i = r,
                   a = g(i) ? n : !0;
               if (a)
                   for (var o = 0; o < b.$parsers.length; o++)
                       if (i = b.$parsers[o](i), g(i)) {
                           a = !1;
                           break
                       }
               w(b.$modelValue) && isNaN(b.$modelValue) && (b.$modelValue = $(t));
               var s = b.$modelValue,
                   u = b.$options && b.$options.allowInvalid;
               b.$$rawModelValue = i, u && (b.$modelValue = i, e()), b.$$runValidators(a, i, b.$$lastCommittedViewValue, function(t) {
                   u || (b.$modelValue = t ? i : n, e())
               })
           }, this.$$writeModelToScope = function() {
               m(t, b.$modelValue), a(b.$viewChangeListeners, function(t) {
                   try {
                       t()
                   } catch (n) {
                       e(n)
                   }
               })
           }, this.$setViewValue = function(t, e) {
               b.$viewValue = t, (!b.$options || b.$options.updateOnDefault) && b.$$debounceViewValueCommit(e)
           }, this.$$debounceViewValueCommit = function(e) {
               var n, r = 0,
                   i = b.$options;
               i && v(i.debounce) && (n = i.debounce, w(n) ? r = n : w(n[e]) ? r = n[e] : w(n["default"]) && (r = n["default"])), u.cancel(y), r ? y = u(function() {
                   b.$commitViewValue()
               }, r) : l.$$phase ? b.$commitViewValue() : t.$apply(function() {
                   b.$commitViewValue()
               })
           }, t.$watch(function() {
               var e = $(t);
               if (e !== b.$modelValue) {
                   b.$modelValue = b.$$rawModelValue = e;
                   for (var r = b.$formatters, i = r.length, a = e; i--;) a = r[i](a);
                   b.$viewValue !== a && (b.$viewValue = b.$$lastCommittedViewValue = a, b.$render(), b.$$runValidators(n, e, a, p))
               }
               return e
           })
       }],
       bo = ["$rootScope", function(t) {
           return {
               restrict: "A",
               require: ["ngModel", "^?form", "^?ngModelOptions"],
               controller: yo,
               priority: 1,
               compile: function(e) {
                   return e.addClass(ho).addClass($o).addClass(co), {
                       pre: function(t, e, n, r) {
                           var i = r[0],
                               a = r[1] || Na;
                           i.$$setOptions(r[2] && r[2].$options), a.$addControl(i), n.$observe("name", function(t) {
                               i.$name !== t && a.$$renameControl(i, t)
                           }), t.$on("$destroy", function() {
                               a.$removeControl(i)
                           })
                       },
                       post: function(e, n, r, i) {
                           var a = i[0];
                           a.$options && a.$options.updateOn && n.on(a.$options.updateOn, function(t) {
                               a.$$debounceViewValueCommit(t && t.type)
                           }), n.on("blur", function() {
                               a.$touched || (t.$$phase ? e.$evalAsync(a.$setTouched) : e.$apply(a.$setTouched))
                           })
                       }
                   }
               }
           }
       }],
       wo = /(\s+|^)default(\s+|$)/,
       xo = function() {
           return {
               restrict: "A",
               controller: ["$scope", "$attrs", function(t, e) {
                   var r = this;
                   this.$options = t.$eval(e.ngModelOptions), this.$options.updateOn !== n ? (this.$options.updateOnDefault = !1, this.$options.updateOn = fi(this.$options.updateOn.replace(wo, function() {
                       return r.$options.updateOnDefault = !0, " "
                   }))) : this.$options.updateOnDefault = !0
               }]
           }
       },
       ko = Ar({
           terminal: !0,
           priority: 1e3
       }),
       So = ["$locale", "$interpolate", function(t, e) {
           var n = /{}/g,
               r = /^when(Minus)?(.+)$/;
           return {
               restrict: "EA",
               link: function(i, o, s) {
                   function u(t) {
                       o.text(t || "")
                   }
                   var l, c = s.count,
                       f = s.$attr.when && o.attr(s.$attr.when),
                       d = s.offset || 0,
                       h = i.$eval(f) || {},
                       p = {},
                       $ = e.startSymbol(),
                       m = e.endSymbol(),
                       g = $ + c + "-" + d + m,
                       v = si.noop;
                   a(s, function(t, e) {
                       var n = r.exec(e);
                       if (n) {
                           var i = (n[1] ? "-" : "") + Wr(n[2]);
                           h[i] = o.attr(s.$attr[e])
                       }
                   }), a(h, function(t, r) {
                       p[r] = e(t.replace(n, g))
                   }), i.$watch(c, function(e) {
                       var n = parseFloat(e),
                           r = isNaN(n);
                       r || n in h || (n = t.pluralCat(n - d)), n === l || r && isNaN(l) || (v(), v = i.$watch(p[n], u), l = n)
                   })
               }
           }
       }],
       Co = ["$parse", "$animate", function(t, o) {
           var s = "$$NG_REMOVED",
               u = r("ngRepeat"),
               l = function(t, e, n, r, i, a, o) {
                   t[n] = r, i && (t[i] = a), t.$index = e, t.$first = 0 === e, t.$last = e === o - 1, t.$middle = !(t.$first || t.$last), t.$odd = !(t.$even = 0 === (1 & e))
               },
               c = function(t) {
                   return t.clone[0]
               },
               f = function(t) {
                   return t.clone[t.clone.length - 1]
               };
           return {
               restrict: "A",
               multiElement: !0,
               transclude: "element",
               priority: 1e3,
               terminal: !0,
               $$tlb: !0,
               compile: function(r, d) {
                   var h = d.ngRepeat,
                       p = e.createComment(" end ngRepeat: " + h + " "),
                       $ = h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
                   if (!$) throw u("iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", h);
                   var m = $[1],
                       g = $[2],
                       v = $[3],
                       y = $[4];
                   if ($ = m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/), !$) throw u("iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", m);
                   var b = $[3] || $[1],
                       w = $[2];
                   if (v && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(v) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(v))) throw u("badident", "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.", v);
                   var x, k, S, C, A = {
                       $id: Ue
                   };
                   return y ? x = t(y) : (S = function(t, e) {
                           return Ue(e)
                       }, C = function(t) {
                           return t
                       }),
                       function(t, e, r, d, $) {
                           x && (k = function(e, n, r) {
                               return w && (A[w] = e), A[b] = n, A.$index = r, x(t, A)
                           });
                           var m = le();
                           t.$watchCollection(g, function(r) {
                               var d, g, y, x, A, O, E, j, N, T, M, P, V = e[0],
                                   q = le();
                               if (v && (t[v] = r), i(r)) N = r, j = k || S;
                               else {
                                   j = k || C, N = [];
                                   for (var D in r) r.hasOwnProperty(D) && "$" != D.charAt(0) && N.push(D);
                                   N.sort()
                               }
                               for (x = N.length, M = new Array(x), d = 0; x > d; d++)
                                   if (A = r === N ? d : N[d], O = r[A], E = j(A, O, d), m[E]) T = m[E], delete m[E], q[E] = T, M[d] = T;
                                   else {
                                       if (q[E]) throw a(M, function(t) {
                                           t && t.scope && (m[t.id] = t)
                                       }), u("dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", h, E, O);
                                       M[d] = {
                                           id: E,
                                           scope: n,
                                           clone: n
                                       }, q[E] = !0
                                   }
                               for (var R in m) {
                                   if (T = m[R], P = ue(T.clone), o.leave(P), P[0].parentNode)
                                       for (d = 0, g = P.length; g > d; d++) P[d][s] = !0;
                                   T.scope.$destroy()
                               }
                               for (d = 0; x > d; d++)
                                   if (A = r === N ? d : N[d], O = r[A], T = M[d], T.scope) {
                                       y = V;
                                       do y = y.nextSibling; while (y && y[s]);
                                       c(T) != y && o.move(ue(T.clone), null, Qr(V)), V = f(T), l(T.scope, d, b, O, w, A, x)
                                   } else $(function(t, e) {
                                       T.scope = e;
                                       var n = p.cloneNode(!1);
                                       t[t.length++] = n, o.enter(t, null, Qr(V)), V = n, T.clone = t, q[T.id] = T, l(T.scope, d, b, O, w, A, x)
                                   });
                               m = q
                           })
                       }
               }
           }
       }],
       Ao = "ng-hide",
       Oo = "ng-hide-animate",
       Eo = ["$animate", function(t) {
           return {
               restrict: "A",
               multiElement: !0,
               link: function(e, n, r) {
                   e.$watch(r.ngShow, function(e) {
                       t[e ? "removeClass" : "addClass"](n, Ao, {
                           tempClasses: Oo
                       })
                   })
               }
           }
       }],
       jo = ["$animate", function(t) {
           return {
               restrict: "A",
               multiElement: !0,
               link: function(e, n, r) {
                   e.$watch(r.ngHide, function(e) {
                       t[e ? "addClass" : "removeClass"](n, Ao, {
                           tempClasses: Oo
                       })
                   })
               }
           }
       }],
       No = Ar(function(t, e, n) {
           t.$watchCollection(n.ngStyle, function(t, n) {
               n && t !== n && a(n, function(t, n) {
                   e.css(n, "")
               }), t && e.css(t)
           })
       }),
       To = ["$animate", function(t) {
           return {
               restrict: "EA",
               require: "ngSwitch",
               controller: ["$scope", function() {
                   this.cases = {}
               }],
               link: function(n, r, i, o) {
                   var s = i.ngSwitch || i.on,
                       u = [],
                       l = [],
                       c = [],
                       f = [],
                       d = function(t, e) {
                           return function() {
                               t.splice(e, 1)
                           }
                       };
                   n.$watch(s, function(n) {
                       var r, i;
                       for (r = 0, i = c.length; i > r; ++r) t.cancel(c[r]);
                       for (c.length = 0, r = 0, i = f.length; i > r; ++r) {
                           var s = ue(l[r].clone);
                           f[r].$destroy();
                           var h = c[r] = t.leave(s);
                           h.then(d(c, r))
                       }
                       l.length = 0, f.length = 0, (u = o.cases["!" + n] || o.cases["?"]) && a(u, function(n) {
                           n.transclude(function(r, i) {
                               f.push(i);
                               var a = n.element;
                               r[r.length++] = e.createComment(" end ngSwitchWhen: ");
                               var o = {
                                   clone: r
                               };
                               l.push(o), t.enter(r, a.parent(), a)
                           })
                       })
                   })
               }
           }
       }],
       Mo = Ar({
           transclude: "element",
           priority: 1200,
           require: "^ngSwitch",
           multiElement: !0,
           link: function(t, e, n, r, i) {
               r.cases["!" + n.ngSwitchWhen] = r.cases["!" + n.ngSwitchWhen] || [], r.cases["!" + n.ngSwitchWhen].push({
                   transclude: i,
                   element: e
               })
           }
       }),
       Po = Ar({
           transclude: "element",
           priority: 1200,
           require: "^ngSwitch",
           multiElement: !0,
           link: function(t, e, n, r, i) {
               r.cases["?"] = r.cases["?"] || [], r.cases["?"].push({
                   transclude: i,
                   element: e
               })
           }
       }),
       Vo = Ar({
           restrict: "EAC",
           link: function(t, e, n, i, a) {
               if (!a) throw r("ngTransclude")("orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", z(e));
               a(function(t) {
                   e.empty(), e.append(t)
               })
           }
       }),
       qo = ["$templateCache", function(t) {
           return {
               restrict: "E",
               terminal: !0,
               compile: function(e, n) {
                   if ("text/ng-template" == n.type) {
                       var r = n.id,
                           i = e[0].text;
                       t.put(r, i)
                   }
               }
           }
       }],
       Do = r("ngOptions"),
       Ro = m({
           restrict: "A",
           terminal: !0
       }),
       Io = ["$compile", "$parse", function(t, r) {
           var i = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
               s = {
                   $setViewValue: p
               };
           return {
               restrict: "E",
               require: ["select", "?ngModel"],
               controller: ["$element", "$scope", "$attrs", function(t, e, n) {
                   var r, i, a = this,
                       o = {},
                       u = s;
                   a.databound = n.ngModel, a.init = function(t, e, n) {
                       u = t, r = e, i = n
                   }, a.addOption = function(e, n) {
                       oe(e, '"option value"'), o[e] = !0, u.$viewValue == e && (t.val(e), i.parent() && i.remove()), n && n[0].hasAttribute("selected") && (n[0].selected = !0)
                   }, a.removeOption = function(t) {
                       this.hasOption(t) && (delete o[t], u.$viewValue === t && this.renderUnknownOption(t))
                   }, a.renderUnknownOption = function(e) {
                       var n = "? " + Ue(e) + " ?";
                       i.val(n), t.prepend(i), t.val(n), i.prop("selected", !0)
                   }, a.hasOption = function(t) {
                       return o.hasOwnProperty(t)
                   }, e.$on("$destroy", function() {
                       a.renderUnknownOption = p
                   })
               }],
               link: function(s, u, l, c) {
                   function f(t, e, n, r) {
                       n.$render = function() {
                           var t = n.$viewValue;
                           r.hasOption(t) ? (C.parent() && C.remove(), e.val(t), "" === t && p.prop("selected", !0)) : g(t) && p ? e.val("") : r.renderUnknownOption(t)
                       }, e.on("change", function() {
                           t.$apply(function() {
                               C.parent() && C.remove(), n.$setViewValue(e.val())
                           })
                       })
                   }
                   function d(t, e, n) {
                       var r;
                       n.$render = function() {
                           var t = new Le(n.$viewValue);
                           a(e.find("option"), function(e) {
                               e.selected = v(t.get(e.value))
                           })
                       }, t.$watch(function() {
                           I(r, n.$viewValue) || (r = R(n.$viewValue), n.$render())
                       }), e.on("change", function() {
                           t.$apply(function() {
                               var t = [];
                               a(e.find("option"), function(e) {
                                   e.selected && t.push(e.value)
                               }), n.$setViewValue(t)
                           })
                       })
                   }
                   function h(e, s, u) {
                       function l(t, n, r) {
                           return I[O] = r, N && (I[N] = n), t(e, I)
                       }
                       function c() {
                           e.$apply(function() {
                               var t, n = P(e) || [];
                               if (y) t = [], a(s.val(), function(e) {
                                   e = q ? D[e] : e, t.push(f(e, n[e]))
                               });
                               else {
                                   var r = q ? D[s.val()] : s.val();
                                   t = f(r, n[r])
                               }
                               u.$setViewValue(t), g()
                           })
                       }
                       function f(t, e) {
                           if ("?" === t) return n;
                           if ("" === t) return null;
                           var r = j ? j : M;
                           return l(r, t, e)
                       }
                       function d() {
                           var t, n = P(e);
                           if (n && ci(n)) {
                               t = new Array(n.length);
                               for (var r = 0, i = n.length; i > r; r++) t[r] = l(A, r, n[r]);
                               return t
                           }
                           if (n) {
                               t = {};
                               for (var a in n) n.hasOwnProperty(a) && (t[a] = l(A, a, n[a]))
                           }
                           return t
                       }
                       function h(t) {
                           var e;
                           if (y)
                               if (q && ci(t)) {
                                   e = new Le([]);
                                   for (var n = 0; n < t.length; n++) e.put(l(q, null, t[n]), !0)
                               } else e = new Le(t);
                           else q && (t = l(q, null, t));
                           return function(n, r) {
                               var i;
                               return i = q ? q : j ? j : M, y ? v(e.remove(l(i, n, r))) : t === l(i, n, r)
                           }
                       }
                       function p() {
                           x || (e.$$postDigest(g), x = !0)
                       }
                       function m(t, e, n) {
                           t[e] = t[e] || 0, t[e] += n ? 1 : -1
                       }
                       function g() {
                           x = !1;
                           var t, n, r, i, c, f, d, p, g, b, C, O, E, j, M, V, _, U = {
                                   "": []
                               },
                               L = [""],
                               F = u.$viewValue,
                               H = P(e) || [],
                               B = N ? o(H) : H,
                               z = {},
                               G = h(F),
                               W = !1;
                           for (D = {}, O = 0; b = B.length, b > O; O++) d = O, N && (d = B[O], "$" === d.charAt(0)) || (p = H[d], t = l(T, d, p) || "", (n = U[t]) || (n = U[t] = [], L.push(t)), E = G(d, p), W = W || E, V = l(A, d, p), V = v(V) ? V : "", _ = q ? q(e, I) : N ? B[O] : O, q && (D[_] = d), n.push({
                               id: _,
                               label: V,
                               selected: E
                           }));
                           for (y || (w || null === F ? U[""].unshift({
                                   id: "",
                                   label: "",
                                   selected: !W
                               }) : W || U[""].unshift({
                                   id: "?",
                                   label: "",
                                   selected: !0
                               })), C = 0, g = L.length; g > C; C++) {
                               for (t = L[C], n = U[t], R.length <= C ? (i = {
                                       element: S.clone().attr("label", t),
                                       label: n.label
                                   }, c = [i], R.push(c), s.append(i.element)) : (c = R[C], i = c[0], i.label != t && i.element.attr("label", i.label = t)), j = null, O = 0, b = n.length; b > O; O++) r = n[O], (f = c[O + 1]) ? (j = f.element, f.label !== r.label && (m(z, f.label, !1), m(z, r.label, !0), j.text(f.label = r.label), j.prop("label", f.label)), f.id !== r.id && j.val(f.id = r.id), j[0].selected !== r.selected && (j.prop("selected", f.selected = r.selected), Xr && j.prop("selected", f.selected))) : ("" === r.id && w ? M = w : (M = k.clone()).val(r.id).prop("selected", r.selected).attr("selected", r.selected).prop("label", r.label).text(r.label), c.push(f = {
                                   element: M,
                                   label: r.label,
                                   id: r.id,
                                   selected: r.selected
                               }), m(z, r.label, !0), j ? j.after(M) : i.element.append(M), j = M);
                               for (O++; c.length > O;) r = c.pop(), m(z, r.label, !1), r.element.remove()
                           }
                           for (; R.length > C;) {
                               for (n = R.pop(), O = 1; O < n.length; ++O) m(z, n[O].label, !1);
                               n[0].element.remove()
                           }
                           a(z, function(t, e) {
                               t > 0 ? $.addOption(e) : 0 > t && $.removeOption(e)
                           })
                       }
                       var C;
                       if (!(C = b.match(i))) throw Do("iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", b, z(s));
                       var A = r(C[2] || C[1]),
                           O = C[4] || C[6],
                           E = / as /.test(C[0]) && C[1],
                           j = E ? r(E) : null,
                           N = C[5],
                           T = r(C[3] || ""),
                           M = r(C[2] ? C[1] : O),
                           P = r(C[7]),
                           V = C[8],
                           q = V ? r(C[8]) : null,
                           D = {},
                           R = [
                               [{
                                   element: s,
                                   label: ""
                               }]
                           ],
                           I = {};
                       w && (t(w)(e), w.removeClass("ng-scope"), w.remove()), s.empty(), s.on("change", c), u.$render = g, e.$watchCollection(P, p), e.$watchCollection(d, p), y && e.$watchCollection(function() {
                           return u.$modelValue
                       }, p)
                   }
                   if (c[1]) {
                       for (var p, $ = c[0], m = c[1], y = l.multiple, b = l.ngOptions, w = !1, x = !1, k = Qr(e.createElement("option")), S = Qr(e.createElement("optgroup")), C = k.clone(), A = 0, O = u.children(), E = O.length; E > A; A++)
                           if ("" === O[A].value) {
                               p = w = O.eq(A);
                               break
                           }
                       $.init(m, w, C), y && (m.$isEmpty = function(t) {
                           return !t || 0 === t.length
                       }), b ? h(s, u, m) : y ? d(s, u, m) : f(s, u, m, $)
                   }
               }
           }
       }],
       _o = ["$interpolate", function(t) {
           var e = {
               addOption: p,
               removeOption: p
           };
           return {
               restrict: "E",
               priority: 100,
               compile: function(n, r) {
                   if (g(r.value)) {
                       var i = t(n.text(), !0);
                       i || r.$set("value", n.text())
                   }
                   return function(t, n, r) {
                       var a = "$selectController",
                           o = n.parent(),
                           s = o.data(a) || o.parent().data(a);
                       s && s.databound || (s = e), i ? t.$watch(i, function(t, e) {
                           r.$set("value", t), e !== t && s.removeOption(e), s.addOption(t, n)
                       }) : s.addOption(r.value, n), n.on("$destroy", function() {
                           s.removeOption(r.value)
                       })
                   }
               }
           }
       }],
       Uo = m({
           restrict: "E",
           terminal: !1
       }),
       Lo = function() {
           return {
               restrict: "A",
               require: "?ngModel",
               link: function(t, e, n, r) {
                   r && (n.required = !0, r.$validators.required = function(t, e) {
                       return !n.required || !r.$isEmpty(e)
                   }, n.$observe("required", function() {
                       r.$validate()
                   }))
               }
           }
       },
       Fo = function() {
           return {
               restrict: "A",
               require: "?ngModel",
               link: function(t, e, i, a) {
                   if (a) {
                       var o, s = i.ngPattern || i.pattern;
                       i.$observe("pattern", function(t) {
                           if (b(t) && t.length > 0 && (t = new RegExp("^" + t + "$")), t && !t.test) throw r("ngPattern")("noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", s, t, z(e));
                           o = t || n, a.$validate()
                       }), a.$validators.pattern = function(t) {
                           return a.$isEmpty(t) || g(o) || o.test(t)
                       }
                   }
               }
           }
       },
       Ho = function() {
           return {
               restrict: "A",
               require: "?ngModel",
               link: function(t, e, n, r) {
                   if (r) {
                       var i = -1;
                       n.$observe("maxlength", function(t) {
                           var e = d(t);
                           i = isNaN(e) ? -1 : e, r.$validate()
                       }), r.$validators.maxlength = function(t, e) {
                           return 0 > i || r.$isEmpty(e) || e.length <= i
                       }
                   }
               }
           }
       },
       Bo = function() {
           return {
               restrict: "A",
               require: "?ngModel",
               link: function(t, e, n, r) {
                   if (r) {
                       var i = 0;
                       n.$observe("minlength", function(t) {
                           i = d(t) || 0, r.$validate()
                       }), r.$validators.minlength = function(t, e) {
                           return r.$isEmpty(e) || e.length >= i
                       }
                   }
               }
           }
       };
   return t.angular.bootstrap ? (console.log("WARNING: Tried to load angular more than once."), void 0) : (re(), he(si), Qr(e).ready(function() {
       X(e, Q)
   }), void 0)

}(window, document), !window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>'), angular.module("app", ["angularplasmid"]),

   function() {
       "use strict";
       angular.module("angularplasmid.services", []).factory("SVGUtil", function() {
           function t(t, e) {
               var n = "round";
               return "undefined" == typeof e || 0 === +e ? Math[n](t) : (t = +t, e = +e, isNaN(t) || "number" != typeof e || e % 1 !== 0 ? 0 / 0 : (t = t.toString().split("e"), t = Math[n](+(t[0] + "e" + (t[1] ? +t[1] - e : -e))), t = t.toString().split("e"), +(t[0] + "e" + (t[1] ? +t[1] + e : e))))
           }
           function e(t) {
               d.push(t)
           }
           function n(t) {
               var e;
               for (e = 0; e < d.length; e += 1)
                   if (d[e].id === t) return d[e]
           }
           function r(t, e, n, r) {
               var i = (r - 90) * Math.PI / 180;
               return {
                   x: t + n * Math.cos(i),
                   y: e + n * Math.sin(i)
               }
           }
           function i(t, e) {
               var n, r, i = ["id", "name", "class", "style", "filter", "ng-attr-style", "ng-attr-class", "ng-class"];
               for (r = 0; r < i.length; r += 1) n = i[r], t[0].hasAttribute(n) && (e.attr(n, t.attr(n)), t.removeAttr(n))
           }
           function a(t, e, n) {
               var r, i = "http://www.w3.org/2000/svg",
                   a = document.createElementNS(i, t);
               return n = n || [], angular.forEach(e, function(t) {
                   n.indexOf(t) < 0 && (r = e[t], null === r || t.match(/\$/) || "string" == typeof r && "" === r || a.setAttribute(t, r))
               }), a
           }
           function o(t) {
               angular.forEach(["id", "class", "style"], function(e) {
                   t.removeAttribute(e)
               })
           }
           function s(t, e, n, i) {
               var a, o, s;
               return t = Number(t || 0), e = Number(e || 0), n = Number(n || 0), i = Number(i || 0), a = {
                   start: r(t, e, n, 359.99),
                   end: r(t, e, n, 0)
               }, o = {
                   start: r(t, e, n + i, 359.99),
                   end: r(t, e, n + i, 0)
               }, s = ["M", a.start.x, a.start.y, "A", n, n, 0, 1, 0, a.end.x, a.end.y, "M", o.start.x, o.start.y, "A", n + i, n + i, 0, 1, 0, o.end.x, o.end.y].join(" ")
           }
           function u(t, e, n, i, a, o, s, u) {
               var l, c, f, d, h, p, $, m, g, v, y, b, w;
               return t = Number(t), e = Number(e), n = Number(n), i = Number(i), a = Number(a), o = Number(o), s = s || {
                   width: 0,
                   length: 0,
                   angle: 0
               }, u = u || {
                   width: 0,
                   length: 0,
                   angle: 0
               }, i === a ? (c = r(t, e, n, i), d = r(t, e, n + o, i), l = ["M", c.x, c.y, "L", d.x, d.y].join(" ")) : 1 === o ? (c = r(t, e, n, i), d = r(t, e, n, a), h = a > i ? 180 >= a - i ? "0" : "1" : 180 >= a - i ? "1" : "0", l = ["M", c.x, c.y, "A", n, n, 0, h, 1, d.x, d.y].join(" ")) : (a -= u.length < 0 ? 0 : u.length, i += s.length < 0 ? 0 : s.length, c = r(t, e, n, a), d = r(t, e, n, i), p = r(t, e, n - s.width, i + s.angle), $ = r(t, e, n + o / 2, i - s.length), m = r(t, e, n + o + s.width, i + s.angle), g = r(t, e, n + o, i), v = r(t, e, n + o + u.width, a - u.angle), y = r(t, e, n + o / 2, a + u.length), b = r(t, e, n - u.width, a - u.angle), w = r(t, e, n, a), f = r(t, e, n + o, a), h = 180 >= a - i ? "0" : "1", l = ["M", c.x, c.y, "A", n, n, 0, h, 0, d.x, d.y, "L", p.x, p.y, "L", $.x, $.y, "L", m.x, m.y, "L", g.x, g.y, "A", n + o, n + o, 0, h, 1, f.x, f.y, "L", v.x, v.y, "L", y.x, y.y, "L", b.x, b.y, "L", w.x, w.y, "z"].join(" ")), l
           }
           function l(e, n, r, i, a, o) {
               e = Number(e || 0), n = Number(n || 0), r = Number(r || 0), i = Number(i || 0), a = Number(a || 0), o = Number(o || 2);
               var s, u, l, c, f = Number(i) > 0 ? Number(a) / Number(i) : 0,
                   d = 2 * Math.PI / f,
                   h = -1,
                   p = "";
               for (c = 0; f > c; c += 1) s = d * c - Math.PI / 2, l = Math.cos(s), u = Math.sin(s), p += "M" + t(e + r * l, h) + "," + t(n + r * u, h) + " L" + t(e + (r + o) * l, h) + "," + t(n + (r + o) * u, h) + " ";
               return p = p || "M 0,0"
           }
           function c(e, n, r, i, a) {
               e = Number(e), n = Number(n), r = Number(r), i = Number(i), a = Number(a);
               var o, s, u, l, c = Number(i) > 0 ? Number(a) / Number(i) : 0,
                   f = 2 * Math.PI / c,
                   d = -1,
                   h = [];
               for (l = 0; c > l; l += 1) o = f * l - Math.PI / 2, u = Math.cos(o), s = Math.sin(o), h.push({
                   x: t(e + r * u, d),
                   y: t(n + r * s, d),
                   text: i * l
               });
               return h
           }
           function f(t, e) {
               return isNaN(t) ? e || 0 : Number(t)
           }
           var d = [],
               h = [],
               p = [];
           return {
               api: {
                   addPlasmid: e,
                   plasmids: d,
                   plasmid: n,
                   plasmidtracks: h,
                   trackmarkers: p
               },
               util: {
                   polarToCartesian: r,
                   swapProperties: i,
                   Numeric: f
               },
               svg: {
                   createNode: a,
                   removeAttributes: o,
                   path: {
                       donut: s,
                       arc: u,
                       scale: l
                   },
                   element: {
                       scalelabels: c
                   }
               }
           }
       })
   }(),
   function() {
       "use strict";
       angular.module("angularplasmid", ["angularplasmid.services"]).directive("plasmidapi", ["SVGUtil", function(t) {
           return {
               restrict: "AE",
               link: function(e, n, r) {
                   e[r.name] = t.api
               }
           }
       }]).directive("plasmid", ["SVGUtil", function() {
           return {
               restrict: "AE",
               type: "svg",
               template: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-30 -30 650 650"></svg>',
               replace: !0,
               transclude: !0,
               require: "plasmid",
               scope: {
                   plasmidheight: "@",
                   plasmidwidth: "@",
                   sequencelength: "@",
                   sequence: "@",
                   plasmidclass: "@",
                   plasmidstyle: "@"
               },
               link: {
                   pre: function(t, e, n, r) {
                       r.init(e)
                   },
                   post: function(t, e, n, r, i) {
                       i(t.$parent, function(t) {
                           e.append(t)
                       }), t.$watchGroup(["plasmidheight", "plasmidwidth", "sequencelength", "sequence", "plasmidclass", "plasmidstyle"], function() {
                           r.draw()
                       })
                   }
               },
               controller: ["$scope", "SVGUtil", function(t, e) {
                   var n, r, i = [];
                   r = this, r.elementtype = "plasmid", r.init = function(t) {
                       e.api.addPlasmid(r), n = t, r.id = n.attr("id")
                   }, r.draw = function() {
                       var t = r.dimensions,
                           e = n.plasmidclass,
                           a = n.plasmidstyle;
                       //n.attr("height", t.height), n.attr("width", t.width), e && 
                       n.attr("class", e), a && n.attr("style", a), angular.forEach(i, function(t) {
                           t.draw()
                       })
                   }, r.addTrack = function(t) {
                       i.push(t)
                   }, Object.defineProperty(r, "center", {
                       get: function() {
                           var t = r.dimensions;
                           return {
                               x: t.width / 2,
                               y: t.height / 2
                           }
                       }
                   }), Object.defineProperty(r, "dimensions", {
                       get: function() {
                           return {
                               height: e.util.Numeric(t.plasmidheight, 300),
                               width: e.util.Numeric(t.plasmidwidth, 300)
                           }
                       }
                   }), Object.defineProperty(r, "sequencelength", {
                       get: function() {
                           return r.sequence ? r.sequence.length : e.util.Numeric(t.sequencelength)
                       }
                   }), Object.defineProperty(r, "sequence", {
                       get: function() {
                           return t.sequence
                       }
                   }), Object.defineProperty(r, "plasmidclass", {
                       get: function() {
                           return t.plasmidclass
                       }
                   }), Object.defineProperty(r, "plasmidstyle", {
                       get: function() {
                           return t.plasmidstyle
                       }
                   }), r.tracks = i
               }]
           }
       }]).directive("plasmidtrack", ["SVGUtil", "$compile", function(t, e) {
           return {
               restrict: "AE",
               type: "svg",
               template: "<g><path></path></g>",
               replace: !0,
               transclude: !0,
               require: ["plasmidtrack", "^plasmid"],
               scope: {
                   radius: "@",
                   width: "@",
                   trackclass: "@",
                   trackstyle: "@",
                   trackclick: "&"
               },
               link: {
                   pre: function(t, e, n, r) {
                       var i = r[0],
                           a = r[1],
                           o = angular.element(e.children()[0]);
                       i.init(o, a)
                   },
                   post: function(n, r, i, a, o) {
                       o(n.$parent, function(t) {
                           r.append(t)
                       });
                       var s = angular.element(r),
                           u = angular.element(r.children()[0]),
                           l = a[0];
                       t.util.swapProperties(s, u), u.attr("fill-rule", "evenodd"), e(u)(n.$parent), u.on("click", function(t) {
                           n.trackclick({
                               $event: t,
                               $track: l
                           })
                       }), n.$watchGroup(["radius", "width", "trackstyle", "trackclass"], function() {
                           l.draw()
                       })
                   }
               },
               controller: ["$scope", function(e) {
                   var n, r, i, a = [],
                       o = [],
                       s = [];
                   i = this, i.elementtype = "plasmidtrack", i.init = function(t, e) {
                       n = e, n.addTrack(i), i.plasmid = n, r = t
                   }, i.draw = function() {
                       var e = i.center,
                           n = t.svg.path.donut(e.x, e.y, i.radius, i.width),
                           u = i.trackclass,
                           l = i.trackstyle;
                       r.attr("d", n), u && r.attr("class", u), l && r.attr("style", l), angular.forEach(a, function(t) {
                           t.draw()
                       }), angular.forEach(o, function(t) {
                           t.draw()
                       }), angular.forEach(s, function(t) {
                           t.draw()
                       })
                   }, i.addMarker = function(t) {
                       a.push(t)
                   }, i.addScale = function(t) {
                       o.push(t)
                   }, i.addLabel = function(t) {
                       s.push(t)
                   }, i.markergroup = function(t) {
                       var e = [];
                       return angular.forEach(a, function(n) {
                           n.markergroup === t && e.push(n)
                       }), e
                   }, i.getPosition = function(e, r, a) {
                       a = Number(a || 0), e = Number(e);
                       var o, s, u = 1,
                           l = 2,
                           c = i.center,
                           f = n.sequencelength;
                       if (f > 0) {
                           switch (s = e / f * 360, r) {
                               case u:
                                   o = i.radius + a;
                                   break;
                               case l:
                                   o = i.radius + i.width + a;
                                   break;
                               default:
                                   o = i.radius + i.width / 2 + a
                           }
                           return t.util.polarToCartesian(c.x, c.y, o, s)
                       }
                   }, Object.defineProperty(i, "center", {
                       get: function() {
                           return n.center
                       }
                   }), Object.defineProperty(i, "radius", {
                       get: function() {
                           return t.util.Numeric(e.radius, 100)
                       }
                   }), Object.defineProperty(i, "width", {
                       get: function() {
                           return t.util.Numeric(e.width, 25)
                       }
                   }), Object.defineProperty(i, "trackclass", {
                       get: function() {
                           return e.trackclass
                       }
                   }), Object.defineProperty(i, "trackstyle", {
                       get: function() {
                           return e.trackstyle
                       }
                   }), i.markers = a, i.scales = o, i.labels = s
               }]
           }
       }]).directive("trackscale", ["SVGUtil", "$compile", function(t, e) {
           return {
               restrict: "AE",
               type: "svg",
               template: "<g><path></path><g></g></g>",
               replace: !0,
               transclude: !0,
               require: ["trackscale", "^plasmidtrack"],
               scope: {
                   interval: "@",
                   vadjust: "@",
                   ticksize: "@",
                   direction: "@",
                   showlabels: "@",
                   labelvadjust: "@",
                   labelclass: "@",
                   labelstyle: "@",
                   tickclass: "@",
                   tickstyle: "@",
                   scaleclick: "&"
               },
               link: {
                   pre: function(t, e, n, r) {
                       var i = r[0],
                           a = r[1],
                           o = angular.element(e.children()[0]),
                           s = angular.element(e.children()[1]);
                       i.init(o, s, a)
                   },
                   post: function(n, r, i, a, o) {
                       var s, u, l;
                       o(n.$parent, function(t) {
                           r.append(t)
                       }), s = angular.element(r), u = angular.element(r.children()[0]), t.util.swapProperties(s, u), e(u)(n.$parent), u.on("click", function(t) {
                           n.scaleclick({
                               $event: t,
                               $scale: l
                           })
                       }), l = a[0], n.$watchGroup(["interval", "vadjust", "ticksize", "labelvadjust", "direction", "showlabels", "labelstyle", "labelclass", "tickstyle", "tickclass"], function() {
                           l.draw()
                       })
                   }
               },
               controller: ["$scope", function(e) {
                   var n, r, i, a, o = 15,
                       s = 3;
                   r = this, r.elementtype = "trackscale", r.init = function(t, e, o) {
                       n = o, n.addScale(r), r.track = n, i = t, a = e
                   }, r.draw = function() {
                       var e = r.tickclass,
                           o = r.tickstyle,
                           s = n.center,
                           u = t.svg.path.scale(s.x, s.y, r.radius, r.interval, r.total, r.ticksize);
                       i.attr("d", u), e && i.attr("class", e), o && i.attr("style", o), r.showlabels ? r.drawLabel() : a.empty()
                   }, r.drawLabel = function() {
                       function i(t) {
                           e.scaleclick({
                               $event: t,
                               $scale: r
                           })
                       }
                       var o, s, u, l = n.center;
                       for (u = t.svg.element.scalelabels(l.x, l.y, r.labelradius, r.interval, r.total), a.empty(), o = 0; o <= u.length - 1; o += 1) s = angular.element(t.svg.createNode("text")), r.labelclass && s.attr("class", r.labelclass), r.labelstyle && s.attr("style", r.labelstyle), s.attr("x", u[o].x), s.attr("y", u[o].y), s.attr("text-anchor", "middle"), s.attr("alignment-baseline", "middle"), s.text(u[o].text), s.on("click", i), a.append(s)
                   }, Object.defineProperty(r, "radius", {
                       get: function() {
                           return (r.inwardflg ? n.radius : n.radius + n.width) + (r.inwardflg ? -1 : 1) * r.vadjust + (r.inwardflg ? -r.ticksize : 0)
                       }
                   }), Object.defineProperty(r, "interval", {
                       get: function() {
                           return t.util.Numeric(e.interval)
                       }
                   }), Object.defineProperty(r, "vadjust", {
                       get: function() {
                           return t.util.Numeric(e.vadjust)
                       }
                   }), Object.defineProperty(r, "ticksize", {
                       get: function() {
                           return t.util.Numeric(e.ticksize, s)
                       }
                   }), Object.defineProperty(r, "inwardflg", {
                       get: function() {
                           return "in" === e.direction ? !0 : !1
                       }
                   }), Object.defineProperty(r, "total", {
                       get: function() {
                           return n.plasmid.sequencelength
                       }
                   }), Object.defineProperty(r, "showlabels", {
                       get: function() {
                           return "1" === e.showlabels ? !0 : !1
                       }
                   }), Object.defineProperty(r, "labelvadjust", {
                       get: function() {
                           return t.util.Numeric(e.labelvadjust, o)
                       }
                   }), Object.defineProperty(r, "tickclass", {
                       get: function() {
                           return e.tickclass
                       }
                   }), Object.defineProperty(r, "tickstyle", {
                       get: function() {
                           return e.tickstyle
                       }
                   }), Object.defineProperty(r, "labelclass", {
                       get: function() {
                           return e.labelclass
                       }
                   }), Object.defineProperty(r, "labelstyle", {
                       get: function() {
                           return e.labelstyle
                       }
                   }), Object.defineProperty(r, "labelradius", {
                       get: function() {
                           return r.radius + r.labelvadjust * (r.inwardflg ? -1 : 1)
                       }
                   })
               }]
           }
       }]).directive("tracklabel", ["SVGUtil", function(t) {
           return {
               restrict: "AE",
               type: "svg",
               template: "<text></text>",
               replace: !0,
               transclude: !0,
               require: ["tracklabel", "^plasmidtrack"],
               scope: {
                   text: "@",
                   hadjust: "@",
                   vadjust: "@",
                   labelclass: "@",
                   labelstyle: "@",
                   labelclick: "&"
               },
               link: {
                   pre: function(t, e, n, r) {
                       var i = r[0],
                           a = r[1],
                           o = angular.element(e[0]);
                       i.init(o, a)
                   },
                   post: function(t, e, n, r, i) {
                       var a;
                       i(t.$parent, function(t) {
                           e.append(t)
                       }), e.attr("text-anchor", "middle"), e.attr("alignment-baseline", "middle"), e.on("click", function(e) {
                           t.labelclick({
                               $event: e,
                               $label: a
                           })
                       }), a = r[0], t.$watchGroup(["text", "vadjust", "hadjust", "labelstyle", "labelclass"], function() {
                           a.draw()
                       })
                   }
               },
               controller: ["$scope", function(e) {
                   var n, r, i;
                   r = this, r.elementtype = "tracklabel", r.init = function(t, e) {
                       n = e, n.addLabel(r), r.track = n, i = t
                   }, r.draw = function() {
                       var t = n.center,
                           e = r.labelclass,
                           a = r.labelstyle;
                       i.attr("x", t.x + r.hadjust), i.attr("y", t.y + r.vadjust), i.text(r.text), e && i.attr("class", e), a && i.attr("style", a)
                   }, Object.defineProperty(r, "center", {
                       get: function() {
                           return n.center
                       }
                   }), Object.defineProperty(r, "text", {
                       get: function() {
                           return e.text
                       }
                   }), Object.defineProperty(r, "labelclass", {
                       get: function() {
                           return e.labelclass
                       }
                   }), Object.defineProperty(r, "labelstyle", {
                       get: function() {
                           return e.labelstyle
                       }
                   }), Object.defineProperty(r, "hadjust", {
                       get: function() {
                           return t.util.Numeric(e.hadjust, 0)
                       }
                   }), Object.defineProperty(r, "vadjust", {
                       get: function() {
                           return t.util.Numeric(e.vadjust, 0)
                       }
                   }), Object.defineProperty(r, "dimensions", {
                       get: function() {
                           return i[0].getBBox()
                       }
                   })
               }]
           }
       }]).directive("trackmarker", ["SVGUtil", "$compile", function(t, e) {
           return {
               restrict: "AE",
               type: "svg",
               template: "<g><path></path></g>",
               replace: !0,
               transclude: !0,
               require: ["trackmarker", "^plasmidtrack"],
               scope: {
                   start: "@",
                   end: "@",
                   vadjust: "@",
                   wadjust: "@",
                   markergroup: "@",
                   arrowstartlength: "@",
                   arrowstartwidth: "@",
                   arrowstartangle: "@",
                   arrowendlength: "@",
                   arrowendwidth: "@",
                   arrowendangle: "@",
                   markerclass: "@",
                   markerstyle: "@",
                   markerclick: "&"
               },
               link: {
                   pre: function(t, e, n, r) {
                       var i = r[0],
                           a = r[1],
                           o = angular.element(e.children()[0]);
                       i.init(o, a)
                   },
                   post: function(n, r, i, a, o) {
                       var s, u, l = a[0];
                       o(n.$parent, function(t) {
                           r.append(t)
                       }), s = angular.element(r), u = angular.element(r.children()[0]), t.util.swapProperties(s, u), e(u)(n.$parent), u.on("click", function(t) {
                           n.markerclick({
                               $event: t,
                               $marker: l
                           })
                       }), n.$watchGroup(["start", "end", "vadjust", "wadjust", "markergroup", "markerclass", "markerstyle", "arrowstartlength", "arrowstartwidth", "arrowstartangle", "arrowendlength", "arrowendwidth", "arrowendangle"], function() {
                           l.draw()
                       })
                   }
               },
               controller: ["$scope", function(e) {
                   var n, r, i, a = [];
                   r = this, r.elementtype = "trackmarker", r.init = function(t, e) {
                       n = e, n.addMarker(r), i = t, r.track = n
                   }, r.draw = function() {
                       var t = r.markerclass,
                           e = r.markerstyle;
                       i.attr("d", r.getPath()), t && i.attr("class", t), e && i.attr("style", e), angular.forEach(a, function(t) {
                           t.draw()
                       })
                   }, r.addMarkerLabel = function(t) {
                       a.push(t)
                   }, r.getPath = function() {
                       var e = n.center,
                           i = r.angle,
                           a = r.radius;
                       return t.svg.path.arc(e.x, e.y, a.inner, i.start, i.end, r.width, r.arrowstart, r.arrowend)
                   }, r.getPosition = function(e, i, a, o) {
                       var s, u, l, c, f, d = "start",
                           h = "end",
                           p = "inner",
                           $ = "outer";
                       if (s = n.center, c = r.radius, f = r.angle, e = t.util.Numeric(e), i = t.util.Numeric(i), void 0 !== o && void 0 !== a) {
                           switch (o) {
                               case p:
                                   u = c.inner + i;
                                   break;
                               case $:
                                   u = c.outer + i;
                                   break;
                               default:
                                   u = c.middle + i
                           }
                           switch (a) {
                               case d:
                                   l = f.start + e;
                                   break;
                               case h:
                                   l = f.end + e;
                                   break;
                               default:
                                   l = f.middle + e
                           }
                           return t.util.polarToCartesian(s.x, s.y, u, l)
                       }
                       return u = {
                           outer: c.outer + i,
                           inner: c.inner + i,
                           middle: c.middle + i
                       }, l = {
                           begin: f.start + e,
                           end: f.end + e,
                           middle: f.middle + e
                       }, {
                           outer: {
                               begin: t.util.polarToCartesian(s.x, s.y, u.outer, l.begin),
                               middle: t.util.polarToCartesian(s.x, s.y, u.outer, l.middle),
                               end: t.util.polarToCartesian(s.x, s.y, u.outer, l.end)
                           },
                           middle: {
                               begin: t.util.polarToCartesian(s.x, s.y, u.middle, l.begin),
                               middle: t.util.polarToCartesian(s.x, s.y, u.middle, l.middle),
                               end: t.util.polarToCartesian(s.x, s.y, u.middle, l.end)
                           },
                           inner: {
                               begin: t.util.polarToCartesian(s.x, s.y, u.inner, l.begin),
                               middle: t.util.polarToCartesian(s.x, s.y, u.inner, l.middle),
                               end: t.util.polarToCartesian(s.x, s.y, u.inner, l.end)
                           }
                       }
                   }, r.fireClick = function(t) {
                       e.markerclick({
                           $event: t.$event,
                           $marker: t.$marker
                       })
                   }, Object.defineProperty(r, "center", {
                       get: function() {
                           return n.center
                       }
                   }), Object.defineProperty(r, "radius", {
                       get: function() {
                           return {
                               inner: n.radius + r.vadjust,
                               outer: n.radius + r.vadjust + r.width,
                               middle: n.radius + r.vadjust + r.width / 2
                           }
                       }
                   }), Object.defineProperty(r, "angle", {
                       get: function() {
                           var i, a, o, s;
                           return i = r.start / n.plasmid.sequencelength * 360, s = e.end || e.start, a = t.util.Numeric(s) / n.plasmid.sequencelength * 360, a += i > a ? 360 : 0, o = i + (a - i) / 2, {
                               start: i,
                               middle: o,
                               end: a
                           }
                       }
                   }), Object.defineProperty(r, "vadjust", {
                       get: function() {
                           return t.util.Numeric(e.vadjust)
                       }
                   }), Object.defineProperty(r, "wadjust", {
                       get: function() {
                           return t.util.Numeric(e.wadjust)
                       }
                   }), Object.defineProperty(r, "width", {
                       get: function() {
                           return n.width + r.wadjust
                       }
                   }), Object.defineProperty(r, "start", {
                       get: function() {
                           return t.util.Numeric(e.start)
                       }
                   }), Object.defineProperty(r, "end", {
                       get: function() {
                           return t.util.Numeric(e.end)
                       }
                   }), Object.defineProperty(r, "arrowstart", {
                       get: function() {
                           return {
                               width: t.util.Numeric(e.arrowstartwidth),
                               length: t.util.Numeric(e.arrowstartlength),
                               angle: t.util.Numeric(e.arrowstartangle)
                           }
                       }
                   }), Object.defineProperty(r, "arrowend", {
                       get: function() {
                           return {
                               width: t.util.Numeric(e.arrowendwidth),
                               length: t.util.Numeric(e.arrowendlength),
                               angle: t.util.Numeric(e.arrowendangle)
                           }
                       }
                   }), Object.defineProperty(r, "markergroup", {
                       get: function() {
                           return e.markergroup
                       }
                   }), Object.defineProperty(r, "markerclass", {
                       get: function() {
                           return e.markerclass
                       }
                   }), Object.defineProperty(r, "markerstyle", {
                       get: function() {
                           return e.markerstyle
                       }
                   }), Object.defineProperty(r, "sequence", {
                       get: function() {
                           var t = r.track.plasmid.sequence;
                           return r.start > r.end ? t.substring(r.start - 1, t.length - 1) + t.substring(0, r.end - 1) : t.substring(r.start - 1, r.end - 1)
                       }
                   }), r.labels = a
               }]
           }
       }]).directive("markerlabel", ["SVGUtil", "$compile", function(t, e) {
           return {
               restrict: "AE",
               type: "svg",
               transclude: !0,
               template: '<g><path></path><path id="" style="fill:none;stroke:none"></path><text></text></g>',
               require: ["markerlabel", "^trackmarker"],
               replace: !0,
               scope: {
                   text: "@",
                   valign: "@",
                   vadjust: "@",
                   halign: "@",
                   hadjust: "@",
                   type: "@",
                   showline: "@",
                   linestyle: "@",
                   lineclass: "@",
                   labelstyle: "@",
                   labelclass: "@",
                   linevadjust: "@",
                   labelclick: "&"
               },
               link: {
                   pre: function(t, e, n, r) {
                       var i = r[0],
                           a = r[1],
                           o = angular.element(e[0]),
                           s = angular.element(e.children()[0]),
                           u = angular.element(e.children()[1]),
                           l = angular.element(e.children()[2]);
                       i.init(l, o, u, s, a)
                   },
                   post: function(n, r, i, a, o) {
                       o(n.$parent, function(t) {
                           r.append(t)
                       });
                       var s = a[0],
                           u = a[1],
                           l = angular.element(r),
                           c = angular.element(r.children()[2]);
                       c.attr("text-anchor", "middle"), c.attr("alignment-baseline", "middle"), t.util.swapProperties(l, c), e(c)(n.$parent), i.labelclick ? c.on("click", function(t) {
                           n.labelclick({
                               $event: t,
                               $label: s
                           })
                       }) : c.on("click", function(t) {
                           u.fireClick({
                               $event: t,
                               $marker: u
                           })
                       }), n.$watchGroup(["text", "type", "valign", "vadjust", "halign", "hadjust", "showline", "linevadjust", "linestyle", "labelclass", "labelstyle"], function() {
                           s.draw()
                       })
                   }
               },
               controller: ["$scope", "$compile", function(e, n) {
                   var r, i, a, o, s, u, l, c;
                   i = this, i.elementtype = "markerlabel", i.init = function(t, e, n, s, u) {
                       var f = "TPATH" + (Math.random() + 1).toString(36).substring(3, 7);
                       r = u, r.addMarkerLabel(i), i.marker = r, a = t, o = n, l = s, c = e, o.attr("id", f)
                   }, i.draw = function() {
                       var t, c, f, d, h, p = "middle",
                           $ = "inner",
                           m = "outer",
                           g = "start",
                           v = "end",
                           y = 0,
                           b = 0,
                           w = i.labelclass,
                           x = i.labelstyle;
                       if (w && a.attr("class", w), x && a.attr("style", x), "path" === i.type) switch (a.attr("x", ""), a.attr("y", ""), s || (u = document.createElementNS("http://www.w3.org/2000/svg", "textPath"), u.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#" + o.attr("id")), s = angular.element(u), n(s)(e), a.empty(), a.append(s)), u.textContent = i.text, y = window.getComputedStyle(a[0]).fontSize.replace("px", ""), b = i.valign === m ? 0 : i.valign === $ ? Number(y || 0) : Number(y || 0) / 2, o.attr("d", i.getPath(i.hadjust, i.vadjust - b, i.halign, i.valign)), i.halign) {
                           case g:
                               a.attr("text-anchor", "start"), s[0].setAttribute("startOffset", "0%");
                               break;
                           case v:
                               a.attr("text-anchor", "end"), s[0].setAttribute("startOffset", "100%");
                               break;
                           default:
                               a.attr("text-anchor", "middle"), s[0].setAttribute("startOffset", "50%")
                       } else s && (s.remove(), s = null), t = r.getPosition(i.hadjust, i.vadjust, i.halign, i.valign), a.attr("x", t.x), a.attr("y", t.y), a.text(i.text);
                       i.showlineflg ? (c = r.getPosition(i.hadjust, i.vadjust + i.linevadjust, i.halign, i.valign), d = r.getPosition(), h = i.valign === $ ? d.inner : i.valign === p ? d.middle : d.outer, f = i.halign === g ? h.begin : i.halign === v ? h.end : h.middle, l.attr("d", ["M", c.x, c.y, "L", f.x, f.y].join(" ")), i.linestyle || i.lineclass || l.attr("style", "stroke:#000"), i.linestyle && l.attr("style", i.linestyle), i.lineclass && l.attr("class", i.lineclass)) : l.removeAttr("d")
                   }, i.getPath = function(e, n, i, a) {
                       var o, s, u, l, c, f = "inner",
                           d = "outer",
                           h = "start",
                           p = "end",
                           $ = r.center;
                       switch (s = r.radius, a) {
                           case f:
                               o = s.inner;
                               break;
                           case d:
                               o = s.outer;
                               break;
                           default:
                               o = s.middle
                       }
                       switch (u = r.angle, i) {
                           case h:
                               l = u.start, c = u.start + 359.99;
                               break;
                           case p:
                               l = u.end + 1, c = u.end;
                               break;
                           default:
                               l = u.middle + 180.05, c = u.middle + 179.95
                       }
                       return t.svg.path.arc($.x, $.y, o + Number(n || 0), l + Number(e || 0), c + Number(e || 0), 1)
                   }, Object.defineProperty(i, "showlineflg", {
                       get: function() {
                           return "1" === e.showline ? !0 : !1
                       }
                   }), Object.defineProperty(i, "halign", {
                       get: function() {
                           return e.halign || "middle"
                       }
                   }), Object.defineProperty(i, "valign", {
                       get: function() {
                           return e.valign || "middle"
                       }
                   }), Object.defineProperty(i, "hadjust", {
                       get: function() {
                           return t.util.Numeric(e.hadjust)
                       }
                   }), Object.defineProperty(i, "vadjust", {
                       get: function() {
                           return t.util.Numeric(e.vadjust)
                       }
                   }), Object.defineProperty(i, "type", {
                       get: function() {
                           return e.type
                       }
                   }), Object.defineProperty(i, "linevadjust", {
                       get: function() {
                           return t.util.Numeric(e.linevadjust)
                       }
                   }), Object.defineProperty(i, "labelclass", {
                       get: function() {
                           return e.labelclass
                       }
                   }), Object.defineProperty(i, "labelstyle", {
                       get: function() {
                           return e.labelstyle
                       }
                   }), Object.defineProperty(i, "linestyle", {
                       get: function() {
                           return e.linestyle
                       }
                   }), Object.defineProperty(i, "lineclass", {
                       get: function() {
                           return e.lineclass
                       }
                   }), Object.defineProperty(i, "text", {
                       get: function() {
                           return e.text
                       }
                   })
               }]
           }
       }]).directive("svgelement", ["SVGUtil", function() {
           return {
               restrict: "AE",
               template: function(t, e) {
                   return "<" + e.type + "></" + e.type + ">"
               },
               type: "svg",
               replace: !0,
               transclude: !0,
               require: ["^plasmid"],
               scope: {},
               link: function(t, e, n, r, i) {
                   i(t.$parent, function(t) {
                       e.append(t)
                   })
               }
           }
       }])
   }(),
   function() {
       "use strict";
       angular.element(document).ready(function() {
           angular.bootstrap(document, ["app"])
       })
}();