Revamp Domains Settings IMAP disabled capabilities to extend it

This commit is contained in:
the-djmaze 2023-12-03 17:08:25 +01:00
parent e6b2cdfcdf
commit cf910c678b
10 changed files with 349 additions and 249 deletions

View file

@ -30,14 +30,6 @@ const
imapSslVerify_peer: false,
imapSslAllow_self_signed: false,
// Options
imapDisable_list_status: false,
imapDisable_metadata: false,
imapDisable_move: false,
imapDisable_sort: false,
imapDisable_thread: false,
imapDisable_binary: false,
imapDisable_status_size: true,
imapDisable_preview: true,
imapExpunge_all_on_delete: false,
imapFast_simple_search: true,
imapFetch_new_messages: true,
@ -82,14 +74,7 @@ const
verify_peer_name: !!oDomain.imapSslVerify_peer(),
allow_self_signed: !!oDomain.imapSslAllow_self_signed()
},
disable_list_status: !!oDomain.imapDisable_list_status(),
disable_metadata: !!oDomain.imapDisable_metadata(),
disable_move: !!oDomain.imapDisable_move(),
disable_sort: !!oDomain.imapDisable_sort(),
disable_thread: !!oDomain.imapDisable_thread(),
disable_binary: !!oDomain.imapDisable_binary(),
disable_status_size: !!oDomain.imapDisable_status_size(),
disable_preview: !!oDomain.imapDisable_preview(),
disabled_capabilities: oDomain.imapDisabled_capabilities(),
folder_list_limit: pInt(oDomain.imapFolder_list_limit()),
message_list_limit: pInt(oDomain.imapMessage_list_limit())
/*
@ -153,6 +138,8 @@ export class DomainPopupView extends AbstractViewPopup {
sieveHostFocus: false,
smtpHostFocus: false,
});
this.imapDisabled_capabilities = ko.observableArray();
this.imapCapabilities = ko.observableArray();
addComputablesTo(this, {
headerText: () => {
@ -286,10 +273,22 @@ export class DomainPopupView extends AbstractViewPopup {
this.testingSieveError(getNotification(iError));
this.testingSmtpError(getNotification(iError));
} else {
const result = oData.Result;
this.testingDone(true);
this.testingImapError(true !== oData.Result.Imap ? oData.Result.Imap : false);
this.testingSieveError(true !== oData.Result.Sieve ? oData.Result.Sieve : false);
this.testingSmtpError(true !== oData.Result.Smtp ? oData.Result.Smtp : false);
this.testingImapError(true !== result.Imap ? result.Imap : false);
this.testingSieveError(true !== result.Sieve ? result.Sieve : false);
this.testingSmtpError(true !== result.Smtp ? result.Smtp : false);
/*
// result.ImapResult.connectCapa
if (true === result.Imap && result.ImapResult.authCapa) {
result.ImapResult.authCapa.sort();
this.imapCapabilities(result.ImapResult.authCapa);
}
// result.SmtpResult.connectCapa
// result.SmtpResult.authCapa
// result.SieveResult.connectCapa
// result.SieveResult.authCapa
*/
}
},
params
@ -310,6 +309,17 @@ export class DomainPopupView extends AbstractViewPopup {
this.saving(false);
this.clearTesting();
this.edit(false);
this.imapCapabilities([
'LIST-STATUS',
'METADATA',
'MOVE',
'SORT',
'THREAD',
'BINARY',
'STATUS=SIZE',
'PREVIEW'
]);
this.imapDisabled_capabilities(['PREVIEW','STATUS=SIZE']);
forEachObjectEntry(domainDefaults, (key, value) => this[key](value));
this.enableSmartPorts(true);
if (oDomain) {

View file

@ -22,14 +22,10 @@
"disable_compression": true,
"security_level": 1
},
"disable_list_status": false,
"disable_metadata": false,
"disable_move": false,
"disable_sort": false,
"disable_thread": false,
"disable_binary": false,
"disable_status_size": true,
"disable_preview": true,
"disabled_capabilities": [
"STATUS=SIZE",
"PREVIEW"
],
"use_expunge_all_on_delete": false,
"fast_simple_search": true,
"force_select": false,

View file

@ -30,15 +30,10 @@ class ImapClient extends \MailSo\Net\NetClient
private int $iTagCount = 0;
/**
* @var array
*/
private $aCapabilityItems = null;
private ?array $aCapa = null;
private ?array $aCapaRaw = null;
/**
* @var FolderInformation
*/
private $oCurrentFolderInfo = null;
private ?FolderInformation $oCurrentFolderInfo = null;
/**
* Used by \MailSo\Mail\MailClient::MessageMimeStream
@ -89,7 +84,8 @@ class ImapClient extends \MailSo\Net\NetClient
if ($this->hasCapability('STARTTLS')) {
$this->SendRequestGetResponse('STARTTLS');
$this->EnableCrypto();
$this->aCapabilityItems = null;
$this->aCapa = null;
$this->aCapaRaw = null;
} else {
$this->writeLogException(
new \MailSo\Net\Exceptions\SocketUnsuppoterdSecureConnectionException('STARTTLS is not supported'),
@ -281,13 +277,21 @@ class ImapClient extends \MailSo\Net\NetClient
*/
public function Capability() : ?array
{
if (!$this->aCapabilityItems) {
if (!$this->aCapa) {
$this->setCapabilities($this->SendRequestGetResponse('CAPABILITY'));
}
/*
$this->aCapabilityItems[] = 'X-DOVECOT';
$this->aCapa[] = 'X-DOVECOT';
*/
return $this->aCapabilityItems;
return $this->aCapa;
}
public function Capabilities() : ?array
{
if (!$this->aCapa) {
$this->setCapabilities($this->SendRequestGetResponse('CAPABILITY'));
}
return $this->aCapaRaw;
}
public function CapabilityValue(string $sExtentionName) : ?string
@ -306,37 +310,17 @@ class ImapClient extends \MailSo\Net\NetClient
{
$aList = $oResponseCollection->getCapabilityResult();
if ($aList) {
if ($this->Settings->disable_metadata) {
// Issue #365: Many folders on Cyrus IMAP breaks login
$aList = \array_diff($aList, ['METADATA']);
}
if ($this->Settings->disable_move) {
$aList = \array_diff($aList, ['MOVE']);
}
if ($this->Settings->disable_sort) {
$aList = \array_diff($aList, ['SORT','ESORT']);
}
if ($this->Settings->disable_thread) {
// Strip unused capabilities
$aList = \array_diff($aList, ['PREVIEW=FUZZY', 'SNIPPET=FUZZY', 'SORT=DISPLAY']);
// Set raw response capabilities
$this->aCapaRaw = $aList;
// Set active capabilities
$aList = \array_diff($aList, $this->Settings->disabled_capabilities);
if (\in_array('THREAD', $this->Settings->disabled_capabilities)) {
$aList = \array_filter($aList, function ($item) { \str_starts_with($item, 'THREAD='); });
}
if ($this->Settings->disable_list_status) {
$aList = \array_diff($aList, ['LIST-STATUS']);
}
if ($this->Settings->disable_binary) {
$aList = \array_diff($aList, ['BINARY']);
}
if (8 > PHP_INT_SIZE) {
$aList = \array_diff($aList, ['CONDSTORE']);
$aList = \array_diff($aList, ['STATUS=SIZE']);
}
if ($this->Settings->disable_status_size) {
$aList = \array_diff($aList, ['STATUS=SIZE']);
}
if ($this->Settings->disable_preview) {
$aList = \array_diff($aList, ['PREVIEW']);
}
}
$this->aCapabilityItems = $aList;
$this->aCapa = $aList;
}
/**

View file

@ -19,46 +19,29 @@ class Settings extends \MailSo\Net\ConnectSettings
{
public int
$port = 143,
$timeout = 300;
$timeout = 300,
$body_text_limit = 0,
// $folder_list_limit = 200,
$message_list_limit = 0,
$thread_limit = 50;
public bool
$disable_list_status = false,
$disable_metadata = false,
$disable_move = false,
$disable_sort = false,
$disable_thread = false,
$disable_binary = false,
// STATUS SIZE can take a significant amount of time, therefore not active by default
$disable_status_size = true,
// RFC 8970
$disable_preview = true,
$expunge_all_on_delete = false,
$fast_simple_search = true,
$fetch_new_messages = true,
$force_select = false,
$message_all_headers = false;
public int
$body_text_limit = 0,
// $folder_list_limit = 200,
$message_list_limit = 0,
$thread_limit = 50;
public string
$search_filter = '';
public array
$disabled_capabilities = [];
public static function fromArray(array $aSettings) : self
{
$object = parent::fromArray($aSettings);
$options = [
'disable_list_status',
'disable_metadata',
'disable_move',
'disable_sort',
'disable_thread',
'disable_binary',
'disable_status_size',
'disable_preview',
'expunge_all_on_delete',
'fast_simple_search',
'fetch_new_messages',
@ -81,24 +64,56 @@ class Settings extends \MailSo\Net\ConnectSettings
$object->$option = \intval($aSettings[$option]);
}
}
if (!empty($aSettings['disabled_capabilities']) && \is_array($aSettings['disabled_capabilities'])) {
$object->disabled_capabilities = $aSettings['disabled_capabilities'];
}
// Convert old disable_* settings
if (!empty($aSettings['disable_list_status'])) {
$object->disabled_capabilities[] = 'list-status';
}
if (!empty($aSettings['disable_metadata'])) {
// Issue #365: Many folders on Cyrus IMAP breaks login
$object->disabled_capabilities[] = 'METADATA';
}
if (!empty($aSettings['disable_move'])) {
$object->disabled_capabilities[] = 'MOVE';
}
if (!empty($aSettings['disable_sort'])) {
$object->disabled_capabilities[] = 'SORT';
}
if (!empty($aSettings['disable_thread'])) {
$object->disabled_capabilities[] = 'THREAD';
}
if (!empty($aSettings['disable_binary'])) {
$object->disabled_capabilities[] = 'BINARY';
}
if (!empty($aSettings['disable_status_size'])) {
// STATUS SIZE can take a significant amount of time, therefore not active by default
$object->disabled_capabilities[] = 'STATUS=SIZE';
}
if (!empty($aSettings['disable_preview'])) {
// RFC 8970
$object->disabled_capabilities[] = 'PREVIEW';
}
if (\in_array('SORT', $object->disabled_capabilities)) {
$object->disabled_capabilities[] = 'ESORT';
}
$object->disabled_capabilities = \array_values(\array_unique($object->disabled_capabilities));
return $object;
}
#[\ReturnTypeWillChange]
public function jsonSerialize()
{
if (\in_array('SORT', $this->disabled_capabilities)) {
$this->disabled_capabilities[] = 'ESORT';
}
return \array_merge(
parent::jsonSerialize(),
[
// '@Object' => 'Object/ImapSettings',
'disable_list_status' => $this->disable_list_status,
'disable_metadata' => $this->disable_metadata,
'disable_move' => $this->disable_move,
'disable_sort' => $this->disable_sort,
'disable_thread' => $this->disable_thread,
'disable_binary' => $this->disable_binary,
'disable_status_size' => $this->disable_status_size,
'disable_preview' => $this->disable_preview,
'use_expunge_all_on_delete' => $this->expunge_all_on_delete,
// 'body_text_limit' => $this->body_text_limit,
'fast_simple_search' => $this->fast_simple_search,
@ -108,6 +123,7 @@ class Settings extends \MailSo\Net\ConnectSettings
'message_list_limit' => $this->message_list_limit,
'search_filter' => $this->search_filter,
// 'thread_limit' => $this->thread_limit
'disabled_capabilities' => \array_values(\array_unique($this->disabled_capabilities))
]
);
}

View file

@ -808,7 +808,6 @@ class MailClient
public function Folders(string $sParent, string $sListPattern, bool $bUseListSubscribeStatus) : ?FolderCollection
{
// $this->oImapClient->Settings->disable_list_status
$oFolderCollection = $this->oImapClient->FolderStatusList($sParent, $sListPattern);
if (!$oFolderCollection->count()) {
return null;

View file

@ -97,14 +97,18 @@ trait AdminDomains
$oSettings = $oDomain->ImapSettings();
$oImapClient->Connect($oSettings);
$mImapResult = [
'connectCapa' => $oImapClient->Capability()
'connectCapa' => $oImapClient->Capabilities()
];
if (!empty($aAuth['user'])) {
$oSettings->Login = $aAuth['user'];
$oSettings->Password = $aAuth['pass'];
$oImapClient->Login($oSettings);
$mImapResult['authCapa'] = $oImapClient->Capability();
$mImapResult['authCapa'] = \array_values(\array_unique(\array_map(function($n){
return \str_starts_with($n, 'THREAD=') ? 'THREAD' : $n;
},
$oImapClient->Capabilities()
)));
}
$oImapClient->Disconnect();

View file

@ -79,62 +79,18 @@
}"></div>
<h4 data-i18n="POPUPS_DOMAIN/DISABLE_CAPABILITIES"></h4>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_list_status,
label: 'LIST-STATUS'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_metadata,
label: 'METADATA'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_move,
label: 'MOVE'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_sort,
label: 'SORT'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_thread,
label: 'THREAD'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_binary,
label: 'BINARY'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_status_size,
label: 'STATUS SIZE'
}
}"></div>
<div data-bind="component: {
name: 'Checkbox',
params: {
value: imapDisable_preview,
label: 'PREVIEW'
}
}"></div>
<div data-bind="foreach: imapCapabilities">
<div style="display: inline-block; width: 33%; min-width: 16em">
<label class="e-component e-checkbox material-design">
<div>
<input type="checkbox" data-bind="checked: $parent.imapDisabled_capabilities, value: $data"/>
<div role="checkbox"></div>
</div>
<span data-bind="text: $data"></span>
</label>
</div>
</div>
<h4 data-i18n="POPUPS_DOMAIN/LIMITS"></h4>
<div class="control-group">

View file

@ -33,7 +33,7 @@ ko.utils = {
emptyDomNode: domNode => [...domNode.childNodes].forEach(child => ko.removeNode(child)),
// emptyDomNode: domNode => {while (domNode.lastChild) ko.removeNode(domNode.lastChild)},
// Safari 14+
// Safari 14+
// emptyDomNode: domNode => domNode.replaceChildren(),
moveCleanedNodesToContainerElement: nodes => {
@ -2403,17 +2403,17 @@ ko.bindingHandlers['checked'] = {
// Only bind to check boxes and radio buttons
if (isCheckbox || isRadio) {
const checkedValue = ko.pureComputed(()=>{
if (isRadio) {
// Treat "value" like "checkedValue" when it is included with "checked" binding
if (allBindings['has']('checkedValue')) {
return ko.utils.unwrapObservable(allBindings.get('checkedValue'));
} else if (useElementValue) {
return allBindings['has']('value')
? ko.utils.unwrapObservable(allBindings.get('value'))
: element.value;
}
});
// Set up two computeds to update the binding:
// The first responds to element clicks
element.addEventListener("click", () => {
var updateModel = () => {
// When we're first setting up this computed, don't change any model state.
if (ko.dependencyDetection.isInitial()) {
return;
@ -2421,7 +2421,8 @@ ko.bindingHandlers['checked'] = {
// This updates the model value from the view value.
// It runs in response to DOM events (click) and changes in checkedValue.
var isChecked = element.checked;
var isChecked = element.checked,
elemValue = checkedValue();
// We can ignore unchecked radio buttons, because some other radio
// button will be checked, and that one can take care of updating state.
@ -2430,24 +2431,90 @@ ko.bindingHandlers['checked'] = {
return;
}
var elemValue = isCheckbox ? isChecked : checkedValue(),
modelValue = ko.dependencyDetection.ignore(valueAccessor);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
}),
var modelValue = ko.dependencyDetection.ignore(valueAccessor);
if (valueIsArray) {
var writableValue = rawValueIsNonArrayObservable ? modelValue.peek() : modelValue,
saveOldValue = oldElemValue;
oldElemValue = elemValue;
if (saveOldValue !== elemValue) {
// When we're responding to the checkedValue changing, and the element is
// currently checked, replace the old elem value with the new elem value
// in the model array.
if (isChecked) {
writableValue.push(elemValue);
writableValue.remove(saveOldValue);
}
} else {
// When we're responding to the user having checked/unchecked a checkbox,
// add/remove the element value to the model array.
isChecked ? writableValue.push(elemValue) : writableValue.remove(elemValue);
}
if (rawValueIsNonArrayObservable && ko.isWriteableObservable(modelValue)) {
modelValue(writableValue);
}
} else {
if (isCheckbox) {
if (elemValue === undefined) {
elemValue = isChecked;
} else if (!isChecked) {
elemValue = undefined;
}
}
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
}
}
var rawValue = valueAccessor(),
valueIsArray = isCheckbox && (ko.utils.unwrapObservable(rawValue) instanceof Array),
rawValueIsNonArrayObservable = !(valueIsArray && rawValue.push && rawValue.splice),
useElementValue = isRadio || valueIsArray,
oldElemValue = valueIsArray ? checkedValue() : undefined;
// IE 6 won't allow radio buttons to be selected unless they have a name
if (isRadio && !element.name)
ko.bindingHandlers['uniqueName']['init'](element, function() { return true });
// Set up two computeds to update the binding:
// The first responds to changes in the checkedValue value and to element clicks
ko.computed(updateModel, null, { disposeWhenNodeIsRemoved: element });
element.addEventListener("click", updateModel);
// The second responds to changes in the model value (the one associated with the checked binding)
ko.computed(() => {
// This updates the view value from the model value.
// It runs in response to changes in the bound (checked) value.
var modelValue = ko.utils.unwrapObservable(valueAccessor());
element.checked = isCheckbox ? !!modelValue : (checkedValue() === modelValue);
var modelValue = ko.utils.unwrapObservable(valueAccessor()),
elemValue = checkedValue();
if (valueIsArray) {
// When a checkbox is bound to an array, being checked represents its value being present in that array
element.checked = modelValue.includes(elemValue);
oldElemValue = elemValue;
} else if (isCheckbox && elemValue === undefined) {
// When a checkbox is bound to any other value (not an array) and "checkedValue" is not defined,
// being checked represents the value being trueish
element.checked = !!modelValue;
} else {
// Otherwise, being checked means that the checkbox or radio button's value corresponds to the model value
element.checked = (checkedValue() === modelValue);
}
}, null, { disposeWhenNodeIsRemoved: element });
rawValue = undefined;
}
}
};
ko.expressionRewriting.twoWayBindings['checked'] = true;
ko.bindingHandlers['checkedValue'] = {
'update': function (element, valueAccessor) {
element.value = ko.utils.unwrapObservable(valueAccessor());
}
};
})();
var classesWrittenByBindingKey = '__ko__cssValue',
toggleClasses = (node, classNames, force) =>

View file

@ -4,71 +4,72 @@
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(V=>{function P(a,b){return null===a||da[typeof a]?a===b:!1}function ea(a,b){var d;return()=>{d||(d=setTimeout(()=>{d=0;a()},b))}}function fa(a,b){var d;return()=>{clearTimeout(d);d=setTimeout(a,b)}}function ha(a,b){b?.A?.()}function ia(a,b){var d=this.$b,f=d[y];f.$||(this.Za&&this.za[b]?(d.vb(b,a,this.za[b]),this.za[b]=null,--this.Za):f.B[b]||d.vb(b,a,f.C?{X:a}:d.Sb(a)),a.ja&&a.Wb())}function W(a){a=c.g.j.get(a,K);var b=a?.I;b&&(a.I=null,b.Mb())}function X(a,b){for(var d,f=c.m.firstChild(b);d=f;)f=
c.m.nextSibling(d),Y(a,d);c.l.notify(b,c.l.H)}function Y(a,b){var d=a;if(1===b.nodeType||c.Ab.nc(b))d=Z(b,null,a).bindingContextForDescendants;d&&!b.matches?.("SCRIPT,TEXTAREA,TEMPLATE")&&X(d,b)}function ja(a){var b=[],d={},f=[];c.g.P(a,function e(l){if(!d[l]){var g=c.h[l];g&&(g.after&&(f.push(l),g.after.forEach(h=>{if(a[h]){if(f.includes(h))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+f.join(", "));e(h)}}),f.length--),b.push({key:l,Ib:g}));d[l]=!0}});
return b}function Z(a,b,d){var f=c.g.j.fb(a,K,{}),k=f.Xb;if(!b){if(k)throw Error("You cannot apply bindings multiple times to the same element.");f.Xb=!0}k||(f.context=d);f.hb||(f.hb={});if(b&&"function"!==typeof b)var l=b;else{var e=c.u(()=>{if(l=b?b(d,a):c.Ab.cc(a,d))d[L]?.(),d[aa]?.();return l},{s:a});l&&e.isActive()||(e=null)}var g=d,h;if(l){var n=e?m=>()=>e()[m]():m=>l[m],p={get:m=>l[m]&&n(m)(),has:m=>m in l};c.l.H in l&&c.l.subscribe(a,c.l.H,()=>{var m=l[c.l.H]();if(m){var r=c.m.childNodes(a);
r.length&&m(r,c.Eb(r[0]))}});c.l.ga in l&&(g=c.l.mb(a,d),c.l.subscribe(a,c.l.ga,()=>{var m=l[c.l.ga]();m&&c.m.firstChild(a)&&m(a)}));ja(l).forEach(m=>{var r=m.Ib.init,q=m.Ib.update,t=m.key;if(8===a.nodeType&&!c.m.ca[t])throw Error("The binding '"+t+"' cannot be used with virtual elements");try{"function"==typeof r&&c.o.M(()=>{var u=r(a,n(t),p,g.$data,g);if(u&&u.controlsDescendantBindings){if(void 0!==h)throw Error("Multiple bindings ("+h+" and "+t+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
h=t}}),"function"==typeof q&&c.u(()=>q(a,n(t),p,g.$data,g),{s:a})}catch(u){throw u.message='Unable to process binding "'+t+": "+l[t]+'"\nMessage: '+u.message,u;}})}f=void 0===h;return{shouldBindDescendants:f,bindingContextForDescendants:f&&g}}function Q(a,b){return a&&a instanceof c.ea?a:new c.ea(a,void 0,void 0,b)}var M=V.document,R={},c="undefined"!==typeof R?R:{};c.v=(a,b)=>{a=a.split(".");for(var d=c,f=0,k=a.length-1;f<k;f++)d=d[a[f]];d[a[k]]=b};c.ha=(a,b,d)=>{a[b]=d};c.v("version","3.5.1-sm");
c.g={extend:(a,b)=>b?Object.assign(a,b):a,P:(a,b)=>a&&Object.entries(a).forEach(d=>b(d[0],d[1])),cb:a=>[...a.childNodes].forEach(b=>c.removeNode(b)),Lb:a=>{a=[...a];var b=(a[0]?.ownerDocument||M).createElement("div");a.forEach(d=>b.append(c.fa(d)));return b},ya:(a,b)=>Array.prototype.map.call(a,b?d=>c.fa(d.cloneNode(!0)):d=>d.cloneNode(!0)),ua:(a,b)=>{c.g.cb(a);b&&a.append(...b)},Ba:(a,b)=>{if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&
a[a.length-1].parentNode!==b;)--a.length;if(1<a.length){b=a[0];var d=a[a.length-1];for(a.length=0;b!==d;)a.push(b),b=b.nextSibling;a.push(d)}}return a},Rb:a=>null==a?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,""),bb:a=>a.ownerDocument.documentElement.contains(1!==a.nodeType?a.parentNode:a),Tb:(a,b)=>{if(!a?.nodeType)throw Error("element must be a DOM node when calling triggerEvent");a.dispatchEvent(new Event(b))},i:a=>c.T(a)?a():a,lb:(a,b)=>a.textContent=c.g.i(b)||""};c.v("utils",
c.g);c.v("unwrap",c.g.i);(()=>{let a=0,b="__ko__"+Date.now(),d=new WeakMap;c.g.j={get:(f,k)=>(d.get(f)||{})[k],set:(f,k,l)=>{d.has(f)?d.get(f)[k]=l:d.set(f,{[k]:l});return l},fb:function(f,k,l){return this.get(f,k)||this.set(f,k,l)},clear:f=>d.delete(f),Z:()=>a++ +b}})();c.g.K=(()=>{var a=c.g.j.Z(),b={1:1,8:1,9:1},d={1:1,9:1};const f=(e,g)=>{var h=c.g.j.get(e,a);g&&!h&&(h=new Set,c.g.j.set(e,a,h));return h},k=e=>{var g=f(e);g&&(new Set(g)).forEach(h=>h(e));c.g.j.clear(e);d[e.nodeType]&&l(e.childNodes,
!0)},l=(e,g)=>{for(var h=[],n,p=0;p<e.length;p++)if(!g||8===e[p].nodeType)if(k(h[h.length]=n=e[p]),e[p]!==n)for(;p--&&!h.includes(e[p]););};return{ma:(e,g)=>{if("function"!=typeof g)throw Error("Callback must be a function");f(e,1).add(g)},kb:(e,g)=>{var h=f(e);h&&(h.delete(g),h.size||c.g.j.set(e,a,null))},fa:e=>{c.o.M(()=>{b[e.nodeType]&&(k(e),d[e.nodeType]&&l(e.getElementsByTagName("*")))});return e},removeNode:e=>{c.fa(e);e.parentNode&&e.parentNode.removeChild(e)}}})();c.fa=c.g.K.fa;c.removeNode=
c.g.K.removeNode;c.v("utils.domNodeDisposal",c.g.K);c.v("utils.domNodeDisposal.addDisposeCallback",c.g.K.ma);c.eb={debounce:(a,b)=>a.Ja(d=>fa(d,b)),rateLimit:(a,b)=>{if("number"==typeof b)var d=b;else{d=b.timeout;var f=b.method}var k="function"==typeof f?f:ea;a.Ja(l=>k(l,d,b))},notify:(a,b)=>{a.pa="always"==b?null:P}};var da={undefined:1,"boolean":1,number:1,string:1};c.v("extenders",c.eb);class ka{constructor(a,b,d){this.X=a;this.pb=b;this.Da=d;this.Ra=!1;this.L=this.ia=null;c.ha(this,"dispose",
this.A)}A(){this.Ra||(this.L&&c.g.K.kb(this.ia,this.L),this.Ra=!0,this.Da(),this.X=this.pb=this.Da=this.ia=this.L=null)}s(a){this.ia=a;c.g.K.ma(a,this.L=this.A.bind(this))}}c.V=function(){Object.setPrototypeOf(this,D);D.Fa(this)};var D={Fa:a=>{a.W=new Map;a.W.set("change",new Set);a.ub=1},subscribe:function(a,b,d){var f=this;d=d||"change";var k=new ka(f,b?a.bind(b):a,()=>{f.W.get(d).delete(k);f.Sa?.(d)});f.Ua?.(d);f.W.has(d)||f.W.set(d,new Set);f.W.get(d).add(k);return k},D:function(a,b){b=b||"change";
"change"===b&&this.Na();if(this.ra(b)){b="change"===b&&this.Ub||new Set(this.W.get(b));try{c.o.zb(),b.forEach(d=>{d.Ra||d.pb(a)})}finally{c.o.end()}}},Ca:function(){return this.ub},fc:function(a){return this.Ca()!==a},Na:function(){++this.ub},Ja:function(a){var b=this,d=c.T(b),f,k,l,e,g;b.wa||(b.wa=b.D,b.D=(n,p)=>{p&&"change"!==p?"beforeChange"===p?b.rb(n):b.wa(n,p):b.sb(n)});var h=a(()=>{b.ja=!1;d&&e===b&&(e=b.qb?b.qb():b());var n=k||g&&b.Ha(l,e);g=k=f=!1;n&&b.wa(l=e)});b.sb=(n,p)=>{p&&b.ja||(g=
!p);b.Ub=new Set(b.W.get("change"));b.ja=f=!0;e=n;h()};b.rb=n=>{f||(l=n,b.wa(n,"beforeChange"))};b.tb=()=>{g=!0};b.Wb=()=>{b.Ha(l,b.R(!0))&&(k=!0)}},ra:function(a){return(this.W.get(a)||[]).size},Ha:function(a,b){return!this.pa||!this.pa(a,b)},toString:()=>"[object Object]",extend:function(a){var b=this;a&&c.g.P(a,(d,f)=>{d=c.eb[d];"function"==typeof d&&(b=d(b,f)||b)});return b}};c.ha(D,"init",D.Fa);c.ha(D,"subscribe",D.subscribe);c.ha(D,"extend",D.extend);c.V.fn=Object.setPrototypeOf(D,Function.prototype);
c.kc=a=>"function"==typeof a?.subscribe&&"function"==typeof a.D;(()=>{var a=[],b,d=0;c.o={zb:f=>{a.push(b);b=f},end:()=>b=a.pop(),Pb:f=>{if(b){if(!c.kc(f))throw Error("Only subscribable things can act as dependencies");b.Yb.call(b.Zb,f,f.Vb||(f.Vb=++d))}},M:(f,k,l)=>{try{return a.push(b),b=void 0,f.apply(k,l||[])}finally{b=a.pop()}},qa:()=>b?.u.qa(),Ia:()=>b?.Ia,u:()=>b?.u}})();const B=Symbol("_latestValue");c.ba=a=>{function b(){if(0<arguments.length)return b.Ha(b[B],arguments[0])&&(b.ob(),b[B]=
arguments[0],b.Oa()),this;c.o.Pb(b);return b[B]}b[B]=a;Object.defineProperty(b,"length",{get:()=>null==b[B]?void 0:b[B].length});c.V.fn.Fa(b);return Object.setPrototypeOf(b,F)};var F={toJSON:function(){let a=this[B];return a?.toJSON?.()||a},pa:P,R:function(){return this[B]},Oa:function(){this.D(this[B],"spectate");this.D(this[B])},ob:function(){this.D(this[B],"beforeChange")}};Object.setPrototypeOf(F,c.V.fn);var G=c.ba.qc="__ko_proto__";F[G]=c.ba;c.T=a=>{if((a="function"==typeof a&&a[G])&&a!==F[G]&&
a!==c.u.fn[G])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};c.lc=a=>"function"==typeof a&&(a[G]===F[G]||a[G]===c.u.fn[G]&&a.hc);c.v("observable",c.ba);c.v("isObservable",c.T);c.v("observable.fn",F);c.ha(F,"valueHasMutated",F.Oa);c.ta=a=>{a=a||[];if("object"!=typeof a||!("length"in a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return Object.setPrototypeOf(c.ba(a),
c.ta.fn).extend({trackArrayChanges:!0})};c.ta.fn=Object.setPrototypeOf({remove:function(a){for(var b=this.R(),d=!1,f="function"!=typeof a||c.T(a)?e=>e===a:a,k=b.length;k--;){var l=b[k];if(f(l)){if(b[k]!==l)throw Error("Array modified during remove; cannot remove item");d||this.ob();d=!0;b.splice(k,1)}}d&&this.Oa()}},c.ba.fn);Object.getOwnPropertyNames(Array.prototype).forEach(a=>{"function"===typeof Array.prototype[a]&&"constructor"!=a&&("copyWithin fill pop push reverse shift sort splice unshift".split(" ").includes(a)?
c.ta.fn[a]=function(...b){var d=this.R();this.ob();this.Bb(d,a,b);b=d[a](...b);this.Oa();return b===d?this:b}:c.ta.fn[a]=function(...b){return this()[a](...b)})});c.Jb=a=>c.T(a)&&"function"==typeof a.remove&&"function"==typeof a.push;c.v("observableArray",c.ta);c.v("isObservableArray",c.Jb);c.eb.trackArrayChanges=(a,b)=>{function d(){function m(){if(g){var r=[].concat(a.R()||[]);if(a.ra("arrayChange")){if(!k||1<g)k=c.g.Cb(h,r,a.Wa);var q=k}h=r;k=null;g=0;q?.length&&a.D(q,"arrayChange")}}f?m():(f=
!0,e=a.subscribe(()=>++g,null,"spectate"),h=[].concat(a.R()||[]),k=null,l=a.subscribe(m))}a.Wa={};"object"==typeof b&&c.g.extend(a.Wa,b);a.Wa.sparse=!0;if(!a.Bb){var f=!1,k=null,l,e,g=0,h,n=a.Ua,p=a.Sa;a.Ua=m=>{n?.call(a,m);"arrayChange"===m&&d()};a.Sa=m=>{p?.call(a,m);"arrayChange"!==m||a.ra("arrayChange")||(l?.A(),e?.A(),e=l=null,f=!1,h=void 0)};a.Bb=(m,r,q)=>{function t(A,x,I){return u[u.length]={status:A,value:x,index:I}}if(f&&!g){var u=[],w=m.length,v=q.length,z=0;switch(r){case "push":z=w;case "unshift":for(m=
0;m<v;m++)t("added",q[m],z+m);break;case "pop":z=w-1;case "shift":w&&t("deleted",m[z],z);break;case "splice":z=Math.min(Math.max(0,0>q[0]?w+q[0]:q[0]),w);w=1===v?w:Math.min(z+(q[1]||0),w);v=z+v-2;r=Math.max(w,v);for(var C=[],H=[],O=2;z<r;++z,++O)z<w&&H.push(t("deleted",m[z],z)),z<v&&C.push(t("added",q[O],z));c.g.Hb(H,C);break;default:return}k=u}}}};var y=Symbol("_state");c.u=(a,b)=>{function d(){if(0<arguments.length){if("function"!==typeof f)throw 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.");
f(...arguments);return this}k.$||c.o.Pb(d);(k.Y||k.C&&d.sa())&&d.U();return k.N}"object"===typeof a?b=a:(b=b||{},a&&(b.read=a));if("function"!=typeof b.read)throw Error("Pass a function that returns the value of the ko.computed");var f=b.write,k={N:void 0,aa:!0,Y:!0,Ga:!1,nb:!1,$:!1,jb:!1,C:!1,Ob:b.read,s:b.disposeWhenNodeIsRemoved||b.s||null,na:b.disposeWhen||b.na,ab:null,B:{},J:0,Gb:null};d[y]=k;d.hc="function"===typeof f;c.V.fn.Fa(d);Object.setPrototypeOf(d,J);b.pure&&(k.jb=!0,k.C=!0,c.g.extend(d,
la));k.s&&(k.nb=!0,k.s.nodeType||(k.s=null));k.C||d.U();k.s&&d.isActive()&&c.g.K.ma(k.s,k.ab=()=>{d.A()});return d};var J={pa:P,qa:function(){return this[y].J},dc:function(){var a=[];c.g.P(this[y].B,(b,d)=>a[d.ka]=d.X);return a},gb:function(a){if(!this[y].J)return!1;var b=this.dc();return b.includes(a)||!!b.find(d=>d.gb&&d.gb(a))},vb:function(a,b,d){if(this[y].jb&&b===this)throw Error("A 'pure' computed must not be called recursively");this[y].B[a]=d;d.ka=this[y].J++;d.la=b.Ca()},sa:function(){var a,
b=this[y].B;for(a in b)if(Object.prototype.hasOwnProperty.call(b,a)){var d=b[a];if(this.va&&d.X.ja||d.X.fc(d.la))return!0}},vc:function(){this[y].Ga||this.va?.(!1)},isActive:function(){var a=this[y];return a.Y||0<a.J},wc:function(){this.ja?this[y].Y&&(this[y].aa=!0):this.Fb()},Sb:function(a){return a.subscribe(this.Fb,this)},Fb:function(){var a=this,b=a.throttleEvaluation;0<=b?(clearTimeout(this[y].Gb),this[y].Gb=setTimeout(()=>a.U(!0),b)):a.va?a.va(!0):a.U(!0)},U:function(a){var b=this[y],d=b.na,
f=!1;if(!b.Ga&&!b.$){if(b.s&&!c.g.bb(b.s)||d?.()){if(!b.nb){this.A();return}}else b.nb=!1;try{b.Ga=!0,f=this.bc(a)}finally{b.Ga=!1}return f}},bc:function(a){var b=this[y],d=b.jb?void 0:!b.J;var f={$b:this,za:b.B,Za:b.J};c.o.zb({Zb:f,Yb:ia,u:this,Ia:d});b.B={};b.J=0;a:{try{var k=b.Ob();break a}finally{c.o.end(),f.Za&&!b.C&&c.g.P(f.za,ha),b.aa=b.Y=!1}k=void 0}b.J?f=this.Ha(b.N,k):(this.A(),f=!0);f&&(b.C?this.Na():this.D(b.N,"beforeChange"),b.N=k,this.D(b.N,"spectate"),!b.C&&a&&this.D(b.N),this.tb&&
this.tb());d&&this.D(b.N,"awake");return f},R:function(a){var b=this[y];(b.Y&&(a||!b.J)||b.C&&this.sa())&&this.U();return b.N},Ja:function(a){var b=this;c.V.fn.Ja.call(b,a);b.qb=()=>{b[y].C||(b[y].aa?b.U():b[y].Y=!1);return b[y].N};b.va=d=>{b.rb(b[y].N);b[y].Y=!0;d&&(b[y].aa=!0);b.sb(b,!d)}},A:function(){var a=this[y];!a.C&&a.B&&c.g.P(a.B,(b,d)=>d.A?.());a.s&&a.ab&&c.g.K.kb(a.s,a.ab);a.B=void 0;a.J=0;a.$=!0;a.aa=!1;a.Y=!1;a.C=!1;a.s=void 0;a.na=void 0;a.Ob=void 0}},la={Ua:function(a){var b=this,d=
b[y];if(!d.$&&d.C&&"change"==a){d.C=!1;if(d.aa||b.sa())d.B=null,d.J=0,b.U()&&b.Na();else{var f=[];c.g.P(d.B,(k,l)=>f[l.ka]=k);f.forEach((k,l)=>{var e=d.B[k],g=b.Sb(e.X);g.ka=l;g.la=e.la;d.B[k]=g});b.sa()&&b.U()&&b.Na()}d.$||b.D(d.N,"awake")}},Sa:function(a){var b=this[y];b.$||"change"!=a||this.ra("change")||(c.g.P(b.B,(d,f)=>{f.A&&(b.B[d]={X:f.X,ka:f.ka,la:f.la},f.A())}),b.C=!0,this.D(void 0,"asleep"))},Ca:function(){var a=this[y];a.C&&(a.aa||this.sa())&&this.U();return c.V.fn.Ca.call(this)}};Object.setPrototypeOf(J,
c.V.fn);var S=c.ba.qc;J[S]=c.u;c.v("computed",c.u);c.v("isComputed",a=>"function"==typeof a&&a[S]===J[S]);c.v("computed.fn",J);c.ha(J,"dispose",J.A);c.Nb=a=>{if("function"===typeof a)return c.u(a,{pure:!0});a={...a,pure:!0};return c.u(a)};c.F={S:a=>{switch(a.nodeName){case "OPTION":return!0===a.__ko__hasDomDataOptionValue__?c.g.j.get(a,c.h.options.ib):a.value;case "SELECT":return 0<=a.selectedIndex?c.F.S(a.options[a.selectedIndex]):void 0;default:return a.value}},Pa:(a,b,d)=>{switch(a.nodeName){case "OPTION":"string"===
(V=>{function P(a,b){return null===a||da[typeof a]?a===b:!1}function ea(a,b){var d;return()=>{d||(d=setTimeout(()=>{d=0;a()},b))}}function fa(a,b){var d;return()=>{clearTimeout(d);d=setTimeout(a,b)}}function ha(a,b){b?.A?.()}function ia(a,b){var d=this.ac,f=d[y];f.$||(this.Za&&this.za[b]?(d.vb(b,a,this.za[b]),this.za[b]=null,--this.Za):f.B[b]||d.vb(b,a,f.C?{X:a}:d.Tb(a)),a.ja&&a.Xb())}function W(a){a=c.g.j.get(a,K);var b=a?.I;b&&(a.I=null,b.Nb())}function X(a,b){for(var d,f=c.m.firstChild(b);d=f;)f=
c.m.nextSibling(d),Y(a,d);c.l.notify(b,c.l.H)}function Y(a,b){var d=a;if(1===b.nodeType||c.Ab.nc(b))d=Z(b,null,a).bindingContextForDescendants;d&&!b.matches?.("SCRIPT,TEXTAREA,TEMPLATE")&&X(d,b)}function ja(a){var b=[],d={},f=[];c.g.R(a,function e(l){if(!d[l]){var g=c.h[l];g&&(g.after&&(f.push(l),g.after.forEach(h=>{if(a[h]){if(f.includes(h))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+f.join(", "));e(h)}}),f.length--),b.push({key:l,Ib:g}));d[l]=!0}});
return b}function Z(a,b,d){var f=c.g.j.fb(a,K,{}),k=f.Yb;if(!b){if(k)throw Error("You cannot apply bindings multiple times to the same element.");f.Yb=!0}k||(f.context=d);f.hb||(f.hb={});if(b&&"function"!==typeof b)var l=b;else{var e=c.s(()=>{if(l=b?b(d,a):c.Ab.dc(a,d))d[L]?.(),d[aa]?.();return l},{o:a});l&&e.isActive()||(e=null)}var g=d,h;if(l){var p=e?m=>()=>e()[m]():m=>l[m],n={get:m=>l[m]&&p(m)(),has:m=>m in l};c.l.H in l&&c.l.subscribe(a,c.l.H,()=>{var m=l[c.l.H]();if(m){var r=c.m.childNodes(a);
r.length&&m(r,c.Eb(r[0]))}});c.l.ga in l&&(g=c.l.mb(a,d),c.l.subscribe(a,c.l.ga,()=>{var m=l[c.l.ga]();m&&c.m.firstChild(a)&&m(a)}));ja(l).forEach(m=>{var r=m.Ib.init,q=m.Ib.update,t=m.key;if(8===a.nodeType&&!c.m.ca[t])throw Error("The binding '"+t+"' cannot be used with virtual elements");try{"function"==typeof r&&c.u.N(()=>{var u=r(a,p(t),n,g.$data,g);if(u&&u.controlsDescendantBindings){if(void 0!==h)throw Error("Multiple bindings ("+h+" and "+t+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");
h=t}}),"function"==typeof q&&c.s(()=>q(a,p(t),n,g.$data,g),{o:a})}catch(u){throw u.message='Unable to process binding "'+t+": "+l[t]+'"\nMessage: '+u.message,u;}})}f=void 0===h;return{shouldBindDescendants:f,bindingContextForDescendants:f&&g}}function Q(a,b){return a&&a instanceof c.ea?a:new c.ea(a,void 0,void 0,b)}var M=V.document,R={},c="undefined"!==typeof R?R:{};c.v=(a,b)=>{a=a.split(".");for(var d=c,f=0,k=a.length-1;f<k;f++)d=d[a[f]];d[a[k]]=b};c.ha=(a,b,d)=>{a[b]=d};c.v("version","3.5.1-sm");
c.g={extend:(a,b)=>b?Object.assign(a,b):a,R:(a,b)=>a&&Object.entries(a).forEach(d=>b(d[0],d[1])),cb:a=>[...a.childNodes].forEach(b=>c.removeNode(b)),Mb:a=>{a=[...a];var b=(a[0]?.ownerDocument||M).createElement("div");a.forEach(d=>b.append(c.fa(d)));return b},ya:(a,b)=>Array.prototype.map.call(a,b?d=>c.fa(d.cloneNode(!0)):d=>d.cloneNode(!0)),ua:(a,b)=>{c.g.cb(a);b&&a.append(...b)},Ba:(a,b)=>{if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&
a[a.length-1].parentNode!==b;)--a.length;if(1<a.length){b=a[0];var d=a[a.length-1];for(a.length=0;b!==d;)a.push(b),b=b.nextSibling;a.push(d)}}return a},Sb:a=>null==a?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,""),bb:a=>a.ownerDocument.documentElement.contains(1!==a.nodeType?a.parentNode:a),Ub:(a,b)=>{if(!a?.nodeType)throw Error("element must be a DOM node when calling triggerEvent");a.dispatchEvent(new Event(b))},i:a=>c.T(a)?a():a,lb:(a,b)=>a.textContent=c.g.i(b)||""};c.v("utils",
c.g);c.v("unwrap",c.g.i);(()=>{let a=0,b="__ko__"+Date.now(),d=new WeakMap;c.g.j={get:(f,k)=>(d.get(f)||{})[k],set:(f,k,l)=>{d.has(f)?d.get(f)[k]=l:d.set(f,{[k]:l});return l},fb:function(f,k,l){return this.get(f,k)||this.set(f,k,l)},clear:f=>d.delete(f),Z:()=>a++ +b}})();c.g.L=(()=>{var a=c.g.j.Z(),b={1:1,8:1,9:1},d={1:1,9:1};const f=(e,g)=>{var h=c.g.j.get(e,a);g&&!h&&(h=new Set,c.g.j.set(e,a,h));return h},k=e=>{var g=f(e);g&&(new Set(g)).forEach(h=>h(e));c.g.j.clear(e);d[e.nodeType]&&l(e.childNodes,
!0)},l=(e,g)=>{for(var h=[],p,n=0;n<e.length;n++)if(!g||8===e[n].nodeType)if(k(h[h.length]=p=e[n]),e[n]!==p)for(;n--&&!h.includes(e[n]););};return{ma:(e,g)=>{if("function"!=typeof g)throw Error("Callback must be a function");f(e,1).add(g)},kb:(e,g)=>{var h=f(e);h&&(h.delete(g),h.size||c.g.j.set(e,a,null))},fa:e=>{c.u.N(()=>{b[e.nodeType]&&(k(e),d[e.nodeType]&&l(e.getElementsByTagName("*")))});return e},removeNode:e=>{c.fa(e);e.parentNode&&e.parentNode.removeChild(e)}}})();c.fa=c.g.L.fa;c.removeNode=
c.g.L.removeNode;c.v("utils.domNodeDisposal",c.g.L);c.v("utils.domNodeDisposal.addDisposeCallback",c.g.L.ma);c.eb={debounce:(a,b)=>a.Ja(d=>fa(d,b)),rateLimit:(a,b)=>{if("number"==typeof b)var d=b;else{d=b.timeout;var f=b.method}var k="function"==typeof f?f:ea;a.Ja(l=>k(l,d,b))},notify:(a,b)=>{a.pa="always"==b?null:P}};var da={undefined:1,"boolean":1,number:1,string:1};c.v("extenders",c.eb);class ka{constructor(a,b,d){this.X=a;this.pb=b;this.Da=d;this.Ra=!1;this.M=this.ia=null;c.ha(this,"dispose",
this.A)}A(){this.Ra||(this.M&&c.g.L.kb(this.ia,this.M),this.Ra=!0,this.Da(),this.X=this.pb=this.Da=this.ia=this.M=null)}o(a){this.ia=a;c.g.L.ma(a,this.M=this.A.bind(this))}}c.V=function(){Object.setPrototypeOf(this,D);D.Fa(this)};var D={Fa:a=>{a.W=new Map;a.W.set("change",new Set);a.ub=1},subscribe:function(a,b,d){var f=this;d=d||"change";var k=new ka(f,b?a.bind(b):a,()=>{f.W.get(d).delete(k);f.Sa?.(d)});f.Ua?.(d);f.W.has(d)||f.W.set(d,new Set);f.W.get(d).add(k);return k},D:function(a,b){b=b||"change";
"change"===b&&this.Na();if(this.ra(b)){b="change"===b&&this.Vb||new Set(this.W.get(b));try{c.u.zb(),b.forEach(d=>{d.Ra||d.pb(a)})}finally{c.u.end()}}},Ca:function(){return this.ub},hc:function(a){return this.Ca()!==a},Na:function(){++this.ub},Ja:function(a){var b=this,d=c.T(b),f,k,l,e,g;b.wa||(b.wa=b.D,b.D=(p,n)=>{n&&"change"!==n?"beforeChange"===n?b.rb(p):b.wa(p,n):b.sb(p)});var h=a(()=>{b.ja=!1;d&&e===b&&(e=b.qb?b.qb():b());var p=k||g&&b.Ha(l,e);g=k=f=!1;p&&b.wa(l=e)});b.sb=(p,n)=>{n&&b.ja||(g=
!n);b.Vb=new Set(b.W.get("change"));b.ja=f=!0;e=p;h()};b.rb=p=>{f||(l=p,b.wa(p,"beforeChange"))};b.tb=()=>{g=!0};b.Xb=()=>{b.Ha(l,b.J(!0))&&(k=!0)}},ra:function(a){return(this.W.get(a)||[]).size},Ha:function(a,b){return!this.pa||!this.pa(a,b)},toString:()=>"[object Object]",extend:function(a){var b=this;a&&c.g.R(a,(d,f)=>{d=c.eb[d];"function"==typeof d&&(b=d(b,f)||b)});return b}};c.ha(D,"init",D.Fa);c.ha(D,"subscribe",D.subscribe);c.ha(D,"extend",D.extend);c.V.fn=Object.setPrototypeOf(D,Function.prototype);
c.lc=a=>"function"==typeof a?.subscribe&&"function"==typeof a.D;(()=>{var a=[],b,d=0;c.u={zb:f=>{a.push(b);b=f},end:()=>b=a.pop(),Qb:f=>{if(b){if(!c.lc(f))throw Error("Only subscribable things can act as dependencies");b.Zb.call(b.$b,f,f.Wb||(f.Wb=++d))}},N:(f,k,l)=>{try{return a.push(b),b=void 0,f.apply(k,l||[])}finally{b=a.pop()}},qa:()=>b?.s.qa(),Ia:()=>b?.Ia,s:()=>b?.s}})();const B=Symbol("_latestValue");c.ba=a=>{function b(){if(0<arguments.length)return b.Ha(b[B],arguments[0])&&(b.ob(),b[B]=
arguments[0],b.Oa()),this;c.u.Qb(b);return b[B]}b[B]=a;Object.defineProperty(b,"length",{get:()=>null==b[B]?void 0:b[B].length});c.V.fn.Fa(b);return Object.setPrototypeOf(b,F)};var F={toJSON:function(){let a=this[B];return a?.toJSON?.()||a},pa:P,J:function(){return this[B]},Oa:function(){this.D(this[B],"spectate");this.D(this[B])},ob:function(){this.D(this[B],"beforeChange")}};Object.setPrototypeOf(F,c.V.fn);var G=c.ba.qc="__ko_proto__";F[G]=c.ba;c.T=a=>{if((a="function"==typeof a&&a[G])&&a!==F[G]&&
a!==c.s.fn[G])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};c.Kb=a=>"function"==typeof a&&(a[G]===F[G]||a[G]===c.s.fn[G]&&a.ic);c.v("observable",c.ba);c.v("isObservable",c.T);c.v("observable.fn",F);c.ha(F,"valueHasMutated",F.Oa);c.ta=a=>{a=a||[];if("object"!=typeof a||!("length"in a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return Object.setPrototypeOf(c.ba(a),
c.ta.fn).extend({trackArrayChanges:!0})};c.ta.fn=Object.setPrototypeOf({remove:function(a){for(var b=this.J(),d=!1,f="function"!=typeof a||c.T(a)?e=>e===a:a,k=b.length;k--;){var l=b[k];if(f(l)){if(b[k]!==l)throw Error("Array modified during remove; cannot remove item");d||this.ob();d=!0;b.splice(k,1)}}d&&this.Oa()}},c.ba.fn);Object.getOwnPropertyNames(Array.prototype).forEach(a=>{"function"===typeof Array.prototype[a]&&"constructor"!=a&&("copyWithin fill pop push reverse shift sort splice unshift".split(" ").includes(a)?
c.ta.fn[a]=function(...b){var d=this.J();this.ob();this.Bb(d,a,b);b=d[a](...b);this.Oa();return b===d?this:b}:c.ta.fn[a]=function(...b){return this()[a](...b)})});c.Jb=a=>c.T(a)&&"function"==typeof a.remove&&"function"==typeof a.push;c.v("observableArray",c.ta);c.v("isObservableArray",c.Jb);c.eb.trackArrayChanges=(a,b)=>{function d(){function m(){if(g){var r=[].concat(a.J()||[]);if(a.ra("arrayChange")){if(!k||1<g)k=c.g.Cb(h,r,a.Wa);var q=k}h=r;k=null;g=0;q?.length&&a.D(q,"arrayChange")}}f?m():(f=
!0,e=a.subscribe(()=>++g,null,"spectate"),h=[].concat(a.J()||[]),k=null,l=a.subscribe(m))}a.Wa={};"object"==typeof b&&c.g.extend(a.Wa,b);a.Wa.sparse=!0;if(!a.Bb){var f=!1,k=null,l,e,g=0,h,p=a.Ua,n=a.Sa;a.Ua=m=>{p?.call(a,m);"arrayChange"===m&&d()};a.Sa=m=>{n?.call(a,m);"arrayChange"!==m||a.ra("arrayChange")||(l?.A(),e?.A(),e=l=null,f=!1,h=void 0)};a.Bb=(m,r,q)=>{function t(A,x,I){return u[u.length]={status:A,value:x,index:I}}if(f&&!g){var u=[],v=m.length,w=q.length,z=0;switch(r){case "push":z=v;case "unshift":for(m=
0;m<w;m++)t("added",q[m],z+m);break;case "pop":z=v-1;case "shift":v&&t("deleted",m[z],z);break;case "splice":z=Math.min(Math.max(0,0>q[0]?v+q[0]:q[0]),v);v=1===w?v:Math.min(z+(q[1]||0),v);w=z+w-2;r=Math.max(v,w);for(var C=[],H=[],O=2;z<r;++z,++O)z<v&&H.push(t("deleted",m[z],z)),z<w&&C.push(t("added",q[O],z));c.g.Hb(H,C);break;default:return}k=u}}}};var y=Symbol("_state");c.s=(a,b)=>{function d(){if(0<arguments.length){if("function"!==typeof f)throw 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.");
f(...arguments);return this}k.$||c.u.Qb(d);(k.Y||k.C&&d.sa())&&d.U();return k.O}"object"===typeof a?b=a:(b=b||{},a&&(b.read=a));if("function"!=typeof b.read)throw Error("Pass a function that returns the value of the ko.computed");var f=b.write,k={O:void 0,aa:!0,Y:!0,Ga:!1,nb:!1,$:!1,jb:!1,C:!1,Pb:b.read,o:b.disposeWhenNodeIsRemoved||b.o||null,na:b.disposeWhen||b.na,ab:null,B:{},K:0,Gb:null};d[y]=k;d.ic="function"===typeof f;c.V.fn.Fa(d);Object.setPrototypeOf(d,J);b.pure&&(k.jb=!0,k.C=!0,c.g.extend(d,
la));k.o&&(k.nb=!0,k.o.nodeType||(k.o=null));k.C||d.U();k.o&&d.isActive()&&c.g.L.ma(k.o,k.ab=()=>{d.A()});return d};var J={pa:P,qa:function(){return this[y].K},ec:function(){var a=[];c.g.R(this[y].B,(b,d)=>a[d.ka]=d.X);return a},gb:function(a){if(!this[y].K)return!1;var b=this.ec();return b.includes(a)||!!b.find(d=>d.gb&&d.gb(a))},vb:function(a,b,d){if(this[y].jb&&b===this)throw Error("A 'pure' computed must not be called recursively");this[y].B[a]=d;d.ka=this[y].K++;d.la=b.Ca()},sa:function(){var a,
b=this[y].B;for(a in b)if(Object.prototype.hasOwnProperty.call(b,a)){var d=b[a];if(this.va&&d.X.ja||d.X.hc(d.la))return!0}},vc:function(){this[y].Ga||this.va?.(!1)},isActive:function(){var a=this[y];return a.Y||0<a.K},wc:function(){this.ja?this[y].Y&&(this[y].aa=!0):this.Fb()},Tb:function(a){return a.subscribe(this.Fb,this)},Fb:function(){var a=this,b=a.throttleEvaluation;0<=b?(clearTimeout(this[y].Gb),this[y].Gb=setTimeout(()=>a.U(!0),b)):a.va?a.va(!0):a.U(!0)},U:function(a){var b=this[y],d=b.na,
f=!1;if(!b.Ga&&!b.$){if(b.o&&!c.g.bb(b.o)||d?.()){if(!b.nb){this.A();return}}else b.nb=!1;try{b.Ga=!0,f=this.cc(a)}finally{b.Ga=!1}return f}},cc:function(a){var b=this[y],d=b.jb?void 0:!b.K;var f={ac:this,za:b.B,Za:b.K};c.u.zb({$b:f,Zb:ia,s:this,Ia:d});b.B={};b.K=0;a:{try{var k=b.Pb();break a}finally{c.u.end(),f.Za&&!b.C&&c.g.R(f.za,ha),b.aa=b.Y=!1}k=void 0}b.K?f=this.Ha(b.O,k):(this.A(),f=!0);f&&(b.C?this.Na():this.D(b.O,"beforeChange"),b.O=k,this.D(b.O,"spectate"),!b.C&&a&&this.D(b.O),this.tb&&
this.tb());d&&this.D(b.O,"awake");return f},J:function(a){var b=this[y];(b.Y&&(a||!b.K)||b.C&&this.sa())&&this.U();return b.O},Ja:function(a){var b=this;c.V.fn.Ja.call(b,a);b.qb=()=>{b[y].C||(b[y].aa?b.U():b[y].Y=!1);return b[y].O};b.va=d=>{b.rb(b[y].O);b[y].Y=!0;d&&(b[y].aa=!0);b.sb(b,!d)}},A:function(){var a=this[y];!a.C&&a.B&&c.g.R(a.B,(b,d)=>d.A?.());a.o&&a.ab&&c.g.L.kb(a.o,a.ab);a.B=void 0;a.K=0;a.$=!0;a.aa=!1;a.Y=!1;a.C=!1;a.o=void 0;a.na=void 0;a.Pb=void 0}},la={Ua:function(a){var b=this,d=
b[y];if(!d.$&&d.C&&"change"==a){d.C=!1;if(d.aa||b.sa())d.B=null,d.K=0,b.U()&&b.Na();else{var f=[];c.g.R(d.B,(k,l)=>f[l.ka]=k);f.forEach((k,l)=>{var e=d.B[k],g=b.Tb(e.X);g.ka=l;g.la=e.la;d.B[k]=g});b.sa()&&b.U()&&b.Na()}d.$||b.D(d.O,"awake")}},Sa:function(a){var b=this[y];b.$||"change"!=a||this.ra("change")||(c.g.R(b.B,(d,f)=>{f.A&&(b.B[d]={X:f.X,ka:f.ka,la:f.la},f.A())}),b.C=!0,this.D(void 0,"asleep"))},Ca:function(){var a=this[y];a.C&&(a.aa||this.sa())&&this.U();return c.V.fn.Ca.call(this)}};Object.setPrototypeOf(J,
c.V.fn);var S=c.ba.qc;J[S]=c.s;c.v("computed",c.s);c.v("isComputed",a=>"function"==typeof a&&a[S]===J[S]);c.v("computed.fn",J);c.ha(J,"dispose",J.A);c.Ob=a=>{if("function"===typeof a)return c.s(a,{pure:!0});a={...a,pure:!0};return c.s(a)};c.F={S:a=>{switch(a.nodeName){case "OPTION":return!0===a.__ko__hasDomDataOptionValue__?c.g.j.get(a,c.h.options.ib):a.value;case "SELECT":return 0<=a.selectedIndex?c.F.S(a.options[a.selectedIndex]):void 0;default:return a.value}},Pa:(a,b,d)=>{switch(a.nodeName){case "OPTION":"string"===
typeof b?(c.g.j.set(a,c.h.options.ib,void 0),delete a.__ko__hasDomDataOptionValue__,a.value=b):(c.g.j.set(a,c.h.options.ib,b),a.__ko__hasDomDataOptionValue__=!0,a.value="number"===typeof b?b:"");break;case "SELECT":for(var f=-1,k=""===b||null==b,l=a.options.length,e;l--;)if(e=c.F.S(a.options[l]),e==b||""===e&&k){f=l;break}if(d||0<=f||k&&1<a.size)a.selectedIndex=f;break;default:a.value=null==b?"":b}}};c.G=(()=>{var a=["true","false","null","undefined"],b=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
d=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,k={"in":1,"return":1,"typeof":1},l=g=>{g=c.g.Rb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var h=[],n=g.match(d),p=[],m=0;if(1<n.length){for(var r=0,q;q=n[r++];){var t=q.charCodeAt(0);if(44===t){if(0>=m){h.push(u&&p.length?{key:u,value:p.join("")}:{unknown:u||p.join("")});var u=m=
0;p=[];continue}}else if(58===t){if(!m&&!u&&1===p.length){u=p.pop();continue}}else if(47===t&&1<q.length&&(47===q.charCodeAt(1)||42===q.charCodeAt(1)))continue;else 47===t&&r&&1<q.length?(t=n[r-1].match(f))&&!k[t[0]]&&(g=g.slice(g.indexOf(q)+1),n=g.match(d),r=-1,q="/"):40===t||123===t||91===t?++m:41===t||125===t||93===t?--m:u||p.length||34!==t&&39!==t||(q=q.slice(1,-1));p.push(q)}if(0<m)throw Error("Unbalanced parentheses, braces, or brackets");}return h},e=new Set;return{Va:[],Ma:e,oc:l,pc:(g,h)=>
{var n=[],p=[],m=h?.valueAccessors,r=h?.bindingParams,q=(t,u)=>{if(!r){var w=c.h[t];if(w?.preprocess&&!(u=w.preprocess(u,t,q)))return;if(w=e.has(t)){var v=u;a.includes(v)?v=!1:(w=v.match(b),v=null===w?!1:w[1]?"Object("+w[1]+")"+w[2]:v);w=v}w&&p.push("'"+t+"':function(_z){"+v+"=_z}")}m&&(u="function(){return "+u+" }");n.push("'"+t+"':"+u)};("string"===typeof g?l(g):g).forEach(t=>q(t.key||t.unknown,t.value));p.length&&q("_ko_property_writers","{"+p.join(",")+" }");return n.join(",")},mc:(g,h)=>-1<g.findIndex(n=>
n.key==h),Qa:(g,h,n,p,m)=>{if(g&&c.T(g))!c.lc(g)||m&&g.R()===p||g(p);else h.get("_ko_property_writers")?.[n]?.(p)}}})();(()=>{function a(e){return 8==e.nodeType&&f.test(e.nodeValue)}function b(e){return 8==e.nodeType&&k.test(e.nodeValue)}function d(e,g){for(var h=e,n=1,p=[];h=h.nextSibling;){if(b(h)&&(c.g.j.set(h,l,!0),!--n))return p;p.push(h);a(h)&&++n}if(!g)throw Error("Cannot find closing comment tag to match: "+e.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/,k=/^\s*\/ko\s*$/,l="__ko_matchedEndComment__";
c.m={ca:{},childNodes:e=>a(e)?d(e):e.childNodes,oa:e=>{a(e)?(e=d(e))&&[...e].forEach(g=>c.removeNode(g)):c.g.cb(e)},ua:(e,g)=>{a(e)?(c.m.oa(e),e.after(...g)):c.g.ua(e,g)},prepend:(e,g)=>{a(e)?e.nextSibling.before(g):e.prepend(g)},jc:(e,g,h)=>{h?h.after(g):c.m.prepend(e,g)},firstChild:e=>{if(a(e))return e=e.nextSibling,!e||b(e)?null:e;let g=e.firstChild;if(g&&b(g))throw Error("Found invalid end comment, as the first child of "+e);return g},nextSibling:e=>{if(a(e)){var g=d(e,void 0);e=g?(g.length?g[g.length-
1]:e).nextSibling:null}if((g=e.nextSibling)&&b(g)){if(b(g)&&!c.g.j.get(g,l))throw Error("Found end comment without a matching opening comment, as child of "+e);return null}return g},ec:a,uc:e=>(e=e.nodeValue.match(f))?e[1]:null}})();const ba=new Map;c.Ab=new class{nc(a){switch(a.nodeType){case 1:return null!=a.getAttribute("data-bind");case 8:return c.m.ec(a)}return!1}cc(a,b){a:{switch(a.nodeType){case 1:var d=a.getAttribute("data-bind");break a;case 8:d=c.m.uc(a);break a}d=null}if(d)try{let k={valueAccessors:!0},
l=ba.get(d);if(!l){var f="with($context){with($data||{}){return{"+c.G.pc(d,k)+"}}}";l=new Function("$context","$element",f);ba.set(d,l)}return l(b,a)}catch(k){throw k.message="Unable to parse bindings.\nBindings value: "+d+"\nMessage: "+k.message,k;}return null}};const L=Symbol("_subscribable"),N=Symbol("_ancestorBindingInfo"),aa=Symbol("_dataDependency"),ca={},K=c.g.j.Z();c.h={};c.ea=class{constructor(a,b,d,f,k){var l=this,e=a===ca,g=e?void 0:a,h="function"==typeof g&&!c.T(g),n=k?.dataDependency;
a=()=>{var m=h?g():g,r=c.g.i(m);b?(c.g.extend(l,b),N in b&&(l[N]=b[N])):(l.$parents=[],l.$root=r,l.ko=c);l[L]=p;e?r=l.$data:(l.$rawData=m,l.$data=r);d&&(l[d]=r);f?.(l,b,r);if(b?.[L]&&!c.o.u().gb(b[L]))b[L]();n&&(l[aa]=n);return l.$data};if(k?.exportDependencies)a();else{var p=c.Nb(a);p.R();p.isActive()?p.pa=null:l[L]=void 0}}createChildContext(a,b,d,f){!f&&b&&"object"==typeof b&&(f=b,b=f.as,d=f.extend);return new c.ea(a,this,b,(k,l)=>{k.$parentContext=l;k.$parent=l.$data;k.$parents=(l.$parents||[]).slice(0);
k.$parents.unshift(k.$parent);d&&d(k)},f)}extend(a,b){return new c.ea(ca,this,null,d=>c.g.extend(d,"function"==typeof a?a(d):a),b)}};class ma{constructor(a,b,d){this.L=a;this.ia=b;this.xa=new Set;this.H=!1;b.I||c.g.K.ma(a,W);d?.I&&(d.I.xa.add(a),this.Da=d)}Mb(){this.Da?.I?.ac(this.L)}ac(a){this.xa.delete(a);this.xa.size||this.Db?.()}Db(){this.H=!0;this.ia.I&&!this.xa.size&&(this.ia.I=null,c.g.K.kb(this.L,W),c.l.notify(this.L,c.l.ga),this.Mb())}}c.l={H:"childrenComplete",ga:"descendantsComplete",subscribe:(a,
b,d,f,k)=>{var l=c.g.j.fb(a,K,{});l.Aa||(l.Aa=new c.V);k?.notifyImmediately&&l.hb[b]&&c.o.M(d,f,[a]);return l.Aa.subscribe(d,f,b)},notify:(a,b)=>{var d=c.g.j.get(a,K);if(d&&(d.hb[b]=!0,d.Aa?.D(a,b),b==c.l.H))if(d.I)d.I.Db();else if(void 0===d.I&&d.Aa?.ra(c.l.ga))throw Error("descendantsComplete event not supported for bindings on this node");},mb:(a,b)=>{var d=c.g.j.fb(a,K,{});d.I||(d.I=new ma(a,d,b[N]));return b[N]==d?b:b.extend(f=>{f[N]=d})}};c.tc=a=>(a=c.g.j.get(a,K))&&a.context;c.wb=(a,b,d)=>
d=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,k={"in":1,"return":1,"typeof":1},l=g=>{g=c.g.Sb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var h=[],p=g.match(d),n=[],m=0;if(1<p.length){for(var r=0,q;q=p[r++];){var t=q.charCodeAt(0);if(44===t){if(0>=m){h.push(u&&n.length?{key:u,value:n.join("")}:{unknown:u||n.join("")});var u=m=
0;n=[];continue}}else if(58===t){if(!m&&!u&&1===n.length){u=n.pop();continue}}else if(47===t&&1<q.length&&(47===q.charCodeAt(1)||42===q.charCodeAt(1)))continue;else 47===t&&r&&1<q.length?(t=p[r-1].match(f))&&!k[t[0]]&&(g=g.slice(g.indexOf(q)+1),p=g.match(d),r=-1,q="/"):40===t||123===t||91===t?++m:41===t||125===t||93===t?--m:u||n.length||34!==t&&39!==t||(q=q.slice(1,-1));n.push(q)}if(0<m)throw Error("Unbalanced parentheses, braces, or brackets");}return h},e=new Set;return{Va:[],Ma:e,oc:l,pc:(g,h)=>
{var p=[],n=[],m=h?.valueAccessors,r=h?.bindingParams,q=(t,u)=>{if(!r){var v=c.h[t];if(v?.preprocess&&!(u=v.preprocess(u,t,q)))return;if(v=e.has(t)){var w=u;a.includes(w)?w=!1:(v=w.match(b),w=null===v?!1:v[1]?"Object("+v[1]+")"+v[2]:w);v=w}v&&n.push("'"+t+"':function(_z){"+w+"=_z}")}m&&(u="function(){return "+u+" }");p.push("'"+t+"':"+u)};("string"===typeof g?l(g):g).forEach(t=>q(t.key||t.unknown,t.value));n.length&&q("_ko_property_writers","{"+n.join(",")+" }");return p.join(",")},mc:(g,h)=>-1<g.findIndex(p=>
p.key==h),Qa:(g,h,p,n,m)=>{if(g&&c.T(g))!c.Kb(g)||m&&g.J()===n||g(n);else h.get("_ko_property_writers")?.[p]?.(n)}}})();(()=>{function a(e){return 8==e.nodeType&&f.test(e.nodeValue)}function b(e){return 8==e.nodeType&&k.test(e.nodeValue)}function d(e,g){for(var h=e,p=1,n=[];h=h.nextSibling;){if(b(h)&&(c.g.j.set(h,l,!0),!--p))return n;n.push(h);a(h)&&++p}if(!g)throw Error("Cannot find closing comment tag to match: "+e.nodeValue);return null}var f=/^\s*ko(?:\s+([\s\S]+))?\s*$/,k=/^\s*\/ko\s*$/,l="__ko_matchedEndComment__";
c.m={ca:{},childNodes:e=>a(e)?d(e):e.childNodes,oa:e=>{a(e)?(e=d(e))&&[...e].forEach(g=>c.removeNode(g)):c.g.cb(e)},ua:(e,g)=>{a(e)?(c.m.oa(e),e.after(...g)):c.g.ua(e,g)},prepend:(e,g)=>{a(e)?e.nextSibling.before(g):e.prepend(g)},kc:(e,g,h)=>{h?h.after(g):c.m.prepend(e,g)},firstChild:e=>{if(a(e))return e=e.nextSibling,!e||b(e)?null:e;let g=e.firstChild;if(g&&b(g))throw Error("Found invalid end comment, as the first child of "+e);return g},nextSibling:e=>{if(a(e)){var g=d(e,void 0);e=g?(g.length?g[g.length-
1]:e).nextSibling:null}if((g=e.nextSibling)&&b(g)){if(b(g)&&!c.g.j.get(g,l))throw Error("Found end comment without a matching opening comment, as child of "+e);return null}return g},fc:a,uc:e=>(e=e.nodeValue.match(f))?e[1]:null}})();const ba=new Map;c.Ab=new class{nc(a){switch(a.nodeType){case 1:return null!=a.getAttribute("data-bind");case 8:return c.m.fc(a)}return!1}dc(a,b){a:{switch(a.nodeType){case 1:var d=a.getAttribute("data-bind");break a;case 8:d=c.m.uc(a);break a}d=null}if(d)try{let k={valueAccessors:!0},
l=ba.get(d);if(!l){var f="with($context){with($data||{}){return{"+c.G.pc(d,k)+"}}}";l=new Function("$context","$element",f);ba.set(d,l)}return l(b,a)}catch(k){throw k.message="Unable to parse bindings.\nBindings value: "+d+"\nMessage: "+k.message,k;}return null}};const L=Symbol("_subscribable"),N=Symbol("_ancestorBindingInfo"),aa=Symbol("_dataDependency"),ca={},K=c.g.j.Z();c.h={};c.ea=class{constructor(a,b,d,f,k){var l=this,e=a===ca,g=e?void 0:a,h="function"==typeof g&&!c.T(g),p=k?.dataDependency;
a=()=>{var m=h?g():g,r=c.g.i(m);b?(c.g.extend(l,b),N in b&&(l[N]=b[N])):(l.$parents=[],l.$root=r,l.ko=c);l[L]=n;e?r=l.$data:(l.$rawData=m,l.$data=r);d&&(l[d]=r);f?.(l,b,r);if(b?.[L]&&!c.u.s().gb(b[L]))b[L]();p&&(l[aa]=p);return l.$data};if(k?.exportDependencies)a();else{var n=c.Ob(a);n.J();n.isActive()?n.pa=null:l[L]=void 0}}createChildContext(a,b,d,f){!f&&b&&"object"==typeof b&&(f=b,b=f.as,d=f.extend);return new c.ea(a,this,b,(k,l)=>{k.$parentContext=l;k.$parent=l.$data;k.$parents=(l.$parents||[]).slice(0);
k.$parents.unshift(k.$parent);d&&d(k)},f)}extend(a,b){return new c.ea(ca,this,null,d=>c.g.extend(d,"function"==typeof a?a(d):a),b)}};class ma{constructor(a,b,d){this.M=a;this.ia=b;this.xa=new Set;this.H=!1;b.I||c.g.L.ma(a,W);d?.I&&(d.I.xa.add(a),this.Da=d)}Nb(){this.Da?.I?.bc(this.M)}bc(a){this.xa.delete(a);this.xa.size||this.Db?.()}Db(){this.H=!0;this.ia.I&&!this.xa.size&&(this.ia.I=null,c.g.L.kb(this.M,W),c.l.notify(this.M,c.l.ga),this.Nb())}}c.l={H:"childrenComplete",ga:"descendantsComplete",subscribe:(a,
b,d,f,k)=>{var l=c.g.j.fb(a,K,{});l.Aa||(l.Aa=new c.V);k?.notifyImmediately&&l.hb[b]&&c.u.N(d,f,[a]);return l.Aa.subscribe(d,f,b)},notify:(a,b)=>{var d=c.g.j.get(a,K);if(d&&(d.hb[b]=!0,d.Aa?.D(a,b),b==c.l.H))if(d.I)d.I.Db();else if(void 0===d.I&&d.Aa?.ra(c.l.ga))throw Error("descendantsComplete event not supported for bindings on this node");},mb:(a,b)=>{var d=c.g.j.fb(a,K,{});d.I||(d.I=new ma(a,d,b[N]));return b[N]==d?b:b.extend(f=>{f[N]=d})}};c.tc=a=>(a=c.g.j.get(a,K))&&a.context;c.wb=(a,b,d)=>
Z(a,b,Q(d));c.yb=(a,b)=>{1!==b.nodeType&&8!==b.nodeType||X(Q(a),b)};c.xb=function(a,b,d){if(2>arguments.length){if(b=M.body,!b)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?");}else if(!b||1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");Y(Q(a,d),b)};c.Eb=a=>(a=a&&[1,8].includes(a.nodeType)&&c.tc(a))?a.$data:void 0;c.v("bindingHandlers",c.h);c.v("applyBindings",
c.xb);c.v("applyBindingAccessorsToNode",c.wb);c.v("dataFor",c.Eb);(()=>{var a=Object.create(null),b=new Map;c.Xa={get:(l,e)=>{if(b.has(l))e(b.get(l));else{var g=a[l];g?g.subscribe(e):(g=a[l]=new c.V,g.subscribe(e),k(l,h=>{b.set(l,h);delete a[l];g.D(h)}))}},register:(l,e)=>{if(!e)throw Error("Invalid configuration for "+l);if(d[l])throw Error("Component "+l+" is already registered");d[l]=e}};var d=Object.create(null),f=(l,e)=>{throw Error(`Component '${l}': ${e}`);},k=(l,e)=>{var g={},h=d[l]||{},n=
h.template;h=h.viewModel;if(n){n.element||f(l,"Unknown template value: "+n);n=n.element;var p=M.getElementById(n);p||f(l,"Cannot find element with ID "+n);p.matches("TEMPLATE")||f(l,"Template Source Element not a <template>");g.template=c.g.ya(p.content.childNodes)}h&&("function"!==typeof h.createViewModel&&f(l,"Unknown viewModel value: "+h),g.createViewModel=h.createViewModel);e(g.template&&g.createViewModel?g:null)};c.v("components",c.Xa);c.v("components.register",c.Xa.register)})();(()=>{var a=
0;c.h.component={init:(b,d,f,k,l)=>{var e,g,h,n=()=>{var m=e&&e.dispose;"function"===typeof m&&m.call(e);h&&h.A();g=e=h=null},p=[...c.m.childNodes(b)];c.m.oa(b);c.g.K.ma(b,n);c.u(()=>{var m=c.g.i(d());if("string"!==typeof m){var r=c.g.i(m.params);m=c.g.i(m.name)}if(!m)throw Error("No component name specified");var q=c.l.mb(b,l),t=g=++a;c.Xa.get(m,u=>{if(g===t){n();if(!u)throw Error("Unknown component '"+m+"'");var w=u.template;if(!w)throw Error("Component '"+m+"' has no template");c.m.ua(b,c.g.ya(w));
e=u.createViewModel(r,{element:b,templateNodes:p});c.yb(q.createChildContext(e,{extend:v=>{v.$component=e;v.$componentTemplateNodes=p}}),b)}})},{s:b});return{controlsDescendantBindings:!0}}};c.m.ca.component=!0})();c.h.attr={update:(a,b)=>{b=c.g.i(b())||{};c.g.P(b,function(d,f){f=c.g.i(f);var k=d.indexOf(":");k="lookupNamespaceURI"in a&&0<k&&a.lookupNamespaceURI(d.slice(0,k));var l=!1===f||null==f;l?k?a.removeAttributeNS(k,d):a.removeAttribute(d):(f=f.toString(),k?a.setAttributeNS(k,d,f):a.setAttribute(d,
f));"name"===d&&(a.name=l?"":f)})}};(()=>{c.h.checked={after:["value","attr"],init:function(a,b,d){var f="checkbox"==a.type,k="radio"==a.type;if(f||k){const l=c.Nb(()=>{if(k)return d.has("value")?c.g.i(d.get("value")):a.value});a.addEventListener("click",()=>{if(!c.o.Ia()){var e=a.checked;if(e||!k&&!c.o.qa()){e=f?e:l();var g=c.o.M(b);c.G.Qa(g,d,"checked",e,!0)}}});c.u(()=>{var e=c.g.i(b());a.checked=f?!!e:l()===e},null,{s:a})}}};c.G.Ma.checked=!0})();var T=(a,b,d)=>b&&b.split(/\s+/).forEach(f=>a.classList.toggle(f,
d));c.h.css={update:(a,b)=>{b=c.g.i(b());"object"==typeof b?c.g.P(b,(d,f)=>{f=c.g.i(f);T(a,d,!!f)}):(b=c.g.Rb(b),T(a,a.__ko__cssValue,!1),a.__ko__cssValue=b,T(a,b,!0))}};c.h.enable={update:(a,b)=>{(b=c.g.i(b()))&&a.disabled?a.removeAttribute("disabled"):b||a.disabled||(a.disabled=!0)}};c.h.disable={update:(a,b)=>c.h.enable.update(a,()=>!c.g.i(b()))};c.h.event={init:(a,b,d,f,k)=>{c.g.P(b()||{},l=>{"string"==typeof l&&a.addEventListener(l,(...e)=>{var g=b()[l];if(g)try{f=k.$data;var h=g.apply(f,[f,
...e])}finally{!0!==h&&e[0].preventDefault()}})})}};c.h.foreach={Kb:a=>()=>{var b=a(),d=c.T(b)?b.R():b;if(!d||"number"==typeof d.length)return{foreach:b};c.g.i(b);return{foreach:d.data,as:d.as,beforeRemove:d.beforeRemove}},init:(a,b)=>c.h.template.init(a,c.h.foreach.Kb(b)),update:(a,b,d,f,k)=>c.h.template.update(a,c.h.foreach.Kb(b),d,f,k)};c.G.Va.foreach=!1;c.m.ca.foreach=!0;c.h.hasfocus={init:(a,b,d)=>{var f=l=>{a.__ko_hasfocusUpdating=!0;l=a.ownerDocument.activeElement===a;c.G.Qa(b(),d,"hasfocus",
c.xb);c.v("applyBindingAccessorsToNode",c.wb);c.v("dataFor",c.Eb);(()=>{var a=Object.create(null),b=new Map;c.Xa={get:(l,e)=>{if(b.has(l))e(b.get(l));else{var g=a[l];g?g.subscribe(e):(g=a[l]=new c.V,g.subscribe(e),k(l,h=>{b.set(l,h);delete a[l];g.D(h)}))}},register:(l,e)=>{if(!e)throw Error("Invalid configuration for "+l);if(d[l])throw Error("Component "+l+" is already registered");d[l]=e}};var d=Object.create(null),f=(l,e)=>{throw Error(`Component '${l}': ${e}`);},k=(l,e)=>{var g={},h=d[l]||{},p=
h.template;h=h.viewModel;if(p){p.element||f(l,"Unknown template value: "+p);p=p.element;var n=M.getElementById(p);n||f(l,"Cannot find element with ID "+p);n.matches("TEMPLATE")||f(l,"Template Source Element not a <template>");g.template=c.g.ya(n.content.childNodes)}h&&("function"!==typeof h.createViewModel&&f(l,"Unknown viewModel value: "+h),g.createViewModel=h.createViewModel);e(g.template&&g.createViewModel?g:null)};c.v("components",c.Xa);c.v("components.register",c.Xa.register)})();(()=>{var a=
0;c.h.component={init:(b,d,f,k,l)=>{var e,g,h,p=()=>{var m=e&&e.dispose;"function"===typeof m&&m.call(e);h&&h.A();g=e=h=null},n=[...c.m.childNodes(b)];c.m.oa(b);c.g.L.ma(b,p);c.s(()=>{var m=c.g.i(d());if("string"!==typeof m){var r=c.g.i(m.params);m=c.g.i(m.name)}if(!m)throw Error("No component name specified");var q=c.l.mb(b,l),t=g=++a;c.Xa.get(m,u=>{if(g===t){p();if(!u)throw Error("Unknown component '"+m+"'");var v=u.template;if(!v)throw Error("Component '"+m+"' has no template");c.m.ua(b,c.g.ya(v));
e=u.createViewModel(r,{element:b,templateNodes:n});c.yb(q.createChildContext(e,{extend:w=>{w.$component=e;w.$componentTemplateNodes=n}}),b)}})},{o:b});return{controlsDescendantBindings:!0}}};c.m.ca.component=!0})();c.h.attr={update:(a,b)=>{b=c.g.i(b())||{};c.g.R(b,function(d,f){f=c.g.i(f);var k=d.indexOf(":");k="lookupNamespaceURI"in a&&0<k&&a.lookupNamespaceURI(d.slice(0,k));var l=!1===f||null==f;l?k?a.removeAttributeNS(k,d):a.removeAttribute(d):(f=f.toString(),k?a.setAttributeNS(k,d,f):a.setAttribute(d,
f));"name"===d&&(a.name=l?"":f)})}};(()=>{c.h.checked={after:["value","attr"],init:function(a,b,d){var f="checkbox"==a.type,k="radio"==a.type;if(f||k){const m=c.Ob(()=>{if(d.has("checkedValue"))return c.g.i(d.get("checkedValue"));if(p)return d.has("value")?c.g.i(d.get("value")):a.value});var l=()=>{if(!c.u.Ia()){var r=a.checked,q=m();if(r||!k&&!c.u.qa()){var t=c.u.N(b);if(g){var u=h?t.J():t,v=n;n=q;v!==q?r&&(u.push(q),u.remove(v)):r?u.push(q):u.remove(q);h&&c.Kb(t)&&t(u)}else f&&(void 0===q?q=r:r||
(q=void 0)),c.G.Qa(t,d,"checked",q,!0)}}},e=b(),g=f&&c.g.i(e)instanceof Array,h=!(g&&e.push&&e.splice),p=k||g,n=g?m():void 0;k&&!a.name&&c.h.uniqueName.init(a,function(){return!0});c.s(l,null,{o:a});a.addEventListener("click",l);c.s(()=>{var r=c.g.i(b()),q=m();g?(a.checked=r.includes(q),n=q):a.checked=f&&void 0===q?!!r:m()===r},null,{o:a});e=void 0}}};c.G.Ma.checked=!0;c.h.checkedValue={update:function(a,b){a.value=c.g.i(b())}}})();var T=(a,b,d)=>b&&b.split(/\s+/).forEach(f=>a.classList.toggle(f,
d));c.h.css={update:(a,b)=>{b=c.g.i(b());"object"==typeof b?c.g.R(b,(d,f)=>{f=c.g.i(f);T(a,d,!!f)}):(b=c.g.Sb(b),T(a,a.__ko__cssValue,!1),a.__ko__cssValue=b,T(a,b,!0))}};c.h.enable={update:(a,b)=>{(b=c.g.i(b()))&&a.disabled?a.removeAttribute("disabled"):b||a.disabled||(a.disabled=!0)}};c.h.disable={update:(a,b)=>c.h.enable.update(a,()=>!c.g.i(b()))};c.h.event={init:(a,b,d,f,k)=>{c.g.R(b()||{},l=>{"string"==typeof l&&a.addEventListener(l,(...e)=>{var g=b()[l];if(g)try{f=k.$data;var h=g.apply(f,[f,
...e])}finally{!0!==h&&e[0].preventDefault()}})})}};c.h.foreach={Lb:a=>()=>{var b=a(),d=c.T(b)?b.J():b;if(!d||"number"==typeof d.length)return{foreach:b};c.g.i(b);return{foreach:d.data,as:d.as,beforeRemove:d.beforeRemove}},init:(a,b)=>c.h.template.init(a,c.h.foreach.Lb(b)),update:(a,b,d,f,k)=>c.h.template.update(a,c.h.foreach.Lb(b),d,f,k)};c.G.Va.foreach=!1;c.m.ca.foreach=!0;c.h.hasfocus={init:(a,b,d)=>{var f=l=>{a.__ko_hasfocusUpdating=!0;l=a.ownerDocument.activeElement===a;c.G.Qa(b(),d,"hasfocus",
l,!0);a.__ko_hasfocusLastValue=l;a.__ko_hasfocusUpdating=!1},k=f.bind(null,!0);f=f.bind(null,!1);a.addEventListener("focus",k);a.addEventListener("focusin",k);a.addEventListener("blur",f);a.addEventListener("focusout",f);a.__ko_hasfocusLastValue=!1},update:(a,b)=>{b=!!c.g.i(b());a.__ko_hasfocusUpdating||a.__ko_hasfocusLastValue===b||(b?a.focus():a.blur())}};c.G.Ma.add("hasfocus");c.h.html={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{c.g.cb(a);b=c.g.i(b());if(null!=b){const d=M.createElement("template");
d.innerHTML="string"!=typeof b?b.toString():b;a.appendChild(d.content)}}};(()=>{function a(b,d,f){c.h[b]={init:(k,l,e,g,h)=>{var n,p={};d&&(p={as:e.get("as"),exportDependencies:!0});var m=e.has(c.l.ga);c.u(()=>{var r=c.g.i(l()),q=!f!==!r,t=!n;m&&(h=c.l.mb(k,h));if(q){p.dataDependency=c.o.u();var u=d?h.createChildContext("function"==typeof r?r:l,p):c.o.qa()?h.extend(null,p):h}t&&c.o.qa()&&(n=c.g.ya(c.m.childNodes(k),!0));q?(t||c.m.ua(k,c.g.ya(n)),c.yb(u,k)):(c.m.oa(k),c.l.notify(k,c.l.H))},{s:k});
return{controlsDescendantBindings:!0}}};c.G.Va[b]=!1;c.m.ca[b]=!0}a("if");a("ifnot",!1,!0);a("with",!0)})();var U={};c.h.options={init:a=>{if(!a.matches("SELECT"))throw Error("options binding applies only to SELECT elements");let b=a.length;for(;b--;)a.remove(b);return{controlsDescendantBindings:!0}},update:(a,b,d)=>{var f=a.multiple,k=0!=a.length&&f?a.scrollTop:null,l=c.g.i(b()),e=d.get("valueAllowUnset")&&d.has("value"),g={},h=[];b=()=>Array.from(a.options).filter(q=>q.selected);var n=(q,t,u)=>
{var w=typeof t;return"function"==w?t(q):"string"==w?q[t]:u},p=(q,t)=>{r&&e?c.l.notify(a,c.l.H):h.length&&(q=h.includes(c.F.S(t[0])),t[0].selected=q,r&&!q&&c.o.M(c.g.Tb,null,[a,"change"]))};e||(f?h=b().map(c.F.S):0<=a.selectedIndex&&h.push(c.F.S(a.options[a.selectedIndex])));if(l){"undefined"==typeof l.length&&(l=[l]);var m=l.filter(q=>q||null==q);d.has("optionsCaption")&&(l=c.g.i(d.get("optionsCaption")),null!=l&&m.unshift(U))}var r=!1;g.beforeRemove=q=>a.removeChild(q);l=p;d.has("optionsAfterRender")&&
"function"==typeof d.get("optionsAfterRender")&&(l=(q,t)=>{p(q,t);c.o.M(d.get("optionsAfterRender"),null,[t[0],q!==U?q:void 0])});c.g.Qb(a,m,(q,t,u)=>{u.length&&(h=!e&&u[0].selected?[c.F.S(u[0])]:[],r=!0);t=a.ownerDocument.createElement("option");q===U?(c.g.lb(t,d.get("optionsCaption")),c.F.Pa(t,void 0)):(u=n(q,d.get("optionsValue"),q),c.F.Pa(t,c.g.i(u)),q=n(q,d.get("optionsText"),u),c.g.lb(t,q));return[t]},g,l);e||(m=h.length,(f?m&&b().length<m:m&&0<=a.selectedIndex?c.F.S(a.options[a.selectedIndex])!==
h[0]:m||0<=a.selectedIndex)&&c.o.M(c.g.Tb,null,[a,"change"]));(e||c.o.Ia())&&c.l.notify(a,c.l.H);k&&20<Math.abs(k-a.scrollTop)&&(a.scrollTop=k)}};c.h.options.ib=c.g.j.Z();c.h.style={update:(a,b)=>{c.g.P(c.g.i(b()||{}),(d,f)=>{f=c.g.i(f);if(null==f||!1===f)f="";if(/^--/.test(d))a.style.setProperty(d,f);else{d=d.replace(/-(\w)/g,(l,e)=>e.toUpperCase());var k=a.style[d];a.style[d]=f;f===k||a.style[d]!=k||isNaN(f)||(a.style[d]=f+"px")}})}};c.h.submit={init:(a,b,d,f,k)=>{if("function"!=typeof b())throw Error("The value for a submit binding must be a function");
d.innerHTML="string"!=typeof b?b.toString():b;a.appendChild(d.content)}}};(()=>{function a(b,d,f){c.h[b]={init:(k,l,e,g,h)=>{var p,n={};d&&(n={as:e.get("as"),exportDependencies:!0});var m=e.has(c.l.ga);c.s(()=>{var r=c.g.i(l()),q=!f!==!r,t=!p;m&&(h=c.l.mb(k,h));if(q){n.dataDependency=c.u.s();var u=d?h.createChildContext("function"==typeof r?r:l,n):c.u.qa()?h.extend(null,n):h}t&&c.u.qa()&&(p=c.g.ya(c.m.childNodes(k),!0));q?(t||c.m.ua(k,c.g.ya(p)),c.yb(u,k)):(c.m.oa(k),c.l.notify(k,c.l.H))},{o:k});
return{controlsDescendantBindings:!0}}};c.G.Va[b]=!1;c.m.ca[b]=!0}a("if");a("ifnot",!1,!0);a("with",!0)})();var U={};c.h.options={init:a=>{if(!a.matches("SELECT"))throw Error("options binding applies only to SELECT elements");let b=a.length;for(;b--;)a.remove(b);return{controlsDescendantBindings:!0}},update:(a,b,d)=>{var f=a.multiple,k=0!=a.length&&f?a.scrollTop:null,l=c.g.i(b()),e=d.get("valueAllowUnset")&&d.has("value"),g={},h=[];b=()=>Array.from(a.options).filter(q=>q.selected);var p=(q,t,u)=>
{var v=typeof t;return"function"==v?t(q):"string"==v?q[t]:u},n=(q,t)=>{r&&e?c.l.notify(a,c.l.H):h.length&&(q=h.includes(c.F.S(t[0])),t[0].selected=q,r&&!q&&c.u.N(c.g.Ub,null,[a,"change"]))};e||(f?h=b().map(c.F.S):0<=a.selectedIndex&&h.push(c.F.S(a.options[a.selectedIndex])));if(l){"undefined"==typeof l.length&&(l=[l]);var m=l.filter(q=>q||null==q);d.has("optionsCaption")&&(l=c.g.i(d.get("optionsCaption")),null!=l&&m.unshift(U))}var r=!1;g.beforeRemove=q=>a.removeChild(q);l=n;d.has("optionsAfterRender")&&
"function"==typeof d.get("optionsAfterRender")&&(l=(q,t)=>{n(q,t);c.u.N(d.get("optionsAfterRender"),null,[t[0],q!==U?q:void 0])});c.g.Rb(a,m,(q,t,u)=>{u.length&&(h=!e&&u[0].selected?[c.F.S(u[0])]:[],r=!0);t=a.ownerDocument.createElement("option");q===U?(c.g.lb(t,d.get("optionsCaption")),c.F.Pa(t,void 0)):(u=p(q,d.get("optionsValue"),q),c.F.Pa(t,c.g.i(u)),q=p(q,d.get("optionsText"),u),c.g.lb(t,q));return[t]},g,l);e||(m=h.length,(f?m&&b().length<m:m&&0<=a.selectedIndex?c.F.S(a.options[a.selectedIndex])!==
h[0]:m||0<=a.selectedIndex)&&c.u.N(c.g.Ub,null,[a,"change"]));(e||c.u.Ia())&&c.l.notify(a,c.l.H);k&&20<Math.abs(k-a.scrollTop)&&(a.scrollTop=k)}};c.h.options.ib=c.g.j.Z();c.h.style={update:(a,b)=>{c.g.R(c.g.i(b()||{}),(d,f)=>{f=c.g.i(f);if(null==f||!1===f)f="";if(/^--/.test(d))a.style.setProperty(d,f);else{d=d.replace(/-(\w)/g,(l,e)=>e.toUpperCase());var k=a.style[d];a.style[d]=f;f===k||a.style[d]!=k||isNaN(f)||(a.style[d]=f+"px")}})}};c.h.submit={init:(a,b,d,f,k)=>{if("function"!=typeof b())throw Error("The value for a submit binding must be a function");
a.addEventListener("submit",l=>{var e=b();try{var g=e.call(k.$data,a)}finally{!0!==g&&l.preventDefault()}})}};c.h.text={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{8===a.nodeType&&(a.text||a.after(a.text=M.createTextNode("")),a=a.text);c.g.lb(a,b())}};c.m.ca.text=!0;c.h.textInput={init:(a,b,d)=>{var f=a.value,k,l,e=()=>{clearTimeout(k);l=k=void 0;var h=a.value;f!==h&&(f=h,c.G.Qa(b(),d,"textInput",h))},g=()=>{var h=c.g.i(b());null==h&&(h="");void 0!==l&&h===l?setTimeout(g,4):a.value!==
h&&(a.value=h,f=a.value)};a.addEventListener("input",e);a.addEventListener("change",e);a.addEventListener("blur",e);c.u(g,{s:a})}};c.G.Ma.add("textInput");c.h.textinput={preprocess:(a,b,d)=>d("textInput",a)};c.h.value={init:(a,b,d)=>{var f=a.matches("SELECT"),k=a.matches("INPUT");if(!k||"checkbox"!=a.type&&"radio"!=a.type){var l=new Set,e=d.get("valueUpdate"),g=null,h=()=>{g=null;var m=b(),r=c.F.S(a);c.G.Qa(m,d,"value",r)};e&&("string"==typeof e?l.add(e):e.forEach(m=>l.add(m)),l.delete("change"));
l.forEach(m=>{var r=h;(m||"").startsWith("after")&&(r=()=>{g=c.F.S(a);setTimeout(h,0)},m=m.slice(5));a.addEventListener(m,r)});var n=k&&"file"==a.type?()=>{var m=c.g.i(b());null==m||""===m?a.value="":c.o.M(h)}:()=>{var m=c.g.i(b()),r=c.F.S(a);if(null!==g&&m===g)setTimeout(n,0);else if(m!==r||void 0===r)f?(r=d.get("valueAllowUnset"),c.F.Pa(a,m,r),r||m===c.F.S(a)||c.o.M(h)):c.F.Pa(a,m)};if(f){var p;c.l.subscribe(a,c.l.H,()=>{p?d.get("valueAllowUnset")?n():h():(a.addEventListener("change",h),p=c.u(n,
{s:a}))},null,{notifyImmediately:!0})}else a.addEventListener("change",h),c.u(n,{s:a})}else c.wb(a,{checkedValue:b})},update:()=>{}};c.G.Ma.add("value");c.h.visible={update:(a,b)=>{b=c.g.i(b());var d="none"!=a.style.display;b&&!d?a.style.display="":d&&!b&&(a.style.display="none")}};c.h.hidden={update:(a,b)=>a.hidden=!!c.g.i(b())};(function(a){c.h[a]={init:function(b,d,f,k,l){return c.h.event.init.call(this,b,()=>({[a]:d()}),f,k,l)}}})("click");(()=>{let a=c.g.j.Z();class b{constructor(f){this.$a=
f}Ka(...f){let k=this.$a;if(!f.length)return c.g.j.get(k,a)||(11===this.L?k.content:1===this.L?k:void 0);c.g.j.set(k,a,f[0])}}class d extends b{constructor(f){super(f);f&&(this.L=f.matches("TEMPLATE")&&f.content?f.content.nodeType:1)}}c.La={$a:d,Ta:b}})();(()=>{var a=(e,g,h)=>{var n;for(g=c.m.nextSibling(g);e&&(n=e)!==g;)e=c.m.nextSibling(n),h(n,e)},b=(e,g)=>{if(e.length){var h=e[0],n=h.parentNode;a(h,e[e.length-1],p=>{1!==p.nodeType&&8!==p.nodeType||c.xb(g,p)});c.g.Ba(e,n)}},d=(e,g,h,n)=>{var p=
(e&&(e.nodeType?e:0<e.length?e[0]:null)||h||{}).ownerDocument;if("string"==typeof h){p=p||M;p=p.getElementById(h);if(!p)throw Error("Cannot find template with ID "+h);h=new c.La.$a(p)}else if([1,8].includes(h.nodeType))h=new c.La.Ta(h);else throw Error("Unknown template type: "+h);h=(h=h.Ka?h.Ka():null)?[...h.cloneNode(!0).childNodes]:null;if("number"!=typeof h.length||0<h.length&&"number"!=typeof h[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(g){case "replaceChildren":c.m.ua(e,
h);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+g);}p&&(b(h,n),"replaceChildren"==g&&c.l.notify(e,c.l.H));return h},f=(e,g,h)=>c.T(e)?e():"function"===typeof e?e(g,h):e;c.rc=function(e,g,h,n){h=h||{};var p=p||"replaceChildren";if(n){var m=n.nodeType?n:0<n.length?n[0]:null;return c.u(()=>{var r=g instanceof c.ea?g:new c.ea(g,null,null,null,{exportDependencies:!0}),q=f(e,r.$data,r);d(n,p,q,r,h)},{na:()=>!m||!c.g.bb(m),s:m})}console.log("no targetNodeOrNodeArray")};
c.sc=(e,g,h,n,p)=>{function m(v,z){c.o.M(c.g.Qb,null,[n,v,t,h,u,z]);c.l.notify(n,c.l.H)}var r,q=h.as,t=(v,z)=>{r=p.createChildContext(v,{as:q,extend:C=>{C.$index=z;q&&(C[q+"Index"]=z)}});v=f(e,v,r);return d(n,"ignoreTargetNode",v,r,h)},u=(v,z)=>{b(z,r);r=null};if(!h.beforeRemove&&c.Jb(g)){m(g.R());var w=g.subscribe(v=>{m(g(),v)},null,"arrayChange");w.s(n);return w}return c.u(()=>{var v=c.g.i(g)||[];"undefined"==typeof v.length&&(v=[v]);m(v)},{s:n})};var k=c.g.j.Z(),l=c.g.j.Z();c.h.template={init:(e,
g)=>{g=c.g.i(g());if("string"==typeof g||"name"in g)c.m.oa(e);else if("nodes"in g){g=g.nodes||[];if(c.T(g))throw Error('The "nodes" option must be a plain, non-observable array.');let h=g[0]?.parentNode;h&&c.g.j.get(h,l)||(h=c.g.Lb(g),c.g.j.set(h,l,!0));(new c.La.Ta(e)).Ka(h)}else if(g=c.m.childNodes(e),g.length)g=c.g.Lb(g),(new c.La.Ta(e)).Ka(g);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:(e,g,h,n,p)=>{var m=g();
g=c.g.i(m);h=!0;n=null;"string"==typeof g?g={}:(m="name"in g?g.name:e,"if"in g&&(h=c.g.i(g["if"])),h&&"ifnot"in g&&(h=!c.g.i(g.ifnot)),h&&!m&&(h=!1));"foreach"in g?n=c.sc(m,h&&g.foreach||[],g,e,p):h?(h=p,"data"in g&&(h=p.createChildContext(g.data,{as:g.as,exportDependencies:!0})),n=c.rc(m,h,g,e)):c.m.oa(e);p=n;c.g.j.get(e,k)?.A?.();c.g.j.set(e,k,!p||p.isActive&&!p.isActive()?void 0:p)}};c.G.Va.template=e=>{e=c.G.oc(e);return 1==e.length&&e[0].unknown||c.G.mc(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"};
c.m.ca.template=!0})();c.g.Hb=(a,b,d)=>{var f=0,k,l=b.length;l&&a.every(e=>{k=b.findIndex(g=>e.value===g.value);0<=k&&(e.moved=b[k].index,b[k].moved=e.index,b.splice(k,1),f=k=0,--l);f+=l;return l&&(!d||f<d)})};c.g.Cb=(()=>{var a=(b,d,f,k,l)=>{for(var e=Math.min,g=Math.max,h=[],n=-1,p=b.length,m,r=d.length,q=r-p||1,t=p+r+1,u,w,v;++n<=p;)for(w=u,h.push(u=[]),v=e(r,n+q),m=g(0,n-1);m<=v;m++)u[m]=m?n?b[n-1]===d[m-1]?w[m-1]:e(w[m]||t,u[m-1]||t)+1:m+1:n+1;e=[];g=[];q=[];n=p;for(m=r;n||m;)r=h[n][m]-1,m&&
r===h[n][m-1]?g.push(e[e.length]={status:f,value:d[--m],index:m}):n&&r===h[n-1][m]?q.push(e[e.length]={status:k,value:b[--n],index:n}):(--m,--n,l.sparse||e.push({status:"retained",value:d[m]}));c.g.Hb(q,g,!l.dontLimitMoves&&10*p);return e.reverse()};return(b,d,f)=>{f="boolean"===typeof f?{dontLimitMoves:f}:f||{};b=b||[];d=d||[];return b.length<d.length?a(b,d,"added","deleted",f):a(d,b,"deleted","added",f)}})();(()=>{function a(f,k,l,e,g){var h=[],n=c.u(()=>{var p=k(l,g,c.g.Ba(h,f))||[];if(0<h.length){var m=
h.nodeType?[h]:h;if(0<m.length){var r=m[0],q=r.parentNode;p.forEach(t=>q.insertBefore(t,r));m.forEach(t=>c.removeNode(t))}e&&c.o.M(e,null,[l,p,g])}h.length=0;h.push(...p)},{s:f,na:()=>!!h.find(c.g.bb)});return{O:h,Ya:n.isActive()?n:void 0}}var b=c.g.j.Z(),d=c.g.j.Z();c.g.Qb=(f,k,l,e,g,h)=>{k=k||[];"undefined"==typeof k.length&&(k=[k]);e=e||{};var n=c.g.j.get(f,b),p=[],m=0,r=0,q=[],t=[],u=[],w=0,v=x=>{A={da:x,Ea:c.ba(r++)};p.push(A)},z=x=>{A=n[x];A.Ea(r++);c.g.Ba(A.O,f);p.push(A)};if(n){if(!h||n&&
n._countWaitingForRemove)h=c.g.Cb(Array.prototype.map.call(n,E=>E.da),k,{dontLimitMoves:e.dontLimitMoves,sparse:!0});let x,I;for(h.forEach(E=>{x=E.moved;I=E.index;switch(E.status){case "deleted":for(;m<I;)z(m++);void 0===x&&(A=n[m],A.Ya&&(A.Ya.A(),A.Ya=void 0),c.g.Ba(A.O,f).length&&(e.beforeRemove&&(p.push(A),w++,A.da===d?A=null:u[A.Ea.R()]=A),A&&q.push.apply(q,A.O)));m++;break;case "added":for(;r<I;)z(m++);void 0!==x?(t.push(p.length),z(x)):v(E.value)}});r<k.length;)z(m++);p._countWaitingForRemove=
w}else k.forEach(v);c.g.j.set(f,b,p);q.forEach(e.beforeRemove?c.fa:c.removeNode);var C,H,O=x=>{c.m.jc(f,x,H);H=x};h=f.ownerDocument.activeElement;if(t.length)for(;void 0!=(C=t.shift());){var A=p[C];for(H=void 0;C;)if(k=p[--C].O,k?.length){H=k[k.length-1];break}A.O.forEach(O)}p.forEach(x=>{x.O||c.g.extend(x,a(f,l,x.da,g,x.Ea));x.O.forEach(O);!x.ic&&g&&(g(x.da,x.O,x.Ea),x.ic=!0,H=x.O[x.O.length-1])});f.ownerDocument.activeElement!=h&&h?.focus();((x,I)=>{x&&I.forEach(E=>E?.O.forEach(na=>x(na,C,E.da)))})(e.beforeRemove,
h&&(a.value=h,f=a.value)};a.addEventListener("input",e);a.addEventListener("change",e);a.addEventListener("blur",e);c.s(g,{o:a})}};c.G.Ma.add("textInput");c.h.textinput={preprocess:(a,b,d)=>d("textInput",a)};c.h.value={init:(a,b,d)=>{var f=a.matches("SELECT"),k=a.matches("INPUT");if(!k||"checkbox"!=a.type&&"radio"!=a.type){var l=new Set,e=d.get("valueUpdate"),g=null,h=()=>{g=null;var m=b(),r=c.F.S(a);c.G.Qa(m,d,"value",r)};e&&("string"==typeof e?l.add(e):e.forEach(m=>l.add(m)),l.delete("change"));
l.forEach(m=>{var r=h;(m||"").startsWith("after")&&(r=()=>{g=c.F.S(a);setTimeout(h,0)},m=m.slice(5));a.addEventListener(m,r)});var p=k&&"file"==a.type?()=>{var m=c.g.i(b());null==m||""===m?a.value="":c.u.N(h)}:()=>{var m=c.g.i(b()),r=c.F.S(a);if(null!==g&&m===g)setTimeout(p,0);else if(m!==r||void 0===r)f?(r=d.get("valueAllowUnset"),c.F.Pa(a,m,r),r||m===c.F.S(a)||c.u.N(h)):c.F.Pa(a,m)};if(f){var n;c.l.subscribe(a,c.l.H,()=>{n?d.get("valueAllowUnset")?p():h():(a.addEventListener("change",h),n=c.s(p,
{o:a}))},null,{notifyImmediately:!0})}else a.addEventListener("change",h),c.s(p,{o:a})}else c.wb(a,{checkedValue:b})},update:()=>{}};c.G.Ma.add("value");c.h.visible={update:(a,b)=>{b=c.g.i(b());var d="none"!=a.style.display;b&&!d?a.style.display="":d&&!b&&(a.style.display="none")}};c.h.hidden={update:(a,b)=>a.hidden=!!c.g.i(b())};(function(a){c.h[a]={init:function(b,d,f,k,l){return c.h.event.init.call(this,b,()=>({[a]:d()}),f,k,l)}}})("click");(()=>{let a=c.g.j.Z();class b{constructor(f){this.$a=
f}Ka(...f){let k=this.$a;if(!f.length)return c.g.j.get(k,a)||(11===this.M?k.content:1===this.M?k:void 0);c.g.j.set(k,a,f[0])}}class d extends b{constructor(f){super(f);f&&(this.M=f.matches("TEMPLATE")&&f.content?f.content.nodeType:1)}}c.La={$a:d,Ta:b}})();(()=>{var a=(e,g,h)=>{var p;for(g=c.m.nextSibling(g);e&&(p=e)!==g;)e=c.m.nextSibling(p),h(p,e)},b=(e,g)=>{if(e.length){var h=e[0],p=h.parentNode;a(h,e[e.length-1],n=>{1!==n.nodeType&&8!==n.nodeType||c.xb(g,n)});c.g.Ba(e,p)}},d=(e,g,h,p)=>{var n=
(e&&(e.nodeType?e:0<e.length?e[0]:null)||h||{}).ownerDocument;if("string"==typeof h){n=n||M;n=n.getElementById(h);if(!n)throw Error("Cannot find template with ID "+h);h=new c.La.$a(n)}else if([1,8].includes(h.nodeType))h=new c.La.Ta(h);else throw Error("Unknown template type: "+h);h=(h=h.Ka?h.Ka():null)?[...h.cloneNode(!0).childNodes]:null;if("number"!=typeof h.length||0<h.length&&"number"!=typeof h[0].nodeType)throw Error("Template engine must return an array of DOM nodes");n=!1;switch(g){case "replaceChildren":c.m.ua(e,
h);n=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+g);}n&&(b(h,p),"replaceChildren"==g&&c.l.notify(e,c.l.H));return h},f=(e,g,h)=>c.T(e)?e():"function"===typeof e?e(g,h):e;c.rc=function(e,g,h,p){h=h||{};var n=n||"replaceChildren";if(p){var m=p.nodeType?p:0<p.length?p[0]:null;return c.s(()=>{var r=g instanceof c.ea?g:new c.ea(g,null,null,null,{exportDependencies:!0}),q=f(e,r.$data,r);d(p,n,q,r,h)},{na:()=>!m||!c.g.bb(m),o:m})}console.log("no targetNodeOrNodeArray")};
c.sc=(e,g,h,p,n)=>{function m(w,z){c.u.N(c.g.Rb,null,[p,w,t,h,u,z]);c.l.notify(p,c.l.H)}var r,q=h.as,t=(w,z)=>{r=n.createChildContext(w,{as:q,extend:C=>{C.$index=z;q&&(C[q+"Index"]=z)}});w=f(e,w,r);return d(p,"ignoreTargetNode",w,r,h)},u=(w,z)=>{b(z,r);r=null};if(!h.beforeRemove&&c.Jb(g)){m(g.J());var v=g.subscribe(w=>{m(g(),w)},null,"arrayChange");v.o(p);return v}return c.s(()=>{var w=c.g.i(g)||[];"undefined"==typeof w.length&&(w=[w]);m(w)},{o:p})};var k=c.g.j.Z(),l=c.g.j.Z();c.h.template={init:(e,
g)=>{g=c.g.i(g());if("string"==typeof g||"name"in g)c.m.oa(e);else if("nodes"in g){g=g.nodes||[];if(c.T(g))throw Error('The "nodes" option must be a plain, non-observable array.');let h=g[0]?.parentNode;h&&c.g.j.get(h,l)||(h=c.g.Mb(g),c.g.j.set(h,l,!0));(new c.La.Ta(e)).Ka(h)}else if(g=c.m.childNodes(e),g.length)g=c.g.Mb(g),(new c.La.Ta(e)).Ka(g);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:(e,g,h,p,n)=>{var m=g();
g=c.g.i(m);h=!0;p=null;"string"==typeof g?g={}:(m="name"in g?g.name:e,"if"in g&&(h=c.g.i(g["if"])),h&&"ifnot"in g&&(h=!c.g.i(g.ifnot)),h&&!m&&(h=!1));"foreach"in g?p=c.sc(m,h&&g.foreach||[],g,e,n):h?(h=n,"data"in g&&(h=n.createChildContext(g.data,{as:g.as,exportDependencies:!0})),p=c.rc(m,h,g,e)):c.m.oa(e);n=p;c.g.j.get(e,k)?.A?.();c.g.j.set(e,k,!n||n.isActive&&!n.isActive()?void 0:n)}};c.G.Va.template=e=>{e=c.G.oc(e);return 1==e.length&&e[0].unknown||c.G.mc(e,"name")?null:"This template engine does not support anonymous templates nested within its templates"};
c.m.ca.template=!0})();c.g.Hb=(a,b,d)=>{var f=0,k,l=b.length;l&&a.every(e=>{k=b.findIndex(g=>e.value===g.value);0<=k&&(e.moved=b[k].index,b[k].moved=e.index,b.splice(k,1),f=k=0,--l);f+=l;return l&&(!d||f<d)})};c.g.Cb=(()=>{var a=(b,d,f,k,l)=>{for(var e=Math.min,g=Math.max,h=[],p=-1,n=b.length,m,r=d.length,q=r-n||1,t=n+r+1,u,v,w;++p<=n;)for(v=u,h.push(u=[]),w=e(r,p+q),m=g(0,p-1);m<=w;m++)u[m]=m?p?b[p-1]===d[m-1]?v[m-1]:e(v[m]||t,u[m-1]||t)+1:m+1:p+1;e=[];g=[];q=[];p=n;for(m=r;p||m;)r=h[p][m]-1,m&&
r===h[p][m-1]?g.push(e[e.length]={status:f,value:d[--m],index:m}):p&&r===h[p-1][m]?q.push(e[e.length]={status:k,value:b[--p],index:p}):(--m,--p,l.sparse||e.push({status:"retained",value:d[m]}));c.g.Hb(q,g,!l.dontLimitMoves&&10*n);return e.reverse()};return(b,d,f)=>{f="boolean"===typeof f?{dontLimitMoves:f}:f||{};b=b||[];d=d||[];return b.length<d.length?a(b,d,"added","deleted",f):a(d,b,"deleted","added",f)}})();(()=>{function a(f,k,l,e,g){var h=[],p=c.s(()=>{var n=k(l,g,c.g.Ba(h,f))||[];if(0<h.length){var m=
h.nodeType?[h]:h;if(0<m.length){var r=m[0],q=r.parentNode;n.forEach(t=>q.insertBefore(t,r));m.forEach(t=>c.removeNode(t))}e&&c.u.N(e,null,[l,n,g])}h.length=0;h.push(...n)},{o:f,na:()=>!!h.find(c.g.bb)});return{P:h,Ya:p.isActive()?p:void 0}}var b=c.g.j.Z(),d=c.g.j.Z();c.g.Rb=(f,k,l,e,g,h)=>{k=k||[];"undefined"==typeof k.length&&(k=[k]);e=e||{};var p=c.g.j.get(f,b),n=[],m=0,r=0,q=[],t=[],u=[],v=0,w=x=>{A={da:x,Ea:c.ba(r++)};n.push(A)},z=x=>{A=p[x];A.Ea(r++);c.g.Ba(A.P,f);n.push(A)};if(p){if(!h||p&&
p._countWaitingForRemove)h=c.g.Cb(Array.prototype.map.call(p,E=>E.da),k,{dontLimitMoves:e.dontLimitMoves,sparse:!0});let x,I;for(h.forEach(E=>{x=E.moved;I=E.index;switch(E.status){case "deleted":for(;m<I;)z(m++);void 0===x&&(A=p[m],A.Ya&&(A.Ya.A(),A.Ya=void 0),c.g.Ba(A.P,f).length&&(e.beforeRemove&&(n.push(A),v++,A.da===d?A=null:u[A.Ea.J()]=A),A&&q.push.apply(q,A.P)));m++;break;case "added":for(;r<I;)z(m++);void 0!==x?(t.push(n.length),z(x)):w(E.value)}});r<k.length;)z(m++);n._countWaitingForRemove=
v}else k.forEach(w);c.g.j.set(f,b,n);q.forEach(e.beforeRemove?c.fa:c.removeNode);var C,H,O=x=>{c.m.kc(f,x,H);H=x};h=f.ownerDocument.activeElement;if(t.length)for(;void 0!=(C=t.shift());){var A=n[C];for(H=void 0;C;)if(k=n[--C].P,k?.length){H=k[k.length-1];break}A.P.forEach(O)}n.forEach(x=>{x.P||c.g.extend(x,a(f,l,x.da,g,x.Ea));x.P.forEach(O);!x.jc&&g&&(g(x.da,x.P,x.Ea),x.jc=!0,H=x.P[x.P.length-1])});f.ownerDocument.activeElement!=h&&h?.focus();((x,I)=>{x&&I.forEach(E=>E?.P.forEach(na=>x(na,C,E.da)))})(e.beforeRemove,
u);u.forEach(x=>x&&(x.da=d))}})();V.ko=R})(this);

View file

@ -9,17 +9,17 @@ ko.bindingHandlers['checked'] = {
// Only bind to check boxes and radio buttons
if (isCheckbox || isRadio) {
const checkedValue = ko.pureComputed(()=>{
if (isRadio) {
// Treat "value" like "checkedValue" when it is included with "checked" binding
if (allBindings['has']('checkedValue')) {
return ko.utils.unwrapObservable(allBindings.get('checkedValue'));
} else if (useElementValue) {
return allBindings['has']('value')
? ko.utils.unwrapObservable(allBindings.get('value'))
: element.value;
}
});
// Set up two computeds to update the binding:
// The first responds to element clicks
element.addEventListener("click", () => {
var updateModel = () => {
// When we're first setting up this computed, don't change any model state.
if (ko.dependencyDetection.isInitial()) {
return;
@ -27,7 +27,8 @@ ko.bindingHandlers['checked'] = {
// This updates the model value from the view value.
// It runs in response to DOM events (click) and changes in checkedValue.
var isChecked = element.checked;
var isChecked = element.checked,
elemValue = checkedValue();
// We can ignore unchecked radio buttons, because some other radio
// button will be checked, and that one can take care of updating state.
@ -36,22 +37,88 @@ ko.bindingHandlers['checked'] = {
return;
}
var elemValue = isCheckbox ? isChecked : checkedValue(),
modelValue = ko.dependencyDetection.ignore(valueAccessor);
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
}),
var modelValue = ko.dependencyDetection.ignore(valueAccessor);
if (valueIsArray) {
var writableValue = rawValueIsNonArrayObservable ? modelValue.peek() : modelValue,
saveOldValue = oldElemValue;
oldElemValue = elemValue;
if (saveOldValue !== elemValue) {
// When we're responding to the checkedValue changing, and the element is
// currently checked, replace the old elem value with the new elem value
// in the model array.
if (isChecked) {
writableValue.push(elemValue);
writableValue.remove(saveOldValue);
}
} else {
// When we're responding to the user having checked/unchecked a checkbox,
// add/remove the element value to the model array.
isChecked ? writableValue.push(elemValue) : writableValue.remove(elemValue);
}
if (rawValueIsNonArrayObservable && ko.isWriteableObservable(modelValue)) {
modelValue(writableValue);
}
} else {
if (isCheckbox) {
if (elemValue === undefined) {
elemValue = isChecked;
} else if (!isChecked) {
elemValue = undefined;
}
}
ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
}
}
var rawValue = valueAccessor(),
valueIsArray = isCheckbox && (ko.utils.unwrapObservable(rawValue) instanceof Array),
rawValueIsNonArrayObservable = !(valueIsArray && rawValue.push && rawValue.splice),
useElementValue = isRadio || valueIsArray,
oldElemValue = valueIsArray ? checkedValue() : undefined;
// IE 6 won't allow radio buttons to be selected unless they have a name
if (isRadio && !element.name)
ko.bindingHandlers['uniqueName']['init'](element, function() { return true });
// Set up two computeds to update the binding:
// The first responds to changes in the checkedValue value and to element clicks
ko.computed(updateModel, null, { disposeWhenNodeIsRemoved: element });
element.addEventListener("click", updateModel);
// The second responds to changes in the model value (the one associated with the checked binding)
ko.computed(() => {
// This updates the view value from the model value.
// It runs in response to changes in the bound (checked) value.
var modelValue = ko.utils.unwrapObservable(valueAccessor());
element.checked = isCheckbox ? !!modelValue : (checkedValue() === modelValue);
var modelValue = ko.utils.unwrapObservable(valueAccessor()),
elemValue = checkedValue();
if (valueIsArray) {
// When a checkbox is bound to an array, being checked represents its value being present in that array
element.checked = modelValue.includes(elemValue);
oldElemValue = elemValue;
} else if (isCheckbox && elemValue === undefined) {
// When a checkbox is bound to any other value (not an array) and "checkedValue" is not defined,
// being checked represents the value being trueish
element.checked = !!modelValue;
} else {
// Otherwise, being checked means that the checkbox or radio button's value corresponds to the model value
element.checked = (checkedValue() === modelValue);
}
}, null, { disposeWhenNodeIsRemoved: element });
rawValue = undefined;
}
}
};
ko.expressionRewriting.twoWayBindings['checked'] = true;
ko.bindingHandlers['checkedValue'] = {
'update': function (element, valueAccessor) {
element.value = ko.utils.unwrapObservable(valueAccessor());
}
};
})();