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">&times;</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="&Hat;2"><span class="lettersymbol">x</span><sup>2</sup></button>
              <button class="key input power">&radic;</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="&times;10&Hat;">&times;10<sup class="lettersymbol">x</sup></button>
              <button class="key input power lettersymbol" data-expression="&Hat;">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">&#8211;</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">&times;</button>
              <button class="key input arithmetics">&divide;</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="&#8211;">(-)</button>
              <button class="key input number lettersymbol">&pi;</button>
              <button class="key input number lettersymbol">e</button>
          </div>
          <div class="keyrow">
              <button class="key delete" id="delete">&#x232b;</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
MonthDaily AverageMonthly Totals
HitsFilesPagesVisitorsHitsFilesPagesVisitorsBytes
2019-1046843961714593677922142810203.4 MB
2019-11694060348563194327168946239708615.3 GB
2019-1231572214132679786955352411062063.2 GB
2020-01130610375268404772385116320253859.3 MB
2020-0217551111710115088129988205873202 GB
2020-03249212801239257724838386384037752.1 GB
2020-044473255118923313418176534567469845.6 GB
2020-0549962837212945154887879586599414105.4 GB
2020-0655402272319752166192681709591415545.2 GB
2020-0747777194066521480872155612603816184.5 GB
2020-08893228985947912768968984518436528357.4 GB
2020-091113752065717118334101156179171513353411.3 GB
2020-101173343777238124363715135677224383385612.7 GB
2020-111206263855385110361845191556161551331113 GB
2020-121441582865656125446862256853175321388420.8 GB
2021-0118288119886019186566933371620186592576222.5 GB
2021-0219837132716136235555424371586171819657024.1 GB
2021-0325201181926572271781235563941203728839229.6 GB
2021-0426491181398087267794716544170242624800528.3 GB
2021-053652222027140533021132183682839435642935332.4 GB
2021-0620866884711655191625974265404349639571515.6 GB
2021-071471038981042614045602512085332320443389.4 GB
2021-0880882168936316125225073475236851957992780733.9 GB
2021-093431122537112353121029316676107337042934831.3 GB
2021-10314552088910216271975103647564316710840128.3 GB
2021-113573723163120583131072122694875361743939432.1 GB
2021-12258201489710610244800428461822328899755722.2 GB
2022-013339822025108652821035351682788336804874029.1 GB
2022-023646023131127512891020884647666357034809921.6 GB
2022-033321021631110522701029503670565342618837723.5 GB
2022-04319102052510354244957287615740310607730517.5 GB
2022-053582324792106432611110508768553329919810419.7 GB
2022-06153698278644211746105724833619327335187 GB
2022-0711720482159618536330714944718479026245.1 GB
2022-0826697182787891210827594566610244630651417 GB
2022-09346812433497042511040434730014291125753022.6 GB
2022-1025758178067479197798507551990231863610719 GB
2022-1129621202758757225888641608243262718675418 GB
2022-1223316132888808164722799411934273046508712.7 GB
2023-0128680209947394224889066650828229211693815.5 GB
2023-023695826042102332521034824729164286535706718.6 GB
2023-033760924976116812881165877774248362117893619 GB
2023-04343582448995222711030727734672285651812517.1 GB
2023-053911526473117432901212576820658364038897723.6 GB
2023-0625919163238830203777580489702264894608327.6 GB
2023-071769710680667820254860733107520700962478.6 GB
2023-083772524022128392821169481744685398021873319.8 GB
2023-09725175287318811785217552415861855643152354840.2 GB
2023-10975378124415659782302365425185504854352423663.3 GB
2023-111041128631916744801312335925895765023332403265 GB
2023-12760416040614772888235727118726014579462753943.6 GB
2024-01812216166918840997251783619117355840523090253.1 GB
2024-02624114225618898630180990512254285480461826433.4 GB
2024-03594974202216520639184439813026765121081981427.6 GB
2024-04674324602020017703202294913805876005082109629.2 GB
2024-05653443994424298686202566912382637532532127740.1 GB
2024-0639260185661962548611778115569885887611459215 GB
2024-07413401547624611387128152847975776294312003102.3 GB
2024-087699835998401234712386929111594512438191460993.8 GB
2024-0910123049804504636053036914149413015139011814790.3 GB
2024-109951040716578935073084820126218217946901571586.5 GB
2024-119231746317451055012769497138951013531611502490.8 GB
2024-12535322666325355414165948982655778601212831133.1 GB
2025-01662714148123870584205441612858977399591809268 GB
2025-02725813763427011565203226510537457563131581836.4 GB
2025-03104173562993008263732293711745271932535197392208.9 GB
2025-0462970353182541654918890911059542762467164604617.7 GB
2025-056029531730256915131869133983637796416158892193.7 GB
2025-06393751269923287301118124538097069859890292225.8 GB
2025-071131828969522464229350863027805376963717090105.5 GB
2025-0845935200412455037414239996212697610481160746.2 GB
2025-096694432866328964832008329985966986867144861319.3 GB
2025-104934421489267215411529660666162828359167714284.9 GB
2025-115640422352327953761692129670548983858112734357 GB
2025-124148114443256683761285897447746795702116461730 GB
2026-01200763172972259034576223649536213480298914163215.6 GB
2026-02378301740219157426105923248724853640011939128.6 GB
2026-0342580187622113644813199685816326552161387797.1 GB
2026-0435514186521461140910654085595684383361226272.3 GB
2026-057193055302122283382229840171436837907210487182.2 GB
2026-064140730255984825857969739331412802936099.1 GB
Monthly Statistics for 2026-06
Total hits521343
Total files393314
Total pages128029
Total visitors2182
Total bytes628.8 MB
avgmax
Hits per hour24154.04166666735896
Hits per day41406.928571429140695
Files per day30254.923076923113868
Pages per day9848.384615384647520
Bytes per day666.4 MB1.2 GB
Hits by Status Code
Status - 264
Status 200 - OK521343
Status 404 - Not Found56899
Status 400 - Bad Request247
Status 412 - Precondition Failed944
Daily Access Statistics for 2026-06
DayHitsMediaPagesVisitorsTraffic
01392486.77%236486.01%112328.77%37310.34%841.9 MB9.02%
02403846.97%303687.72%88806.94%2998.28%1.1 GB11.75%
03237284.09%172484.39%60164.70%2998.28%744.7 MB7.98%
047705613.29%180964.60%4752037.12%2817.79%769.4 MB8.25%
05354556.12%256006.51%89767.01%2436.73%975.3 MB10.45%
06273884.72%201165.11%64085.01%2145.93%721 MB7.73%
07172382.97%124133.16%45143.53%2176.01%517.1 MB5.54%
08253654.38%155523.95%87646.85%2025.60%630.8 MB6.76%
09207243.57%96802.46%104108.13%2145.93%403.3 MB4.32%
10124772.15%73781.88%47543.71%2005.54%281.6 MB3.02%
1178331.35%43841.11%31202.44%2316.40%139.8 MB1.50%
1214069524.27%11386828.95%68515.35%48413.41%1.2 GB13.63%
1311209919.34%9496324.14%5840.46%3529.75%936.8 MB10.04%
1470.00%00.00%00.00%00.00%0 B0.00%
Hourly Access Statistics for 2026-06
HourHitsMediaPagesVisitorsTraffic
0177403.06%134183.41%20891.63%982.72%336.5 MB3.61%
1148752.57%112132.85%18991.48%1082.99%214.1 MB2.29%
2152912.64%91622.33%43073.36%742.05%244.4 MB2.62%
3114971.98%78832.00%25381.98%922.55%208.2 MB2.23%
4155642.68%79112.01%59464.64%942.60%278.1 MB2.98%
5161652.79%99602.53%53844.21%1564.32%295.7 MB3.17%
6157822.72%121103.08%27962.18%1734.79%371.3 MB3.98%
7277114.78%175774.47%83316.51%2246.21%523.3 MB5.61%
8270134.66%207615.28%29052.27%2196.07%433.4 MB4.65%
9346425.98%288937.35%32952.57%2035.62%589.5 MB6.32%
10319325.51%241266.13%41273.22%2356.51%467 MB5.01%
11358966.19%290337.38%50743.96%2226.15%627.4 MB6.73%
12316515.46%205335.22%82166.42%1674.63%569.5 MB6.10%
13276574.77%181134.61%73555.74%2075.74%388.3 MB4.16%
14271374.68%184434.69%53004.14%1594.41%416.1 MB4.46%
15322315.56%220915.62%82966.48%1744.82%492.8 MB5.28%
16251044.33%193734.93%34502.69%1684.66%609.7 MB6.53%
17239024.12%191144.86%24631.92%1574.35%425.2 MB4.56%
18326245.63%168104.27%1377010.76%1574.35%540.2 MB5.79%
19304305.25%178014.53%94437.38%1353.74%385.7 MB4.13%
20208843.60%110972.82%71185.56%1233.41%228.9 MB2.45%
21225773.89%117873.00%21171.65%842.33%220.4 MB2.36%
22243724.20%138083.51%88946.95%872.41%240.3 MB2.58%
23170202.94%122973.13%29162.28%932.58%223.9 MB2.40%
Top User Agents in 2026-06
#NameHits
1128029100.00%
1)
countdownTarget-currentTimestampMs(