text: // Knockout JavaScript library v2.2.1
  // (c) Steven Sanderson - http://knockoutjs.com/
  // License: MIT (http://www.opensource.org/licenses/mit-license.php)
  
  (function() {
  
      function j(w) { throw w; }
  
      var m = !0, p = null, r = !1;
  
      function u(w) { return function() { return w; }; }
  
      ;
      var x = window, y = document, ga = navigator, F = window.jQuery, I = void 0;
  
      function L(w) {
  
          function ha(a, d, c, e, f) {
              var g = [];
              a = b.j(function() {
                  var a = d(c, f) || [];
                  0 < g.length && (b.a.Ya(M(g), a), e && b.r.K(e, p, [c, a, f]));
                  g.splice(0, g.length);
                  b.a.P(g, a);
              }, p, { W: a, Ka: function() { return 0 == g.length || !b.a.X(g[0]); } });
              return { M: g, j: a.pa() ? a : I };
          }
  
          function M(a) {
              for (; a.length && !b.a.X(a[0]);) a.splice(0, 1);
              if (1 < a.length) {
                  for (var d = a[0], c = a[a.length - 1], e = [d]; d !== c;) {
                      d = d.nextSibling;
                      if (!d) return;
                      e.push(d);
                  }
                  Array.prototype.splice.apply(a, [0, a.length].concat(e));
              }
              return a;
          }
  
          function S(a, b, c, e, f) {
              var g = Math.min,
                  h = Math.max, k = [], l, n = a.length, q, s = b.length, v = s - n || 1, G = n + s + 1, J, A, z;
              for (l = 0; l <= n; l++) {
                  A = J;
                  k.push(J = []);
                  z = g(s, l + v);
                  for (q = h(0, l - 1); q <= z; q++) J[q] = q ? l ? a[l - 1] === b[q - 1] ? A[q - 1] : g(A[q] || G, J[q - 1] || G) + 1 : q + 1 : l + 1;
              }
              g = [];
              h = [];
              v = [];
              l = n;
              for (q = s; l || q;) s = k[l][q] - 1, q && s === k[l][q - 1] ? h.push(g[g.length] = { status: c, value: b[--q], index: q }) : l && s === k[l - 1][q] ? v.push(g[g.length] = { status: e, value: a[--l], index: l }) : (g.push({ status: "retained", value: b[--q] }), --l);
              if (h.length && v.length) {
                  a = 10 * n;
                  var t;
                  for (b = c = 0; (f || b < a) && (t = h[c]); c++) {
                      for (e =
                          0; k = v[e]; e++)
                          if (t.value === k.value) {
                              t.moved = k.index;
                              k.moved = t.index;
                              v.splice(e, 1);
                              b = e = 0;
                              break;
                          }
                      b += e;
                  }
              }
              return g.reverse();
          }
  
          function T(a, d, c, e, f) {
              f = f || {};
              var g = a && N(a), g = g && g.ownerDocument, h = f.templateEngine || O;
              b.za.vb(c, h, g);
              c = h.renderTemplate(c, e, f, g);
              ("number" != typeof c.length || 0 < c.length && "number" != typeof c[0].nodeType) && j(Error("Template engine must return an array of DOM nodes"));
              g = r;
              switch (d) {
              case "replaceChildren":
                  b.e.N(a, c);
                  g = m;
                  break;
              case "replaceNode":
                  b.a.Ya(a, c);
                  g = m;
                  break;
              case "ignoreTargetNode":
                  break;
              default:
                  j(Error("Unknown renderMode: " + d));
              }
              g && (U(c, e), f.afterRender && b.r.K(f.afterRender, p, [c, e.$data]));
              return c;
          }
  
          function N(a) { return a.nodeType ? a : 0 < a.length ? a[0] : p; }
  
          function U(a, d) {
              if (a.length) {
                  var c = a[0], e = a[a.length - 1];
                  V(c, e, function(a) { b.Da(d, a); });
                  V(c, e, function(a) { b.s.ib(a, [d]); });
              }
          }
  
          function V(a, d, c) {
              var e;
              for (d = b.e.nextSibling(d); a && (e = a) !== d;) a = b.e.nextSibling(e), (1 === e.nodeType || 8 === e.nodeType) && c(e);
          }
  
          function W(a, d, c) {
              a = b.g.aa(a);
              for (var e = b.g.Q, f = 0; f < a.length; f++) {
                  var g = a[f].key;
                  if (e.hasOwnProperty(g)) {
                      var h =
                          e[g];
                      "function" === typeof h ? (g = h(a[f].value)) && j(Error(g)) : h || j(Error("This template engine does not support the '" + g + "' binding within its templates"));
                  }
              }
              a = "ko.__tr_ambtns(function($context,$element){return(function(){return{ " + b.g.ba(a) + " } })()})";
              return c.createJavaScriptEvaluatorBlock(a) + d;
          }
  
          function X(a, d, c, e) {
  
              function f(a) { return function() { return k[a]; }; }
  
              function g() { return k; }
  
              var h = 0, k, l;
              b.j(function() {
                  var n = c && c instanceof b.z ? c : new b.z(b.a.d(c)), q = n.$data;
                  e && b.eb(a, n);
                  if (k = ("function" == typeof d ?
                      d(n, a) : d) || b.J.instance.getBindings(a, n)) {
                      if (0 === h) {
                          h = 1;
                          for (var s in k) {
                              var v = b.c[s];
                              v && 8 === a.nodeType && !b.e.I[s] && j(Error("The binding '" + s + "' cannot be used with virtual elements"));
                              if (v && "function" == typeof v.init && (v = (0, v.init)(a, f(s), g, q, n)) && v.controlsDescendantBindings) l !== I && j(Error("Multiple bindings (" + l + " and " + s + ") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.")), l = s;
                          }
                          h = 2;
                      }
                      if (2 === h)
                          for (s in k)
                              (v = b.c[s]) && "function" ==
                                  typeof v.update && (0, v.update)(a, f(s), g, q, n);
                  }
              }, p, { W: a });
              return { Nb: l === I };
          }
  
          function Y(a, d, c) {
              var e = m, f = 1 === d.nodeType;
              f && b.e.Ta(d);
              if (f && c || b.J.instance.nodeHasBindings(d)) e = X(d, p, a, c).Nb;
              e && Z(a, d, !f);
          }
  
          function Z(a, d, c) { for (var e = b.e.firstChild(d); d = e;) e = b.e.nextSibling(d), Y(a, d, c); }
  
          function $(a, b) {
              var c = aa(a, b);
              return c ? 0 < c.length ? c[c.length - 1].nextSibling : a.nextSibling : p;
          }
  
          function aa(a, b) {
              for (var c = a, e = 1, f = []; c = c.nextSibling;) {
                  if (H(c) && (e--, 0 === e)) return f;
                  f.push(c);
                  B(c) && e++;
              }
              b || j(Error("Cannot find closing comment tag to match: " +
                  a.nodeValue));
              return p;
          }
  
          function H(a) { return 8 == a.nodeType && (K ? a.text : a.nodeValue).match(ia); }
  
          function B(a) { return 8 == a.nodeType && (K ? a.text : a.nodeValue).match(ja); }
  
          function P(a, b) {
              for (var c = p; a != c;) c = a, a = a.replace(ka, function(a, c) { return b[c]; });
              return a;
          }
  
          function la() {
              var a = [], d = [];
              this.save = function(c, e) {
                  var f = b.a.i(a, c);
                  0 <= f ? d[f] = e : (a.push(c), d.push(e));
              };
              this.get = function(c) {
                  c = b.a.i(a, c);
                  return 0 <= c ? d[c] : I;
              };
          }
  
          function ba(a, b, c) {
  
              function e(e) {
                  var g = b(a[e]);
                  switch (typeof g) {
                  case "boolean":
                  case "number":
                  case "string":
                  case "function":
                      f[e] =
                          g;
                      break;
                  case "object":
                  case "undefined":
                      var h = c.get(g);
                      f[e] = h !== I ? h : ba(g, b, c);
                  }
              }
  
              c = c || new la;
              a = b(a);
              if (!("object" == typeof a && a !== p && a !== I && !(a instanceof Date))) return a;
              var f = a instanceof Array ? [] : {};
              c.save(a, f);
              var g = a;
              if (g instanceof Array) {
                  for (var h = 0; h < g.length; h++) e(h);
                  "function" == typeof g.toJSON && e("toJSON");
              } else for (h in g) e(h);
              return f;
          }
  
          function ca(a, d) {
              if (a)
                  if (8 == a.nodeType) {
                      var c = b.s.Ua(a.nodeValue);
                      c != p && d.push({ sb: a, Fb: c });
                  } else if (1 == a.nodeType)
                      for (var c = 0, e = a.childNodes, f = e.length; c < f; c++)
                          ca(e[c],
                              d);
          }
  
          function Q(a, d, c, e) {
              b.c[a] = {
                  init: function(a) {
                      b.a.f.set(a, da, {});
                      return { controlsDescendantBindings: m };
                  },
                  update: function(a, g, h, k, l) {
                      h = b.a.f.get(a, da);
                      g = b.a.d(g());
                      k = !c !== !g;
                      var n = !h.Za;
                      if (n || d || k !== h.qb) n && (h.Za = b.a.Ia(b.e.childNodes(a), m)), k ? (n || b.e.N(a, b.a.Ia(h.Za)), b.Ea(e ? e(l, g) : l, a)) : b.e.Y(a), h.qb = k;
                  }
              };
              b.g.Q[a] = r;
              b.e.I[a] = m;
          }
  
          function ea(a, d, c) {
              c && d !== b.k.q(a) && b.k.T(a, d);
              d !== b.k.q(a) && b.r.K(b.a.Ba, p, [a, "change"]);
          }
  
          var b = "undefined" !== typeof w ? w : {};
          b.b = function(a, d) {
              for (var c = a.split("."), e = b, f = 0; f <
                  c.length - 1; f++) e = e[c[f]];
              e[c[c.length - 1]] = d;
          };
          b.p = function(a, b, c) { a[b] = c; };
          b.version = "2.2.1";
          b.b("version", b.version);
          b.a = new function() {
  
              function a(a, d) {
                  if ("input" !== b.a.u(a) || !a.type || "click" != d.toLowerCase()) return r;
                  var c = a.type;
                  return "checkbox" == c || "radio" == c;
              }
  
              var d = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, c = {}, e = {};
              c[/Firefox\/2/i.test(ga.userAgent) ? "KeyboardEvent" : "UIEvents"] = ["keyup", "keydown", "keypress"];
              c.MouseEvents = "click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");
              for (var f in c) {
                  var g = c[f];
                  if (g.length) for (var h = 0, k = g.length; h < k; h++) e[g[h]] = f;
              }
              var l = { propertychange: m }, n, c = 3;
              f = y.createElement("div");
              for (g = f.getElementsByTagName("i"); f.innerHTML = "\x3c!--[if gt IE " + ++c + "]><i></i><![endif]--\x3e", g[0];) ;
              n = 4 < c ? c : I;
              return {
                  Na: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/],
                  o: function(a, b) { for (var d = 0, c = a.length; d < c; d++) b(a[d]); },
                  i: function(a, b) {
                      if ("function" == typeof Array.prototype.indexOf) return Array.prototype.indexOf.call(a, b);
                      for (var d = 0, c = a.length; d <
                          c; d++) if (a[d] === b) return d;
                      return -1;
                  },
                  lb: function(a, b, d) {
                      for (var c = 0, e = a.length; c < e; c++) if (b.call(d, a[c])) return a[c];
                      return p;
                  },
                  ga: function(a, d) {
                      var c = b.a.i(a, d);
                      0 <= c && a.splice(c, 1);
                  },
                  Ga: function(a) {
                      a = a || [];
                      for (var d = [], c = 0, e = a.length; c < e; c++) 0 > b.a.i(d, a[c]) && d.push(a[c]);
                      return d;
                  },
                  V: function(a, b) {
                      a = a || [];
                      for (var d = [], c = 0, e = a.length; c < e; c++) d.push(b(a[c]));
                      return d;
                  },
                  fa: function(a, b) {
                      a = a || [];
                      for (var d = [], c = 0, e = a.length; c < e; c++) b(a[c]) && d.push(a[c]);
                      return d;
                  },
                  P: function(a, b) {
                      if (b instanceof Array)
                          a.push.apply(a,
                              b);
                      else for (var d = 0, c = b.length; d < c; d++) a.push(b[d]);
                      return a;
                  },
                  extend: function(a, b) {
                      if (b) for (var d in b) b.hasOwnProperty(d) && (a[d] = b[d]);
                      return a;
                  },
                  ka: function(a) { for (; a.firstChild;) b.removeNode(a.firstChild); },
                  Hb: function(a) {
                      a = b.a.L(a);
                      for (var d = y.createElement("div"), c = 0, e = a.length; c < e; c++) d.appendChild(b.A(a[c]));
                      return d;
                  },
                  Ia: function(a, d) {
                      for (var c = 0, e = a.length, g = []; c < e; c++) {
                          var f = a[c].cloneNode(m);
                          g.push(d ? b.A(f) : f);
                      }
                      return g;
                  },
                  N: function(a, d) {
                      b.a.ka(a);
                      if (d) for (var c = 0, e = d.length; c < e; c++) a.appendChild(d[c]);
                  },
                  Ya: function(a, d) {
                      var c = a.nodeType ? [a] : a;
                      if (0 < c.length) {
                          for (var e = c[0], g = e.parentNode, f = 0, h = d.length; f < h; f++) g.insertBefore(d[f], e);
                          f = 0;
                          for (h = c.length; f < h; f++) b.removeNode(c[f]);
                      }
                  },
                  bb: function(a, b) { 7 > n ? a.setAttribute("selected", b) : a.selected = b; },
                  D: function(a) { return (a || "").replace(d, ""); },
                  Rb: function(a, d) {
                      for (var c = [], e = (a || "").split(d), f = 0, g = e.length; f < g; f++) {
                          var h = b.a.D(e[f]);
                          "" !== h && c.push(h);
                      }
                      return c;
                  },
                  Ob: function(a, b) {
                      a = a || "";
                      return b.length > a.length ? r : a.substring(0, b.length) === b;
                  },
                  tb: function(a, b) {
                      if (b.compareDocumentPosition)
                          return 16 ==
                              (b.compareDocumentPosition(a) & 16);
                      for (; a != p;) {
                          if (a == b) return m;
                          a = a.parentNode;
                      }
                      return r;
                  },
                  X: function(a) { return b.a.tb(a, a.ownerDocument); },
                  u: function(a) { return a && a.tagName && a.tagName.toLowerCase(); },
                  n: function(b, d, c) {
                      var e = n && l[d];
                      if (!e && "undefined" != typeof F) {
                          if (a(b, d)) {
                              var f = c;
                              c = function(a, b) {
                                  var d = this.checked;
                                  b && (this.checked = b.nb !== m);
                                  f.call(this, a);
                                  this.checked = d;
                              };
                          }
                          F(b).bind(d, c);
                      } else
                          !e && "function" == typeof b.addEventListener ? b.addEventListener(d, c, r) : "undefined" != typeof b.attachEvent ? b.attachEvent("on" +
                              d, function(a) { c.call(b, a); }) : j(Error("Browser doesn't support addEventListener or attachEvent"));
                  },
                  Ba: function(b, d) {
                      (!b || !b.nodeType) && j(Error("element must be a DOM node when calling triggerEvent"));
                      if ("undefined" != typeof F) {
                          var c = [];
                          a(b, d) && c.push({ nb: b.checked });
                          F(b).trigger(d, c);
                      } else
                          "function" == typeof y.createEvent ? "function" == typeof b.dispatchEvent ? (c = y.createEvent(e[d] || "HTMLEvents"), c.initEvent(d, m, m, x, 0, 0, 0, 0, 0, r, r, r, r, 0, b), b.dispatchEvent(c)) : j(Error("The supplied element doesn't support dispatchEvent")) :
                              "undefined" != typeof b.fireEvent ? (a(b, d) && (b.checked = b.checked !== m), b.fireEvent("on" + d)) : j(Error("Browser doesn't support triggering events"));
                  },
                  d: function(a) { return b.$(a) ? a() : a; },
                  ua: function(a) { return b.$(a) ? a.t() : a; },
                  da: function(a, d, c) {
                      if (d) {
                          var e = /[\w-]+/g, f = a.className.match(e) || [];
                          b.a.o(d.match(e), function(a) {
                              var d = b.a.i(f, a);
                              0 <= d ? c || f.splice(d, 1) : c && f.push(a);
                          });
                          a.className = f.join(" ");
                      }
                  },
                  cb: function(a, d) {
                      var c = b.a.d(d);
                      if (c === p || c === I) c = "";
                      if (3 === a.nodeType) a.data = c;
                      else {
                          var e = b.e.firstChild(a);
                          !e || 3 != e.nodeType || b.e.nextSibling(e) ? b.e.N(a, [y.createTextNode(c)]) : e.data = c;
                          b.a.wb(a);
                      }
                  },
                  ab: function(a, b) {
                      a.name = b;
                      if (7 >= n)
                          try {
                              a.mergeAttributes(y.createElement("<input name='" + a.name + "'/>"), r);
                          } catch(d) {
                          }
                  },
                  wb: function(a) { 9 <= n && (a = 1 == a.nodeType ? a : a.parentNode, a.style && (a.style.zoom = a.style.zoom)); },
                  ub: function(a) {
                      if (9 <= n) {
                          var b = a.style.width;
                          a.style.width = 0;
                          a.style.width = b;
                      }
                  },
                  Lb: function(a, d) {
                      a = b.a.d(a);
                      d = b.a.d(d);
                      for (var c = [], e = a; e <= d; e++) c.push(e);
                      return c;
                  },
                  L: function(a) {
                      for (var b = [], d = 0, c = a.length; d <
                          c; d++) b.push(a[d]);
                      return b;
                  },
                  Pb: 6 === n,
                  Qb: 7 === n,
                  Z: n,
                  Oa: function(a, d) {
                      for (var c = b.a.L(a.getElementsByTagName("input")).concat(b.a.L(a.getElementsByTagName("textarea"))), e = "string" == typeof d ? function(a) { return a.name === d; } : function(a) { return d.test(a.name); }, f = [], g = c.length - 1; 0 <= g; g--) e(c[g]) && f.push(c[g]);
                      return f;
                  },
                  Ib: function(a) { return "string" == typeof a && (a = b.a.D(a)) ? x.JSON && x.JSON.parse ? x.JSON.parse(a) : (new Function("return " + a))() : p; },
                  xa: function(a, d, c) {
                      ("undefined" == typeof JSON || "undefined" == typeof JSON.stringify) &&
                          j(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js"));
                      return JSON.stringify(b.a.d(a), d, c);
                  },
                  Jb: function(a, d, c) {
                      c = c || {};
                      var e = c.params || {}, f = c.includeFields || this.Na, g = a;
                      if ("object" == typeof a && "form" === b.a.u(a)) for (var g = a.action, h = f.length - 1; 0 <= h; h--) for (var k = b.a.Oa(a, f[h]), l = k.length - 1; 0 <= l; l--) e[k[l].name] = k[l].value;
                      d = b.a.d(d);
                      var n = y.createElement("form");
                      n.style.display = "none";
                      n.action = g;
                      n.method = "post";
                      for (var w in d) a = y.createElement("input"), a.name = w, a.value = b.a.xa(b.a.d(d[w])), n.appendChild(a);
                      for (w in e) a = y.createElement("input"), a.name = w, a.value = e[w], n.appendChild(a);
                      y.body.appendChild(n);
                      c.submitter ? c.submitter(n) : n.submit();
                      setTimeout(function() { n.parentNode.removeChild(n); }, 0);
                  }
              };
          };
          b.b("utils", b.a);
          b.b("utils.arrayForEach", b.a.o);
          b.b("utils.arrayFirst", b.a.lb);
          b.b("utils.arrayFilter", b.a.fa);
          b.b("utils.arrayGetDistinctValues", b.a.Ga);
          b.b("utils.arrayIndexOf",
              b.a.i);
          b.b("utils.arrayMap", b.a.V);
          b.b("utils.arrayPushAll", b.a.P);
          b.b("utils.arrayRemoveItem", b.a.ga);
          b.b("utils.extend", b.a.extend);
          b.b("utils.fieldsIncludedWithJsonPost", b.a.Na);
          b.b("utils.getFormFields", b.a.Oa);
          b.b("utils.peekObservable", b.a.ua);
          b.b("utils.postJson", b.a.Jb);
          b.b("utils.parseJson", b.a.Ib);
          b.b("utils.registerEventHandler", b.a.n);
          b.b("utils.stringifyJson", b.a.xa);
          b.b("utils.range", b.a.Lb);
          b.b("utils.toggleDomNodeCssClass", b.a.da);
          b.b("utils.triggerEvent", b.a.Ba);
          b.b("utils.unwrapObservable",
              b.a.d);
          Function.prototype.bind || (Function.prototype.bind = function(a) {
              var b = this, c = Array.prototype.slice.call(arguments);
              a = c.shift();
              return function() { return b.apply(a, c.concat(Array.prototype.slice.call(arguments))); };
          });
          b.a.f = new function() {
              var a = 0, d = "__ko__" + (new Date).getTime(), c = {};
              return {
                  get: function(a, d) {
                      var c = b.a.f.la(a, r);
                      return c === I ? I : c[d];
                  },
                  set: function(a, d, c) { c === I && b.a.f.la(a, r) === I || (b.a.f.la(a, m)[d] = c); },
                  la: function(b, f) {
                      var g = b[d];
                      if (!g || !("null" !== g && c[g])) {
                          if (!f) return I;
                          g = b[d] = "ko" +
                              a++;
                          c[g] = {};
                      }
                      return c[g];
                  },
                  clear: function(a) {
                      var b = a[d];
                      return b ? (delete c[b], a[d] = p, m) : r;
                  }
              };
          };
          b.b("utils.domData", b.a.f);
          b.b("utils.domData.clear", b.a.f.clear);
          b.a.F = new function() {
  
              function a(a, d) {
                  var e = b.a.f.get(a, c);
                  e === I && d && (e = [], b.a.f.set(a, c, e));
                  return e;
              }
  
              function d(c) {
                  var e = a(c, r);
                  if (e) for (var e = e.slice(0), k = 0; k < e.length; k++) e[k](c);
                  b.a.f.clear(c);
                  "function" == typeof F && "function" == typeof F.cleanData && F.cleanData([c]);
                  if (f[c.nodeType]) for (e = c.firstChild; c = e;) e = c.nextSibling, 8 === c.nodeType && d(c);
              }
  
              var c = "__ko_domNodeDisposal__" + (new Date).getTime(), e = { 1: m, 8: m, 9: m }, f = { 1: m, 9: m };
              return {
                  Ca: function(b, d) {
                      "function" != typeof d && j(Error("Callback must be a function"));
                      a(b, m).push(d);
                  },
                  Xa: function(d, e) {
                      var f = a(d, r);
                      f && (b.a.ga(f, e), 0 == f.length && b.a.f.set(d, c, I));
                  },
                  A: function(a) {
                      if (e[a.nodeType] && (d(a), f[a.nodeType])) {
                          var c = [];
                          b.a.P(c, a.getElementsByTagName("*"));
                          for (var k = 0, l = c.length; k < l; k++) d(c[k]);
                      }
                      return a;
                  },
                  removeNode: function(a) {
                      b.A(a);
                      a.parentNode && a.parentNode.removeChild(a);
                  }
              };
          };
          b.A = b.a.F.A;
          b.removeNode =
              b.a.F.removeNode;
          b.b("cleanNode", b.A);
          b.b("removeNode", b.removeNode);
          b.b("utils.domNodeDisposal", b.a.F);
          b.b("utils.domNodeDisposal.addDisposeCallback", b.a.F.Ca);
          b.b("utils.domNodeDisposal.removeDisposeCallback", b.a.F.Xa);
          b.a.ta = function(a) {
              var d;
              if ("undefined" != typeof F)
                  if (F.parseHTML) d = F.parseHTML(a);
                  else {
                      if ((d = F.clean([a])) && d[0]) {
                          for (a = d[0]; a.parentNode && 11 !== a.parentNode.nodeType;) a = a.parentNode;
                          a.parentNode && a.parentNode.removeChild(a);
                      }
                  }
              else {
                  var c = b.a.D(a).toLowerCase();
                  d = y.createElement("div");
                  c = c.match(/^<(thead|tbody|tfoot)/) && [1, "<table>", "</table>"] || !c.indexOf("<tr") && [2, "<table><tbody>", "</tbody></table>"] || (!c.indexOf("<td") || !c.indexOf("<th")) && [3, "<table><tbody><tr>", "</tr></tbody></table>"] || [0, "", ""];
                  a = "ignored<div>" + c[1] + a + c[2] + "</div>";
                  for ("function" == typeof x.innerShiv ? d.appendChild(x.innerShiv(a)) : d.innerHTML = a; c[0]--;) d = d.lastChild;
                  d = b.a.L(d.lastChild.childNodes);
              }
              return d;
          };
          b.a.ca = function(a, d) {
              b.a.ka(a);
              d = b.a.d(d);
              if (d !== p && d !== I)
                  if ("string" != typeof d && (d = d.toString()),
                  "undefined" != typeof F) F(a).html(d);
                  else for (var c = b.a.ta(d), e = 0; e < c.length; e++) a.appendChild(c[e]);
          };
          b.b("utils.parseHtmlFragment", b.a.ta);
          b.b("utils.setHtml", b.a.ca);
          var R = {};
          b.s = {
              ra: function(a) {
                  "function" != typeof a && j(Error("You can only pass a function to ko.memoization.memoize()"));
                  var b = (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1) + (4294967296 * (1 + Math.random()) | 0).toString(16).substring(1);
                  R[b] = a;
                  return "\x3c!--[ko_memo:" + b + "]--\x3e";
              },
              hb: function(a, b) {
                  var c = R[a];
                  c === I && j(Error("Couldn't find any memo with ID " +
                      a + ". Perhaps it's already been unmemoized."));
                  try {
                      return c.apply(p, b || []), m;
                  } finally {
                      delete R[a];
                  }
              },
              ib: function(a, d) {
                  var c = [];
                  ca(a, c);
                  for (var e = 0, f = c.length; e < f; e++) {
                      var g = c[e].sb, h = [g];
                      d && b.a.P(h, d);
                      b.s.hb(c[e].Fb, h);
                      g.nodeValue = "";
                      g.parentNode && g.parentNode.removeChild(g);
                  }
              },
              Ua: function(a) { return (a = a.match(/^\[ko_memo\:(.*?)\]$/)) ? a[1] : p; }
          };
          b.b("memoization", b.s);
          b.b("memoization.memoize", b.s.ra);
          b.b("memoization.unmemoize", b.s.hb);
          b.b("memoization.parseMemoText", b.s.Ua);
          b.b("memoization.unmemoizeDomNodeAndDescendants",
              b.s.ib);
          b.Ma = {
              throttle: function(a, d) {
                  a.throttleEvaluation = d;
                  var c = p;
                  return b.j({
                      read: a,
                      write: function(b) {
                          clearTimeout(c);
                          c = setTimeout(function() { a(b); }, d);
                      }
                  });
              },
              notify: function(a, d) {
                  a.equalityComparer = "always" == d ? u(r) : b.m.fn.equalityComparer;
                  return a;
              }
          };
          b.b("extenders", b.Ma);
          b.fb = function(a, d, c) {
              this.target = a;
              this.ha = d;
              this.rb = c;
              b.p(this, "dispose", this.B);
          };
          b.fb.prototype.B = function() {
              this.Cb = m;
              this.rb();
          };
          b.S = function() {
              this.w = {};
              b.a.extend(this, b.S.fn);
              b.p(this, "subscribe", this.ya);
              b.p(this, "extend",
                  this.extend);
              b.p(this, "getSubscriptionsCount", this.yb);
          };
          b.S.fn = {
              ya: function(a, d, c) {
                  c = c || "change";
                  var e = new b.fb(this, d ? a.bind(d) : a, function() { b.a.ga(this.w[c], e); }.bind(this));
                  this.w[c] || (this.w[c] = []);
                  this.w[c].push(e);
                  return e;
              },
              notifySubscribers: function(a, d) {
                  d = d || "change";
                  this.w[d] && b.r.K(function() { b.a.o(this.w[d].slice(0), function(b) { b && b.Cb !== m && b.ha(a); }); }, this);
              },
              yb: function() {
                  var a = 0, b;
                  for (b in this.w) this.w.hasOwnProperty(b) && (a += this.w[b].length);
                  return a;
              },
              extend: function(a) {
                  var d = this;
                  if (a)
                      for (var c in a) {
                          var e =
                              b.Ma[c];
                          "function" == typeof e && (d = e(d, a[c]));
                      }
                  return d;
              }
          };
          b.Qa = function(a) { return "function" == typeof a.ya && "function" == typeof a.notifySubscribers; };
          b.b("subscribable", b.S);
          b.b("isSubscribable", b.Qa);
          var C = [];
          b.r = {
              mb: function(a) { C.push({ ha: a, La: [] }); },
              end: function() { C.pop(); },
              Wa: function(a) {
                  b.Qa(a) || j(Error("Only subscribable things can act as dependencies"));
                  if (0 < C.length) {
                      var d = C[C.length - 1];
                      d && !(0 <= b.a.i(d.La, a)) && (d.La.push(a), d.ha(a));
                  }
              },
              K: function(a, b, c) {
                  try {
                      return C.push(p), a.apply(b, c || []);
                  } finally {
                      C.pop();
                  }
              }
          };
          var ma = { undefined: m, "boolean": m, number: m, string: m };
          b.m = function(a) {
  
              function d() {
                  if (0 < arguments.length) {
                      if (!d.equalityComparer || !d.equalityComparer(c, arguments[0])) d.H(), c = arguments[0], d.G();
                      return this;
                  }
                  b.r.Wa(d);
                  return c;
              }
  
              var c = a;
              b.S.call(d);
              d.t = function() { return c; };
              d.G = function() { d.notifySubscribers(c); };
              d.H = function() { d.notifySubscribers(c, "beforeChange"); };
              b.a.extend(d, b.m.fn);
              b.p(d, "peek", d.t);
              b.p(d, "valueHasMutated", d.G);
              b.p(d, "valueWillMutate", d.H);
              return d;
          };
          b.m.fn = {
              equalityComparer: function(a,
                  b) {
                  return a === p || typeof a in ma ? a === b : r;
              }
          };
          var E = b.m.Kb = "__ko_proto__";
          b.m.fn[E] = b.m;
          b.ma = function(a, d) { return a === p || a === I || a[E] === I ? r : a[E] === d ? m : b.ma(a[E], d); };
          b.$ = function(a) { return b.ma(a, b.m); };
          b.Ra = function(a) { return "function" == typeof a && a[E] === b.m || "function" == typeof a && a[E] === b.j && a.zb ? m : r; };
          b.b("observable", b.m);
          b.b("isObservable", b.$);
          b.b("isWriteableObservable", b.Ra);
          b.R = function(a) {
              0 == arguments.length && (a = []);
              a !== p && (a !== I && !("length" in a)) && j(Error("The argument passed when initializing an observable array must be an array, or null, or undefined."));
              var d = b.m(a);
              b.a.extend(d, b.R.fn);
              return d;
          };
          b.R.fn = {
              remove: function(a) {
                  for (var b = this.t(), c = [], e = "function" == typeof a ? a : function(b) { return b === a; }, f = 0; f < b.length; f++) {
                      var g = b[f];
                      e(g) && (0 === c.length && this.H(), c.push(g), b.splice(f, 1), f--);
                  }
                  c.length && this.G();
                  return c;
              },
              removeAll: function(a) {
                  if (a === I) {
                      var d = this.t(), c = d.slice(0);
                      this.H();
                      d.splice(0, d.length);
                      this.G();
                      return c;
                  }
                  return !a ? [] : this.remove(function(d) { return 0 <= b.a.i(a, d); });
              },
              destroy: function(a) {
                  var b = this.t(), c = "function" == typeof a ? a : function(b) {
                      return b ===
                          a;
                  };
                  this.H();
                  for (var e = b.length - 1; 0 <= e; e--) c(b[e]) && (b[e]._destroy = m);
                  this.G();
              },
              destroyAll: function(a) { return a === I ? this.destroy(u(m)) : !a ? [] : this.destroy(function(d) { return 0 <= b.a.i(a, d); }); },
              indexOf: function(a) {
                  var d = this();
                  return b.a.i(d, a);
              },
              replace: function(a, b) {
                  var c = this.indexOf(a);
                  0 <= c && (this.H(), this.t()[c] = b, this.G());
              }
          };
          b.a.o("pop push reverse shift sort splice unshift".split(" "), function(a) {
              b.R.fn[a] = function() {
                  var b = this.t();
                  this.H();
                  b = b[a].apply(b, arguments);
                  this.G();
                  return b;
              };
          });
          b.a.o(["slice"],
              function(a) {
                  b.R.fn[a] = function() {
                      var b = this();
                      return b[a].apply(b, arguments);
                  };
              });
          b.b("observableArray", b.R);
          b.j = function(a, d, c) {
  
              function e() {
                  b.a.o(z, function(a) { a.B(); });
                  z = [];
              }
  
              function f() {
                  var a = h.throttleEvaluation;
                  a && 0 <= a ? (clearTimeout(t), t = setTimeout(g, a)) : g();
              }
  
              function g() {
                  if (!q)
                      if (n && w()) A();
                      else {
                          q = m;
                          try {
                              var a = b.a.V(z, function(a) { return a.target; });
                              b.r.mb(function(c) {
                                  var d;
                                  0 <= (d = b.a.i(a, c)) ? a[d] = I : z.push(c.ya(f));
                              });
                              for (var c = s.call(d), e = a.length - 1; 0 <= e; e--) a[e] && z.splice(e, 1)[0].B();
                              n = m;
                              h.notifySubscribers(l,
                                  "beforeChange");
                              l = c;
                          } finally {
                              b.r.end();
                          }
                          h.notifySubscribers(l);
                          q = r;
                          z.length || A();
                      }
              }
  
              function h() {
                  if (0 < arguments.length) return "function" === typeof v ? v.apply(d, arguments) : j(Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.")), this;
                  n || g();
                  b.r.Wa(h);
                  return l;
              }
  
              function k() { return !n || 0 < z.length; }
  
              var l, n = r, q = r, s = a;
              s && "object" == typeof s ? (c = s, s = c.read) : (c = c || {}, s || (s = c.read));
              "function" != typeof s && j(Error("Pass a function that returns the value of the ko.computed"));
              var v = c.write, G = c.disposeWhenNodeIsRemoved || c.W || p, w = c.disposeWhen || c.Ka || u(r), A = e, z = [], t = p;
              d || (d = c.owner);
              h.t = function() {
                  n || g();
                  return l;
              };
              h.xb = function() { return z.length; };
              h.zb = "function" === typeof c.write;
              h.B = function() { A(); };
              h.pa = k;
              b.S.call(h);
              b.a.extend(h, b.j.fn);
              b.p(h, "peek", h.t);
              b.p(h, "dispose", h.B);
              b.p(h, "isActive", h.pa);
              b.p(h, "getDependenciesCount", h.xb);
              c.deferEvaluation !== m && g();
              if (G && k()) {
                  A = function() {
                      b.a.F.Xa(G, arguments.callee);
                      e();
                  };
                  b.a.F.Ca(G, A);
                  var D = w, w = function() { return !b.a.X(G) || D(); };
              }
              return h;
          };
          b.Bb = function(a) { return b.ma(a, b.j); };
          w = b.m.Kb;
          b.j[w] = b.m;
          b.j.fn = {};
          b.j.fn[w] = b.j;
          b.b("dependentObservable", b.j);
          b.b("computed", b.j);
          b.b("isComputed", b.Bb);
          b.gb = function(a) {
              0 == arguments.length && j(Error("When calling ko.toJS, pass the object you want to convert."));
              return ba(a, function(a) {
                  for (var c = 0; b.$(a) && 10 > c; c++) a = a();
                  return a;
              });
          };
          b.toJSON = function(a, d, c) {
              a = b.gb(a);
              return b.a.xa(a, d, c);
          };
          b.b("toJS", b.gb);
          b.b("toJSON", b.toJSON);
          b.k = {
              q: function(a) {
                  switch (b.a.u(a)) {
                  case "option":
                      return a.__ko__hasDomDataOptionValue__ ===
                          m ? b.a.f.get(a, b.c.options.sa) : 7 >= b.a.Z ? a.getAttributeNode("value").specified ? a.value : a.text : a.value;
                  case "select":
                      return 0 <= a.selectedIndex ? b.k.q(a.options[a.selectedIndex]) : I;
                  default:
                      return a.value;
                  }
              },
              T: function(a, d) {
                  switch (b.a.u(a)) {
                  case "option":
                      switch (typeof d) {
                      case "string":
                          b.a.f.set(a, b.c.options.sa, I);
                          "__ko__hasDomDataOptionValue__" in a && delete a.__ko__hasDomDataOptionValue__;
                          a.value = d;
                          break;
                      default:
                          b.a.f.set(a, b.c.options.sa, d), a.__ko__hasDomDataOptionValue__ = m, a.value = "number" === typeof d ?
                              d : "";
                      }
                      break;
                  case "select":
                      for (var c = a.options.length - 1; 0 <= c; c--)
                          if (b.k.q(a.options[c]) == d) {
                              a.selectedIndex = c;
                              break;
                          }
                      break;
                  default:
                      if (d === p || d === I) d = "";
                      a.value = d;
                  }
              }
          };
          b.b("selectExtensions", b.k);
          b.b("selectExtensions.readValue", b.k.q);
          b.b("selectExtensions.writeValue", b.k.T);
          var ka = /\@ko_token_(\d+)\@/g, na = ["true", "false"], oa = /^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i;
          b.g = {
              Q: [],
              aa: function(a) {
                  var d = b.a.D(a);
                  if (3 > d.length) return [];
                  "{" === d.charAt(0) && (d = d.substring(1, d.length - 1));
                  a = [];
                  for (var c =
                      p, e, f = 0; f < d.length; f++) {
                      var g = d.charAt(f);
                      if (c === p)
                          switch (g) {
                          case '"':
                          case "'":
                          case "/":
                              c = f, e = g;
                          }
                      else if (g == e && "\\" !== d.charAt(f - 1)) {
                          g = d.substring(c, f + 1);
                          a.push(g);
                          var h = "@ko_token_" + (a.length - 1) + "@", d = d.substring(0, c) + h + d.substring(f + 1), f = f - (g.length - h.length), c = p;
                      }
                  }
                  e = c = p;
                  for (var k = 0, l = p, f = 0; f < d.length; f++) {
                      g = d.charAt(f);
                      if (c === p)
                          switch (g) {
                          case "{":
                              c = f;
                              l = g;
                              e = "}";
                              break;
                          case "(":
                              c = f;
                              l = g;
                              e = ")";
                              break;
                          case "[":
                              c = f, l = g, e = "]";
                          }
                      g === l ? k++ : g === e && (k--, 0 === k && (g = d.substring(c, f + 1), a.push(g), h = "@ko_token_" + (a.length -
                          1) + "@", d = d.substring(0, c) + h + d.substring(f + 1), f -= g.length - h.length, c = p));
                  }
                  e = [];
                  d = d.split(",");
                  c = 0;
                  for (f = d.length; c < f; c++) k = d[c], l = k.indexOf(":"), 0 < l && l < k.length - 1 ? (g = k.substring(l + 1), e.push({ key: P(k.substring(0, l), a), value: P(g, a) })) : e.push({ unknown: P(k, a) });
                  return e;
              },
              ba: function(a) {
                  var d = "string" === typeof a ? b.g.aa(a) : a, c = [];
                  a = [];
                  for (var e, f = 0; e = d[f]; f++)
                      if (0 < c.length && c.push(","), e.key) {
                          var g;
                          a:{
                                g = e.key;
                                var h = b.a.D(g);
                                switch (h.length && h.charAt(0)) {
                                case "'":
                                case '"':
                                    break a;
                                default:
                                    g = "'" + h + "'";
                                }
                            }
                          e = e.value;
                          c.push(g);
                          c.push(":");
                          c.push(e);
                          e = b.a.D(e);
                          0 <= b.a.i(na, b.a.D(e).toLowerCase()) ? e = r : (h = e.match(oa), e = h === p ? r : h[1] ? "Object(" + h[1] + ")" + h[2] : e);
                          e && (0 < a.length && a.push(", "), a.push(g + " : function(__ko_value) { " + e + " = __ko_value; }"));
                      } else e.unknown && c.push(e.unknown);
                  d = c.join("");
                  0 < a.length && (d = d + ", '_ko_property_writers' : { " + a.join("") + " } ");
                  return d;
              },
              Eb: function(a, d) {
                  for (var c = 0; c < a.length; c++) if (b.a.D(a[c].key) == d) return m;
                  return r;
              },
              ea: function(a, d, c, e, f) {
                  if (!a || !b.Ra(a)) {
                      if ((a = d()._ko_property_writers) &&
                          a[c]) a[c](e);
                  } else (!f || a.t() !== e) && a(e);
              }
          };
          b.b("expressionRewriting", b.g);
          b.b("expressionRewriting.bindingRewriteValidators", b.g.Q);
          b.b("expressionRewriting.parseObjectLiteral", b.g.aa);
          b.b("expressionRewriting.preProcessBindings", b.g.ba);
          b.b("jsonExpressionRewriting", b.g);
          b.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson", b.g.ba);
          var K = "\x3c!--test--\x3e" === y.createComment("test").text, ja = K ? /^\x3c!--\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*--\x3e$/ : /^\s*ko(?:\s+(.+\s*\:[\s\S]*))?\s*$/, ia = K ? /^\x3c!--\s*\/ko\s*--\x3e$/ :
              /^\s*\/ko\s*$/, pa = { ul: m, ol: m };
          b.e = {
              I: {},
              childNodes: function(a) { return B(a) ? aa(a) : a.childNodes; },
              Y: function(a) {
                  if (B(a)) {
                      a = b.e.childNodes(a);
                      for (var d = 0, c = a.length; d < c; d++) b.removeNode(a[d]);
                  } else b.a.ka(a);
              },
              N: function(a, d) {
                  if (B(a)) {
                      b.e.Y(a);
                      for (var c = a.nextSibling, e = 0, f = d.length; e < f; e++) c.parentNode.insertBefore(d[e], c);
                  } else b.a.N(a, d);
              },
              Va: function(a, b) { B(a) ? a.parentNode.insertBefore(b, a.nextSibling) : a.firstChild ? a.insertBefore(b, a.firstChild) : a.appendChild(b); },
              Pa: function(a, d, c) {
                  c ? B(a) ? a.parentNode.insertBefore(d,
                      c.nextSibling) : c.nextSibling ? a.insertBefore(d, c.nextSibling) : a.appendChild(d) : b.e.Va(a, d);
              },
              firstChild: function(a) { return !B(a) ? a.firstChild : !a.nextSibling || H(a.nextSibling) ? p : a.nextSibling; },
              nextSibling: function(a) {
                  B(a) && (a = $(a));
                  return a.nextSibling && H(a.nextSibling) ? p : a.nextSibling;
              },
              jb: function(a) { return (a = B(a)) ? a[1] : p; },
              Ta: function(a) {
                  if (pa[b.a.u(a)]) {
                      var d = a.firstChild;
                      if (d) {
                          do
                              if (1 === d.nodeType) {
                                  var c;
                                  c = d.firstChild;
                                  var e = p;
                                  if (c) {
                                      do
                                          if (e) e.push(c);
                                          else if (B(c)) {
                                              var f = $(c, m);
                                              f ? c = f : e = [c];
                                          } else
                                              H(c) &&
                                                  (e = [c]);
                                      while (c = c.nextSibling);
                                  }
                                  if (c = e) {
                                      e = d.nextSibling;
                                      for (f = 0; f < c.length; f++) e ? a.insertBefore(c[f], e) : a.appendChild(c[f]);
                                  }
                              }
                          while (d = d.nextSibling);
                      }
                  }
              }
          };
          b.b("virtualElements", b.e);
          b.b("virtualElements.allowedBindings", b.e.I);
          b.b("virtualElements.emptyNode", b.e.Y);
          b.b("virtualElements.insertAfter", b.e.Pa);
          b.b("virtualElements.prepend", b.e.Va);
          b.b("virtualElements.setDomNodeChildren", b.e.N);
          b.J = function() { this.Ha = {}; };
          b.a.extend(b.J.prototype, {
              nodeHasBindings: function(a) {
                  switch (a.nodeType) {
                  case 1:
                      return a.getAttribute("data-bind") !=
                          p;
                  case 8:
                      return b.e.jb(a) != p;
                  default:
                      return r;
                  }
              },
              getBindings: function(a, b) {
                  var c = this.getBindingsString(a, b);
                  return c ? this.parseBindingsString(c, b, a) : p;
              },
              getBindingsString: function(a) {
                  switch (a.nodeType) {
                  case 1:
                      return a.getAttribute("data-bind");
                  case 8:
                      return b.e.jb(a);
                  default:
                      return p;
                  }
              },
              parseBindingsString: function(a, d, c) {
                  try {
                      var e;
                      if (!(e = this.Ha[a])) {
                          var f = this.Ha, g, h = "with($context){with($data||{}){return{" + b.g.ba(a) + "}}}";
                          g = new Function("$context", "$element", h);
                          e = f[a] = g;
                      }
                      return e(d, c);
                  } catch(k) {
                      j(Error("Unable to parse bindings.\nMessage: " +
                          k + ";\nBindings value: " + a));
                  }
              }
          });
          b.J.instance = new b.J;
          b.b("bindingProvider", b.J);
          b.c = {};
          b.z = function(a, d, c) {
              d ? (b.a.extend(this, d), this.$parentContext = d, this.$parent = d.$data, this.$parents = (d.$parents || []).slice(0), this.$parents.unshift(this.$parent)) : (this.$parents = [], this.$root = a, this.ko = b);
              this.$data = a;
              c && (this[c] = a);
          };
          b.z.prototype.createChildContext = function(a, d) { return new b.z(a, this, d); };
          b.z.prototype.extend = function(a) {
              var d = b.a.extend(new b.z, this);
              return b.a.extend(d, a);
          };
          b.eb = function(a, d) {
              if (2 ==
                  arguments.length) b.a.f.set(a, "__ko_bindingContext__", d);
              else return b.a.f.get(a, "__ko_bindingContext__");
          };
          b.Fa = function(a, d, c) {
              1 === a.nodeType && b.e.Ta(a);
              return X(a, d, c, m);
          };
          b.Ea = function(a, b) { (1 === b.nodeType || 8 === b.nodeType) && Z(a, b, m); };
          b.Da = function(a, b) {
              b && (1 !== b.nodeType && 8 !== b.nodeType) && j(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node"));
              b = b || x.document.body;
              Y(a, b, m);
          };
          b.ja = function(a) {
              switch (a.nodeType) {
              case 1:
              case 8:
                  var d = b.eb(a);
                  if (d) return d;
                  if (a.parentNode) return b.ja(a.parentNode);
              }
              return I;
          };
          b.pb = function(a) { return (a = b.ja(a)) ? a.$data : I; };
          b.b("bindingHandlers", b.c);
          b.b("applyBindings", b.Da);
          b.b("applyBindingsToDescendants", b.Ea);
          b.b("applyBindingsToNode", b.Fa);
          b.b("contextFor", b.ja);
          b.b("dataFor", b.pb);
          var fa = { "class": "className", "for": "htmlFor" };
          b.c.attr = {
              update: function(a, d) {
                  var c = b.a.d(d()) || {}, e;
                  for (e in c)
                      if ("string" == typeof e) {
                          var f = b.a.d(c[e]), g = f === r || f === p || f === I;
                          g && a.removeAttribute(e);
                          8 >= b.a.Z && e in fa ? (e = fa[e], g ? a.removeAttribute(e) :
                              a[e] = f) : g || a.setAttribute(e, f.toString());
                          "name" === e && b.a.ab(a, g ? "" : f.toString());
                      }
              }
          };
          b.c.checked = {
              init: function(a, d, c) {
                  b.a.n(a, "click", function() {
                      var e;
                      if ("checkbox" == a.type) e = a.checked;
                      else if ("radio" == a.type && a.checked) e = a.value;
                      else return;
                      var f = d(), g = b.a.d(f);
                      "checkbox" == a.type && g instanceof Array ? (e = b.a.i(g, a.value), a.checked && 0 > e ? f.push(a.value) : !a.checked && 0 <= e && f.splice(e, 1)) : b.g.ea(f, c, "checked", e, m);
                  });
                  "radio" == a.type && !a.name && b.c.uniqueName.init(a, u(m));
              },
              update: function(a, d) {
                  var c = b.a.d(d());
                  "checkbox" == a.type ? a.checked = c instanceof Array ? 0 <= b.a.i(c, a.value) : c : "radio" == a.type && (a.checked = a.value == c);
              }
          };
          b.c.css = {
              update: function(a, d) {
                  var c = b.a.d(d());
                  if ("object" == typeof c)
                      for (var e in c) {
                          var f = b.a.d(c[e]);
                          b.a.da(a, e, f);
                      }
                  else c = String(c || ""), b.a.da(a, a.__ko__cssValue, r), a.__ko__cssValue = c, b.a.da(a, c, m);
              }
          };
          b.c.enable = {
              update: function(a, d) {
                  var c = b.a.d(d());
                  c && a.disabled ? a.removeAttribute("disabled") : !c && !a.disabled && (a.disabled = m);
              }
          };
          b.c.disable = { update: function(a, d) { b.c.enable.update(a, function() { return !b.a.d(d()); }); } };
          b.c.event = {
              init: function(a, d, c, e) {
                  var f = d() || {}, g;
                  for (g in f)
                      (function() {
                          var f = g;
                          "string" == typeof f && b.a.n(a, f, function(a) {
                              var g, n = d()[f];
                              if (n) {
                                  var q = c();
                                  try {
                                      var s = b.a.L(arguments);
                                      s.unshift(e);
                                      g = n.apply(e, s);
                                  } finally {
                                      g !== m && (a.preventDefault ? a.preventDefault() : a.returnValue = r);
                                  }
                                  q[f + "Bubble"] === r && (a.cancelBubble = m, a.stopPropagation && a.stopPropagation());
                              }
                          });
                      })();
              }
          };
          b.c.foreach = {
              Sa: function(a) {
                  return function() {
                      var d = a(), c = b.a.ua(d);
                      if (!c || "number" == typeof c.length) return { foreach: d, templateEngine: b.C.oa };
                      b.a.d(d);
                      return { foreach: c.data, as: c.as, includeDestroyed: c.includeDestroyed, afterAdd: c.afterAdd, beforeRemove: c.beforeRemove, afterRender: c.afterRender, beforeMove: c.beforeMove, afterMove: c.afterMove, templateEngine: b.C.oa };
                  };
              },
              init: function(a, d) { return b.c.template.init(a, b.c.foreach.Sa(d)); },
              update: function(a, d, c, e, f) { return b.c.template.update(a, b.c.foreach.Sa(d), c, e, f); }
          };
          b.g.Q.foreach = r;
          b.e.I.foreach = m;
          b.c.hasfocus = {
              init: function(a, d, c) {
  
                  function e(e) {
                      a.__ko_hasfocusUpdating = m;
                      var f = a.ownerDocument;
                      "activeElement" in
                          f && (e = f.activeElement === a);
                      f = d();
                      b.g.ea(f, c, "hasfocus", e, m);
                      a.__ko_hasfocusUpdating = r;
                  }
  
                  var f = e.bind(p, m), g = e.bind(p, r);
                  b.a.n(a, "focus", f);
                  b.a.n(a, "focusin", f);
                  b.a.n(a, "blur", g);
                  b.a.n(a, "focusout", g);
              },
              update: function(a, d) {
                  var c = b.a.d(d());
                  a.__ko_hasfocusUpdating || (c ? a.focus() : a.blur(), b.r.K(b.a.Ba, p, [a, c ? "focusin" : "focusout"]));
              }
          };
          b.c.html = { init: function() { return { controlsDescendantBindings: m }; }, update: function(a, d) { b.a.ca(a, d()); } };
          var da = "__ko_withIfBindingData";
          Q("if");
          Q("ifnot", r, m);
          Q("with", m, r, function(a,
              b) {
              return a.createChildContext(b);
          });
          b.c.options = {
              update: function(a, d, c) {
                  "select" !== b.a.u(a) && j(Error("options binding applies only to SELECT elements"));
                  for (var e = 0 == a.length, f = b.a.V(b.a.fa(a.childNodes, function(a) { return a.tagName && "option" === b.a.u(a) && a.selected; }), function(a) { return b.k.q(a) || a.innerText || a.textContent; }), g = a.scrollTop, h = b.a.d(d()); 0 < a.length;) b.A(a.options[0]), a.remove(0);
                  if (h) {
                      c = c();
                      var k = c.optionsIncludeDestroyed;
                      "number" != typeof h.length && (h = [h]);
                      if (c.optionsCaption) {
                          var l = y.createElement("option");
                          b.a.ca(l, c.optionsCaption);
                          b.k.T(l, I);
                          a.appendChild(l);
                      }
                      d = 0;
                      for (var n = h.length; d < n; d++) {
                          var q = h[d];
                          if (!q || !q._destroy || k) {
                              var l = y.createElement("option"), s = function(a, b, c) {
                                  var d = typeof b;
                                  return "function" == d ? b(a) : "string" == d ? a[b] : c;
                              }, v = s(q, c.optionsValue, q);
                              b.k.T(l, b.a.d(v));
                              q = s(q, c.optionsText, v);
                              b.a.cb(l, q);
                              a.appendChild(l);
                          }
                      }
                      h = a.getElementsByTagName("option");
                      d = k = 0;
                      for (n = h.length; d < n; d++) 0 <= b.a.i(f, b.k.q(h[d])) && (b.a.bb(h[d], m), k++);
                      a.scrollTop = g;
                      e && "value" in c && ea(a, b.a.ua(c.value), m);
                      b.a.ub(a);
                  }
              }
          };
          b.c.options.sa = "__ko.optionValueDomData__";
          b.c.selectedOptions = {
              init: function(a, d, c) {
                  b.a.n(a, "change", function() {
                      var e = d(), f = [];
                      b.a.o(a.getElementsByTagName("option"), function(a) { a.selected && f.push(b.k.q(a)); });
                      b.g.ea(e, c, "value", f);
                  });
              },
              update: function(a, d) {
                  "select" != b.a.u(a) && j(Error("values binding applies only to SELECT elements"));
                  var c = b.a.d(d());
                  c && "number" == typeof c.length && b.a.o(a.getElementsByTagName("option"), function(a) {
                      var d = 0 <= b.a.i(c, b.k.q(a));
                      b.a.bb(a, d);
                  });
              }
          };
          b.c.style = {
              update: function(a,
                  d) {
                  var c = b.a.d(d() || {}), e;
                  for (e in c)
                      if ("string" == typeof e) {
                          var f = b.a.d(c[e]);
                          a.style[e] = f || "";
                      }
              }
          };
          b.c.submit = {
              init: function(a, d, c, e) {
                  "function" != typeof d() && j(Error("The value for a submit binding must be a function"));
                  b.a.n(a, "submit", function(b) {
                      var c, h = d();
                      try {
                          c = h.call(e, a);
                      } finally {
                          c !== m && (b.preventDefault ? b.preventDefault() : b.returnValue = r);
                      }
                  });
              }
          };
          b.c.text = { update: function(a, d) { b.a.cb(a, d()); } };
          b.e.I.text = m;
          b.c.uniqueName = {
              init: function(a, d) {
                  if (d()) {
                      var c = "ko_unique_" + ++b.c.uniqueName.ob;
                      b.a.ab(a,
                          c);
                  }
              }
          };
          b.c.uniqueName.ob = 0;
          b.c.value = {
              init: function(a, d, c) {
  
                  function e() {
                      h = r;
                      var e = d(), f = b.k.q(a);
                      b.g.ea(e, c, "value", f);
                  }
  
                  var f = ["change"], g = c().valueUpdate, h = r;
                  g && ("string" == typeof g && (g = [g]), b.a.P(f, g), f = b.a.Ga(f));
                  if (b.a.Z && ("input" == a.tagName.toLowerCase() && "text" == a.type && "off" != a.autocomplete && (!a.form || "off" != a.form.autocomplete)) && -1 == b.a.i(f, "propertychange")) b.a.n(a, "propertychange", function() { h = m; }), b.a.n(a, "blur", function() { h && e(); });
                  b.a.o(f, function(c) {
                      var d = e;
                      b.a.Ob(c, "after") && (d = function() {
                          setTimeout(e,
                              0);
                      }, c = c.substring(5));
                      b.a.n(a, c, d);
                  });
              },
              update: function(a, d) {
                  var c = "select" === b.a.u(a), e = b.a.d(d()), f = b.k.q(a), g = e != f;
                  0 === e && (0 !== f && "0" !== f) && (g = m);
                  g && (f = function() { b.k.T(a, e); }, f(), c && setTimeout(f, 0));
                  c && 0 < a.length && ea(a, e, r);
              }
          };
          b.c.visible = {
              update: function(a, d) {
                  var c = b.a.d(d()), e = "none" != a.style.display;
                  c && !e ? a.style.display = "" : !c && e && (a.style.display = "none");
              }
          };
          b.c.click = {
              init: function(a, d, c, e) {
                  return b.c.event.init.call(this, a, function() {
                      var a = {};
                      a.click = d();
                      return a;
                  }, c, e);
              }
          };
          b.v = function() {
          };
          b.v.prototype.renderTemplateSource =
              function() { j(Error("Override renderTemplateSource")); };
          b.v.prototype.createJavaScriptEvaluatorBlock = function() { j(Error("Override createJavaScriptEvaluatorBlock")); };
          b.v.prototype.makeTemplateSource = function(a, d) {
              if ("string" == typeof a) {
                  d = d || y;
                  var c = d.getElementById(a);
                  c || j(Error("Cannot find template with ID " + a));
                  return new b.l.h(c);
              }
              if (1 == a.nodeType || 8 == a.nodeType) return new b.l.O(a);
              j(Error("Unknown template type: " + a));
          };
          b.v.prototype.renderTemplate = function(a, b, c, e) {
              a = this.makeTemplateSource(a, e);
              return this.renderTemplateSource(a, b, c);
          };
          b.v.prototype.isTemplateRewritten = function(a, b) { return this.allowTemplateRewriting === r ? m : this.makeTemplateSource(a, b).data("isRewritten"); };
          b.v.prototype.rewriteTemplate = function(a, b, c) {
              a = this.makeTemplateSource(a, c);
              b = b(a.text());
              a.text(b);
              a.data("isRewritten", m);
          };
          b.b("templateEngine", b.v);
          var qa = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi, ra = /\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;
          b.za = {
              vb: function(a,
                  d, c) {
                  d.isTemplateRewritten(a, c) || d.rewriteTemplate(a, function(a) { return b.za.Gb(a, d); }, c);
              },
              Gb: function(a, b) { return a.replace(qa, function(a, e, f, g, h, k, l) { return W(l, e, b); }).replace(ra, function(a, e) { return W(e, "\x3c!-- ko --\x3e", b); }); },
              kb: function(a) { return b.s.ra(function(d, c) { d.nextSibling && b.Fa(d.nextSibling, a, c); }); }
          };
          b.b("__tr_ambtns", b.za.kb);
          b.l = {};
          b.l.h = function(a) { this.h = a; };
          b.l.h.prototype.text = function() {
              var a = b.a.u(this.h), a = "script" === a ? "text" : "textarea" === a ? "value" : "innerHTML";
              if (0 == arguments.length) return this.h[a];
              var d = arguments[0];
              "innerHTML" === a ? b.a.ca(this.h, d) : this.h[a] = d;
          };
          b.l.h.prototype.data = function(a) {
              if (1 === arguments.length) return b.a.f.get(this.h, "templateSourceData_" + a);
              b.a.f.set(this.h, "templateSourceData_" + a, arguments[1]);
          };
          b.l.O = function(a) { this.h = a; };
          b.l.O.prototype = new b.l.h;
          b.l.O.prototype.text = function() {
              if (0 == arguments.length) {
                  var a = b.a.f.get(this.h, "__ko_anon_template__") || {};
                  a.Aa === I && a.ia && (a.Aa = a.ia.innerHTML);
                  return a.Aa;
              }
              b.a.f.set(this.h, "__ko_anon_template__", { Aa: arguments[0] });
          };
          b.l.h.prototype.nodes =
              function() {
                  if (0 == arguments.length) return (b.a.f.get(this.h, "__ko_anon_template__") || {}).ia;
                  b.a.f.set(this.h, "__ko_anon_template__", { ia: arguments[0] });
              };
          b.b("templateSources", b.l);
          b.b("templateSources.domElement", b.l.h);
          b.b("templateSources.anonymousTemplate", b.l.O);
          var O;
          b.wa = function(a) {
              a != I && !(a instanceof b.v) && j(Error("templateEngine must inherit from ko.templateEngine"));
              O = a;
          };
          b.va = function(a, d, c, e, f) {
              c = c || {};
              (c.templateEngine || O) == I && j(Error("Set a template engine before calling renderTemplate"));
              f = f || "replaceChildren";
              if (e) {
                  var g = N(e);
                  return b.j(function() {
                      var h = d && d instanceof b.z ? d : new b.z(b.a.d(d)), k = "function" == typeof a ? a(h.$data, h) : a, h = T(e, f, k, h, c);
                      "replaceNode" == f && (e = h, g = N(e));
                  }, p, { Ka: function() { return !g || !b.a.X(g); }, W: g && "replaceNode" == f ? g.parentNode : g });
              }
              return b.s.ra(function(e) { b.va(a, d, c, e, "replaceNode"); });
          };
          b.Mb = function(a, d, c, e, f) {
  
              function g(a, b) {
                  U(b, k);
                  c.afterRender && c.afterRender(b, a);
              }
  
              function h(d, e) {
                  k = f.createChildContext(b.a.d(d), c.as);
                  k.$index = e;
                  var g = "function" == typeof a ?
                      a(d, k) : a;
                  return T(p, "ignoreTargetNode", g, k, c);
              }
  
              var k;
              return b.j(function() {
                  var a = b.a.d(d) || [];
                  "undefined" == typeof a.length && (a = [a]);
                  a = b.a.fa(a, function(a) { return c.includeDestroyed || a === I || a === p || !b.a.d(a._destroy); });
                  b.r.K(b.a.$a, p, [e, a, h, c, g]);
              }, p, { W: e });
          };
          b.c.template = {
              init: function(a, d) {
                  var c = b.a.d(d());
                  if ("string" != typeof c && !c.name && (1 == a.nodeType || 8 == a.nodeType)) c = 1 == a.nodeType ? a.childNodes : b.e.childNodes(a), c = b.a.Hb(c), (new b.l.O(a)).nodes(c);
                  return { controlsDescendantBindings: m };
              },
              update: function(a,
                  d, c, e, f) {
                  d = b.a.d(d());
                  c = {};
                  e = m;
                  var g, h = p;
                  "string" != typeof d && (c = d, d = c.name, "if" in c && (e = b.a.d(c["if"])), e && "ifnot" in c && (e = !b.a.d(c.ifnot)), g = b.a.d(c.data));
                  "foreach" in c ? h = b.Mb(d || a, e && c.foreach || [], c, a, f) : e ? (f = "data" in c ? f.createChildContext(g, c.as) : f, h = b.va(d || a, f, c, a)) : b.e.Y(a);
                  f = h;
                  (g = b.a.f.get(a, "__ko__templateComputedDomDataKey__")) && "function" == typeof g.B && g.B();
                  b.a.f.set(a, "__ko__templateComputedDomDataKey__", f && f.pa() ? f : I);
              }
          };
          b.g.Q.template = function(a) {
              a = b.g.aa(a);
              return 1 == a.length && a[0].unknown ||
                  b.g.Eb(a, "name") ? p : "This template engine does not support anonymous templates nested within its templates";
          };
          b.e.I.template = m;
          b.b("setTemplateEngine", b.wa);
          b.b("renderTemplate", b.va);
          b.a.Ja = function(a, b, c) {
              a = a || [];
              b = b || [];
              return a.length <= b.length ? S(a, b, "added", "deleted", c) : S(b, a, "deleted", "added", c);
          };
          b.b("utils.compareArrays", b.a.Ja);
          b.a.$a = function(a, d, c, e, f) {
  
              function g(a, b) {
                  t = l[b];
                  w !== b && (z[a] = t);
                  t.na(w++);
                  M(t.M);
                  s.push(t);
                  A.push(t);
              }
  
              function h(a, c) {
                  if (a)
                      for (var d = 0, e = c.length; d < e; d++)
                          c[d] && b.a.o(c[d].M,
                              function(b) { a(b, d, c[d].U); });
              }
  
              d = d || [];
              e = e || {};
              var k = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") === I, l = b.a.f.get(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult") || [], n = b.a.V(l, function(a) { return a.U; }), q = b.a.Ja(n, d), s = [], v = 0, w = 0, B = [], A = [];
              d = [];
              for (var z = [], n = [], t, D = 0, C, E; C = q[D]; D++)
                  switch (E = C.moved, C.status) {
                  case "deleted":
                      E === I && (t = l[v], t.j && t.j.B(), B.push.apply(B, M(t.M)), e.beforeRemove && (d[D] = t, A.push(t)));
                      v++;
                      break;
                  case "retained":
                      g(D, v++);
                      break;
                  case "added":
                      E !== I ?
                          g(D, E) : (t = { U: C.value, na: b.m(w++) }, s.push(t), A.push(t), k || (n[D] = t));
                  }
              h(e.beforeMove, z);
              b.a.o(B, e.beforeRemove ? b.A : b.removeNode);
              for (var D = 0, k = b.e.firstChild(a), H; t = A[D]; D++) {
                  t.M || b.a.extend(t, ha(a, c, t.U, f, t.na));
                  for (v = 0; q = t.M[v]; k = q.nextSibling, H = q, v++) q !== k && b.e.Pa(a, q, H);
                  !t.Ab && f && (f(t.U, t.M, t.na), t.Ab = m);
              }
              h(e.beforeRemove, d);
              h(e.afterMove, z);
              h(e.afterAdd, n);
              b.a.f.set(a, "setDomNodeChildrenFromArrayMapping_lastMappingResult", s);
          };
          b.b("utils.setDomNodeChildrenFromArrayMapping", b.a.$a);
          b.C = function() {
              this.allowTemplateRewriting =
                  r;
          };
          b.C.prototype = new b.v;
          b.C.prototype.renderTemplateSource = function(a) {
              var d = !(9 > b.a.Z) && a.nodes ? a.nodes() : p;
              if (d) return b.a.L(d.cloneNode(m).childNodes);
              a = a.text();
              return b.a.ta(a);
          };
          b.C.oa = new b.C;
          b.wa(b.C.oa);
          b.b("nativeTemplateEngine", b.C);
          b.qa = function() {
              var a = this.Db = function() {
                  if ("undefined" == typeof F || !F.tmpl) return 0;
                  try {
                      if (0 <= F.tmpl.tag.tmpl.open.toString().indexOf("__")) return 2;
                  } catch(a) {
                  }
                  return 1;
              }();
              this.renderTemplateSource = function(b, c, e) {
                  e = e || {};
                  2 > a && j(Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later."));
                  var f = b.data("precompiled");
                  f || (f = b.text() || "", f = F.template(p, "{{ko_with $item.koBindingContext}}" + f + "{{/ko_with}}"), b.data("precompiled", f));
                  b = [c.$data];
                  c = F.extend({ koBindingContext: c }, e.templateOptions);
                  c = F.tmpl(f, b, c);
                  c.appendTo(y.createElement("div"));
                  F.fragments = {};
                  return c;
              };
              this.createJavaScriptEvaluatorBlock = function(a) { return "{{ko_code ((function() { return " + a + " })()) }}"; };
              this.addTemplate = function(a, b) { y.write("<script type='text/html' id='" + a + "'>" + b + "\x3c/script>"); };
              0 < a && (F.tmpl.tag.ko_code =
                  { open: "__.push($1 || '');" }, F.tmpl.tag.ko_with = { open: "with($1) {", close: "} " });
          };
          b.qa.prototype = new b.v;
          w = new b.qa;
          0 < w.Db && b.wa(w);
          b.b("jqueryTmplTemplateEngine", b.qa);
      }
  
      "function" === typeof require && "object" === typeof exports && "object" === typeof module ? L(module.exports || exports) : "function" === typeof define && define.amd ? define(["exports"], L) : L(x.ko = {});
      m;
  })();