meta data for this page
<html> <head>
<title>Valintakoe</title> <meta charset="UTF-8"> <meta name="format-detection" content="telephone=no"> <meta name="app-path" content="./"> <meta name="page-integrity" content="false"> <meta name="answer-key" content="-"> <meta name="tz-offset" content="-10800000"> <meta name="google" content="notranslate"> <meta name="base-timestamp" content="1664892858486"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<style> #footer{clear:both;z-index:0;height:25px;background:#fff;width:100%;border-top:1px solid #2f6394}body,html{margin:0;padding:0;font-family:Helvetica,Arial,sans-serif;font-size:100%;background:#fcfcfc;color:#444}#header{border-bottom:none}#header:after{content:””;display:block;position:absolute;left:0;right:0;padding-top:1em;border-bottom:3px solid #de1b1b}.topbar-wrap,div.header.topbar{background:#f6f6f6 none repeat scroll 0 0;border-bottom:3px solid #de1b1b;color:#2b2b2b;padding:1em;width:100%;position:relative;z-index:50}.topbar-wrap .header-content,div.header.topbar .header-content{max-width:908px;margin:0 auto;padding:.5em 0;display:flex;justify-content:space-between;align-items:center}.topbar-wrap .exam-data,div.header.topbar .exam-data{max-width:908px;margin:0 auto}.topbar-wrap .name,div.header.topbar .name{line-height:1;font-size:2em;display:inline-block;margin:0;padding:0;font-weight:400}div.header.topbar .name:empty:before{content:”\a0”}div.topbar-wrap{padding:0;border-bottom:0;background:0 0}div.topbar{padding:.5em;background:#2b2b2b none repeat scroll 0 0;border-bottom:3px solid #e9e581;color:#fff}div.topbar>div{max-width:908px;margin:0 auto}body.lobby div.topbar{padding:1em .5em}.wrapper{margin:0 auto 0;margin:0 auto;max-width:700px;width:98%;padding:2em;padding-top:0}.wrapper .help-text{font-size:large;padding:0 0 2em}.wrapper .help-text.success{background-color:#dff0d8;border:1px solid #d6e9c6;color:#3c763d;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text.error{background-color:#f2dede;border:1px solid #ebccd1;color:#a94442;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text.notice{background-color:#ffc;border:1px solid #cc0;padding:1em;margin-bottom:1em;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.wrapper .help-text .title{font-weight:700;margin-bottom:3px}.wrapper .help-text .link{display:block;text-decoration:none;margin-top:3px;float:right;font-weight:700}.wrapper .help-text *:first-child,.wrapper .help-text .title{margin-top:0}body.full .wrapper{max-width:908px}#main-content-wrapper{margin-top:2em}#container{overflow:visible;margin:0 5%;max-width:908px;margin:0 auto 0}div.header.topbar{background:#f6f6f6 none repeat scroll 0 0;color:#2b2b2b}div.header.topbar .header-content{max-width:900px;margin:0 auto}div.header.topbar .header-content .name span{display:block}div.header.topbar .name{display:inline-block;font-size:2em;margin:0;padding:0}div.header.topbar .links{display:inline-block;line-height:2em}div.header.topbar .links button>span{white-space:nowrap;display:block}div.header.topbar .links .link{display:inline-block;line-height:1.3;padding:0 8px 0 0}div.header.topbar .links .link a{color:#2b2b2b;text-decoration:none;font-size:1.1em}div.header.topbar .links .link:not(:first-child){border-left:1px solid #de1b1b;padding-left:10px}div.header.topbar form{display:inline-block}div.topbar-wrap{border-top:3px solid #de1b1b;position:absolute}div.topbar-wrap .exam-data{margin:0 auto 0;max-width:900px;width:100%}div.topbar-wrap .exam-data>div{display:inline-block}div.topbar-wrap .exam-data>div.exam-info{line-height:24px;vertical-align:middle;float:right}div.topbar-wrap .exam-data .timer{display:inline-block}div.topbar-wrap .exam-data .timer .title{display:inline-block;text-align:right}div.topbar-wrap .exam-data .timer{margin-left:1em}div.topbar-wrap .exam-data span{font-size:18px}div.topbar-wrap .exam-data span.username{font-size:24px}div.topbar-wrap .exam-data:after{clear:both;content:”.”;display:block;height:0;visibility:hidden}body.fixed div.topbar-wrap{position:fixed;top:0;border-top:3px solid #de1b1b;z-index:50}body.fixed.lobby section.wrapper{margin-top:60px!important}body.fixed.lobby div.topbar{padding:0 1em 1em}body.fixed.lobby div.topbar>div .exam-data{margin:1em auto}html:after{clear:both;content:”.”;display:block;height:0;visibility:hidden}@media (max-width:923px){#container{padding:0 .5em}}button.linklike{background:0 0;border:none;padding:0;color:#2b2b2b;cursor:pointer;width:auto}.login section.wrapper{margin:60px auto 0;padding:2em;max-width:500px}.login .language-choice{display:flex;justify-content:space-between;font-size:1.1em;margin-bottom:2em}.login .language-choice button{background-color:transparent;color:inherit;padding:inherit;width:inherit;max-width:inherit;border:inherit;font-size:1.1em}.login .display-language-fi .language-choice button:lang(fi){text-decoration:underline}.login .display-language-sv .language-choice button:lang(sv){text-decoration:underline}.login .display-language-en .language-choice button:lang(en){text-decoration:underline}.login .display-language-fi [lang]:not(.language-option):not(:lang(fi)){display:none}.login .display-language-sv [lang]:not(.language-option):not(:lang(sv)){display:none}.login .display-language-en [lang]:not(.language-option):not(:lang(en)){display:none}.login section.wrapper h3{border-bottom:1px solid #3b3738;color:#3b3738;margin-top:0;padding-bottom:.5em;text-align:center}.login.credentials section.wrapper{max-width:500px}.login *{box-sizing:border-box}.login label{width:38%;display:inline-block;font-size:1.1em;padding:.5em;text-align:right}.login .input.credentials label[for=username],.login form.ajax-submit.processing .processing-notification{padding:.5em 0}.login input{display:inline-block;border:1px solid #060606;padding:.3em;font-size:1em;width:60%}.login input:focus{border:1px solid #de1b1b}.login .btn,.login button{background:#3b3738;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;color:#fff;display:inline-block;border:0;padding:.4em 1em;width:60%;max-width:60%;cursor:pointer}.login .input{text-align:right}.login .input.credentials{margin:0;text-align:right;width:auto}.login .input.credentials label{padding-left:0;text-align:center;width:100%;float:left}.login .input.credentials input{font-size:1.5em;line-height:1;text-align:center;vertical-align:middle;width:100%}.login .input.toggle{margin:.4em 0}.login .input.toggle label{padding:0 .5em 0 0;text-align:left;float:right;width:auto}.login .input.toggle input{text-align:center;vertical-align:middle;padding:.5em;width:auto}.login .input.access-token input{text-transform:uppercase}.login .input.credentials .btn,.login .input.credentials button{width:100%;max-width:100%;margin-top:.5em;display:inline-block}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}@media speech,aural{.sr-hide{display:none!important}}a img,fieldset{border:none}a{color:#0a79a4}a:hover{color:#176280}:focus{outline:1px dotted #1471ce;-webkit-box-shadow:0 0 6px 1px #63a4e4;-moz-box-shadow:0 0 6px 1px #63a4e4;box-shadow:0 0 6px 1px #63a4e4}.form-button a:focus{outline:1px dotted #155ca2;-webkit-box-shadow:0 0 8px 2px #1b5c9e;-moz-box-shadow:0 0 8px 2px #1b5c9e;box-shadow:0 0 8px 2px #1b5c9e}img{border:0;margin:0}.form-button{border-top:1px solid rgba(0,0,0,.2);margin-bottom:1em}.form-button a{text-decoration:none}.form-button h2{margin-bottom:.4em}.btn,.form-button a,button,input[type=button]{background:#3b3738;font-size:1.2em;color:#f6f6f6;-webkit-border-radius:2px;border:0;-moz-border-radius:2px;border-radius:2px;display:inline-block;padding:.5em 1em;width:47%;max-width:320px;cursor:pointer;vertical-align:top;text-align:center}.form-button .examination-info-wrap{display:flex;flex-direction:row;align-items:center;justify-content:space-between;width:100%}.form-button .examination-info-wrap>*{width:50%}.form-button .examination-info{display:flex;flex-direction:column;gap:.5em}.examination-list button{display:block}.examination-list .help-text.notice{margin-top:10px}div.form-button,.help-text{clear:both}div.help-text div{margin-top:10px}*{box-sizing:border-box}table{border-collapse:collapse}th,td{padding:.3em;border:2px solid #575757}.form{font-size:1.3em;line-height:calc(100% + .4em)}.form div.html-content,.form fieldset{margin-top:2em;margin-bottom:2em}.form legend{margin-bottom:.5em;display:inline}.form input{margin:0}.form .input-wrap{box-sizing:border-box;line-height:1px}.form .input-wrap.inline{display:inline-block}.form fieldset h1:first-child,.form div h1:first-child,.form fieldset h2:first-child,.form div h2:first-child,.form fieldset h3:first-child,.form div h3:first-child,.form fieldset h4:first-child,.form div h4:first-child,.form fieldset h5:first-child,.form div h5:first-child,.form fieldset p:first-child,.form div p:first-child,.form fieldset ul:first-child,.form div ul:first-child,.form fieldset ol:first-child,.form div ol:first-child{padding-top:0;margin-top:0}.form fieldset h1:last-child,.form div h1:last-child,.form fieldset h2:last-child,.form div h2:last-child,.form fieldset h3:last-child,.form div h3:last-child,.form fieldset h4:last-child,.form div h4:last-child,.form fieldset h5:last-child,.form div h5:last-child,.form fieldset p:last-child,.form div p:last-child,.form fieldset ul:last-child,.form div ul:last-child,.form fieldset ol:last-child,.form div ol:last-child{padding-bottom:0;margin-bottom:0}.form table+table{margin-top:1.5em}@keyframes saved-border{from{padding:.3em;border:.3em solid #444}to{padding:.3em;border:.3em solid #fcfcfc}}.form .radio,.form .checkboxes{display:-ms-grid;display:grid;-ms-grid-columns:2em auto;grid-template-columns:2em auto}.form .radio .input-wrap,.form .checkboxes .input-wrap{-ms-grid-column:1;grid-column:1;-ms-grid-column-align:center;justify-self:center;-ms-grid-row-align:center;align-self:center;display:flex;justify-content:center;align-items:center;position:relative}.form .inline.input-wrap{position:relative}.form .radio .input-wrap input,.form .checkboxes .input-wrap input{position:absolute;-ms-transform:translate(-50%,-50%)}.form .radio .input-wrap:before,.form .checkboxes .input-wrap:before{content:””;position:absolute;width:100%;height:100%;-ms-transform:translate(-50%,-50%)}@keyframes saving-border{0%{border-color:#444}50%{border-color:#aaa}100%{border-color:#444}}.form .radio .input-wrap.saving:before,.form .checkboxes .input-wrap.saving:before,.form .inline .inline-status.saving{padding:.3em;border:.3em solid #444;animation-name:saving-border;animation-duration:8s;animation-iteration-count:infinite;animation-delay:5s}.form .inline.saving:before,.form .inline .inline-status.saving{content:””;padding:.3em;border:.3em solid #444;border-radius:7px;border-color:#444;animation-name:saving-border;animation-duration:8s;animation-iteration-count:infinite;animation-delay:5s;position:absolute;top:-.3rem;right:-.3rem;bottom:-.3rem;left:-.3rem;pointer-events:none;z-index:1}.form .radio .input-wrap.saved-animation:before,.form .checkboxes .input-wrap.saved-animation:before{animation-name:saved-border;animation-duration:.5s}.form .radio .input-wrap,.form .radio .input-wrap:before{border-radius:50%}.form .checkboxes .input-wrap,.form .checkboxes .input-wrap:before{border-radius:30%}@keyframes saved-text{0%{opacity:0;z-index:1;visibility:visible}10%{opacity:1;z-index:1;visibility:visible}90%{opacity:1;z-index:1;visibility:visible}100%{opacity:0;z-index:1;visibility:visible}}.form .radio .input-wrap.saved-animation:after,.form .checkboxes .input-wrap.saved-animation:after,.form .connect-options .connection.saved-animation:after,.form .text .text-saved-notification.saved-animation:after,.form .inline.saved-animation:after,.form .inline-status.saved-animation:after,.form .inline-saved-notification.saved-animation:after{content:attr(data-saved-message);position:absolute;bottom:calc(100% + .8em);display:block;background-color:#444;color:#fcfcfc;padding:.4em;vertical-align:middle;line-height:1em;z-index:-1;opacity:0;font-size:1.1rem;animation-name:saved-text;animation-duration:3s;visibility:hidden;-ms-transform:translate(-50%,0%)}.form .text .text-saved-notification{position:relative}.form .inline .inline-saved-notification{position:absolute;top:0;left:0;right:0}.form .text .text-saved-notification.saved-animation:after{bottom:.8em;left:50%;transform:translateX(-50%)}.form .inline.saved-animation:after,.form .inline-status.saved-animation:after,.form .inline .inline-saved-notification:after{bottom:calc(100% + .4em);left:50%;transform:translateX(-50%)}.form input,.form label{cursor:pointer}.form input[type=text]{cursor:auto}.form .radio label,.form .checkboxes label{-ms-grid-column:2;grid-column:2;padding:.5em;display:block}.form .radio.delete-answer label{font-style:italic}.form .connect-options{display:-ms-grid;display:grid;-ms-grid-columns:1fr 4em 1fr;grid-template-columns:1fr 4em 1fr}.form .connect-options label,.form .connect-options input{display:block}.form .connect-options .connect-options-from{-ms-grid-column:1;grid-column:1;text-align:right}.form .connect-options .connect-options-to{-ms-grid-column:3;grid-column:3}.form .connect-options .connect-option{margin:.5em;padding:.5em}.form .connect-options .connection{padding:0;position:relative;display:flex;justify-content:center}.form .connect-options .connection{top:calc(1.5em - 4px);height:calc(100% + 8px)}.form .connect-options .connect-options-to,.form .connect-options .connection-input{display:none}.form .connect-options .connect-options-to.active,.form .connect-options .connection-input.active{display:block}.form .connect-options .connect-options-from,.form .connect-options .connect-options-to{border:3px solid transparent}.form .connect-options input:checked+.connect-option,.form .connect-options input:focus+.connect-option{border-color:#575757}.form .connect-options input:checked+.connect-option{border-style:dashed}.form .connect-options input:focus+.connect-option{border-style:solid}.form .connect-options .connect-option{cursor:pointer}.form .connect-options .connect-option.connect-options-to-default{cursor:default}.form .connect-options.active .connection svg .connection-line{opacity:.25}.form .connect-options.active input:checked+.connect-options-to.active+.connection svg .connection-line{opacity:1}.form .connect-options.active input:checked+.connect-options-to.active+.connection{z-index:1}.form .connect-options .connection svg{position:absolute;width:100%;height:100%}.form .connect-options .connection.saving svg .connection-line{stroke-dasharray:5}.form .connect-options input{opacity:0;z-index:-1}.form .connect-options .help-from{text-align:right}.form .connect-options .help-from,.form .connect-options .help-to{margin:.5em;padding:.5em;background-color:#444;color:#fcfcfc}.form .connect-options.active .help-from{visibility:hidden}.form .connect-options:not(.active) .help-to{visibility:hidden}.form .essay .essay-wrap{display:-ms-grid;display:grid;-ms-grid-columns:100%;grid-template-columns:100%;width:100%}.form .essay .essay-wrap textarea.text-input,.form .essay .essay-wrap.auto-grow:after{-ms-grid-row:1;-ms-grid-column:1;grid-row:1;grid-column:1;font-family:Helvetica,Arial,sans-serif;font-size:1em;min-height:10em;max-height:calc(100vh - 10em)}.form .essay .essay-wrap.auto-grow:after{display:block;content:attr(data-value) ” ”;white-space:pre-wrap;visibility:hidden;overflow:hidden}.form .essay .essay-wrap textarea.text-input{resize:none}.form .text .text-controls button{font-size:1.2rem;width:auto}.form .text .text-controls{display:flex;flex-direction:row;align-items:center;margin-top:.5em;justify-content:flex-end}.form .text .status{margin-right:1em;font-size:1.2rem}.form .text .status .has-been-modified,.form .text .status .saving-changes,.form .text .status .too-long-answer{display:none}.form .text .status .too-long-answer{color:red}.form .text.changed .status .has-been-modified,.form .text.saving .status .saving-changes,.form .text.too-long-answer .status .too-long-answer{display:inline}.form .text.changed.saving .status .has-been-modified{display:none}.form .text.too-long-answer button{background-color:#575757}.form .single-line input.text-input{font-size:.8em}.form .inline-item{white-space:nowrap;display:inline-block}.form .inline-item label{font-size:1rem;font-style:italic;margin-right:1px}.inline.select select,.inline.single-line input{max-width:100%}.inline.select select{font-size:.8em;color:#444;text-overflow:ellipsis}.inline.select select[data-current-value=””],.inline.select select option[value=””]{font-style:italic}.inline.select select option{font-style:normal}.inline.single-line input{font-size:.8em}.inline .inline-status{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}div.message-container{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10;background-color:#fcfcfc;background:linear-gradient(90deg,#fcfcfc 10%,#ddd 30%,#ddd 70%,#fcfcfc 90%);visibility:hidden}div.message-container:before{content:””;position:absolute;top:0;bottom:20px;width:908px;margin-left:50%;transform:translateX(-50%);box-shadow:0 0 5px #222;background-color:#fcfcfc}#default-message-container div.message-container{visibility:visible;z-index:-1}#active-message-container div.message-container:last-of-type{visibility:visible}div.message-container div.message{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:inline-block;padding-top:25px;font-size:20px;text-align:center;width:calc(100% - 2em);max-width:calc(908px - 2em)}#page-load-failure div.message{text-align:left}div.message-container div.message div{margin-bottom:10px}div.message-container div.message div.title{font-weight:700}div.message-container div.message:after{content:””;display:block;position:absolute;background:center no-repeat url(../img/loader.gif);width:100%;height:60px;visibility:hidden}div.message-container div.message.loading:after{visibility:visible}button.confirm{background-color:#006400}button.cancel{background-color:#666}div.examination-status{font-size:large}div.examination-status span.returned{color:green}div.notification-container{display:block;position:absolute;left:0;right:0;text-align:center;width:100%}div.notification-container div.notification{display:inline-block;border:2px solid #2b2b2b;color:#2b2b2b;padding:.3rem;background-color:#fcfcfc}fieldset.disabled{opacity:.5}fieldset.question-item.invalid{border:2px solid red}fieldset.question-item.invalid div.validation-error-message{display:block;color:red;padding:0 0 .5em}form.ajax-submit:before{content:””;background-image:url(../img/loader.gif);display:block;position:absolute;width:0;height:0;z-index:-1000}form.ajax-submit{position:relative}form.ajax-submit div.processing-notification{display:none}form.ajax-submit.processing div.processing-notification div.processing-text{z-index:2;font-size:1.5rem;background-color:#fff;display:inline-block;position:absolute;background-color:#fcfcfc;margin:1em 0;text-align:center;left:50%;transform:translateX(-50%);bottom:calc(50% + 2em);width:100%}form.ajax-submit.processing div.processing-notification{display:block;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:2;background:center no-repeat url(../img/loader.gif);background-color:rgba(252,252,252,.8)}form.ajax-submit.processing div.opaque{background-color:rgba(252,252,252,1) !important}form.ajax-submit div.processing-error-message{display:none}form.ajax-submit.processing-error fieldset.submit div.processing-error-message{color:red;display:block;margin-bottom:1em;font-size:1.3rem}div.validation-error-message{display:none}form.validation-error fieldset.submit div.validation-error-message{color:red;display:block;margin-bottom:1em;font-size:1.3em}form.require-all-fields legend{position:relative}form.require-all-fields fieldset:not(.disabled) legend{padding-right:.8em}form.require-all-fields fieldset:not(.disabled) legend:empty{padding-left:0;padding-right:0}form.require-all-fields fieldset:not(.disabled) legend:not(:empty):after{content:”*”;color:red;position:absolute;top:0;right:.2em}div#calcwrapper,div#calcwrapper *{box-sizing:content-box}div#calcwrapper{position:fixed;top:50%;transform:translateY(-50%);right:0;z-index:100}#calcwrapper.closed div.calctab.close,#calcwrapper.opened div.calctab.open{display:none}#calcwrapper.closed{transform:translate(100%,-50%)}div.calctab{cursor:pointer;padding:5px;border:1px solid #2b2b2b;border-right:none;border-radius:8px 0 0 8px;background-color:#2b2b2b;text-transform:uppercase;width:10px;word-break:break-all;padding:5px 13px 5px 12px;text-align:center;font-size:16px;color:#fff;position:absolute;transform:translateX(-100%)}div.calctab.open{position:absolute;top:50%;transform:translate(-100%,-50%)}div.calctab.close{background-color:#eee;color:red}div#calc{border:1px solid #2b2b2b;width:286px;padding:3px;border-radius:0 8px 8px;background-color:#eee}div#calc div#display{clear:both}input#expression,input#result{border:1px solid #2b2b2b;margin:2px;width:271px;text-align:right;padding:4px;font-size:18px}input#result{background:#d3d3d3;border-top-left-radius:5px;border-top-right-radius:5px}span.resultbg{position:relative}span.resultbg input{padding-left:18px}span.resultbg:before{position:absolute;top:0;content:”=”;left:5px}div#calc div.keyrow{clear:both;display:table-row}div#calc button.key,div#calc div.nokey{border:1px solid #2b2b2b;margin:2px;padding:3px;float:left;width:45px;height:20px;line-height:19px;text-align:center;vertical-align:middle;cursor:pointer;display:table-cell;border-radius:5px}div.nokey{border:1px solid transparent !important}div#calc button.key,input#expression,input#result{font-family:”DejaVu Sans”,Helvetica,Arial,sans-serif}div#calc button{color:#000;font-size:100%}div#calc button.key:hover{background:#ddd}div#calc button.key:active{background:#ccc}div.larger{font-size:22px}div#calc .lettersymbol{font-style:italic}div#calc button.trigonometry,div#calc button.power,div#calc button.logarithm{background:#ffffe0}div#calc button.arithmetics,div#calc button.parenthesis{background:#e0ffff}div#calc button.storage{background:#d3d3d3}div#calc button.available{background:#90ee90}div#calc button.delete{background:#ffa07a}div#calc button.number,div#calc button.equals{background:#fff}div#calc button.key sup,div#calc button.key sub{font-size:12px;vertical-align:baseline;position:relative}div#calc button.key sup{top:-.4em}div#calc button.key sub{top:.4em}input::-ms-clear{display:none}div.tex-loading{display:inline-block;background-color:#ededed;margin:.14em;font-size:.9em;padding:0 .3em}.mq-math-mode{font-size:1em} </style>
<script type="text/javascript">
window.mathParser=(function(){"use strict";function peg$subclass(child,parent){function ctor(){this.constructor=child;}
ctor.prototype=parent.prototype;child.prototype=new ctor();} function peg$SyntaxError(message,expected,found,location){this.message=message;this.expected=expected;this.found=found;this.location=location;this.name="SyntaxError";if(typeof Error.captureStackTrace==="function"){Error.captureStackTrace(this,peg$SyntaxError);}} peg$subclass(peg$SyntaxError,Error);peg$SyntaxError.buildMessage=function(expected,found){var DESCRIBE_EXPECTATION_FNS={literal:function(expectation){return”\””+literalEscape(expectation.text)+”\””;},”class”:function(expectation){var escapedParts=””,i;for(i=0;i<expectation.parts.length;i++){escapedParts+=expectation.parts[i]instanceof Array?classEscape(expectation.parts[i][0])+”-”+classEscape(expectation.parts[i][1]):classEscape(expectation.parts[i]);} return”[”+(expectation.inverted?”^”:””)+escapedParts+”]”;},any:function(expectation){return”any character”;},end:function(expectation){return”end of input”;},other:function(expectation){return expectation.description;}};function hex(ch){return ch.charCodeAt(0).toString(16).toUpperCase();} function literalEscape(s){return s.replace(/\\/g,'\\\\').replace(/”/g,'\\”').replace(/\0/g,'\\0').replace(/\t/g,'\\t').replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/[\x00-\x0F]/g,function(ch){return'\\x0'+hex(ch);}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(ch){return'\\x'+hex(ch);});} function classEscape(s){return s.replace(/\\/g,'\\\\').replace(/\]/g,'\\]').replace(/\^/g,'\\^').replace(/-/g,'\\-').replace(/\0/g,'\\0').replace(/\t/g,'\\t').replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/[\x00-\x0F]/g,function(ch){return'\\x0'+hex(ch);}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(ch){return'\\x'+hex(ch);});} function describeExpectation(expectation){return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);} function describeExpected(expected){var descriptions=new Array(expected.length),i,j;for(i=0;i<expected.length;i++){descriptions[i]=describeExpectation(expected[i]);} descriptions.sort();if(descriptions.length>0){for(i=1,j=1;i<descriptions.length;i++){if(descriptions[i-1]!==descriptions[i]){descriptions[j]=descriptions[i];j++;}} descriptions.length=j;} switch(descriptions.length){case 1:return descriptions[0];case 2:return descriptions[0]+” or ”+descriptions[1];default:return descriptions.slice(0,-1).join(”, ”) +”, or ” +descriptions[descriptions.length-1];}} function describeFound(found){return found?”\””+literalEscape(found)+”\””:”end of input”;} return”Expected ”+describeExpected(expected)+” but ”+describeFound(found)+” found.”;};function toCustomPrecision(number){var PRECISION_DECIMALS_SMALL=8;var PRECISION_DECIMALS_BIG=14;var PRECISION_THRESHOLD=0.01;var precision;if(Math.abs(number)<PRECISION_THRESHOLD){precision=PRECISION_DECIMALS_SMALL;}else{precision=PRECISION_DECIMALS_BIG;} return parseFloat(number.toPrecision(precision));} function peg$parse(input,options){options=options!==void 0?options:{};var peg$FAILED={},peg$startRuleFunctions={start:peg$parsestart},peg$startRuleFunction=peg$parsestart,peg$c0=/^[+\-]/,peg$c1=peg$classExpectation(["+","-"],false,false),peg$c2=function(left,right){var ret=left;var i;if(isNaN(ret)||!isFinite(ret)) return ret for(i=0;i<right.length;++i){var num=right[i][1];if(isNaN(num)||!isFinite(num)) return num if(right[i][0]==”+”){ret=ret+num;}else if(right[i][0]==”-”){ret=ret-num;} if(i<right.length-1){ret=toCustomPrecision(ret);}} return parseFloat(ret);},peg$c3=/^[\xD7\xF7*\/]/,peg$c4=peg$classExpectation(["\xD7","\xF7","*","/"],false,false),peg$c5=function(left,right){var ret=left;var i;if(isNaN(ret)||!isFinite(ret)) return ret for(i=0;i<right.length;++i){var num=right[i][1];if(isNaN(num)||!isFinite(num)) return num if(right[i][0]==”×”||right[i][0]==”*”){ret=ret*num;}else if(right[i][0]==”÷”||right[i][0]==”/”){ret=ret / num;}else{ret=ret*right[i][0];} if(i<right.length-1){ret=toCustomPrecision(ret);}} return parseFloat(ret);},peg$c6=/^[\-]/,peg$c7=peg$classExpectation(["-"],false,false),peg$c8=function(sign,expression){var ret=expression;if(sign){ret=-ret;} return ret;},peg$c9="log(",peg$c10=peg$literalExpectation("log(",false),peg$c11=”)”,peg$c12=peg$literalExpectation(”)”,false),peg$c13=function(operand){return Math.log(operand)/ Math.LN10;},peg$c14=”ln(”,peg$c15=peg$literalExpectation(”ln(”,false),peg$c16=function(operand){return Math.log(operand);},peg$c17=”\u221A”,peg$c18=peg$literalExpectation(”\u221A”,false),peg$c19=function(radicand){return Math.sqrt(radicand);},peg$c20=”^”,peg$c21=peg$literalExpectation(”^”,false),peg$c22=function(operand,exponent){return Math.pow(operand,exponent);},peg$c23=”sin(”,peg$c24=peg$literalExpectation(”sin(”,false),peg$c25=function(operand){return Math.sin(operand*(Math.PI / 180));},peg$c26=”cos(”,peg$c27=peg$literalExpectation(”cos(”,false),peg$c28=function(operand){return operand==90?0:Math.cos(operand*(Math.PI / 180));},peg$c29=”tan(”,peg$c30=peg$literalExpectation(”tan(”,false),peg$c31=function(operand){return operand==90?Number.NaN:Math.tan(operand*(Math.PI / 180));},peg$c32=”asin(”,peg$c33=peg$literalExpectation(”asin(”,false),peg$c34=function(operand){return Math.asin(operand)/(Math.PI / 180);},peg$c35=”acos(”,peg$c36=peg$literalExpectation(”acos(”,false),peg$c37=function(operand){return Math.acos(operand)/(Math.PI / 180);},peg$c38=”atan(”,peg$c39=peg$literalExpectation(”atan(”,false),peg$c40=function(operand){return Math.atan(operand)/(Math.PI / 180);},peg$c41=”!”,peg$c42=peg$literalExpectation(”!”,false),peg$c43=function(operand){var ret=Number.NaN;if(parseInt(operand)===operand&&operand>=0){ret=1;for(var i=2;i⇐operand;i++){ret*=i}} return ret;},peg$c44="(",peg$c45=peg$literalExpectation("(",false),peg$c46=function(additive){return additive;},peg$c47="\u03C0",peg$c48=peg$literalExpectation("\u03C0",false),peg$c49=function(operand){return operand*Math.PI;},peg$c50=function(){return Math.PI;},peg$c51=”e”,peg$c52=peg$literalExpectation(”e”,false),peg$c53=function(operand){return operand*Math.E;},peg$c54=function(){return Math.E;},peg$c55=/^[0-9]/,peg$c56=peg$classExpectation([["0","9"]],false,false),peg$c57=/^[.]/,peg$c58=peg$classExpectation([”.”],false,false),peg$c59=function(wholepart,fractionalpart){var ret;if(fractionalpart){ret=parseFloat(wholepart.join(””)+”.”+fractionalpart[1].join(””));}else{ret=parseInt(wholepart.join(””));} return ret;},peg$c60=function(fractionalpart){return parseFloat("0."+fractionalpart[1].join(""));},peg$currPos=0,peg$savedPos=0,peg$posDetailsCache=[{line:1,column:1}],peg$maxFailPos=0,peg$maxFailExpected=[],peg$silentFails=0,peg$result;if(”startRule”in options){if(!(options.startRule in peg$startRuleFunctions)){throw new Error(”Can't start parsing from rule \””+options.startRule+”\”.”);} peg$startRuleFunction=peg$startRuleFunctions[options.startRule];} function text(){return input.substring(peg$savedPos,peg$currPos);} function location(){return peg$computeLocation(peg$savedPos,peg$currPos);} function expected(description,location){location=location!==void 0?location:peg$computeLocation(peg$savedPos,peg$currPos) throw peg$buildStructuredError([peg$otherExpectation(description)],input.substring(peg$savedPos,peg$currPos),location);} function error(message,location){location=location!==void 0?location:peg$computeLocation(peg$savedPos,peg$currPos) throw peg$buildSimpleError(message,location);} function peg$literalExpectation(text,ignoreCase){return{type:”literal”,text:text,ignoreCase:ignoreCase};} function peg$classExpectation(parts,inverted,ignoreCase){return{type:”class”,parts:parts,inverted:inverted,ignoreCase:ignoreCase};} function peg$anyExpectation(){return{type:”any”};} function peg$endExpectation(){return{type:”end”};} function peg$otherExpectation(description){return{type:”other”,description:description};} function peg$computePosDetails(pos){var details=peg$posDetailsCache[pos],p;if(details){return details;}else{p=pos-1;while(!peg$posDetailsCache[p]){p–;} details=peg$posDetailsCache[p];details={line:details.line,column:details.column};while(p<pos){if(input.charCodeAt(p)===10){details.line++;details.column=1;}else{details.column++;} p++;} peg$posDetailsCache[pos]=details;return details;}} function peg$computeLocation(startPos,endPos){var startPosDetails=peg$computePosDetails(startPos),endPosDetails=peg$computePosDetails(endPos);return{start:{offset:startPos,line:startPosDetails.line,column:startPosDetails.column},end:{offset:endPos,line:endPosDetails.line,column:endPosDetails.column}};} function peg$fail(expected){if(peg$currPos<peg$maxFailPos){return;} if(peg$currPos>peg$maxFailPos){peg$maxFailPos=peg$currPos;peg$maxFailExpected=[];} peg$maxFailExpected.push(expected);} function peg$buildSimpleError(message,location){return new peg$SyntaxError(message,null,null,location);} function peg$buildStructuredError(expected,found,location){return new peg$SyntaxError(peg$SyntaxError.buildMessage(expected,found),expected,found,location);} function peg$parsestart(){var s0;s0=peg$parseadditive();return s0;} function peg$parseadditive(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=peg$parsemultiplicative();if(s1!==peg$FAILED){s2=[];s3=peg$currPos;if(peg$c0.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c1);}} if(s4!==peg$FAILED){s5=peg$parsemultiplicative();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} while(s3!==peg$FAILED){s2.push(s3);s3=peg$currPos;if(peg$c0.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c1);}} if(s4!==peg$FAILED){s5=peg$parsemultiplicative();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c2(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsemultiplicative(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=peg$parsesignedexpression();if(s1!==peg$FAILED){s2=[];s3=peg$currPos;if(peg$c3.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c4);}} if(s4!==peg$FAILED){s5=peg$parsesignedexpression();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} if(s3===peg$FAILED){s3=peg$parsetrigonometric();if(s3===peg$FAILED){s3=peg$parsenumberlog();if(s3===peg$FAILED){s3=peg$parsesquareroot();}}} while(s3!==peg$FAILED){s2.push(s3);s3=peg$currPos;if(peg$c3.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c4);}} if(s4!==peg$FAILED){s5=peg$parsesignedexpression();if(s5!==peg$FAILED){s4=[s4,s5];s3=s4;}else{peg$currPos=s3;s3=peg$FAILED;}}else{peg$currPos=s3;s3=peg$FAILED;} if(s3===peg$FAILED){s3=peg$parsetrigonometric();if(s3===peg$FAILED){s3=peg$parsenumberlog();if(s3===peg$FAILED){s3=peg$parsesquareroot();}}}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c5(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsesignedexpression(){var s0,s1,s2;s0=peg$currPos;if(peg$c6.test(input.charAt(peg$currPos))){s1=input.charAt(peg$currPos);peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c7);}} if(s1===peg$FAILED){s1=null;} if(s1!==peg$FAILED){s2=peg$parseexpression();if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c8(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseexpression(){var s0;s0=peg$parsenumberlog();if(s0===peg$FAILED){s0=peg$parsepowerandroot();if(s0===peg$FAILED){s0=peg$parsetrigonometric();if(s0===peg$FAILED){s0=peg$parsefactorial();if(s0===peg$FAILED){s0=peg$parsenumberpi();if(s0===peg$FAILED){s0=peg$parsenumbere();if(s0===peg$FAILED){s0=peg$parseprimary();}}}}}} return s0;} function peg$parsenumberlog(){var s0;s0=peg$parselog10();if(s0===peg$FAILED){s0=peg$parseln();} return s0;} function peg$parselog10(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c9){s1=peg$c9;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c10);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c13(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseln(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,3)===peg$c14){s1=peg$c14;peg$currPos+=3;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c15);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c16(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsepowerandroot(){var s0;s0=peg$parsesquareroot();if(s0===peg$FAILED){s0=peg$parsenthpower();} return s0;} function peg$parsepowerable(){var s0;s0=peg$parsenumberlog();if(s0===peg$FAILED){s0=peg$parsesquareroot();if(s0===peg$FAILED){s0=peg$parsetrigonometric();if(s0===peg$FAILED){s0=peg$parsefactorial();if(s0===peg$FAILED){s0=peg$parsenumberpi();if(s0===peg$FAILED){s0=peg$parsenumbere();if(s0===peg$FAILED){s0=peg$parseprimary();}}}}}} return s0;} function peg$parsesquareroot(){var s0,s1,s2;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===8730){s1=peg$c17;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c18);}} if(s1!==peg$FAILED){s2=peg$parsesignedexpression();if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c19(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsenthpower(){var s0,s1,s2,s3;s0=peg$currPos;s1=peg$parsepowerable();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===94){s2=peg$c20;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c21);}} if(s2!==peg$FAILED){s3=peg$parsesignedexpression();if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c22(s1,s3);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsetrigonometric(){var s0;s0=peg$parsesin();if(s0===peg$FAILED){s0=peg$parsecos();if(s0===peg$FAILED){s0=peg$parsetan();if(s0===peg$FAILED){s0=peg$parsearcsin();if(s0===peg$FAILED){s0=peg$parsearccos();if(s0===peg$FAILED){s0=peg$parsearctan();}}}}} return s0;} function peg$parsesin(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c23){s1=peg$c23;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c24);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c25(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsecos(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c26){s1=peg$c26;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c27);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c28(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsetan(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,4)===peg$c29){s1=peg$c29;peg$currPos+=4;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c30);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c31(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearcsin(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c32){s1=peg$c32;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c33);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c34(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearccos(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c35){s1=peg$c35;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c36);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c37(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsearctan(){var s0,s1,s2,s3;s0=peg$currPos;if(input.substr(peg$currPos,5)===peg$c38){s1=peg$c38;peg$currPos+=5;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c39);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c40(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsefactorial(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===33){s2=peg$c41;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c42);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c43(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parseprimary(){var s0,s1,s2,s3;s0=peg$parsepi();if(s0===peg$FAILED){s0=peg$parsee();if(s0===peg$FAILED){s0=peg$parsenumber();if(s0===peg$FAILED){s0=peg$currPos;if(input.charCodeAt(peg$currPos)===40){s1=peg$c44;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c45);}} if(s1!==peg$FAILED){s2=peg$parseadditive();if(s2!==peg$FAILED){if(input.charCodeAt(peg$currPos)===41){s3=peg$c11;peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c12);}} if(s3!==peg$FAILED){peg$savedPos=s0;s1=peg$c46(s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;}}}} return s0;} function peg$parsenumberpi(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===960){s2=peg$c47;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c48);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c49(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsepi(){var s0,s1;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===960){s1=peg$c47;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c48);}} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c50();} s0=s1;return s0;} function peg$parsenumbere(){var s0,s1,s2;s0=peg$currPos;s1=peg$parseprimary();if(s1!==peg$FAILED){if(input.charCodeAt(peg$currPos)===101){s2=peg$c51;peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c52);}} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c53(s1);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} return s0;} function peg$parsee(){var s0,s1;s0=peg$currPos;if(input.charCodeAt(peg$currPos)===101){s1=peg$c51;peg$currPos++;}else{s1=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c52);}} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c54();} s0=s1;return s0;} function peg$parsenumber(){var s0,s1,s2,s3,s4,s5;s0=peg$currPos;s1=[];if(peg$c55.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s2!==peg$FAILED){while(s2!==peg$FAILED){s1.push(s2);if(peg$c55.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s1=peg$FAILED;} if(s1!==peg$FAILED){s2=peg$currPos;if(peg$c57.test(input.charAt(peg$currPos))){s3=input.charAt(peg$currPos);peg$currPos++;}else{s3=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c58);}} if(s3!==peg$FAILED){s4=[];if(peg$c55.test(input.charAt(peg$currPos))){s5=input.charAt(peg$currPos);peg$currPos++;}else{s5=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s5!==peg$FAILED){while(s5!==peg$FAILED){s4.push(s5);if(peg$c55.test(input.charAt(peg$currPos))){s5=input.charAt(peg$currPos);peg$currPos++;}else{s5=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s4=peg$FAILED;} if(s4!==peg$FAILED){s3=[s3,s4];s2=s3;}else{peg$currPos=s2;s2=peg$FAILED;}}else{peg$currPos=s2;s2=peg$FAILED;} if(s2===peg$FAILED){s2=null;} if(s2!==peg$FAILED){peg$savedPos=s0;s1=peg$c59(s1,s2);s0=s1;}else{peg$currPos=s0;s0=peg$FAILED;}}else{peg$currPos=s0;s0=peg$FAILED;} if(s0===peg$FAILED){s0=peg$currPos;s1=peg$currPos;if(peg$c57.test(input.charAt(peg$currPos))){s2=input.charAt(peg$currPos);peg$currPos++;}else{s2=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c58);}} if(s2!==peg$FAILED){s3=[];if(peg$c55.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}} if(s4!==peg$FAILED){while(s4!==peg$FAILED){s3.push(s4);if(peg$c55.test(input.charAt(peg$currPos))){s4=input.charAt(peg$currPos);peg$currPos++;}else{s4=peg$FAILED;if(peg$silentFails===0){peg$fail(peg$c56);}}}}else{s3=peg$FAILED;} if(s3!==peg$FAILED){s2=[s2,s3];s1=s2;}else{peg$currPos=s1;s1=peg$FAILED;}}else{peg$currPos=s1;s1=peg$FAILED;} if(s1!==peg$FAILED){peg$savedPos=s0;s1=peg$c60(s1);} s0=s1;} return s0;} peg$result=peg$startRuleFunction();if(peg$result!==peg$FAILED&&peg$currPos===input.length){return peg$result;}else{if(peg$result!==peg$FAILED&&peg$currPos<input.length){peg$fail(peg$endExpectation());} throw peg$buildStructuredError(peg$maxFailExpected,peg$maxFailPos<input.length?input.charAt(peg$maxFailPos):null,peg$maxFailPos<input.length?peg$computeLocation(peg$maxFailPos,peg$maxFailPos+1):peg$computeLocation(peg$maxFailPos,peg$maxFailPos));}} return{SyntaxError:peg$SyntaxError,parse:peg$parse};})();
</script>
<script type="text/javascript">
if(!Element.prototype.matches){Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;}
if(!Element.prototype.closest){Element.prototype.closest=function(s){'use strict';var el=this;do{if(el.matches(s)){return el;}
el=el.parentElement||el.parentNode;}while(el!==null&&el.nodeType===1);return null;};}
if(window.NodeList&&!NodeList.prototype.forEach){NodeList.prototype.forEach=function(callback,thisArg){'use strict';thisArg=thisArg||window;for(var i=0;i<this.length;i++){callback.call(thisArg,this[i],i,this);}};}
Number.isInteger=Number.isInteger||function(value){'use strict';return typeof value==='number'&&isFinite(value)&&Math.floor(value)===value;};if(!String.prototype.repeat){String.prototype.repeat=function(count){'use strict';if(this===null){throw new TypeError('can\'t convert '+this+' to object');}
var str=+this;count=+count;if(count!==count){count=0;}
if(count<0){throw new RangeError('repeat count must be non-negative');}
if(count===Infinity){throw new RangeError('repeat count must be less than infinity');}
count=Math.floor(count);if(str.length===0||count===0){return;}
if(str.length*count>=Math.pow(2,28)){throw new RangeError('repeat count must not overflow maximum string size');}
var maxCount=str.length*count;count=Math.floor(Math.log(count)/ Math.log(2));while(count){str+=str;count–;}
str+=str.substring(0,maxCount-str.length);return str;};}
if(typeof window.CustomEvent!=='function'){window.CustomEvent=function(eventName,params){'use strict';var bubbles=params.bubbles||false;var cancelable=params.cancelable||false;var detail=params.detail||null;var event=document.createEvent('CustomEvent');event.initCustomEvent(eventName,bubbles,cancelable,detail);return event;};window.CustomEvent.prototype=window.Event.prototype;}
if(!Array.prototype.includes){Array.prototype.includes=function(valueToFind){'use strict';return this.indexOf(valueToFind)!==-1;};}
(function(){'use strict';var answerSaver;var pinger;function MetaMap(){var metaMap={};document.querySelectorAll('meta').forEach(function(meta){if(meta.name in metaMap){if(Array.isArray(metaMap[meta.name])){metaMap[meta.name].push(meta.content);}else{metaMap[meta.name]=[metaMap[meta.name],meta.content,];}}else{metaMap[meta.name]=meta.content;}});this.getString=function(name){return metaMap[name];};this.getBool=function(name){var value=metaMap[name];if(typeof value==='undefined'){return value;}
return value==='true';};this.getInt=function(name){var value=metaMap[name];if(typeof value==='undefined'){return value;}
return parseInt(value,10);};this.getArray=function(name){var value=metaMap[name];if(Array.isArray(value)){return value;}else if(typeof value!=='undefined'){return[value];}else{return[];}};}
var metaMap=new MetaMap();var appPath=metaMap.getString('app-path');var pageId=metaMap.getString('page-id');var isExaminationPage=metaMap.getBool('examination')===true;var isExaminationForm=metaMap.getBool('examination-form')===true;var timerCheckpoint=metaMap.getInt('timer-checkpoint');var timerCountdown=metaMap.getInt('timer-countdown');var timerTitle=metaMap.getString('timer-title');var basetimeStamp=metaMap.getInt('base-timestamp');var tzOffset=metaMap.getInt('tz-offset');function currentTimestampMs(){return basetimeStamp+window.performance.now();}
function getClientTzOffset(){var clientTzOffset=new Date().getTimezoneOffset()*60*1000;return clientTzOffset-tzOffset;}
function timestampToTzCorrectedDate(timestamp){var date=new Date();var tzDiff=getClientTzOffset();date.setTime(timestamp+tzDiff);return date;}
function debounce(fn,delay){var debounceId=0;return function(){var context=this;var args=arguments;clearTimeout(debounceId);debounceId=setTimeout(function(){fn.apply(context,args);},delay);};}
function keyedDebounce(fn,delay){var map=new Map();return function(key){if(map.has(key)){return map.get(key);}else{var debouncedFn=debounce(fn,delay);map.set(key,debouncedFn);return debouncedFn;}};}
function DialogHandler(){this.previouslyActiveElement=null;this.mainContentWrapper=document.getElementById('main-content-wrapper');this.hiddenMessageContainer=document.getElementById('hidden-message-container');this.activeMessageContainer=document.getElementById('active-message-container');this.openDialog=function(dialogName){var dialog=document.getElementById(dialogName);if(dialog.parentNode===this.activeMessageContainer){return;}
dialog.querySelectorAll('form.ajax-submit.processing-error').forEach(function(form){form.classList.remove('processing-error');});dialog.querySelectorAll('form.ajax-submit fieldset.question-item.invalid').forEach(function(form){form.classList.remove('invalid');});if(!dialog.getAttribute('aria-label')){var dialogLabel=dialog.querySelector('.dialog-label');if(dialogLabel){dialog.setAttribute('aria-label',dialogLabel.textContent);}}
var priority=dialog.dataset.messagePriority;var topmostMessage=this.activeMessageContainer.querySelector('div.message-container:last-of-type');if(!topmostMessage){this.previouslyActiveElement=document.activeElement;}
if(priority==='logout'){this.activeMessageContainer.appendChild(dialog);}else if(priority==='urgent'){var loginDialog=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”logout”]');this.activeMessageContainer.insertBefore(dialog,loginDialog);}else if(priority==='background'){var topmostBackgroundMessage=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”background”]:last-of-type');if(topmostBackgroundMessage){if(topmostMessage.dataset.messagePriority==='background'){this.activeMessageContainer.insertBefore(dialog,topmostMessage);}else{this.activeMessageContainer.insertBefore(dialog,topmostBackgroundMessage.nextSibling);}}else{this.activeMessageContainer.insertBefore(dialog,this.activeMessageContainer.firstChild);}}else{var bottommostUrgentMessage=this.activeMessageContainer.querySelector('div.message-container[data-message-priority=”urgent”]');this.activeMessageContainer.insertBefore(dialog,bottommostUrgentMessage);}
this.mainContentWrapper.style.visibility='hidden';this.mainContentWrapper.setAttribute('aria-hidden','true');var newTopmostMessage=this.activeMessageContainer.querySelector('div.message-container:last-of-type');if(dialog===newTopmostMessage){var firstFocusable=dialog.querySelector('input, select, button, [tabindex]');if(firstFocusable){firstFocusable.focus();}else{dialog.focus();}}};this.closeDialog=function(dialogName){this.hiddenMessageContainer.appendChild(document.getElementById(dialogName));if(!this.activeMessageContainer.querySelector('div.message-container')){this.mainContentWrapper.style.visibility='visible';this.mainContentWrapper.setAttribute('aria-hidden','false');if(this.previouslyActiveElement){this.previouslyActiveElement.focus();this.previouslyActiveElement=null;}}};this.isOpen=function(dialogName){var dialog=document.getElementById(dialogName);return dialog.parentNode===this.activeMessageContainer;};}
var dialogHandler=new DialogHandler();window.openDialog=function(id){dialogHandler.openDialog(id);};window.closeDialog=function(id){dialogHandler.closeDialog(id);};var REQUEST_KEY_HEADER='Request-Key';var PING_JITTER=1000;var PING_TIMEOUT=20*1000;var PING_DEFAULT_WAIT=10*1000;var PING_NETWORK_ERROR_WAIT=20*1000;var PING_TIMEOUT_WAIT=20*1000;var PING_ABORT_WAIT=10*1000;var PING_FAST_ENOUGH=250;var NETWORK_ERROR_MESSAGE_DELAY=30*1000*2;var NETWORK_ERROR_INTERRUPTION_MESSAGE_DELAY=60*1000*1000;var CHECK_FOCUS_INTERVAL=600;var ANSWER_DELAY=300;var ANSWER_TIMEOUT=PING_TIMEOUT;var ANSWER_RETRY_WAIT=PING_DEFAULT_WAIT;var TEXT_AUTOSAVE_FREQUENCY=30*1000;var TEXT_MODIFICATION_CHECK_DELAY=250;var INLINE_TEXT_AUTOSAVE_DELAY=2*1000;var INLINE_SELECT_AUTOSAVE_DELAY=800;var REQUEST_TIMEOUT=PING_TIMEOUT;var NOTIFICATION_DURATION=10*1000;var FORMULA_SVG_SCALE_FACTOR=1.25;function doRequest(method,path,data,successCallback,errorCallback,csrfToken){var request=new XMLHttpRequest();request.open(method,appPath+path,true);request.timeout=REQUEST_TIMEOUT;request.onload=function(){if(this.status>=200&&this.status<400){successCallback.call(this);}else{errorCallback.call(this,'load');}};request.onerror=function(){errorCallback.call(this,'error');};request.onabort=function(){errorCallback.call(this,'abort');};request.ontimeout=function(){errorCallback.call(this,'timeout');};if(csrfToken){request.setRequestHeader(REQUEST_KEY_HEADER,csrfToken);}
request.send(data);}
function onEvent(eventNames,handlerSelector,targetFilter,handler){if(!Array.isArray(eventNames)){eventNames=[eventNames];}
document.querySelectorAll(handlerSelector).forEach(function(handlerElement){eventNames.forEach(function(eventName){handlerElement.addEventListener(eventName,function(e){if(targetFilter===null){return handler.call(handlerElement,e);}else{var element=e.target;while(element){if(element.matches(targetFilter)){return handler.call(element,e);}
if(element===handlerElement){return;}
element=element.parentElement;}}},true);});});}
function documentReady(fn){if(document.attachEvent?document.readyState==='complete':document.readyState!=='loading'){fn();}else{document.addEventListener('DOMContentLoaded',fn);}}
function documentLoaded(fn){if(document.readyState==='complete'){fn();}else{window.addEventListener('load',fn);}}
function objectKeys(obj){var keys=[];for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key)){keys.push(key);}}
return keys;}
function camelToUpper(camelStr){return camelStr.replace(/[\w]([A-Z])/g,function(match){return match[0]+'_'+match[1];}).toUpperCase();}
function PingState(){this.working=true;this.errors={};this.lastSuccessfulPing=0;this.connectionErrorTimer=null;this.requestTimestamp=null;this.lastResponseTime=null;this.setConnectionErrorTimeout=function(fn,timeout){this.clearConnectionErrorTimeout();var pingState=this;this.connectionErrorTimer=setTimeout(function(){pingState.clearConnectionErrorTimeout();fn(pingState);},timeout);};this.clearConnectionErrorTimeout=function(){if(this.connectionErrorTimer){clearTimeout(this.connectionErrorTimer);}
this.connectionErrorTimer=null;};this.resetErrors=function(){this.errors={};};this.clockIn=function(){this.requestTimestamp=performance.now();};this.clockOut=function(){this.lastResponseTime=null;if(this.requestTimestamp!==null){this.lastResponseTime=Math.round(performance.now()-this.requestTimestamp);}};this.asPingStatusJson=function(){var pingStatus={errorStatus:[],lastResponseTime:this.lastResponseTime};for(var property in this.errors){if(Object.prototype.hasOwnProperty.call(this.errors,property)&&this.errors[property]===true){pingStatus.errorStatus.push(camelToUpper(property));}}
return JSON.stringify(pingStatus);};}
function checkFocus(pingState){var hasFocus=document.hasFocus();if(!hasFocus){pingState.errors.lostFocus=true;}}
function svgViewBox(width,height){return'0 0 '+width+' '+height;}
function svgPathDefinition(width,height,classList){function d(template,values){var parts=template.split('?');var interleaved=[];for(var i=0;i<values.length;i++){interleaved.push(parts[i],values[i]);}
interleaved.push(parts[parts.length-1]);return interleaved.join();}
var margin=4;var bezierCurve=width*0.25;if(classList.contains('horizontal')){return d('M?,? L?,?',[margin,margin,width-margin,margin,]);}else if(classList.contains('down')){return d('M?,? C?,? ?,? ?,?',[margin,margin,bezierCurve,margin,width-bezierCurve,height-margin,width-margin,height-margin,]);}else{return d('M?,? C?,? ?,? ?,?',[margin,height-margin,bezierCurve,height-margin,width-bezierCurve,margin,width-margin,margin,]);}}
function createConnectionSvg(referenceElement){var ns='http://www.w3.org/2000/svg';var svg=document.createElementNS(ns,'svg');var width=referenceElement.offsetWidth;var height=referenceElement.offsetHeight;svg.setAttributeNS(null,'viewBox',svgViewBox(width,height));svg.setAttributeNS(null,'preserveAspectRatio','none');svg.setAttributeNS(null,'focusable','false');var path=document.createElementNS(ns,'path');var pathSpec={stroke:'black','stroke-width':3,'stroke-linecap':'round',class:'connection-line',fill:'transparent',d:svgPathDefinition(width,height,referenceElement.classList),};for(var attribute in pathSpec){if(Object.prototype.hasOwnProperty.call(pathSpec,attribute)){path.setAttributeNS(null,attribute,pathSpec[attribute]);}}
svg.appendChild(path);return svg;}
function setConnectionSvg(container,svg){while(container.firstChild){container.removeChild(container.firstChild);}
if(svg){container.appendChild(svg);}}
function getRichTextInputValue(textInput){if(!textInput.matches('.formula-editor')){return textInput.innerHTML;}else{var clone=textInput.cloneNode(true);clone.querySelectorAll('[data-js=”mathEditor”]').forEach(function(mathEditor){mathEditor.parentNode.removeChild(mathEditor);});var images=clone.getElementsByTagName('img');while(images.length>0){var image=images[0];var tex=image.alt;if(tex.length>0){var texSource=document.createElement('tex-source');texSource.innerText=tex;image.parentNode.replaceChild(texSource,image);}else{image.parentNode.removeChild(image);}}
var topLevelChild=textInput.firstChild;while(topLevelChild){var nextChild=topLevelChild.nextSibling;if(topLevelChild.tagName==='DIV'&&topLevelChild.childNodes.length===0){topLevelChild.parentNode.removeChild(topLevelChild);}
topLevelChild=nextChild;}
return clone.innerHTML;}}
function isRichTextInput(textInput){return textInput.classList.contains('formula-editor');}
function getTextInputValue(textInput){return isRichTextInput(textInput)?getRichTextInputValue(textInput):textInput.value;}
function getTextInputName(textInput){return textInput.name?textInput.name:textInput.dataset.name;}
function getTextInputMaxLength(textInput){return textInput.maxLength?textInput.maxLength:parseInt(textInput.dataset.maxLength);}
function encodeMultibyteUnicodeCharactersWithEntities(str){return str.replace(/[^\x00-\xFF]/g,function©{return'&#'+c.charCodeAt(0).toString(10)+';';});}
function scaleSvgLength(value,factor){return value.replace(/^(.+?)([a-z%]*)$/,function(_,value,unit){var scaled=parseFloat(value)*factor;var result=+scaled+unit;return result;});}
function makeOutputJaxContainer(){var container=document.createElement('div');container.style.visibility='hidden';container.style.position='absolute';container.style.width='0';container.style.height='0';container.innerText='\\({}\\)';return container;}
function jaxContainerToSvgUri(container){var svgElem=container.querySelector('svg');if(svgElem){svgElem=svgElem.cloneNode(true);svgElem.setAttribute('width',scaleSvgLength(svgElem.getAttribute('width'),FORMULA_SVG_SCALE_FACTOR));svgElem.setAttribute('height',scaleSvgLength(svgElem.getAttribute('height'),FORMULA_SVG_SCALE_FACTOR));svgElem.setAttribute('xmlns','http://www.w3.org/2000/svg');svgElem.querySelectorAll('use').forEach(function(useElem){if(!useElem.hasAttribute('xmlns:xlink')){useElem.setAttribute('xmlns:xlink','http://www.w3.org/1999/xlink');}});var svgHtml=svgElem.outerHTML;svgHtml=svgHtml.replace(' xlink=',' xmlns:xlink=');svgHtml=svgHtml.replace(/ ns\d+:href/gi,' xlink:href');return'data:image/svg+xml;base64,'+window.btoa(encodeMultibyteUnicodeCharactersWithEntities(svgHtml));}else{return'data:image/svg+xml;base64,'+window.btoa('<'+'?xml version=”1.0” encoding=”UTF-8” standalone=”no”?>\n'+'<svg width=”17px” height=”15px” viewBox=”0 0 17 15” version=”1.1” xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”>\n'+'<title>Group 2</title>\n'+'<defs></defs>\n'+'<g stroke=”none” stroke-width=”1” fill=”none” fill-rule=”evenodd”>\n'+' <g transform=”translate(-241.000000, -219.000000)”>\n'+' <g transform=”translate(209.000000, 207.000000)”>\n'+' <rect x=”-1.58632797e-14” y=”0” width=”80” height=”40”></rect>\n'+' <g transform=”translate(32.000000, 12.000000)”>\n'+' <polygon id=”Combined-Shape” fill=”#9B0000” fill-rule=”nonzero” points=”0 15 8.04006 0 16.08012 15”></polygon>\n'+' <polygon id=”Combined-Shape-path” fill=”#FFFFFF” points=”7 11 9 11 9 13 7 13”></polygon>\n'+' <polygon id=”Combined-Shape-path” fill=”#FFFFFF” points=”7 5 9 5 9 10 7 10”></polygon>\n'+' </g>\n'+' </g>\n'+' </g>\n'+'</g>\n'+'</svg>');}}
function makeRenderFormulaFunction(){var mathjaxContainer=makeOutputJaxContainer();document.body.appendChild(mathjaxContainer);var outputJaxPromise=new Promise(function(resolve){MathJax.Hub.Queue(['Typeset',MathJax.Hub,mathjaxContainer]);MathJax.Hub.Queue(function(){var outputJax=MathJax.Hub.getAllJax(mathjaxContainer)[0];resolve(outputJax);});});return function(latex,callback){outputJaxPromise.then(function(outputJax){MathJax.Hub.Queue(['Text',outputJax,'\\displaystyle{'+latex+'}']);MathJax.Hub.Queue(function(){callback(jaxContainerToSvgUri(mathjaxContainer));});});};}
function loadAnswerCount(callback){var status={total:0,answered:0,saved:0,unsaved:0};var radioItems={};document.querySelectorAll('fieldset > div.radio > div.input-wrap > input').forEach(function(radio){radioItems[radio.name]=true;if(radio.checked){status.answered++;}});status.total+=Object.keys(radioItems).length;var savedRadioCount=document.querySelectorAll('fieldset > div.radio > div.input-wrap.saved').length;status.saved+=savedRadioCount;var unsavedRadioCount=document.querySelectorAll('fieldset > div.radio > div.input-wrap.saving').length;status.unsaved+=unsavedRadioCount;var checkboxItems={};document.querySelectorAll('fieldset > div.checkboxes > div.input-wrap > input').forEach(function(checkbox){checkboxItems[checkbox.name]=true;});var checkboxesCount=Object.keys(checkboxItems).length;status.total+=checkboxesCount;var checkedboxItems={};document.querySelectorAll('fieldset > div.checkboxes > div.input-wrap.saved > input:checked').forEach(function(checkedbox){checkedboxItems[checkedbox.name]=true;});var savedCheckboxesCount=Object.keys(checkedboxItems).length;status.saved+=savedCheckboxesCount;var connectOptionsCount=document.querySelectorAll('fieldset > div.connect-options').length;status.total+=connectOptionsCount;var connectedConnectOptionsItems={};document.querySelectorAll('fieldset div.connect-options input.connection-input:checked').forEach(function(connectionInput){var connectionElement=document.getElementById(connectionInput.dataset.connectionElementId);if(connectionElement.classList.contains('saved')){connectedConnectOptionsItems[connectionInput.dataset.itemId]=true;}});status.saved+=Object.keys(connectedConnectOptionsItems).length;document.querySelectorAll('fieldset > div.text .text-input').forEach(function(textInput){status.total++;if(textInput.dataset.lastSavedValue&&textInput.dataset.lastSavedValue.length>0){status.saved++;}
if(textInput.dataset.lastSavedValue!==getTextInputValue(textInput).trim()){status.unsaved++;}
if(getTextInputValue(textInput).trim()){status.answered++;}});document.querySelectorAll('.inline-item .text-input').forEach(function(textInput){var inputWrap=textInput.closest('.input-wrap');status.total++;var hasContent=getTextInputValue(textInput).trim().length>0;if(inputWrap.classList.contains('saved')&&hasContent){status.saved++;}
if(inputWrap.classList.contains('saving')){status.unsaved++;}
if(hasContent){status.answered++;}});document.querySelectorAll('.inline-item select').forEach(function(select){var inlineStatus=select.parentNode.querySelector('.inline-status');status.total++;if(inlineStatus.classList.contains('saved')){status.saved++;}
if(inlineStatus.classList.contains('saving')){status.unsaved++;}
if(select.value||select.selectedIndex>0){status.answered++;}});callback(status);}
function updateAnswerCount(callback){loadAnswerCount(function(status){var displayAllNotAnswered=status.answered<status.total;document.querySelectorAll('.all-not-answered').forEach(function(element){element.style.display=displayAllNotAnswered?:'none';});var displayUnsavedChanges=status.unsaved>0;document.querySelectorAll('.unsaved-answers').forEach(function(element){element.style.display=displayUnsavedChanges?:'none';});var answerStatusContent=document.getElementById('return-confirmation-answer-status');if(answerStatusContent!==null){var templateText=answerStatusContent.dataset.templateText;answerStatusContent.textContent=templateText.replace('{questions}',status.total).replace('{answers}',status.saved);}
callback();});}
var onloadResizeFunction;documentReady(function(){var enableAutosaving=!!metaMap.getString('answer-key');var connectionCheckOnlyWhenPinging=metaMap.getBool('ping-connection-check-only');pinger={enablePings:!!metaMap.getString('ping-key'),pauseActivatedByPing:false,pingKey:metaMap.getString('ping-key'),currentTimeout:null,eventEndTimeElement:document.querySelector('.event-end-time'),setPingTimeout:function(pingState,timeout){var pinger=this;var jitter=PING_JITTER*2*Math.random()-PING_JITTER;pinger.currentTimeout=setTimeout(function(){pinger.ping(pingState);},timeout+jitter);},ping:function(pingState){if(!this.enablePings){return;}
if(!pingState){pingState=new PingState();setInterval(function(){checkFocus(pingState);},CHECK_FOCUS_INTERVAL);}
var pinger=this;var networkErrorMessage=document.getElementById('network-error-message');var networkErrorOverMessage=document.getElementById('network-error-over-message');var networkInterruptionDialog='network-error';var request=new XMLHttpRequest();request.open('POST',appPath+'/ping',true);request.timeout=PING_TIMEOUT;request.onload=function(){pingState.clockOut();pingState.clearConnectionErrorTimeout();networkErrorMessage.style.display='none';dialogHandler.closeDialog(networkInterruptionDialog);if(pingState.working===false){networkErrorOverMessage.style.display=;}else{networkErrorOverMessage.style.display='none';}
pingState.working=true;if(!pinger.enablePings){return;}
if(this.status>=200&&this.status<400){pinger.setPingTimeout(pingState,PING_DEFAULT_WAIT);pingState.lastSuccessfulPing=currentTimestampMs();pingState.resetErrors();var response=JSON.parse(this.response);if(!connectionCheckOnlyWhenPinging){var setRemainingTime=false;var pauseResponse=response.view.includes('pause');var currentPageIdIsValid=response.view.includes(pageId);if(pauseResponse){if(!pinger.pauseActivatedByPing){setRemainingTime=true;pinger.pauseActivatedByPing=true;dialogHandler.openDialog('paused-examination');document.getElementById('pause-over-message').style.display='none';answerSaver.cancelRetries();}}else{if(pinger.pauseActivatedByPing){setRemainingTime=true;pinger.pauseActivatedByPing=false;dialogHandler.closeDialog('paused-examination');document.getElementById('pause-over-message').style.display=;setTimeout(function(){document.getElementById('pause-over-message').style.display='none';},NOTIFICATION_DURATION);answerSaver.flushAnswers();}
if(isExaminationPage&&response.totalTimeLeft⇐0||isExaminationForm&&response.sectionTimeLeft⇐0){setRemainingTime=true;if(response.totalTimeLeft⇐0){pinger.stopPinging();}
if(!dialogHandler.isOpen('forced-end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('forced-end-examination');});}}
if(pingState.lastResponseTime<PING_FAST_ENOUGH){setRemainingTime=true;}
if(!currentPageIdIsValid){pinger.stopPinging();dialogHandler.openDialog('forced-refresh');window.location.reload();}}
if(setRemainingTime){timerCheckpoint=currentTimestampMs();if(isExaminationForm){timerCountdown=response.sectionTimeLeft;}else{timerCountdown=response.totalTimeLeft;}
if(pinger.eventEndTimeElement){var remainingTime=timestampToTzCorrectedDate(currentTimestampMs()+response.totalTimeLeft*1000+1000);var hours=remainingTime.getHours();var minutes=remainingTime.getMinutes();if(minutes<10){minutes='0'+minutes;}
var time=hours+'.'+minutes;pinger.eventEndTimeElement.textContent=time;}}}}else if(this.status===401){dialogHandler.openDialog('session-invalid');}else if(this.status===409){dialogHandler.openDialog('invalid-page-load-id');}else{pingState.errors.errorStatus=true;pinger.setPingTimeout(pingState,PING_DEFAULT_WAIT);}};request.onerror=function(){if(pingState.working&&pingState.connectionErrorTimer===null){pingState.setConnectionErrorTimeout(function(){networkErrorMessage.style.display=;networkErrorOverMessage.style.display='none';pingState.working=false;pingState.setConnectionErrorTimeout(function(){dialogHandler.openDialog(networkInterruptionDialog);timerCountdown=null;},NETWORK_ERROR_INTERRUPTION_MESSAGE_DELAY-NETWORK_ERROR_MESSAGE_DELAY);},NETWORK_ERROR_MESSAGE_DELAY);}
pingState.errors.connectionError=true;pinger.setPingTimeout(pingState,PING_NETWORK_ERROR_WAIT);};request.onabort=function(){pingState.errors.requestAborted=true;pinger.setPingTimeout(pingState,PING_ABORT_WAIT);};request.ontimeout=function(){pingState.errors.connectionTimeout=true;pinger.setPingTimeout(pingState,PING_TIMEOUT_WAIT);};request.setRequestHeader(REQUEST_KEY_HEADER,pinger.pingKey);pingState.clockIn();request.send(pingState.asPingStatusJson());},stopPinging:function(){if(this.currentTimeout!==null){clearTimeout(this.currentTimeout);}
this.currentTimeout=null;this.enablePings=false;},};if(pinger.enablePings){setTimeout(function(){pinger.ping();},2*1000);}
window.addEventListener('beforeunload',function(event){pinger.stopPinging();delete event.returnValue;});function setFieldsetDisabled(fieldset,disabled){fieldset.querySelectorAll('input, select, button, textarea').forEach(function(element){element.disabled=disabled;});if(disabled){fieldset.classList.add('disabled');fieldset.classList.remove('invalid');}else{fieldset.classList.remove('disabled');}}
var consentQuestionIds=metaMap.getArray('consent-question-id');var agreeAnswerIds=metaMap.getArray('consent-agree-answer-id');function defineConsentSelectionHandler(consentQuestionId){onEvent('change','#'+consentQuestionId,'input',function(){var agreed=false;for(var i=0;i<agreeAnswerIds.length;i++){agreed=agreed||document.querySelector('.form input[value=”'+agreeAnswerIds[i]+'”]').checked;}
document.querySelectorAll('.form fieldset.question-item').forEach(function(fieldset){if(consentQuestionIds.indexOf(fieldset.id)!==-1){setFieldsetDisabled(fieldset,false);}else{setFieldsetDisabled(fieldset,!agreed);}});});}
if(consentQuestionIds.length&&agreeAnswerIds.length){document.querySelectorAll('.form fieldset.question-item').forEach(function(fieldset){if(consentQuestionIds.indexOf(fieldset.id)!==-1){setFieldsetDisabled(fieldset,false);}else{setFieldsetDisabled(fieldset,true);}});for(var i=0;i<consentQuestionIds.length;i++){var consentQuestionId=consentQuestionIds[i];defineConsentSelectionHandler(consentQuestionId);}}
function checkRequiredFields(form){var isValid=true;if(form.matches('.require-all-fields')){form.querySelectorAll('fieldset.question-item:not(.disabled)').forEach(function(fieldset){var checkedElement=fieldset.querySelector('input:checked, option:checked');if(!checkedElement||!checkedElement.value){isValid=false;fieldset.classList.add('invalid');}});if(!isValid){form.classList.add('validation-error');return isValid;}
form.classList.remove('validation-error');}else if(form.matches('.require-credentials')){form.querySelectorAll('div.help-text').forEach(function(helpItem){helpItem.style.display='none';});form.querySelectorAll('div.input.credentials input[type=text], div.input.credentials input[type=password]').forEach(function(input){var val=input.value.trim();if(val===){isValid=false;document.getElementById('error-check-username').style.display=;}});if(!isValid){return isValid;}}
return isValid;}
function createValidationErrorElement(fieldset,htmlContent){if(!htmlContent){return;}
var div=document.createElement('div');div.classList.add('validation-error-message');div.innerHTML=htmlContent;fieldset.insertBefore(div,fieldset.firstChild);}
document.querySelectorAll('form.require-all-fields').forEach(function(form){var formMessage=form.dataset.invalidMessage;form.querySelectorAll('fieldset.question-item').forEach(function(fieldset){createValidationErrorElement(fieldset,fieldset.dataset.invalidMessage||formMessage);});});onEvent('submit','body','form.ajax-submit',function(event){event.preventDefault();var form=this;if(form.classList.contains('processing')){return;}
form.classList.remove('processing-error');if(!checkRequiredFields(form)){return;}
form.classList.add('processing');doRequest('POST',form.getAttribute('action'),new FormData(form),function(){var response=JSON.parse(this.responseText);if(response.location){pinger.stopPinging();window.location.replace(response.location);}else{form.classList.remove('processing');}},function(){form.classList.remove('processing');form.classList.add('processing-error');var event=new CustomEvent('ajax-submit-error',{detail:this});form.dispatchEvent(event);},form.dataset.formKey);});onEvent('change','body','form.require-all-fields input',function(){var form=this.closest('form');form.classList.remove('validation-error');});function AnswerSet(){this.answers={};this.putAnswer=function(answer){var key=answer.itemId;if(answer.subItem2Id){key+='-'+answer.subItemId;}
this.answers[key]=answer;};this.forEach=function(fn){var answers=this.answers;objectKeys(answers).forEach(function(key){fn(answers[key],key);});};this.clone=function(){var answers=this.answers;var clone=new AnswerSet();objectKeys(answers).forEach(function(key){clone.putAnswer(answers[key]);});return clone;};this.diff=function(other){var answers=this.answers;var diff=new AnswerSet();objectKeys(answers).forEach(function(key){var current=answers[key];var otherValue=other.get(key);if(current!==otherValue){diff.putAnswer(current);}});return diff;};this.get=function(key){return this.answers[key];};this.isEmpty=function(){return objectKeys(this.answers).length===0;};}
function AnswerSaver(){var answerKey=metaMap.getString('answer-key');function requestData(answers){var data=[];answers.forEach(function(answer){data.push({itemId:answer.itemId,subItemId:answer.subItemId,subItem2Id:answer.subItem2Id,setValue:answer.setValue,textValue:answer.textValue,timestamp:answer.timestamp,});});return JSON.stringify(data);}
function answerXhr(data,successCallback,errorCallback){var request=new XMLHttpRequest();request.open('POST',appPath+'/answer',true);request.timeout=ANSWER_TIMEOUT;request.onload=function(){if(this.status>=200&&this.status<400){successCallback.call(this);}else{errorCallback.call(this,'load');}};request.onerror=function(){errorCallback.call(this,'error');};request.onabort=function(){errorCallback.call(this,'abort');};request.ontimeout=function(){errorCallback.call(this,'timeout');};request.setRequestHeader(REQUEST_KEY_HEADER,answerKey);request.send(data);}
this.savedTimestamps={};this.awaitingAnswers=new AnswerSet();this.retryTimerId=0;this.save=function(answer){this.awaitingAnswers.putAnswer(answer);this.doAnswerRequest();};this.flushAnswers=function(){if(this.awaitingAnswers.isEmpty()){return;}
this.doAnswerRequest();};this.cancelRetries=function(){if(this.retryTimerId){clearTimeout(this.retryTimerId);}
this.retryTimerId=0;};this.scheduleRetry=function(){var answerSaver=this;answerSaver.cancelRetries();answerSaver.retryTimerId=setTimeout(function(){answerSaver.retryTimerId=0;answerSaver.doAnswerRequest();},ANSWER_RETRY_WAIT);};this.doAnswerRequest=function(){this.cancelRetries();if(this.awaitingAnswers.isEmpty()){return;}
var requestAnswers=this.awaitingAnswers.clone();var data=requestData(requestAnswers);var answerSaver=this;answerXhr(data,function(){var xhr=this;var diff=answerSaver.awaitingAnswers.diff(requestAnswers);answerSaver.awaitingAnswers=diff;requestAnswers.forEach(function(answer,key){var savedTimestamp=answerSaver.savedTimestamps[key];if(typeof savedTimestamp==='undefined'){savedTimestamp=0;}
if(answer.timestamp>savedTimestamp){answer.savedCallBack.call(xhr);answerSaver.savedTimestamps[key]=answer.timestamp;}});if(!answerSaver.awaitingAnswers.isEmpty()){answerSaver.scheduleRetry();}},function(errorType){var retry=false;if(errorType==='load'&&this.status>=400&&this.status<500){if(this.status===401){dialogHandler.openDialog('session-invalid');}else if(this.status===409){dialogHandler.openDialog('invalid-page-load-id');}else if(this.status===429){retry=true;}
if(retry){answerSaver.scheduleRetry();}}else{answerSaver.scheduleRetry();}
requestAnswers.forEach(function(answer,key){if(answer.errorCallback){var savedTimestamp=answerSaver.savedTimestamps[key];if(typeof savedTimestamp==='undefined'){savedTimestamp=0;}
if(answer.timestamp>savedTimestamp){answer.errorCallback.call(this,retry);}}});});};}
answerSaver=new AnswerSaver();function baseSaveAnswer(itemId,options,savedCallBack,errorCallback){answerSaver.save({itemId:itemId,subItemId:options.subItemId,subItem2Id:options.subItem2Id,setValue:options.setValue,textValue:options.textValue,timestamp:Math.round(currentTimestampMs()),savedCallBack:savedCallBack,errorCallback:errorCallback,});}
function makeSaveFunction(delay){var debounced=keyedDebounce(baseSaveAnswer,delay);return function(){debounced(arguments[0]).apply(null,arguments);};}
var saveAnswer=makeSaveFunction(ANSWER_DELAY);var mouseActivatedConnectFromInput=null;onEvent('mouseup','html',null,function(){mouseActivatedConnectFromInput=null;});onEvent('mousedown','.form','.connect-options .connect-options-from-input',function(){mouseActivatedConnectFromInput=this;});function getConnectToContainer(containedElement){return containedElement.closest('.connect-options');}
function switchConnectToOptions(container,connectFromInput){var targetClass;if(connectFromInput&&connectFromInput.checked){targetClass=connectFromInput.dataset.targetClass;}else{targetClass='connect-options-to-default';}
container.querySelectorAll('.connect-options-to, .connection-input').forEach(function(target){var matches=target.matches('.'+targetClass);if(matches){target.classList.add('active');}else{target.classList.remove('active');}});}
function updateContainerActivity(container){var anyFromChecked=container.querySelector('input.connect-options-from-input:checked');if(anyFromChecked){container.classList.add('active');}else{container.classList.remove('active');}}
function clearOtherConnectFromInputs(container,connectFromInput){var referenceId=null;if(connectFromInput){referenceId=connectFromInput.id;}
container.querySelectorAll('.connect-options-from-input').forEach(function(otherInput){var isSame=referenceId===otherInput.id;if(!isSame){otherInput.checked=false;}});updateContainerActivity(container);}
onEvent('change','.form','.connect-options .connect-options-from-input',function(){var container=getConnectToContainer(this);clearOtherConnectFromInputs(container,this);switchConnectToOptions(container,this);});onEvent('focus','.form','.connect-options .connect-options-from-input',function(){if(mouseActivatedConnectFromInput===this){return;}
var container=getConnectToContainer(this);clearOtherConnectFromInputs(container,this);switchConnectToOptions(container,this);});function focusOrChangeAnywhere(e){var targetContainer=getConnectToContainer(e.target);document.querySelectorAll('.form .connect-options').forEach(function(anotherContainer){if(anotherContainer!==targetContainer){clearOtherConnectFromInputs(anotherContainer,null);switchConnectToOptions(anotherContainer,null);anotherContainer.classList.remove('active');}});}
onEvent('focus','html',null,focusOrChangeAnywhere);onEvent('change','html',null,focusOrChangeAnywhere);onEvent('change','.form','.connect-options .connection-input',function(){var connectionInput=this;var fromId=connectionInput.dataset.fromId;var toId=connectionInput.dataset.toId;var container=connectionInput.closest('.connect-options');var connectionElement=document.getElementById(connectionInput.dataset.connectionElementId);var isChecked=connectionInput.checked;if(isChecked){container.querySelectorAll('.connection-input').forEach(function(otherInput){var sameFrom=fromId===otherInput.dataset.fromId;var sameTo=toId===otherInput.dataset.toId;if(sameFrom&&!sameTo||!sameFrom&&sameTo){otherInput.checked=false;var otherConnectionElement=document.getElementById(otherInput.dataset.connectionElementId);setConnectionSvg(otherConnectionElement,null);}});var svg=createConnectionSvg(connectionElement);setConnectionSvg(connectionElement,svg);}
if(enableAutosaving){connectionElement.classList.add('saving');connectionElement.classList.remove('saved');connectionElement.classList.remove('saved-animation');saveAnswer(container.dataset.itemId,{subItemId:connectionInput.dataset.fromId,subItem2Id:connectionInput.dataset.toId,setValue:connectionInput.checked},function(){connectionElement.classList.remove('saving');connectionElement.classList.add('saved');connectionElement.classList.add('saved-animation');if(!isChecked){setConnectionSvg(connectionElement,null);}});}});onEvent('change','.form','.connect-options input',function(){var container=getConnectToContainer(this);updateContainerActivity(container);});function resize(){document.querySelectorAll('.form .connect-options .connection svg').forEach(function(svg){var container=svg.parentNode;if(!container.offsetParent){return;}
var viewBox=svg.getAttribute('viewBox');var width=container.offsetWidth;var height=container.offsetHeight;var referenceBox=svgViewBox(width,height);if(referenceBox!==viewBox){var path=svg.querySelector('path');svg.setAttributeNS(null,'viewBox',referenceBox);path.setAttributeNS(null,'d',svgPathDefinition(width,height,container.classList));}});}
onloadResizeFunction=resize;var resizeTimeoutId=null;window.onresize=function(){if(resizeTimeoutId){clearTimeout(resizeTimeoutId);}
var id=setTimeout(function(){if(id===resizeTimeoutId){resizeTimeoutId=null;}
requestAnimationFrame(resize);},100);resizeTimeoutId=id;};document.querySelectorAll('.form .connect-options input.connection-input:checked').forEach(function(input){var connectionElement=document.getElementById(input.dataset.connectionElementId);var svg=createConnectionSvg(connectionElement);setConnectionSvg(connectionElement,svg);});onEvent('change','.form','.radio input',function(){var fieldset=this.closest('fieldset.question-item');fieldset.classList.remove('invalid');var radio=this;var wrapper=radio.parentNode;var container=radio.closest('fieldset');var allItemButtons=container.querySelectorAll('input');allItemButtons.forEach(function(itemButton){var wrapper=itemButton.parentNode;wrapper.classList.remove('saving');wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');});if(enableAutosaving){wrapper.classList.add('saving');var deleteItem=fieldset.querySelector('.radio.delete-answer');var deleteInput=deleteItem.querySelector('input');var setValue=radio.dataset.setValue!=='false';deleteInput.value=radio.value;saveAnswer(radio.name,{subItemId:radio.value,subItem2Id:null,setValue:setValue},function(){wrapper.classList.remove('saving');if(radio.checked){wrapper.classList.add('saved');wrapper.classList.add('saved-animation');deleteItem.style.visibility='visible';}});}});onEvent('change','.form','.checkboxes input',function(){this.closest('fieldset.question-item').classList.remove('invalid');var wrapper=this.parentNode;wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');if(enableAutosaving){wrapper.classList.add('saving');saveAnswer(this.name,{subItemId:this.value,subItem2Id:null,setValue:this.checked},function(){wrapper.classList.remove('saving');wrapper.classList.add('saved');wrapper.classList.add('saved-animation');});}});function stringToDate(dateString){var tzDiff=getClientTzOffset();var date=new Date(dateString);date.setTime(date.getTime()+tzDiff);return date;}
var textInputs=document.querySelectorAll('.form .text .text-input');var textIntevalId=0;function setupTextAutosaveInterval(saveTextCallback){if(textIntevalId){clearInterval(textIntevalId);}
textIntevalId=setInterval(function(){textInputs.forEach(function(textInput){saveTextCallback(textInput);});},TEXT_AUTOSAVE_FREQUENCY);}
function saveText(textInput){var trimmedValue=getTextInputValue(textInput).trim();if(textInput.dataset.lastSavedValue!==trimmedValue){if(trimmedValue.length>getTextInputMaxLength(textInput)){return;}
if(textInput.dataset.valueBeingSaved===trimmedValue){return;}
textInput.dataset.valueBeingSaved=trimmedValue;var container=textInput.closest('div.text');var savedNotificationElement=container.querySelector('.text-saved-notification');var lastSavedElement=container.querySelector('.status .last-saved');container.classList.add('saving');savedNotificationElement.classList.remove('saved-animation');var itemId=getTextInputName(textInput);var setValue=trimmedValue.length>0;saveAnswer(itemId,{textValue:getTextInputValue(textInput),setValue:setValue},function(){delete textInput.dataset.valueBeingSaved;textInput.dataset.lastSavedValue=trimmedValue;container.classList.remove('changed');container.classList.remove('saving');savedNotificationElement.classList.add('saved-animation');var serverDate=stringToDate(this.getResponseHeader('Date'));var hours=serverDate.getHours();var minutes=serverDate.getMinutes();if(minutes<10){minutes='0'+minutes;}
var time=hours+'.'+minutes;lastSavedElement.textContent=lastSavedElement.dataset.template.replace('{time}',time);setupTextAutosaveInterval(saveText);},function(){container.classList.remove('saving');delete textInput.dataset.valueBeingSaved;});}}
function updateLengthInfo(container,textInput,counter,value){var maxLength=getTextInputMaxLength(textInput);var errorMessageId=getTextInputName(textInput)+'-too-long-answer';var errorMessageElement=document.getElementById(errorMessageId);if(value.length>maxLength){container.classList.add('too-long-answer');if(errorMessageElement&&textInput.getAttribute('aria-invalid')!=='true'){textInput.setAttribute('aria-invalid','true');textInput.setAttribute('aria-errormessage',errorMessageId);errorMessageElement.setAttribute('role','alert');}}else{container.classList.remove('too-long-answer');if(errorMessageElement&&textInput.getAttribute('aria-invalid')!=='false'){textInput.setAttribute('aria-invalid','false');textInput.removeAttribute('aria-errormessage');errorMessageElement.removeAttribute('role');}}
if(counter){counter.textContent=counter.dataset.template.replace('{used}',textInput.value.length).replace('{total}',maxLength);}}
onEvent('click','.form','.text button.save-text',function(){var container=this.closest('div.text');var textInput=container.querySelector('.text-input');saveText(textInput);});onEvent(['input','math-input'],'.form','.text .text-input',function(){var textInput=this;if(textInput.tagName==='TEXTAREA'){textInput.parentNode.setAttribute('data-value',textInput.value);}
if(textInput.dataset.checkTimeoutId){return;}
textInput.dataset.checkTimeoutId=setTimeout(function(){delete textInput.dataset.checkTimeoutId;var container=textInput.closest('div.text');var value=getTextInputValue(textInput).trim();if(textInput.dataset.lastSavedValue!==value){container.classList.add('changed');}else{container.classList.remove('changed');}
updateLengthInfo(container,textInput,container.querySelector('.character-count'),value);},TEXT_MODIFICATION_CHECK_DELAY);});textInputs.forEach(function(textInput){var value=getTextInputValue(textInput).trim();textInput.dataset.lastSavedValue=value;var container=textInput.closest('div.text');updateLengthInfo(container,textInput,container.querySelector('.character-count'),value);});if(enableAutosaving&&textInputs.length>0){setupTextAutosaveInterval(saveText);}
onEvent('focus','.form','.inline.select select',function(){var select=this;if(select.value&&!select.dataset.currentValue){select.dataset.currentValue=select.value;}});var saveInlineSelectAnswer=makeSaveFunction(INLINE_SELECT_AUTOSAVE_DELAY);onEvent('change','.form','.inline.select select',function(){var select=this;var oldValue=select.dataset.currentValue;var inlinStatus=select.parentNode.querySelector('.inline-status');inlinStatus.classList.remove('saving');inlinStatus.classList.remove('saved');inlinStatus.classList.remove('saved-animation');if(enableAutosaving){inlinStatus.classList.add('saving');var subItemId=select.value;var setValue=true;if(!subItemId){setValue=false;subItemId=oldValue;if(!subItemId){for(var i=0;i<select.options.length;i++){var candidateValue=select.options[i].value;if(candidateValue){subItemId=candidateValue;break;}}}}
saveInlineSelectAnswer(select.name,{subItemId:subItemId,subItem2Id:null,setValue:setValue},function(){inlinStatus.classList.remove('saving');inlinStatus.classList.add('saved');inlinStatus.classList.add('saved-animation');});}
if(select.options[0].value===&&select.selectedIndex>0){select.remove(0);}
select.dataset.currentValue=select.options[select.selectedIndex].value;});var saveInlineTextInputAnswer=makeSaveFunction(INLINE_TEXT_AUTOSAVE_DELAY);onEvent('input','.form','.inline.single-line .text-input',function(){var textInput=this;var wrapper=textInput.parentNode;wrapper.classList.remove('saved');wrapper.classList.remove('saved-animation');var savedNotificationElement=wrapper.querySelector('.inline-saved-notification');if(savedNotificationElement){savedNotificationElement.parentNode.removeChild(savedNotificationElement);}
if(enableAutosaving){wrapper.classList.add('saving');var trimmedValue=getTextInputValue(textInput).trim();var setValue=trimmedValue.length>0;saveInlineTextInputAnswer(getTextInputName(textInput),{textValue:getTextInputValue(textInput),setValue:setValue},function(){wrapper.classList.remove('saving');wrapper.classList.add('saved');var savedNotificationElement=document.createElement('DIV');savedNotificationElement.classList.add('saved-animation');savedNotificationElement.classList.add('inline-saved-notification');savedNotificationElement.dataset.savedMessage=wrapper.dataset.savedMessage;wrapper.appendChild(savedNotificationElement);});}});onEvent('click','#active-message-container','div.message-container .close-dialog',function(){var messageContainer=this.closest('div.message-container');dialogHandler.closeDialog(messageContainer.id);});onEvent('click','#logout-button',null,function(){dialogHandler.openDialog('confirm-logout');});onEvent('ajax-submit-error','#login-form',null,function(event){var xhr=event.detail;var status=xhr.status;var errorElement=;if(status===401){errorElement='error-check-username';}else if(status>=400&&status<500){errorElement='error-contact-supervisor';}else if(status>=500&&status<600){errorElement='error-server-failure';}else if(!status){errorElement='error-network-failure';}
document.getElementById(errorElement).style.display=;});onEvent('click','#end-examination-btn',null,function(){if(!dialogHandler.isOpen('end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('end-examination');});}});onEvent('click','.start-examination-button',null,function(event){event.preventDefault();var form=document.getElementById('start-examination-form');form.action=this.dataset.action;form.dataset.formKey=this.dataset.formKey;var question=document.getElementById('confirm-start-examination-question');if(question===null){document.getElementById('confirm-start-examination-btn').click();dialogHandler.openDialog('start-examination');}else{question.textContent=question.dataset.text.replace('{examinationName}',this.dataset.examinationName);dialogHandler.openDialog('start-examination');}});onEvent('submit','#language-choice',null,function(event){event.preventDefault();if(!checkRequiredFields(this)){return;}
var languageInput=this.querySelector('input[name=”language”]:checked');if(languageInput){var language=languageInput.value;dialogHandler.openDialog('confirm-language-'+language);}});function getVerticalScroll(){if(window.pageYOffset!==undefined){return window.pageYOffset;}else{var d=document,r=d.documentElement,b=d.body;return r.scrollTop||b.scrollTop||0;}}
var oldVerticalScroll=getVerticalScroll();var topBarTop=0;var topBarWrap=document.querySelector('div.topbar-wrap');if(topBarWrap){topBarTop=topBarWrap.getBoundingClientRect().top;}
var topBarPlaceholder=document.querySelector('div.topbar-placeholder');function resizeTopBarPlaceholder(){if(topBarPlaceholder){topBarPlaceholder.style.height=+topBarWrap.offsetHeight+'px';}}
resizeTopBarPlaceholder();if(topBarPlaceholder){var scrollThreshold=Math.abs(oldVerticalScroll+topBarTop);if(oldVerticalScroll>scrollThreshold){document.body.classList.add('fixed');}
window.addEventListener('scroll',function(){var verticalScroll=getVerticalScroll();if(oldVerticalScroll>scrollThreshold===verticalScroll>scrollThreshold){return;}
if(verticalScroll>scrollThreshold){document.body.classList.add('fixed');}else{document.body.classList.remove('fixed');}
oldVerticalScroll=verticalScroll;},true);window.addEventListener('resize',function(){resizeTopBarPlaceholder();},true);}
var eTimer;function getRemainingTime(countDown){if(typeof timerCheckpoint==='undefined'){return null;}else{var diff=currentTimestampMs()-timerCheckpoint;return countDown-Math.floor(diff / 1000);}}
var remainingTimeElement=document.getElementById('remaining-time');var remainingTimeTitleElement=document.getElementById('remaining-time-title');function updateTextContent(element,text,callback){if(!element){return;}
if(element.dataset.textContentCache!==text){element.textContent=text;element.dataset.textContentCache=text;if(callback){callback();}}}
function UpdateRemainingTime(){if(typeof timerCheckpoint!=='undefined'&&typeof timerCountdown!=='undefined'&&typeof timerTitle!=='undefined'&&timerCountdown!==null){var timeLeft=getRemainingTime(timerCountdown);if(timerTitle!==null){updateTextContent(remainingTimeTitleElement,timerTitle,resizeTopBarPlaceholder);}
if(timeLeft>60){var text=remainingTimeElement.dataset.templateText.replace('{remainingTime}',Math.ceil(timeLeft / 60));updateTextContent(remainingTimeElement,text,resizeTopBarPlaceholder);}else if(timeLeft>0){updateTextContent(remainingTimeElement,remainingTimeElement.dataset.lessThanMinuteText,resizeTopBarPlaceholder);}else{if(eTimer!==undefined){clearInterval(eTimer);}
updateTextContent(remainingTimeTitleElement,,resizeTopBarPlaceholder);updateTextContent(remainingTimeElement,,resizeTopBarPlaceholder);if(!dialogHandler.isOpen('forced-end-examination')){updateAnswerCount(function(){dialogHandler.openDialog('forced-end-examination');});}}}else{updateTextContent(remainingTimeTitleElement,,resizeTopBarPlaceholder);updateTextContent(remainingTimeElement,,resizeTopBarPlaceholder);}}
(function(){var PRECISION_DECIMALS_SMALL=7;var PRECISION_DECIMALS_BIG=12;var PRECISION_THRESHOLD=0.01;var AVAILABLE_CLASS_NAME='available';var mem;var ans;function displayNotation(number,addParentheses){var rounded;var precision;if(Math.abs(number)<PRECISION_THRESHOLD){precision=PRECISION_DECIMALS_SMALL;}else{precision=PRECISION_DECIMALS_BIG;}
rounded=parseFloat(number.toPrecision(precision));var match=rounded.toString().match(/([^e]*)e([+-])(\d+)$/);var notation=rounded;if(match===null){notation=parseFloat(notation);}else{var coef=parseFloat(match[1]);var exp=parseInt(match[2]+match[3]);notation=coef+'×10^'+exp;if(addParentheses){notation='('+notation+')';}}
return notation;}
function evaluate(){var expr=document.getElementById('expression').value;expr=expr.replace(/\s/g,);expr=expr.replace(/–/g,'-');expr=expr.replace(/ANS/g,'('+ans+')');var result=window.mathParser.parse(expr);return result;}
function memoryInActivation(){var memInAvailable=false;if(document.getElementById('expression').value){try{var a=evaluate();if(!isNaN(a)){memInAvailable=true;}}catch(e){memInAvailable=false;}}
if(memInAvailable){document.getElementById('m_in').classList.add(AVAILABLE_CLASS_NAME);}else{document.getElementById('m_in').classList.remove(AVAILABLE_CLASS_NAME);}}
function handleExpressionChange(fillParentheses,posFromEnd){var expression=document.getElementById('expression').value;if(fillParentheses){var missing=0;for(var i=0;i<expression.length;i++){if(expression[i]==='('){missing++;}else if(expression[i]===')'){missing–;}
if(missing<0){break;}}
if(missing>0){expression+=')'.repeat(missing);}}
expression=expression.replace(/([0-9)eπS])([Asctlaeπ(√])/g,'$1×$2');expression=expression.replace(/\*/g,'×');expression=expression.replace(/-/g,'–');expression=expression.replace(/\g,'÷');expression=expression.replace(/,/g,'.');expression=expression.replace(/[^0-9sincotalgeπ().+–×÷√^ANS]/g,);document.getElementById('expression').value=expression;document.getElementById('expression').selectionStart=expression.length-posFromEnd;document.getElementById('expression').selectionEnd=document.getElementById('expression').selectionStart;document.getElementById('expression').focus();memoryInActivation();}
function calculate(){handleExpressionChange(true,0);var result=Number.NaN;try{result=evaluate();ans=displayNotation(result,true);}catch(e){}
if(isNaN(result)){document.getElementById('ans').classList.remove(AVAILABLE_CLASS_NAME);document.getElementById('result').value=document.getElementById('result').dataset.syntaxErrorMessage;}else{document.getElementById('ans').classList.add(AVAILABLE_CLASS_NAME);document.getElementById('result').value=displayNotation(result,false);}}
function toExpression(str){str=str.toString();var pos=document.getElementById('expression').selectionStart;var original=document.getElementById('expression').value;document.getElementById('expression').value=[original.slice(0,pos),str,original.slice(pos)].join();var posFromEnd=document.getElementById('expression').value.length-pos-str.length;handleExpressionChange(false,posFromEnd);}
onEvent('click','#calc button.key',null,function(){if(this.classList.contains('input')){var content=this.dataset.expression||this.textContent;if(this.dataset.suffix){content+=this.dataset.suffix;}
toExpression(content);}else if(this.id==='m_in'){if(this.classList.contains(AVAILABLE_CLASS_NAME)){try{mem=displayNotation(evaluate(),true);document.getElementById('m_out').classList.add(AVAILABLE_CLASS_NAME);}catch(e){mem=null;document.getElementById('m_out').classList.remove(AVAILABLE_CLASS_NAME);memoryInActivation();}}}else if(this.id==='m_out'){if(this.classList.contains(AVAILABLE_CLASS_NAME)&&mem){toExpression(mem);}}else if(this.id==='ans'){if(this.classList.contains(AVAILABLE_CLASS_NAME)){toExpression('ANS');}}else if(this.id==='delete'){var val=document.getElementById('expression').value;document.getElementById('expression').value=val.substr(0,val.length-1);handleExpressionChange(false,0);}else if(this.id==='clearall'){if(document.getElementById('expression').value===){document.getElementById('result').value=;}else{document.getElementById('expression').value=;}
memoryInActivation();}else if(this.id==='equals'){calculate();}});onEvent('keyup','#calc','input#expression',function(){var posFromEnd=document.getElementById('expression').value.length-document.getElementById('expression').selectionStart;if(event.which===13||event.keyCode===13){calculate();}else{handleExpressionChange(false,posFromEnd);}});onEvent('click','#calcwrapper','div.calctab',function(){var calcwrapper=document.getElementById('calcwrapper');if(calcwrapper.classList.contains('opened')){calcwrapper.classList.add('closed');calcwrapper.classList.remove('opened');}else{calcwrapper.classList.add('opened');calcwrapper.classList.remove('closed');}});})();(function(){var countdown=document.getElementById('countdown');if(countdown){var countdownInterval;var countdownTarget=metaMap.getInt('countdown-target');var templateText=countdown.dataset.template;var countdownFn=function(){var timeLeft=Math.round1)/ 1000);if(timeLeft<1){clearInterval(countdownInterval);countdown.textContent=countdown.dataset.justAMoment;}else{var seconds=timeLeft%60;timeLeft=Math.floor(timeLeft / 60);var minutes=timeLeft;countdown.textContent=templateText.replace('{minutes}',minutes).replace('{seconds}',seconds);}};countdownInterval=setInterval(countdownFn,1000);countdownFn();}})();onEvent('change','body.login #viewUsername','input',function(e){document.getElementById('username').type=e.target.checked?'text':'password';});onEvent('click','body.login','.language-choice button',function(e){e.preventDefault();var loginContent=document.getElementById('content');loginContent.classList.remove('display-language-fi');loginContent.classList.remove('display-language-sv');loginContent.classList.remove('display-language-en');loginContent.classList.add('display-language-'+this.lang);});if(window.MathJax){var renderFormula=makeRenderFormulaFunction();var renderingFormulaLabel=metaMap.getString('rendering-formula-label');var formulaEditorLanguage=metaMap.getString('formula-editor-language');document.querySelectorAll('.formula-editor').forEach(function(element){var existingFormulas=[];element.querySelectorAll('tex-source').forEach(function(texSource){var initFormula=new Promise(function(resolve){var latex=texSource.innerText;var placeholder=document.createElement('div');placeholder.classList.add('tex-loading');placeholder.textContent=renderingFormulaLabel;texSource.parentNode.replaceChild(placeholder,texSource);renderFormula(latex,function(svg){var img=document.createElement('img');img.src=svg;img.alt=latex;placeholder.parentNode.replaceChild(img,placeholder);resolve();});});existingFormulas.push(initFormula);});onEvent('DOMNodeInserted',`[data-name=”${element.dataset.name}”]`,null,function(e){var newElement=e.target;if(newElement.tagName==='SPAN'&&!newElement.closest('div.math-editor')){newElement.replaceWith(…newElement.childNodes);element.normalize();}});Promise.all(existingFormulas).then(function(){makeRichText(element,{baseUrl:'/',updateMathImg:function($img,latex){renderFormula(latex,function(svg){$img.prop({src:svg,alt:latex,});$img.closest('[data-js=”answer”]').trigger('input');});},locale:formulaEditorLanguage,},function(){var event=new CustomEvent('math-input',{detail:element});element.dispatchEvent(event);});element.setAttribute('aria-readonly','false');});});}
eTimer=setInterval(UpdateRemainingTime,1000);UpdateRemainingTime();});documentLoaded(function(){var pageIntegrityEnabled=metaMap.getBool('page-integrity')!==false;function hideLoadingNotification(){var loadingElement=document.getElementById('loading-page-content');if(loadingElement&&loadingElement.parentNode){loadingElement.parentNode.removeChild(loadingElement);}}
function reportError(failureType,extraInfo){doRequest('POST','/report-error',JSON.stringify({pageLoadError:failureType,userAgent:window.navigator.userAgent,extraInfo:extraInfo,}),function(){},function(){},null);}
function loadingFailed(failureType,extraInfo){hideLoadingNotification();dialogHandler.openDialog('page-load-failure');extraInfo.preventedPageLoad=true;reportError(failureType,extraInfo);if(pinger){pinger.stopPinging();}}
var pageEndGuard=document.getElementById('page-end-guard');var endGuardOk=pageEndGuard&&pageEndGuard.parentNode===document.body;if(!endGuardOk&&pageIntegrityEnabled){loadingFailed('html-end-guard',{pageEndGuard:pageEndGuard?pageEndGuard.outerHTML:'<no pageEndGuard found>',parent:pageEndGuard&&pageEndGuard.parentNode?pageEndGuard.parentNode.tagName:'<parent node not found>',});return;}
if(typeof document.styleSheets!=='undefined'&&pageIntegrityEnabled){var origin=window.location.origin;var failedStyleSheets=[];var allGuardsOk=true;for(var i=0;i<document.styleSheets.length;i++){var styleSheet=document.styleSheets[i];var href='<unknown href>';try{href=styleSheet.href;if(!href){href='<no href>';}
if(href.substring(0,origin.length)!==origin){continue;}
var foundGuard=false;var lastSelector='<no rules>';for(var j=0;j<styleSheet.cssRules.length;j++){var selector=styleSheet.cssRules[j].selectorText;if(selector==='div.stylesheet-end-guard'){foundGuard=true;break;}
lastSelector=selector;}
if(!foundGuard){allGuardsOk=false;failedStyleSheets.push(href+': no end guard found, last selector is ”'+lastSelector+'”');}}catch(e){failedStyleSheets.push(href+': '+(e.message?e.message:'<exception with no message>'));}}
if(!allGuardsOk){loadingFailed('css-end-guard',{failedStyleSheets:failedStyleSheets,});}}
var calculator=document.getElementById('calc-wrapper');if(calculator){if(typeof window.mathParser==='undefined'&&pageIntegrityEnabled){var scripts=[];document.querySelectorAll('script').forEach(function(script){scripts.push(script.src);});loadingFailed('calculator',{scripts:scripts,});return;}}
var mainContentWrapper=document.getElementById('main-content-wrapper');if(mainContentWrapper){mainContentWrapper.style.display=;}
hideLoadingNotification();onloadResizeFunction();});})();
</script>
</head>
<!– Calculator begins –>
<div class="calctab open" title="Näytä laskin">laskin</div>
<div class="calctab close" title="Piilota laskin">×</div>
<div id="calc">
<div id="display">
<span class="resultbg">
<input type="text" name="result" id="result" readonly="readonly" value="" data-syntax-error-message="Tarkista syöte" />
</span>
<input type="text" name="expression" id="expression" />
</div>
<div id="keypad">
<div class="keyrow">
<button class="key storage" id="m_in">M<sub>in</sub></button>
<button class="key storage" id="m_out">M<sub>out</sub></button>
<button class="key storage" id="ans">ANS</button>
<button class="key input logarithm" data-suffix="(">log</button>
<button class="key input logarithm" data-suffix="(">ln</button>
</div>
<div class="keyrow">
<button class="key input trigonometry" data-suffix="(">sin</button>
<button class="key input trigonometry" data-suffix="(">cos</button>
<button class="key input trigonometry" data-suffix="(">tan</button>
<button class="key input power" data-expression="^2"><span class="lettersymbol">x</span><sup>2</sup></button>
<button class="key input power">√</button>
</div>
<div class="keyrow">
<button class="key input trigonometry" data-expression="asin(">sin<sup>-1</sup></button>
<button class="key input trigonometry" data-expression="acos(">cos<sup>-1</sup></button>
<button class="key input trigonometry" data-expression="atan(">tan<sup>-1</sup></button>
<button class="key input power" data-expression="×10^">×10<sup class="lettersymbol">x</sup></button>
<button class="key input power lettersymbol" data-expression="^">x<sup>y</sup></button>
</div>
<div class="keyrow">
<button class="key input number">1</button>
<button class="key input number">2</button>
<button class="key input number">3</button>
<button class="key input parenthesis">(</button>
<button class="key input parenthesis">)</button>
</div>
<div class="keyrow">
<button class="key input number">4</button>
<button class="key input number">5</button>
<button class="key input number">6</button>
<button class="key input arithmetics">+</button>
<button class="key input arithmetics">–</button>
</div>
<div class="keyrow">
<button class="key input number">7</button>
<button class="key input number">8</button>
<button class="key input number">9</button>
<button class="key input arithmetics">×</button>
<button class="key input arithmetics">÷</button>
</div>
<div class="keyrow">
<button class="key input number">.</button>
<button class="key input number">0</button>
<button class="key input number" data-expression="–">(-)</button>
<button class="key input number lettersymbol">π</button>
<button class="key input number lettersymbol">e</button>
</div>
<div class="keyrow">
<button class="key delete" id="delete">⌫</button>
<button class="key delete" id="clearall">AC</button>
<div class="nokey"></div>
<div class="nokey"></div>
<button class="key equals" id="equals">=</button>
</div>
</div> </div>
<!– Calculator ends –></html>
| Summary by Month | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Month | Daily Average | Monthly Totals | |||||||
| Hits | Files | Pages | Visitors | Hits | Files | Pages | Visitors | Bytes | |
| 2019-10 | 8541 | 7223 | 1302 | 5 | 17081 | 14446 | 2604 | 10 | 370.9 MB |
| 2019-11 | 12656 | 11003 | 1561 | 3 | 354361 | 308078 | 43710 | 86 | 27.9 GB |
| 2019-12 | 5757 | 4037 | 2418 | 7 | 178467 | 100936 | 74958 | 206 | 5.9 GB |
| 2020-01 | 2381 | 1891 | 960 | 8 | 73811 | 43493 | 29760 | 253 | 1.5 GB |
| 2020-02 | 3199 | 2025 | 1295 | 11 | 92783 | 54684 | 37541 | 320 | 3.7 GB |
| 2020-03 | 4544 | 2333 | 2259 | 25 | 140864 | 69998 | 70029 | 775 | 3.8 GB |
| 2020-04 | 8156 | 4652 | 3449 | 33 | 244683 | 139562 | 103478 | 984 | 10.2 GB |
| 2020-05 | 9111 | 5174 | 3882 | 45 | 282441 | 160394 | 120342 | 1410 | 9.8 GB |
| 2020-06 | 10102 | 4144 | 5830 | 52 | 303056 | 124310 | 174902 | 1554 | 9.4 GB |
| 2020-07 | 8711 | 1310 | 7414 | 52 | 270041 | 39308 | 229834 | 1618 | 8.2 GB |
| 2020-08 | 16288 | 5285 | 10845 | 91 | 504928 | 163835 | 336195 | 2835 | 13.5 GB |
| 2020-09 | 20308 | 9493 | 10425 | 118 | 609243 | 284797 | 312759 | 3534 | 20.7 GB |
| 2020-10 | 21395 | 7981 | 13199 | 124 | 663245 | 247411 | 409169 | 3856 | 23.2 GB |
| 2020-11 | 21995 | 11644 | 9820 | 110 | 659835 | 349308 | 294593 | 3311 | 23.8 GB |
| 2020-12 | 26286 | 15109 | 10313 | 125 | 814866 | 468379 | 319703 | 3884 | 37.9 GB |
| 2021-01 | 33349 | 21860 | 10976 | 186 | 1033819 | 677660 | 340256 | 5762 | 41.1 GB |
| 2021-02 | 36173 | 24200 | 11190 | 235 | 1012832 | 677598 | 313317 | 6570 | 44 GB |
| 2021-03 | 45939 | 33162 | 11979 | 271 | 1424105 | 1028014 | 371356 | 8392 | 54 GB |
| 2021-04 | 48306 | 33077 | 14748 | 267 | 1449188 | 992310 | 442432 | 8005 | 51.6 GB |
| 2021-05 | 66599 | 40167 | 25626 | 302 | 2064569 | 1245177 | 794406 | 9353 | 59 GB |
| 2021-06 | 38049 | 16132 | 21253 | 191 | 1141482 | 483972 | 637577 | 5715 | 28.4 GB |
| 2021-07 | 26825 | 7109 | 19012 | 140 | 831575 | 220379 | 589372 | 4338 | 17.1 GB |
| 2021-08 | 147491 | 30805 | 115176 | 252 | 4572221 | 954955 | 3570456 | 7807 | 61.9 GB |
| 2021-09 | 62566 | 41097 | 20487 | 312 | 1876988 | 1232901 | 614606 | 9348 | 57 GB |
| 2021-10 | 57359 | 38092 | 18630 | 271 | 1778129 | 1180852 | 577530 | 8401 | 51.7 GB |
| 2021-11 | 65168 | 42238 | 21988 | 313 | 1955046 | 1267125 | 659649 | 9394 | 58.5 GB |
| 2021-12 | 47084 | 27166 | 19347 | 244 | 1459604 | 842146 | 599757 | 7557 | 40.5 GB |
| 2022-01 | 60903 | 40164 | 19812 | 282 | 1887993 | 1245084 | 614172 | 8740 | 53.1 GB |
| 2022-02 | 66486 | 42180 | 23252 | 289 | 1861612 | 1181038 | 651062 | 8099 | 39.4 GB |
| 2022-03 | 60559 | 39445 | 20154 | 270 | 1877329 | 1222795 | 624774 | 8377 | 42.9 GB |
| 2022-04 | 58188 | 37427 | 18880 | 244 | 1745641 | 1122820 | 566401 | 7305 | 31.9 GB |
| 2022-05 | 65324 | 45209 | 19407 | 261 | 2025044 | 1401479 | 601617 | 8104 | 35.9 GB |
| 2022-06 | 28025 | 15095 | 11748 | 117 | 840751 | 452848 | 352439 | 3518 | 12.8 GB |
| 2022-07 | 21371 | 8791 | 10870 | 85 | 662501 | 272521 | 336970 | 2624 | 9.3 GB |
| 2022-08 | 48666 | 33319 | 14385 | 210 | 1508642 | 1032888 | 445936 | 6514 | 30.9 GB |
| 2022-09 | 61455 | 43124 | 17192 | 251 | 1843652 | 1293733 | 515774 | 7530 | 40.2 GB |
| 2022-10 | 45456 | 31423 | 13199 | 197 | 1409130 | 974100 | 409170 | 6107 | 33.5 GB |
| 2022-11 | 52273 | 35779 | 15454 | 225 | 1568190 | 1073370 | 463620 | 6754 | 31.8 GB |
| 2022-12 | 41158 | 23459 | 15547 | 164 | 1275910 | 727223 | 481943 | 5087 | 22.5 GB |
| 2023-01 | 50611 | 37049 | 13048 | 224 | 1568940 | 1148520 | 404490 | 6938 | 27.3 GB |
| 2023-02 | 65220 | 45956 | 18059 | 252 | 1826160 | 1286760 | 505650 | 7067 | 32.8 GB |
| 2023-03 | 66369 | 44075 | 20614 | 288 | 2057430 | 1366320 | 639030 | 8936 | 33.4 GB |
| 2023-04 | 60631 | 43216 | 16803 | 271 | 1818930 | 1296480 | 504090 | 8125 | 30.3 GB |
| 2023-05 | 69027 | 46717 | 20723 | 290 | 2139840 | 1448220 | 642420 | 8977 | 41.7 GB |
| 2023-06 | 45740 | 28806 | 15582 | 203 | 1372200 | 864180 | 467460 | 6083 | 48.7 GB |
| 2023-07 | 31214 | 18833 | 11782 | 202 | 967630 | 583831 | 365241 | 6247 | 15.1 GB |
| 2023-08 | 66574 | 42392 | 22658 | 282 | 2063790 | 1314150 | 702390 | 8733 | 35 GB |
| 2023-09 | 127972 | 93305 | 33195 | 785 | 3839160 | 2799150 | 995850 | 23548 | 70.9 GB |
| 2023-10 | 172125 | 143371 | 27634 | 782 | 5335860 | 4444500 | 856650 | 24236 | 111.7 GB |
| 2023-11 | 183727 | 152328 | 29549 | 801 | 5511810 | 4569840 | 886470 | 24032 | 114.8 GB |
| 2023-12 | 134190 | 106600 | 26069 | 888 | 4159890 | 3304590 | 808140 | 27539 | 77 GB |
| 2024-01 | 143330 | 108827 | 33248 | 997 | 4443240 | 3373650 | 1030680 | 30902 | 93.7 GB |
| 2024-02 | 110136 | 74570 | 33350 | 630 | 3193950 | 2162520 | 967140 | 18264 | 59 GB |
| 2024-03 | 104978 | 74144 | 29148 | 639 | 3254320 | 2298472 | 903596 | 19814 | 48.6 GB |
| 2024-04 | 118997 | 81211 | 35324 | 703 | 3569910 | 2436330 | 1059720 | 21096 | 51.4 GB |
| 2024-05 | 115313 | 70489 | 42880 | 686 | 3574710 | 2185170 | 1329270 | 21277 | 70.8 GB |
| 2024-06 | 69283 | 32764 | 34633 | 486 | 2078490 | 982920 | 1038990 | 14592 | 26.5 GB |
| 2024-07 | 72952 | 27311 | 43431 | 387 | 2261520 | 846630 | 1346370 | 12003 | 180.6 GB |
| 2024-08 | 135891 | 63533 | 70811 | 471 | 4212610 | 1969525 | 2195133 | 14609 | 165.5 GB |
| 2024-09 | 178642 | 87890 | 89053 | 605 | 5359260 | 2636700 | 2671590 | 18147 | 159.3 GB |
| 2024-10 | 175606 | 71851 | 102165 | 507 | 5443800 | 2227380 | 3167100 | 15715 | 152.7 GB |
| 2024-11 | 162924 | 81748 | 79598 | 501 | 4887730 | 2452442 | 2387948 | 15024 | 160.2 GB |
| 2024-12 | 94468 | 47053 | 44745 | 414 | 2928510 | 1458630 | 1387080 | 12831 | 235 GB |
| 2025-01 | 116950 | 73201 | 42123 | 584 | 3625440 | 2269230 | 1305810 | 18092 | 120 GB |
| 2025-02 | 128084 | 66413 | 47667 | 565 | 3586350 | 1859550 | 1334670 | 15818 | 64.2 GB |
| 2025-03 | 183835 | 99351 | 53085 | 637 | 5698890 | 3079890 | 1645650 | 19739 | 3898 GB |
| 2025-04 | 111123 | 62326 | 44851 | 549 | 3333690 | 1869780 | 1345530 | 16460 | 8148.9 GB |
| 2025-05 | 106386 | 55987 | 45330 | 513 | 3297970 | 1735593 | 1405219 | 15889 | 3871.3 GB |
| 2025-06 | 69485 | 22410 | 41094 | 301 | 2084550 | 672300 | 1232820 | 9029 | 3927.8 GB |
| 2025-07 | 199732 | 158285 | 39642 | 229 | 6191700 | 4906830 | 1228890 | 7090 | 186.2 GB |
| 2025-08 | 81075 | 35373 | 43329 | 374 | 2513321 | 1096549 | 1343214 | 11607 | 81.6 GB |
| 2025-09 | 118137 | 57998 | 58051 | 483 | 3544110 | 1739940 | 1741530 | 14486 | 2328.2 GB |
| 2025-10 | 87077 | 37922 | 47155 | 541 | 2699400 | 1175580 | 1461810 | 16771 | 7561.6 GB |
| 2025-11 | 99537 | 39444 | 57874 | 376 | 2986110 | 1183320 | 1736220 | 11273 | 7688.9 GB |
| 2025-12 | 73201 | 25488 | 45296 | 376 | 2269230 | 790140 | 1404180 | 11646 | 3053 GB |
| 2026-01 | 366151 | 314908 | 47756 | 457 | 11350680 | 9762150 | 1480440 | 14163 | 391.3 GB |
| 2026-02 | 70931 | 32628 | 35920 | 426 | 1986060 | 913590 | 1005750 | 11939 | 241.1 GB |
| 2026-03 | 79837 | 35179 | 39630 | 448 | 2474940 | 1090560 | 1228530 | 13877 | 182.1 GB |
| 2026-04 | 66588 | 34973 | 27396 | 409 | 1997640 | 1049190 | 821880 | 12262 | 135.6 GB |
| 2026-05 | 134869 | 103692 | 22928 | 338 | 4180950 | 3214440 | 710760 | 10487 | 341.5 GB |
| 2026-06 | 429742 | 355415 | 14974 | 319 | 9024578 | 7463705 | 314454 | 6702 | 86.7 GB |
| Monthly Statistics for 2026-06 | ||
|---|---|---|
| Total hits | 7778159 | |
| Total files | 7463705 | |
| Total pages | 314454 | |
| Total visitors | 3739 | |
| Total bytes | 1.5 GB | |
| avg | max | |
| Hits per hour | 376024.08333333 | 429034 |
| Hits per day | 429741.80952381 | 1751303 |
| Files per day | 355414.52380952 | 1502623 |
| Pages per day | 14974 | 89100 |
| Bytes per day | 4.1 GB | 14.2 GB |
| Hits by Status Code | ||
| Status - | 710 | |
| Status 200 - OK | 7778159 | |
| Status 404 - Not Found | 1242730 | |
| Status 400 - Bad Request | 542 | |
| Status 412 - Precondition Failed | 2437 | |
| Daily Access Statistics for 2026-06 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Day | Hits | Media | Pages | Visitors | Traffic | |||||
| 01 | 73590 | 0.82% | 44340 | 0.59% | 21060 | 6.70% | 373 | 5.57% | 1.5 GB | 1.78% |
| 02 | 75720 | 0.84% | 56940 | 0.76% | 16650 | 5.29% | 299 | 4.46% | 2 GB | 2.32% |
| 03 | 44490 | 0.49% | 32340 | 0.43% | 11280 | 3.59% | 299 | 4.46% | 1.4 GB | 1.57% |
| 04 | 144480 | 1.60% | 33930 | 0.45% | 89100 | 28.33% | 281 | 4.19% | 1.4 GB | 1.63% |
| 05 | 66465 | 0.74% | 48000 | 0.64% | 16830 | 5.35% | 243 | 3.63% | 1.8 GB | 2.06% |
| 06 | 53386 | 0.59% | 39254 | 0.53% | 12484 | 3.97% | 214 | 3.19% | 1.4 GB | 1.59% |
| 07 | 35452 | 0.39% | 25559 | 0.34% | 9274 | 2.95% | 217 | 3.24% | 1 GB | 1.20% |
| 08 | 55661 | 0.62% | 34074 | 0.46% | 19320 | 6.14% | 202 | 3.01% | 1.4 GB | 1.56% |
| 09 | 49550 | 0.55% | 23246 | 0.31% | 24816 | 7.89% | 214 | 3.19% | 970 MB | 1.09% |
| 10 | 34163 | 0.38% | 20118 | 0.27% | 13140 | 4.18% | 200 | 2.98% | 761.5 MB | 0.86% |
| 11 | 25935 | 0.29% | 14324 | 0.19% | 10568 | 3.36% | 231 | 3.45% | 459.1 MB | 0.52% |
| 12 | 694731 | 7.70% | 568616 | 7.62% | 27109 | 8.62% | 484 | 7.22% | 6.1 GB | 7.08% |
| 13 | 1509453 | 16.73% | 1303093 | 17.46% | 6702 | 2.13% | 409 | 6.10% | 12.1 GB | 14.00% |
| 14 | 1751303 | 19.41% | 1502623 | 20.13% | 8343 | 2.65% | 577 | 8.61% | 13.8 GB | 15.90% |
| 15 | 1484419 | 16.45% | 1248808 | 16.73% | 13422 | 4.27% | 473 | 7.06% | 11.8 GB | 13.56% |
| 16 | 1042571 | 11.55% | 903941 | 12.11% | 6753 | 2.15% | 464 | 6.92% | 14.2 GB | 16.33% |
| 17 | 800976 | 8.88% | 679236 | 9.10% | 3008 | 0.96% | 332 | 4.95% | 6.6 GB | 7.63% |
| 18 | 479283 | 5.31% | 393208 | 5.27% | 1750 | 0.56% | 216 | 3.22% | 3.5 GB | 4.07% |
| 19 | 335549 | 3.72% | 273014 | 3.66% | 1518 | 0.48% | 337 | 5.03% | 2.4 GB | 2.83% |
| 20 | 243828 | 2.70% | 199458 | 2.67% | 1268 | 0.40% | 591 | 8.82% | 1.9 GB | 2.22% |
| 21 | 23573 | 0.26% | 19583 | 0.26% | 59 | 0.02% | 46 | 0.69% | 180.3 MB | 0.20% |
| Hourly Access Statistics for 2026-06 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Hour | Hits | Media | Pages | Visitors | Traffic | |||||
| 0 | 373536 | 4.14% | 310677 | 4.16% | 6586 | 2.09% | 169 | 2.52% | 8.5 GB | 9.84% |
| 1 | 353736 | 3.92% | 298303 | 4.00% | 5708 | 1.82% | 186 | 2.78% | 2.9 GB | 3.35% |
| 2 | 338124 | 3.75% | 279694 | 3.75% | 9532 | 3.03% | 155 | 2.31% | 2.9 GB | 3.35% |
| 3 | 329461 | 3.65% | 275887 | 3.70% | 7350 | 2.34% | 190 | 2.83% | 2.9 GB | 3.30% |
| 4 | 351178 | 3.89% | 283120 | 3.79% | 18741 | 5.96% | 294 | 4.39% | 3.1 GB | 3.62% |
| 5 | 335424 | 3.72% | 270722 | 3.63% | 15120 | 4.81% | 264 | 3.94% | 2.8 GB | 3.25% |
| 6 | 299028 | 3.31% | 254282 | 3.41% | 7077 | 2.25% | 296 | 4.42% | 2.9 GB | 3.34% |
| 7 | 359933 | 3.99% | 295820 | 3.96% | 19626 | 6.24% | 379 | 5.66% | 3.7 GB | 4.25% |
| 8 | 397298 | 4.40% | 327913 | 4.39% | 8520 | 2.71% | 324 | 4.83% | 3.6 GB | 4.20% |
| 9 | 420268 | 4.66% | 352314 | 4.72% | 9228 | 2.93% | 343 | 5.12% | 4.1 GB | 4.71% |
| 10 | 429034 | 4.75% | 351248 | 4.71% | 11596 | 3.69% | 351 | 5.24% | 3.8 GB | 4.34% |
| 11 | 424019 | 4.70% | 364360 | 4.88% | 13018 | 4.14% | 359 | 5.36% | 4.1 GB | 4.70% |
| 12 | 411243 | 4.56% | 332631 | 4.46% | 18322 | 5.83% | 323 | 4.82% | 3.9 GB | 4.50% |
| 13 | 389598 | 4.32% | 315501 | 4.23% | 17421 | 5.54% | 412 | 6.15% | 3.3 GB | 3.81% |
| 14 | 394956 | 4.38% | 318158 | 4.26% | 13280 | 4.22% | 339 | 5.06% | 3.5 GB | 4.03% |
| 15 | 400831 | 4.44% | 338492 | 4.54% | 18083 | 5.75% | 308 | 4.60% | 4.1 GB | 4.70% |
| 16 | 390756 | 4.33% | 330359 | 4.43% | 8682 | 2.76% | 263 | 3.92% | 4.2 GB | 4.81% |
| 17 | 381339 | 4.23% | 325839 | 4.37% | 7427 | 2.36% | 264 | 3.94% | 3.4 GB | 3.91% |
| 18 | 389385 | 4.31% | 309935 | 4.15% | 28225 | 8.98% | 311 | 4.64% | 3.6 GB | 4.14% |
| 19 | 375701 | 4.16% | 317115 | 4.25% | 19763 | 6.28% | 292 | 4.36% | 3.5 GB | 3.98% |
| 20 | 370076 | 4.10% | 298737 | 4.00% | 17038 | 5.42% | 286 | 4.27% | 2.8 GB | 3.22% |
| 21 | 362926 | 4.02% | 294295 | 3.94% | 7406 | 2.36% | 231 | 3.45% | 3 GB | 3.44% |
| 22 | 380803 | 4.22% | 312026 | 4.18% | 18453 | 5.87% | 193 | 2.88% | 3 GB | 3.46% |
| 23 | 365925 | 4.05% | 306277 | 4.10% | 8252 | 2.62% | 170 | 2.54% | 3.2 GB | 3.74% |
| Top User Agents in 2026-06 | |||
|---|---|---|---|
| # | Name | Hits | |
| 1 | 314454 | 100.00% | |