From abd11823034fa2f661692d471b9aefcf2a164723 Mon Sep 17 00:00:00 2001 From: Sam Potts Date: Mon, 11 Jun 2018 16:45:40 +1000 Subject: [PATCH] Merge --- demo/dist/demo.css | 2 +- demo/dist/demo.js | 110 +++++- demo/dist/demo.js.map | 2 +- demo/dist/demo.min.js | 2 +- demo/dist/demo.min.js.map | 2 +- dist/plyr.css | 2 +- dist/plyr.js | 585 ++++++++++++++++++-------------- dist/plyr.js.map | 2 +- dist/plyr.min.js | 2 +- dist/plyr.min.js.map | 2 +- dist/plyr.polyfilled.js | 585 ++++++++++++++++++-------------- dist/plyr.polyfilled.js.map | 2 +- dist/plyr.polyfilled.min.js | 2 +- dist/plyr.polyfilled.min.js.map | 2 +- 14 files changed, 764 insertions(+), 538 deletions(-) diff --git a/demo/dist/demo.css b/demo/dist/demo.css index cad9e4c6..9067e7a3 100644 --- a/demo/dist/demo.css +++ b/demo/dist/demo.css @@ -1 +1 @@ -@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file +@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:300;src:url(https://cdn.plyr.io/static/fonts/gordita-light.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-light.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:400;src:url(https://cdn.plyr.io/static/fonts/gordita-regular.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-regular.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:500;src:url(https://cdn.plyr.io/static/fonts/gordita-medium.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-medium.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:600;src:url(https://cdn.plyr.io/static/fonts/gordita-bold.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-bold.woff) format("woff")}@font-face{font-display:swap;font-family:Gordita;font-style:normal;font-weight:900;src:url(https://cdn.plyr.io/static/fonts/gordita-black.woff2) format("woff2"),url(https://cdn.plyr.io/static/fonts/gordita-black.woff) format("woff")}@keyframes fadein{0%{opacity:0}100%{opacity:1}}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a,button.faux-link{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}*,::after,::before{box-sizing:border-box}body,html{display:flex;width:100%}html{background:linear-gradient(to left top,#4dc1ff,#0074b3);background-attachment:fixed;height:100%}body{align-items:center;display:flex;flex-direction:column;min-height:100%}.grid{flex:1;overflow:auto}main{margin:auto;padding-bottom:1px;text-align:center}aside{align-items:center;background:#fff;color:#55646b;display:flex;flex-shrink:0;justify-content:center;padding:15px;position:relative;text-align:center;text-shadow:none;width:100%}aside .icon{fill:#4baaf4;margin-right:10px}aside p{margin:0}aside a,aside button.faux-link{color:#4baaf4}aside a.tab-focus,aside button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(75,170,244,.35);outline:0}.grid{margin:0 auto;padding:20px}@media only screen and (min-width:768px){.grid{align-items:center;display:flex;max-width:1260px;width:100%}.grid>*{flex:1}}html{font-size:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:15px;font-size:.9375rem;color:#fff;font-family:Gordita,Avenir,"Helvetica Neue",sans-serif;font-weight:500;line-height:1.75;text-shadow:0 1px 1px rgba(0,0,0,.15)}button,input,select,textarea{font:inherit}p,small{margin:0 0 20px}small{font-size:13px;font-size:.8125rem;display:block}h1{font-size:64px;font-size:4rem;font-weight:600;letter-spacing:-.025em;line-height:1.2;margin:0 0 20px}.button,.button__count{align-items:center;background:#fff;border:0;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.1);color:#55646b;display:inline-flex;padding:15px;position:relative;text-shadow:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}.button{font-weight:600;padding-left:20px;padding-right:20px;transition:all .2s ease}.button:focus,.button:hover{color:#343f4a}.button:focus::after,.button:hover::after{display:none}.button:hover{box-shadow:0 2px 2px rgba(0,0,0,.1);transform:translateY(-1px)}.button:focus{outline:0}.button.tab-focus{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}.button:active{transform:translateY(1px)}.button--with-count{display:inline-flex}.button--with-count .button .icon{flex-shrink:0}.button__count{animation:fadein .2s ease;margin-left:10px}.button__count::before{border:5px solid transparent;border-left-width:0;border-right-color:#fff;content:'';height:0;position:absolute;right:100%;top:50%;transform:translateY(-50%);width:0}header{padding-bottom:20px;text-align:center}header .call-to-action{margin-top:30px}@media only screen and (min-width:768px){header{margin-right:60px;max-width:360px;padding-bottom:40px;text-align:left}}.icon{fill:currentColor;height:16px;vertical-align:-3px;width:16px}a svg,button svg,button.faux-link svg,label svg{pointer-events:none}.btn .icon,a .icon,button.faux-link .icon{margin-right:6px}button.faux-link{background:0 0;border:0;border-radius:0;cursor:pointer;font:inherit;line-height:1.75;margin:0;padding:0;position:relative;text-align:inherit;text-shadow:inherit;-moz-user-select:text;vertical-align:baseline;width:auto}a,button.faux-link{border-bottom:1px dotted currentColor;color:#fff;font-weight:600;position:relative;text-decoration:none;transition:all .2s ease}a::after,button.faux-link::after{background:currentColor;content:'';height:1px;left:50%;position:absolute;top:100%;transform:translateX(-50%);transition:width .2s ease;width:0}a:focus,a:hover,button.faux-link:focus,button.faux-link:hover{border-bottom-color:transparent;outline:0}a:focus::after,a:hover::after,button.faux-link:focus::after,button.faux-link:hover::after{width:100%}a.tab-focus,button.tab-focus.faux-link{box-shadow:0 0 0 3px rgba(255,255,255,.35);outline:0}a.no-border::after,button.no-border.faux-link::after{display:none}li,ul{list-style:none;margin:0;padding:0}audio,img,video{max-width:100%;vertical-align:middle}nav{display:flex;justify-content:center;margin-bottom:20px}video{max-width:100%;vertical-align:middle}.plyr{border-radius:4px;box-shadow:0 2px 5px rgba(0,0,0,.2);margin:20px auto}.plyr.plyr--audio{max-width:480px}.plyr__video-wrapper::after{border:1px solid rgba(0,0,0,.15);border-radius:inherit;bottom:0;content:'';left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.plyr__cite{display:none;margin-top:20px}.plyr__cite .icon{margin-right:4px}.plyr--audio~ul .plyr__cite--audio,.plyr--video:not(.plyr--youtube):not(.plyr--vimeo)~ul .plyr__cite--video,.plyr--vimeo~ul .plyr__cite--vimeo,.plyr--youtube~ul .plyr__cite--youtube{display:block}@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:inherit;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui button.faux-link,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:12px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:13px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:13px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:13px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:11px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:12px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:11px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.no-border{border:0}[hidden]{display:none}.sr-only{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;opacity:.001;overflow:hidden;padding:0;position:absolute;width:1px} \ No newline at end of file diff --git a/demo/dist/demo.js b/demo/dist/demo.js index 3f6273ec..23575805 100644 --- a/demo/dist/demo.js +++ b/demo/dist/demo.js @@ -767,11 +767,12 @@ function getLocationOrigin() { // Oh dear IE10... if (!document.location.origin) { - document.location.origin = + return ( document.location.protocol + '//' + document.location.hostname + - (document.location.port ? ':' + document.location.port : ''); + (document.location.port ? ':' + document.location.port : '') + ); } return document.location.origin; @@ -1866,7 +1867,7 @@ Raven.prototype = { // webpack (using a build step causes webpack #1617). Grunt verifies that // this value matches package.json during build. // See: https://github.com/getsentry/raven-js/issues/465 - VERSION: '3.25.2', + VERSION: '3.26.1', debug: false, @@ -2032,7 +2033,7 @@ Raven.prototype = { if (isFunction$1(options)) { args = func || []; func = options; - options = undefined; + options = {}; } return this.wrap(options, func).apply(this, args); @@ -2043,7 +2044,7 @@ Raven.prototype = { * * @param {object} options A specific set of options for this context [optional] * @param {function} func The function to be wrapped in a new context - * @param {function} func A function to call before the try/catch wrapper [optional, private] + * @param {function} _before A function to call before the try/catch wrapper [optional, private] * @return {function} The newly wrapped functions with a context */ wrap: function(options, func, _before) { @@ -2156,8 +2157,9 @@ Raven.prototype = { _promiseRejectionHandler: function(event) { this._logDebug('debug', 'Raven caught unhandled promise rejection:', event); this.captureException(event.reason, { - extra: { - unhandledPromiseRejection: true + mechanism: { + type: 'onunhandledrejection', + handled: false } }); }, @@ -2834,7 +2836,15 @@ Raven.prototype = { } var originalCallback = args[0]; if (isFunction$1(originalCallback)) { - args[0] = self.wrap(originalCallback); + args[0] = self.wrap( + { + mechanism: { + type: 'instrument', + data: {function: orig.name} + } + }, + originalCallback + ); } // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it @@ -2861,7 +2871,15 @@ Raven.prototype = { // preserve arity try { if (fn && fn.handleEvent) { - fn.handleEvent = self.wrap(fn.handleEvent); + fn.handleEvent = self.wrap( + { + mechanism: { + type: 'instrument', + data: {target: global, function: 'handleEvent', handler: fn.name} + } + }, + fn.handleEvent + ); } } catch (err) { // can sometimes get 'Permission denied to access property "handle Event' @@ -2901,7 +2919,20 @@ Raven.prototype = { return orig.call( this, evtName, - self.wrap(fn, undefined, before), + self.wrap( + { + mechanism: { + type: 'instrument', + data: { + target: global, + function: 'addEventListener', + handler: fn.name + } + } + }, + fn, + before + ), capture, secure ); @@ -2935,7 +2966,17 @@ Raven.prototype = { 'requestAnimationFrame', function(orig) { return function(cb) { - return orig(self.wrap(cb)); + return orig( + self.wrap( + { + mechanism: { + type: 'instrument', + data: {function: 'requestAnimationFrame', handler: orig.name} + } + }, + cb + ) + ); }; }, wrappedBuiltIns @@ -2998,7 +3039,15 @@ Raven.prototype = { function wrapProp(prop, xhr) { if (prop in xhr && isFunction$1(xhr[prop])) { fill$1(xhr, prop, function(orig) { - return self.wrap(orig); + return self.wrap( + { + mechanism: { + type: 'instrument', + data: {function: prop, handler: orig.name} + } + }, + orig + ); }); // intentionally don't track filled methods on XHR instances } } @@ -3063,7 +3112,19 @@ Raven.prototype = { xhr, 'onreadystatechange', function(orig) { - return self.wrap(orig, undefined, onreadystatechangeHandler); + return self.wrap( + { + mechanism: { + type: 'instrument', + data: { + function: 'onreadystatechange', + handler: orig.name + } + } + }, + orig, + onreadystatechangeHandler + ); } /* intentionally don't track this instrumentation */ ); } else { @@ -3287,10 +3348,16 @@ Raven.prototype = { return globalServer; }, - _handleOnErrorStackInfo: function() { + _handleOnErrorStackInfo: function(stackInfo, options) { + options = options || {}; + options.mechanism = options.mechanism || { + type: 'onerror', + handled: false + }; + // if we are intentionally ignoring errors via onerror, bail out if (!this._ignoreOnError) { - this._handleStackInfo.apply(this, arguments); + this._handleStackInfo(stackInfo, options); } }, @@ -3427,6 +3494,19 @@ Raven.prototype = { options ); + // Move mechanism from options to exception interface + // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be + // too much + if (!data.exception.mechanism && data.mechanism) { + data.exception.mechanism = data.mechanism; + delete data.mechanism; + } + + data.exception.mechanism = objectMerge$1(data.exception.mechanism || {}, { + type: 'generic', + handled: true + }); + // Fire away! this._send(data); }, diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map index baea9481..dfa9b3a3 100644 --- a/demo/dist/demo.js.map +++ b/demo/dist/demo.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["global","stringify","_window","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n document.location.origin =\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '');\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.25.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["global","stringify","_window","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","require$$0","TraceKit","md5","RavenConfigError","Raven","RavenConstructor","isLive","window","location","host","config","install","addEventListener","context","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","document","querySelectorAll","types","currentType","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {target: global, function: 'handleEvent', handler: fn.name}\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: fn.name\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: 'requestAnimationFrame', handler: orig.name}\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: orig.name}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: orig.name\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(data.exception.mechanism || {}, {\n type: 'generic',\n handled: true\n });\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js index 57798670..d03a20e9 100644 --- a/demo/dist/demo.min.js +++ b/demo/dist/demo.min.js @@ -1,2 +1,2 @@ -"object"==typeof navigator&&function(){"use strict";var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var e,r=(function(t,e){function r(t,e){for(var r=0;r0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=e.call(this,i,a))}else n.push(a);return null==t?a instanceof Error?function(t){var e={stack:t.stack,message:t.message,name:t.name};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}(a):a:t.call(this,i,a)}}(t.exports=function(t,e,r,o){return JSON.stringify(t,n(e,o),r)}).getSerialize=n}(e={exports:{}},e.exports),e.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{});function o(t){return void 0===t}function i(t){return"[object Object]"===Object.prototype.toString.call(t)}function a(t){return"[object String]"===Object.prototype.toString.call(t)}function s(t){return"[object Array]"===Object.prototype.toString.call(t)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(t){return!1}}function l(t,e){var r,n;if(o(t.length))for(r in t)p(t,r)&&e.call(null,r,t[r]);else if(n=t.length)for(r=0;r ".length;t&&n++<5&&!("html"===(e=f(t))||n>1&&o+r.length*i+e.length>=80);)r.push(e),o+=e.length,t=t.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(t,e){return!d(t,e)&&(t=t.values[0],e=e.values[0],t.type===e.type&&t.value===e.value&&(r=t.stacktrace,n=e.stacktrace,(!o(r)||!o(n))&&g(t.stacktrace,e.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(t){if("string"!=typeof t)return{};var e=t.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=e[6]||"",n=e[8]||"";return{protocol:e[2],host:e[4],path:e[5],relative:e[5]+r+n}},fill:function(t,e,r,n){if(null!=t){var o=t[e];t[e]=r(o),t[e].__raven__=!0,t[e].__orig__=o,n&&n.push([t,e,o])}},safeJoin:function(t,e){if(!s(t))return"";for(var r=[],n=0;no?t(e,n-1):a},serializeKeysForMessage:function(t,e){if("number"==typeof t||"string"==typeof t)return t.toString();if(!Array.isArray(t))return"";if(0===(t=t.filter(function(t){return"string"==typeof t})).length)return"[object has no keys]";if(e="number"!=typeof e?m:e,t[0].length>=e)return t[0];for(var r=t.length;r>0;r--){var n=t.slice(0,r).join(", ");if(!(n.length>e))return r===t.length?n:n+"…"}return""},sanitize:function(t,e){if(!s(e)||s(e)&&0===e.length)return t;var n,o=h(e),a="********";try{n=JSON.parse(r(t))}catch(e){return t}return function t(e){return s(e)?e.map(function(e){return t(e)}):i(e)?Object.keys(e).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=t(e[n]),r},{}):e}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var t,e,r=[],n=null,o=null,i=null;function a(t,e){var n=null;if(!e||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[t].concat(k.call(arguments,2)))}catch(t){n=t}if(n)throw n}}function s(e,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(e)?e.message:e;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var p,h={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(p=u.match(O))&&(f=p[1],u=p[2]);h.func=S,a({name:f,message:u,url:C(),stack:[h]},!0)}return!!t&&t.apply(this,arguments)}function c(){var t=i,e=n;n=null,i=null,o=null,a.apply(null,[t,!1].concat(e))}function l(t,e){var r=k.call(arguments,1);if(i){if(o===t)return;c()}var a=w.computeStackTrace(t);if(i=a,o=t,n=r,setTimeout(function(){o===t&&c()},a.incomplete?2e3:0),!1!==e)throw t}return l.subscribe=function(n){e||(t=x.onerror,x.onerror=s,e=!0),r.push(n)},l.unsubscribe=function(t){for(var e=r.length-1;e>=0;--e)r[e]===t&&r.splice(e,1)},l.uninstall=function(){e&&(x.onerror=t,e=!1,t=void 0),r=[]},l}(),w.computeStackTrace=function(){function t(t){if(void 0!==t.stack&&t.stack){for(var e,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=t.stack.split("\n"),u=[],p=(/^(.*) is undefined$/.exec(t.message),0),h=l.length;p eval")>-1&&(e=s.exec(r[3]))?(r[3]=e[1],r[4]=e[2],r[5]=null):0!==p||r[5]||void 0===t.columnNumber||(u[0].column=t.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",_=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(_){var v=_[1];"~"===v.charAt(0)&&(v=("undefined"==typeof document||null==document.location?"":(document.location.origin||(document.location.origin=document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:"")),document.location.origin))+v.slice(1)),n.url=v.slice(0,-4)}}}u.push(n)}return u.length?{name:t.name,message:t.message,url:C(),stack:u}:null}}function e(t,e,r,n){var o={url:e,line:r};if(o.url&&o.line){if(t.incomplete=!1,o.func||(o.func=S),t.stack.length>0&&t.stack[0].url===o.url){if(t.stack[0].line===o.line)return!1;if(!t.stack[0].line&&t.stack[0].func===o.func)return t.stack[0].line=o.line,!1}return t.stack.unshift(o),t.partial=!0,!0}return t.incomplete=!0,!1}function r(t,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,p=r.caller;p&&!u;p=p.caller)if(p!==n&&p!==w.report){if(a={url:null,func:S,line:null,column:null},p.name?a.func=p.name:(i=s.exec(p.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(t){}l[""+p]?u=!0:l[""+p]=!0,c.push(a)}o&&c.splice(0,o);var h={name:t.name,message:t.message,url:C(),stack:c};return e(h,t.sourceURL||t.fileName,t.line||t.lineNumber,t.message||t.description),h}function n(e,n){var o=null;n=null==n?0:+n;try{if(o=t(e))return o}catch(t){if(w.debug)throw t}try{if(o=r(e,n+1))return o}catch(t){if(w.debug)throw t}return{name:e.name,message:e.message,url:C()}}return n.augmentStackTraceWithInitialElement=e,n.computeStackTraceFromStackProp=t,n}();var R=w;function j(t,e){var r=(65535&t)+(65535&e);return(t>>16)+(e>>16)+(r>>16)<<16|65535&r}function T(t,e,r,n,o,i){return j((a=j(j(e,t),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function D(t,e,r,n,o,i,a){return T(e&r|~e&n,t,e,o,i,a)}function F(t,e,r,n,o,i,a){return T(e&n|r&~n,t,e,o,i,a)}function A(t,e,r,n,o,i,a){return T(e^r^n,t,e,o,i,a)}function B(t,e,r,n,o,i,a){return T(r^(e|~n),t,e,o,i,a)}function M(t,e){var r,n,o,i,a;t[e>>5]|=128<>>9<<4)]=e;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r>5]>>>e%32&255);return r}function L(t){var e,r=[];for(r[(t.length>>2)-1]=void 0,e=0;e>5]|=(255&t.charCodeAt(e/8))<>>4&15)+"0123456789abcdef".charAt(15&e);return n}function I(t){return unescape(encodeURIComponent(t))}function U(t){return function(t){return H(M(L(t),8*t.length))}(I(t))}function N(t,e){return function(t,e){var r,n,o=L(t),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*t.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(e)),512+8*e.length),H(M(a.concat(n),640))}(I(t),I(e))}var q=function(t,e,r){return e?r?N(e,t):P(N(e,t)):r?U(t):P(U(t))};function z(t){this.name="RavenConfigError",this.message=t}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(t,e,r){var n=t[e],o=t;if(e in t){var i="warn"===e?"warning":e;t[e]=function(){var t=[].slice.call(arguments),a=E.safeJoin(t," "),s={level:i,logger:"console",extra:{arguments:t}};"assert"===e?!1===t[0]&&(a="Assertion failed: "+(E.safeJoin(t.slice(1)," ")||"console.assert"),s.extra.arguments=t.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,t)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,tt=E.isString,et=E.isArray,rt=E.isEmptyObject,nt=E.each,ot=E.objectMerge,it=E.truncate,at=E.objectFrozen,st=E.hasKey,ct=E.joinRegExp,lt=E.urlencode,ut=E.uuid4,pt=E.htmlTreeAsString,ht=E.isSameException,ft=E.isSameStacktrace,dt=E.parseUrl,gt=E.fill,_t=E.supportsFetch,vt=E.supportsReferrerPolicy,mt=E.serializeKeysForMessage,bt=E.serializeException,yt=E.sanitize,Et=W,wt="source protocol user pass host port path".split(" "),xt=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function kt(){return+new Date}var St="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},Ot=St.document,Ct=St.navigator;function Rt(t,e){return Q(e)?function(r){return e(r,t)}:e}function jt(){for(var t in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Ot),this._hasNavigator=!Z(Ct),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:St.SENTRY_RELEASE&&St.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:vt()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=St.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=kt(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=St.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[t]=this._originalConsole[t]}jt.prototype={VERSION:"3.25.2",debug:!1,TraceKit:R,config:function(t,e){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!t)return r;var n=r._globalOptions;e&&nt(e,function(t,e){"tags"===t||"extra"===t||"user"===t?r._globalContext[t]=e:n[t]=e}),r.setDSN(t),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ct(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ct(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ct(n.whitelistUrls),n.includePaths=ct(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=ot(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=ot(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var t=this;return t.isSetup()&&!t._isRavenInstalled&&(R.report.subscribe(function(){t._handleOnErrorStackInfo.apply(t,arguments)}),t._globalOptions.captureUnhandledRejections&&t._attachPromiseRejectionHandler(),t._patchFunctionToString(),t._globalOptions.instrument&&t._globalOptions.instrument.tryCatch&&t._instrumentTryCatch(),t._globalOptions.autoBreadcrumbs&&t._instrumentBreadcrumbs(),t._drainPlugins(),t._isRavenInstalled=!0),Error.stackTraceLimit=t._globalOptions.stackTraceLimit,this},setDSN:function(t){var e=this._parseDSN(t),r=e.path.lastIndexOf("/"),n=e.path.substr(1,r);this._dsn=t,this._globalKey=e.user,this._globalSecret=e.pass&&e.pass.substr(1),this._globalProject=e.path.substr(r+1),this._globalServer=this._getGlobalServer(e),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(t,e,r){return Q(t)&&(r=e||[],e=t,t=void 0),this.wrap(t,e).apply(this,r)},wrap:function(t,e,r){var n=this;if(Z(e)&&!Q(t))return t;if(Q(t)&&(e=t,t=void 0),!Q(e))return e;try{if(e.__raven__)return e;if(e.__raven_wrapper__)return e.__raven_wrapper__}catch(t){return e}function o(){var o=[],i=arguments.length,a=!t||t&&!1!==t.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(t,arguments[i]):arguments[i];try{return e.apply(this,o)}catch(e){throw n._ignoreNextOnError(),n.captureException(e,t),e}}for(var i in e)st(e,i)&&(o[i]=e[i]);return o.prototype=e.prototype,e.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=e,o},uninstall:function(){return R.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(t){this._logDebug("debug","Raven caught unhandled promise rejection:",t),this.captureException(t.reason,{extra:{unhandledPromiseRejection:!0}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),St.addEventListener&&St.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return St.removeEventListener&&St.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(t,e){if(e=ot({trimHeadFrames:0},e||{}),V(t)&&t.error)t=t.error;else{if($(t)||X(t)){var r=t.name||($(t)?"DOMError":"DOMException"),n=t.message?r+": "+t.message:r;return this.captureMessage(n,ot(e,{stacktrace:!0,trimHeadFrames:e.trimHeadFrames+1}))}if(J(t))t=t;else{if(!Y(t))return this.captureMessage(t,ot(e,{stacktrace:!0,trimHeadFrames:e.trimHeadFrames+1}));e=this._getCaptureExceptionOptionsFromPlainObject(e,t),t=new Error(e.message)}}this._lastCapturedException=t;try{var o=R.computeStackTrace(t);this._handleStackInfo(o,e)}catch(e){if(t!==e)throw e}return this},_getCaptureExceptionOptionsFromPlainObject:function(t,e){var r=Object.keys(e).sort(),n=ot(t,{message:"Non-Error exception captured with keys: "+mt(r),fingerprint:[q(r)],extra:t.extra||{}});return n.extra.__serialized__=bt(e),n},captureMessage:function(t,e){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(t)){var r,n=ot({message:t+=""},e=e||{});try{throw new Error(t)}catch(t){r=t}r.name=null;var o=R.computeStackTrace(r),i=et(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||e&&e.stacktrace){n.fingerprint=null==n.fingerprint?t:n.fingerprint,(e=ot({trimHeadFrames:0},e)).trimHeadFrames+=1;var s=this._prepareFrames(o,e);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=et(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(t){var e=ot({timestamp:kt()/1e3},t);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(e);if(G(r)&&!rt(r))e=r;else if(!1===r)return this}return this._breadcrumbs.push(e),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(t){var e=[].slice.call(arguments,1);return this._plugins.push([t,e]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(t){return this._globalContext.user=t,this},setExtraContext:function(t){return this._mergeContext("extra",t),this},setTagsContext:function(t){return this._mergeContext("tags",t),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(t){return this._globalOptions.environment=t,this},setRelease:function(t){return this._globalOptions.release=t,this},setDataCallback:function(t){var e=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Rt(e,t),this},setBreadcrumbCallback:function(t){var e=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Rt(e,t),this},setShouldSendCallback:function(t){var e=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Rt(e,t),this},setTransport:function(t){return this._globalOptions.transport=t,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var t=St.RavenConfig;t&&this.config(t.dsn,t.config).install()},showReportDialog:function(t){if(Ot){var e=(t=t||{}).eventId||this.lastEventId();if(!e)throw new K("Missing eventId");var r=t.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(e),o+="&dsn="+n(r);var i=t.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Ot.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Ot.head||Ot.body).appendChild(s)}},_ignoreNextOnError:function(){var t=this;this._ignoreOnError+=1,setTimeout(function(){t._ignoreOnError-=1})},_triggerEvent:function(t,e){var r,n;if(this._hasDocument){for(n in e=e||{},t="raven"+t.substr(0,1).toUpperCase()+t.substr(1),Ot.createEvent?(r=Ot.createEvent("HTMLEvents")).initEvent(t,!0,!0):(r=Ot.createEventObject()).eventType=t,e)st(e,n)&&(r[n]=e[n]);if(Ot.createEvent)Ot.dispatchEvent(r);else try{Ot.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(t){}}},_breadcrumbEventHandler:function(t){var e=this;return function(r){if(e._keypressTimeout=null,e._lastCapturedEvent!==r){var n;e._lastCapturedEvent=r;try{n=pt(r.target)}catch(t){n=""}e.captureBreadcrumb({category:"ui."+t,message:n})}}},_keypressEventHandler:function(){var t=this;return function(e){var r;try{r=e.target}catch(t){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=t._keypressTimeout;o||t._breadcrumbEventHandler("input")(e),clearTimeout(o),t._keypressTimeout=setTimeout(function(){t._keypressTimeout=null},1e3)}}},_captureUrlChange:function(t,e){var r=dt(this._location.href),n=dt(e),o=dt(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.relative),r.protocol===o.protocol&&r.host===o.host&&(t=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:e,from:t}})},_patchFunctionToString:function(){var t=this;t._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?t._originalFunctionToString.apply(this.__orig__,arguments):t._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var t=this,e=t._wrappedBuiltIns;function r(e){return function(r,n){for(var o=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return r&&t._captureUrlChange(t._lastHref,r+""),e.apply(this,arguments)}};gt(St.history,"pushState",c,r),gt(St.history,"replaceState",c,r)}if(e.console&&"console"in St&&console.log){var l=function(e,r){t.captureBreadcrumb({message:e,level:r.level,category:"console"})};nt(["debug","info","warn","error","log"],function(t,e){Et(console,e,l)})}},_restoreBuiltIns:function(){for(var t;this._wrappedBuiltIns.length;){var e=(t=this._wrappedBuiltIns.shift())[0],r=t[1],n=t[2];e[r]=n}},_restoreConsole:function(){for(var t in this._originalConsoleMethods)this._originalConsole[t]=this._originalConsoleMethods[t]},_drainPlugins:function(){var t=this;nt(this._plugins,function(e,r){var n=r[0],o=r[1];n.apply(t,[t].concat(o))})},_parseDSN:function(t){var e=xt.exec(t),r={},n=7;try{for(;n--;)r[wt[n]]=e[n]||""}catch(e){throw new K("Invalid DSN: "+t)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(t){var e="//"+t.host+(t.port?":"+t.port:"");return t.protocol&&(e=t.protocol+":"+e),e},_handleOnErrorStackInfo:function(){this._ignoreOnError||this._handleStackInfo.apply(this,arguments)},_handleStackInfo:function(t,e){var r=this._prepareFrames(t,e);this._triggerEvent("handle",{stackInfo:t,options:e}),this._processException(t.name,t.message,t.url,t.lineno,r,e)},_prepareFrames:function(t,e){var r=this,n=[];if(t.stack&&t.stack.length&&(nt(t.stack,function(e,o){var i=r._normalizeFrame(o,t.url);i&&n.push(i)}),e&&e.trimHeadFrames))for(var o=0;o0&&(t.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(t.user=this._globalContext.user),e.environment&&(t.environment=e.environment),e.release&&(t.release=e.release),e.serverName&&(t.server_name=e.serverName),t=this._sanitizeData(t),Object.keys(t).forEach(function(e){(null==t[e]||""===t[e]||rt(t[e]))&&delete t[e]}),Q(e.dataCallback)&&(t=e.dataCallback(t)||t),t&&!rt(t)&&(Q(e.shouldSendCallback)&&!e.shouldSendCallback(t)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",t):"number"==typeof e.sampleRate?Math.random()0){var s=r(n,this);~s?n.splice(s+1):n.push(this),~s?o.splice(s,1/0,i):o.push(i),~r(n,a)&&(a=t.call(this,i,a))}else n.push(a);return null==e?a instanceof Error?function(e){var t={stack:e.stack,message:e.message,name:e.name};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t}(a):a:e.call(this,i,a)}}(e.exports=function(e,t,r,o){return JSON.stringify(e,n(t,o),r)}).getSerialize=n}(t={exports:{}},t.exports),t.exports),n=(r.getSerialize,"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{});function o(e){return void 0===e}function i(e){return"[object Object]"===Object.prototype.toString.call(e)}function a(e){return"[object String]"===Object.prototype.toString.call(e)}function s(e){return"[object Array]"===Object.prototype.toString.call(e)}function c(){if(!("fetch"in n))return!1;try{return new Headers,new Request(""),new Response,!0}catch(e){return!1}}function l(e,t){var r,n;if(o(e.length))for(r in e)h(e,r)&&t.call(null,r,e[r]);else if(n=e.length)for(r=0;r ".length;e&&n++<5&&!("html"===(t=f(e))||n>1&&o+r.length*i+t.length>=80);)r.push(t),o+=t.length,e=e.parentNode;return r.reverse().join(" > ")},htmlElementAsString:f,isSameException:function(e,t){return!d(e,t)&&(e=e.values[0],t=t.values[0],e.type===t.type&&e.value===t.value&&(r=e.stacktrace,n=t.stacktrace,(!o(r)||!o(n))&&g(e.stacktrace,t.stacktrace)));var r,n},isSameStacktrace:g,parseUrl:function(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/),r=t[6]||"",n=t[8]||"";return{protocol:t[2],host:t[4],path:t[5],relative:t[5]+r+n}},fill:function(e,t,r,n){if(null!=e){var o=e[t];e[t]=r(o),e[t].__raven__=!0,e[t].__orig__=o,n&&n.push([e,t,o])}},safeJoin:function(e,t){if(!s(e))return"";for(var r=[],n=0;no?e(t,n-1):a},serializeKeysForMessage:function(e,t){if("number"==typeof e||"string"==typeof e)return e.toString();if(!Array.isArray(e))return"";if(0===(e=e.filter(function(e){return"string"==typeof e})).length)return"[object has no keys]";if(t="number"!=typeof t?v:t,e[0].length>=t)return e[0];for(var r=e.length;r>0;r--){var n=e.slice(0,r).join(", ");if(!(n.length>t))return r===e.length?n:n+"…"}return""},sanitize:function(e,t){if(!s(t)||s(t)&&0===t.length)return e;var n,o=p(t),a="********";try{n=JSON.parse(r(e))}catch(t){return e}return function e(t){return s(t)?t.map(function(t){return e(t)}):i(t)?Object.keys(t).reduce(function(r,n){return o.test(n)?r[n]=a:r[n]=e(t[n]),r},{}):t}(n)}},w={collectWindowErrors:!0,debug:!1},x="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},k=[].slice,S="?",O=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;function C(){return"undefined"==typeof document||null==document.location?"":document.location.href}w.report=function(){var e,t,r=[],n=null,o=null,i=null;function a(e,t){var n=null;if(!t||w.collectWindowErrors){for(var o in r)if(r.hasOwnProperty(o))try{r[o].apply(null,[e].concat(k.call(arguments,2)))}catch(e){n=e}if(n)throw n}}function s(t,r,n,o,s){var l=E.isErrorEvent(s)?s.error:s,u=E.isErrorEvent(t)?t.message:t;if(i)w.computeStackTrace.augmentStackTraceWithInitialElement(i,r,n,u),c();else if(l&&E.isError(l))a(w.computeStackTrace(l),!0);else{var h,p={url:r,line:n,column:o},f=void 0;if("[object String]"==={}.toString.call(u))(h=u.match(O))&&(f=h[1],u=h[2]);p.func=S,a({name:f,message:u,url:C(),stack:[p]},!0)}return!!e&&e.apply(this,arguments)}function c(){var e=i,t=n;n=null,i=null,o=null,a.apply(null,[e,!1].concat(t))}function l(e,t){var r=k.call(arguments,1);if(i){if(o===e)return;c()}var a=w.computeStackTrace(e);if(i=a,o=e,n=r,setTimeout(function(){o===e&&c()},a.incomplete?2e3:0),!1!==t)throw e}return l.subscribe=function(n){t||(e=x.onerror,x.onerror=s,t=!0),r.push(n)},l.unsubscribe=function(e){for(var t=r.length-1;t>=0;--t)r[t]===e&&r.splice(t,1)},l.uninstall=function(){t&&(x.onerror=e,t=!1,e=void 0),r=[]},l}(),w.computeStackTrace=function(){function e(e){if(void 0!==e.stack&&e.stack){for(var t,r,n,o=/^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,i=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i,a=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\/.*?|\[native code\]|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,s=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,c=/\((\S*)(?::(\d+))(?::(\d+))\)/,l=e.stack.split("\n"),u=[],h=(/^(.*) is undefined$/.exec(e.message),0),p=l.length;h eval")>-1&&(t=s.exec(r[3]))?(r[3]=t[1],r[4]=t[2],r[5]=null):0!==h||r[5]||void 0===e.columnNumber||(u[0].column=e.columnNumber+1),n={url:r[3],func:r[1]||S,args:r[2]?r[2].split(","):[],line:r[4]?+r[4]:null,column:r[5]?+r[5]:null}}if(!n.func&&n.line&&(n.func=S),n.url&&"blob:"===n.url.substr(0,5)){var d=new XMLHttpRequest;if(d.open("GET",n.url,!1),d.send(null),200===d.status){var g=d.responseText||"",m=(g=g.slice(-300)).match(/\/\/# sourceMappingURL=(.*)$/);if(m){var _=m[1];"~"===_.charAt(0)&&(_=("undefined"==typeof document||null==document.location?"":document.location.origin?document.location.origin:document.location.protocol+"//"+document.location.hostname+(document.location.port?":"+document.location.port:""))+_.slice(1)),n.url=_.slice(0,-4)}}}u.push(n)}return u.length?{name:e.name,message:e.message,url:C(),stack:u}:null}}function t(e,t,r,n){var o={url:t,line:r};if(o.url&&o.line){if(e.incomplete=!1,o.func||(o.func=S),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function r(e,o){for(var i,a,s=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,c=[],l={},u=!1,h=r.caller;h&&!u;h=h.caller)if(h!==n&&h!==w.report){if(a={url:null,func:S,line:null,column:null},h.name?a.func=h.name:(i=s.exec(h.toString()))&&(a.func=i[1]),void 0===a.func)try{a.func=i.input.substring(0,i.input.indexOf("{"))}catch(e){}l[""+h]?u=!0:l[""+h]=!0,c.push(a)}o&&c.splice(0,o);var p={name:e.name,message:e.message,url:C(),stack:c};return t(p,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),p}function n(t,n){var o=null;n=null==n?0:+n;try{if(o=e(t))return o}catch(e){if(w.debug)throw e}try{if(o=r(t,n+1))return o}catch(e){if(w.debug)throw e}return{name:t.name,message:t.message,url:C()}}return n.augmentStackTraceWithInitialElement=t,n.computeStackTraceFromStackProp=e,n}();var R=w;function j(e,t){var r=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(r>>16)<<16|65535&r}function T(e,t,r,n,o,i){return j((a=j(j(t,e),j(n,i)))<<(s=o)|a>>>32-s,r);var a,s}function F(e,t,r,n,o,i,a){return T(t&r|~t&n,e,t,o,i,a)}function D(e,t,r,n,o,i,a){return T(t&n|r&~n,e,t,o,i,a)}function A(e,t,r,n,o,i,a){return T(t^r^n,e,t,o,i,a)}function B(e,t,r,n,o,i,a){return T(r^(t|~n),e,t,o,i,a)}function M(e,t){var r,n,o,i,a;e[t>>5]|=128<>>9<<4)]=t;var s=1732584193,c=-271733879,l=-1732584194,u=271733878;for(r=0;r>5]>>>t%32&255);return r}function L(e){var t,r=[];for(r[(e.length>>2)-1]=void 0,t=0;t>5]|=(255&e.charCodeAt(t/8))<>>4&15)+"0123456789abcdef".charAt(15&t);return n}function I(e){return unescape(encodeURIComponent(e))}function U(e){return function(e){return H(M(L(e),8*e.length))}(I(e))}function N(e,t){return function(e,t){var r,n,o=L(e),i=[],a=[];for(i[15]=a[15]=void 0,o.length>16&&(o=M(o,8*e.length)),r=0;r<16;r+=1)i[r]=909522486^o[r],a[r]=1549556828^o[r];return n=M(i.concat(L(t)),512+8*t.length),H(M(a.concat(n),640))}(I(e),I(t))}var q=function(e,t,r){return t?r?N(t,e):P(N(t,e)):r?U(e):P(U(e))};function z(e){this.name="RavenConfigError",this.message=e}z.prototype=new Error,z.prototype.constructor=z;var K=z,W=function(e,t,r){var n=e[t],o=e;if(t in e){var i="warn"===t?"warning":t;e[t]=function(){var e=[].slice.call(arguments),a=E.safeJoin(e," "),s={level:i,logger:"console",extra:{arguments:e}};"assert"===t?!1===e[0]&&(a="Assertion failed: "+(E.safeJoin(e.slice(1)," ")||"console.assert"),s.extra.arguments=e.slice(1),r&&r(a,s)):r&&r(a,s),n&&Function.prototype.apply.call(n,o,e)}}},V=E.isErrorEvent,$=E.isDOMError,X=E.isDOMException,J=E.isError,G=E.isObject,Y=E.isPlainObject,Z=E.isUndefined,Q=E.isFunction,ee=E.isString,te=E.isArray,re=E.isEmptyObject,ne=E.each,oe=E.objectMerge,ie=E.truncate,ae=E.objectFrozen,se=E.hasKey,ce=E.joinRegExp,le=E.urlencode,ue=E.uuid4,he=E.htmlTreeAsString,pe=E.isSameException,fe=E.isSameStacktrace,de=E.parseUrl,ge=E.fill,me=E.supportsFetch,_e=E.supportsReferrerPolicy,ve=E.serializeKeysForMessage,be=E.serializeException,ye=E.sanitize,Ee=W,we="source protocol user pass host port path".split(" "),xe=/^(?:(\w+):)?\/\/(?:(\w+)(:\w+)?@)?([\w\.-]+)(?::(\d+))?(\/.*)/;function ke(){return+new Date}var Se="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},Oe=Se.document,Ce=Se.navigator;function Re(e,t){return Q(t)?function(r){return t(r,e)}:t}function je(){for(var e in this._hasJSON=!("object"!=typeof JSON||!JSON.stringify),this._hasDocument=!Z(Oe),this._hasNavigator=!Z(Ce),this._lastCapturedException=null,this._lastData=null,this._lastEventId=null,this._globalServer=null,this._globalKey=null,this._globalProject=null,this._globalContext={},this._globalOptions={release:Se.SENTRY_RELEASE&&Se.SENTRY_RELEASE.id,logger:"javascript",ignoreErrors:[],ignoreUrls:[],whitelistUrls:[],includePaths:[],headers:null,collectWindowErrors:!0,captureUnhandledRejections:!0,maxMessageLength:0,maxUrlLength:250,stackTraceLimit:50,autoBreadcrumbs:!0,instrument:!0,sampleRate:1,sanitizeKeys:[]},this._fetchDefaults={method:"POST",keepalive:!0,referrerPolicy:_e()?"origin":""},this._ignoreOnError=0,this._isRavenInstalled=!1,this._originalErrorStackTraceLimit=Error.stackTraceLimit,this._originalConsole=Se.console||{},this._originalConsoleMethods={},this._plugins=[],this._startTime=ke(),this._wrappedBuiltIns=[],this._breadcrumbs=[],this._lastCapturedEvent=null,this._keypressTimeout,this._location=Se.location,this._lastHref=this._location&&this._location.href,this._resetBackoff(),this._originalConsole)this._originalConsoleMethods[e]=this._originalConsole[e]}je.prototype={VERSION:"3.26.1",debug:!1,TraceKit:R,config:function(e,t){var r=this;if(r._globalServer)return this._logDebug("error","Error: Raven has already been configured"),r;if(!e)return r;var n=r._globalOptions;t&&ne(t,function(e,t){"tags"===e||"extra"===e||"user"===e?r._globalContext[e]=t:n[e]=t}),r.setDSN(e),n.ignoreErrors.push(/^Script error\.?$/),n.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/),n.ignoreErrors=ce(n.ignoreErrors),n.ignoreUrls=!!n.ignoreUrls.length&&ce(n.ignoreUrls),n.whitelistUrls=!!n.whitelistUrls.length&&ce(n.whitelistUrls),n.includePaths=ce(n.includePaths),n.maxBreadcrumbs=Math.max(0,Math.min(n.maxBreadcrumbs||100,100));var o={xhr:!0,console:!0,dom:!0,location:!0,sentry:!0},i=n.autoBreadcrumbs;"[object Object]"==={}.toString.call(i)?i=oe(o,i):!1!==i&&(i=o),n.autoBreadcrumbs=i;var a={tryCatch:!0},s=n.instrument;return"[object Object]"==={}.toString.call(s)?s=oe(a,s):!1!==s&&(s=a),n.instrument=s,R.collectWindowErrors=!!n.collectWindowErrors,r},install:function(){var e=this;return e.isSetup()&&!e._isRavenInstalled&&(R.report.subscribe(function(){e._handleOnErrorStackInfo.apply(e,arguments)}),e._globalOptions.captureUnhandledRejections&&e._attachPromiseRejectionHandler(),e._patchFunctionToString(),e._globalOptions.instrument&&e._globalOptions.instrument.tryCatch&&e._instrumentTryCatch(),e._globalOptions.autoBreadcrumbs&&e._instrumentBreadcrumbs(),e._drainPlugins(),e._isRavenInstalled=!0),Error.stackTraceLimit=e._globalOptions.stackTraceLimit,this},setDSN:function(e){var t=this._parseDSN(e),r=t.path.lastIndexOf("/"),n=t.path.substr(1,r);this._dsn=e,this._globalKey=t.user,this._globalSecret=t.pass&&t.pass.substr(1),this._globalProject=t.path.substr(r+1),this._globalServer=this._getGlobalServer(t),this._globalEndpoint=this._globalServer+"/"+n+"api/"+this._globalProject+"/store/",this._resetBackoff()},context:function(e,t,r){return Q(e)&&(r=t||[],t=e,e={}),this.wrap(e,t).apply(this,r)},wrap:function(e,t,r){var n=this;if(Z(t)&&!Q(e))return e;if(Q(e)&&(t=e,e=void 0),!Q(t))return t;try{if(t.__raven__)return t;if(t.__raven_wrapper__)return t.__raven_wrapper__}catch(e){return t}function o(){var o=[],i=arguments.length,a=!e||e&&!1!==e.deep;for(r&&Q(r)&&r.apply(this,arguments);i--;)o[i]=a?n.wrap(e,arguments[i]):arguments[i];try{return t.apply(this,o)}catch(t){throw n._ignoreNextOnError(),n.captureException(t,e),t}}for(var i in t)se(t,i)&&(o[i]=t[i]);return o.prototype=t.prototype,t.__raven_wrapper__=o,o.__raven__=!0,o.__orig__=t,o},uninstall:function(){return R.report.uninstall(),this._detachPromiseRejectionHandler(),this._unpatchFunctionToString(),this._restoreBuiltIns(),this._restoreConsole(),Error.stackTraceLimit=this._originalErrorStackTraceLimit,this._isRavenInstalled=!1,this},_promiseRejectionHandler:function(e){this._logDebug("debug","Raven caught unhandled promise rejection:",e),this.captureException(e.reason,{mechanism:{type:"onunhandledrejection",handled:!1}})},_attachPromiseRejectionHandler:function(){return this._promiseRejectionHandler=this._promiseRejectionHandler.bind(this),Se.addEventListener&&Se.addEventListener("unhandledrejection",this._promiseRejectionHandler),this},_detachPromiseRejectionHandler:function(){return Se.removeEventListener&&Se.removeEventListener("unhandledrejection",this._promiseRejectionHandler),this},captureException:function(e,t){if(t=oe({trimHeadFrames:0},t||{}),V(e)&&e.error)e=e.error;else{if($(e)||X(e)){var r=e.name||($(e)?"DOMError":"DOMException"),n=e.message?r+": "+e.message:r;return this.captureMessage(n,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}))}if(J(e))e=e;else{if(!Y(e))return this.captureMessage(e,oe(t,{stacktrace:!0,trimHeadFrames:t.trimHeadFrames+1}));t=this._getCaptureExceptionOptionsFromPlainObject(t,e),e=new Error(t.message)}}this._lastCapturedException=e;try{var o=R.computeStackTrace(e);this._handleStackInfo(o,t)}catch(t){if(e!==t)throw t}return this},_getCaptureExceptionOptionsFromPlainObject:function(e,t){var r=Object.keys(t).sort(),n=oe(e,{message:"Non-Error exception captured with keys: "+ve(r),fingerprint:[q(r)],extra:e.extra||{}});return n.extra.__serialized__=be(t),n},captureMessage:function(e,t){if(!this._globalOptions.ignoreErrors.test||!this._globalOptions.ignoreErrors.test(e)){var r,n=oe({message:e+=""},t=t||{});try{throw new Error(e)}catch(e){r=e}r.name=null;var o=R.computeStackTrace(r),i=te(o.stack)&&o.stack[1];i&&"Raven.captureException"===i.func&&(i=o.stack[2]);var a=i&&i.url||"";if((!this._globalOptions.ignoreUrls.test||!this._globalOptions.ignoreUrls.test(a))&&(!this._globalOptions.whitelistUrls.test||this._globalOptions.whitelistUrls.test(a))){if(this._globalOptions.stacktrace||t&&t.stacktrace){n.fingerprint=null==n.fingerprint?e:n.fingerprint,(t=oe({trimHeadFrames:0},t)).trimHeadFrames+=1;var s=this._prepareFrames(o,t);n.stacktrace={frames:s.reverse()}}return n.fingerprint&&(n.fingerprint=te(n.fingerprint)?n.fingerprint:[n.fingerprint]),this._send(n),this}}},captureBreadcrumb:function(e){var t=oe({timestamp:ke()/1e3},e);if(Q(this._globalOptions.breadcrumbCallback)){var r=this._globalOptions.breadcrumbCallback(t);if(G(r)&&!re(r))t=r;else if(!1===r)return this}return this._breadcrumbs.push(t),this._breadcrumbs.length>this._globalOptions.maxBreadcrumbs&&this._breadcrumbs.shift(),this},addPlugin:function(e){var t=[].slice.call(arguments,1);return this._plugins.push([e,t]),this._isRavenInstalled&&this._drainPlugins(),this},setUserContext:function(e){return this._globalContext.user=e,this},setExtraContext:function(e){return this._mergeContext("extra",e),this},setTagsContext:function(e){return this._mergeContext("tags",e),this},clearContext:function(){return this._globalContext={},this},getContext:function(){return JSON.parse(r(this._globalContext))},setEnvironment:function(e){return this._globalOptions.environment=e,this},setRelease:function(e){return this._globalOptions.release=e,this},setDataCallback:function(e){var t=this._globalOptions.dataCallback;return this._globalOptions.dataCallback=Re(t,e),this},setBreadcrumbCallback:function(e){var t=this._globalOptions.breadcrumbCallback;return this._globalOptions.breadcrumbCallback=Re(t,e),this},setShouldSendCallback:function(e){var t=this._globalOptions.shouldSendCallback;return this._globalOptions.shouldSendCallback=Re(t,e),this},setTransport:function(e){return this._globalOptions.transport=e,this},lastException:function(){return this._lastCapturedException},lastEventId:function(){return this._lastEventId},isSetup:function(){return!!this._hasJSON&&(!!this._globalServer||(this.ravenNotConfiguredError||(this.ravenNotConfiguredError=!0,this._logDebug("error","Error: Raven has not been configured.")),!1))},afterLoad:function(){var e=Se.RavenConfig;e&&this.config(e.dsn,e.config).install()},showReportDialog:function(e){if(Oe){var t=(e=e||{}).eventId||this.lastEventId();if(!t)throw new K("Missing eventId");var r=e.dsn||this._dsn;if(!r)throw new K("Missing DSN");var n=encodeURIComponent,o="";o+="?eventId="+n(t),o+="&dsn="+n(r);var i=e.user||this._globalContext.user;i&&(i.name&&(o+="&name="+n(i.name)),i.email&&(o+="&email="+n(i.email)));var a=this._getGlobalServer(this._parseDSN(r)),s=Oe.createElement("script");s.async=!0,s.src=a+"/api/embed/error-page/"+o,(Oe.head||Oe.body).appendChild(s)}},_ignoreNextOnError:function(){var e=this;this._ignoreOnError+=1,setTimeout(function(){e._ignoreOnError-=1})},_triggerEvent:function(e,t){var r,n;if(this._hasDocument){for(n in t=t||{},e="raven"+e.substr(0,1).toUpperCase()+e.substr(1),Oe.createEvent?(r=Oe.createEvent("HTMLEvents")).initEvent(e,!0,!0):(r=Oe.createEventObject()).eventType=e,t)se(t,n)&&(r[n]=t[n]);if(Oe.createEvent)Oe.dispatchEvent(r);else try{Oe.fireEvent("on"+r.eventType.toLowerCase(),r)}catch(e){}}},_breadcrumbEventHandler:function(e){var t=this;return function(r){if(t._keypressTimeout=null,t._lastCapturedEvent!==r){var n;t._lastCapturedEvent=r;try{n=he(r.target)}catch(e){n=""}t.captureBreadcrumb({category:"ui."+e,message:n})}}},_keypressEventHandler:function(){var e=this;return function(t){var r;try{r=t.target}catch(e){return}var n=r&&r.tagName;if(n&&("INPUT"===n||"TEXTAREA"===n||r.isContentEditable)){var o=e._keypressTimeout;o||e._breadcrumbEventHandler("input")(t),clearTimeout(o),e._keypressTimeout=setTimeout(function(){e._keypressTimeout=null},1e3)}}},_captureUrlChange:function(e,t){var r=de(this._location.href),n=de(t),o=de(e);this._lastHref=t,r.protocol===n.protocol&&r.host===n.host&&(t=n.relative),r.protocol===o.protocol&&r.host===o.host&&(e=o.relative),this.captureBreadcrumb({category:"navigation",data:{to:t,from:e}})},_patchFunctionToString:function(){var e=this;e._originalFunctionToString=Function.prototype.toString,Function.prototype.toString=function(){return"function"==typeof this&&this.__raven__?e._originalFunctionToString.apply(this.__orig__,arguments):e._originalFunctionToString.apply(this,arguments)}},_unpatchFunctionToString:function(){this._originalFunctionToString&&(Function.prototype.toString=this._originalFunctionToString)},_instrumentTryCatch:function(){var e=this,t=e._wrappedBuiltIns;function r(t){return function(r,n){for(var o=new Array(arguments.length),i=0;i2?arguments[2]:void 0;return r&&e._captureUrlChange(e._lastHref,r+""),t.apply(this,arguments)}};ge(Se.history,"pushState",c,r),ge(Se.history,"replaceState",c,r)}if(t.console&&"console"in Se&&console.log){var l=function(t,r){e.captureBreadcrumb({message:t,level:r.level,category:"console"})};ne(["debug","info","warn","error","log"],function(e,t){Ee(console,t,l)})}},_restoreBuiltIns:function(){for(var e;this._wrappedBuiltIns.length;){var t=(e=this._wrappedBuiltIns.shift())[0],r=e[1],n=e[2];t[r]=n}},_restoreConsole:function(){for(var e in this._originalConsoleMethods)this._originalConsole[e]=this._originalConsoleMethods[e]},_drainPlugins:function(){var e=this;ne(this._plugins,function(t,r){var n=r[0],o=r[1];n.apply(e,[e].concat(o))})},_parseDSN:function(e){var t=xe.exec(e),r={},n=7;try{for(;n--;)r[we[n]]=t[n]||""}catch(t){throw new K("Invalid DSN: "+e)}if(r.pass&&!this._globalOptions.allowSecretKey)throw new K("Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key");return r},_getGlobalServer:function(e){var t="//"+e.host+(e.port?":"+e.port:"");return e.protocol&&(t=e.protocol+":"+t),t},_handleOnErrorStackInfo:function(e,t){(t=t||{}).mechanism=t.mechanism||{type:"onerror",handled:!1},this._ignoreOnError||this._handleStackInfo(e,t)},_handleStackInfo:function(e,t){var r=this._prepareFrames(e,t);this._triggerEvent("handle",{stackInfo:e,options:t}),this._processException(e.name,e.message,e.url,e.lineno,r,t)},_prepareFrames:function(e,t){var r=this,n=[];if(e.stack&&e.stack.length&&(ne(e.stack,function(t,o){var i=r._normalizeFrame(o,e.url);i&&n.push(i)}),t&&t.trimHeadFrames))for(var o=0;o0&&(e.breadcrumbs={values:[].slice.call(this._breadcrumbs,0)}),this._globalContext.user&&(e.user=this._globalContext.user),t.environment&&(e.environment=t.environment),t.release&&(e.release=t.release),t.serverName&&(e.server_name=t.serverName),e=this._sanitizeData(e),Object.keys(e).forEach(function(t){(null==e[t]||""===e[t]||re(e[t]))&&delete e[t]}),Q(t.dataCallback)&&(e=t.dataCallback(e)||e),e&&!re(e)&&(Q(t.shouldSendCallback)&&!t.shouldSendCallback(e)||(this._shouldBackoff()?this._logDebug("warn","Raven dropped error due to backoff: ",e):"number"==typeof t.sampleRate?Math.random() 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n document.location.origin =\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '');\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.25.2',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = undefined;\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} func A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n extra: {\n unhandledPromiseRejection: true\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(originalCallback);\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(fn.handleEvent);\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(fn, undefined, before),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(self.wrap(cb));\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(orig);\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(orig, undefined, onreadystatechangeHandler);\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function() {\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo.apply(this, arguments);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file +{"version":3,"sources":["../../../node_modules/raven-js/vendor/json-stringify-safe/stringify.js","../../../node_modules/raven-js/src/utils.js","../../../node_modules/raven-js/vendor/TraceKit/tracekit.js","../../../node_modules/raven-js/vendor/md5/md5.js","../../../node_modules/raven-js/src/configError.js","../../../node_modules/raven-js/src/console.js","../../../node_modules/raven-js/src/raven.js","../../../node_modules/raven-js/src/singleton.js","demo.js"],"names":["indexOf","haystack","needle","i","length","serializer","replacer","cycleReplacer","stack","keys","key","value","slice","join","thisPos","this","splice","push","Infinity","call","Error","err","message","name","Object","prototype","hasOwnProperty","stringifyError","module","exports","obj","spaces","JSON","stringify","getSerialize","_window","window","global","self","isUndefined","what","isPlainObject","toString","isString","isArray","supportsFetch","Headers","Request","Response","e","each","callback","j","hasKey","truncate","str","max","substr","object","joinRegExp","patterns","pattern","sources","len","replace","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","tagName","toLowerCase","id","split","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","isSameStacktrace","stack1","stack2","frames1","frames","frames2","filename","lineno","colno","MAX_SERIALIZE_EXCEPTION_DEPTH","MAX_SERIALIZE_EXCEPTION_SIZE","MAX_SERIALIZE_KEYS_LENGTH","jsonSize","encodeURI","utf8Length","serializeValue","type","utils","isObject","isError","isErrorEvent","isDOMError","isDOMException","isFunction","isEmptyObject","_","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsReferrerPolicy","referrerPolicy","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","data","original","normalizedData","objectMerge","obj1","obj2","objectFrozen","isFrozen","urlencode","o","pairs","encodeURIComponent","uuid4","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","Math","random","htmlTreeAsString","nextStr","height","sepLength","parentNode","reverse","isSameException","ex1","ex2","values","stacktrace","parseUrl","url","match","query","fragment","protocol","host","path","relative","fill","replacement","track","orig","__raven__","__orig__","safeJoin","input","delimiter","output","String","serializeException","ex","depth","maxSize","serialized","serializeObject","reduce","acc","Array","map","val","serializeKeysForMessage","maxLength","filter","usedKeys","sanitize","sanitizeKeys","safeInput","sanitizeRegExp","sanitizeMask","parse","o_O","sanitizeWorker","workerInput","k","test","TraceKit","collectWindowErrors","debug","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","document","location","href","report","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastException","lastExceptionStack","notifyHandlers","isWindowError","exception","apply","concat","arguments","inner","traceKitWindowOnError","msg","lineNo","colNo","error","computeStackTrace","augmentStackTraceWithInitialElement","processLastException","groups","line","column","undefined","func","_lastExceptionStack","_lastArgs","rethrow","args","setTimeout","incomplete","subscribe","handler","onerror","unsubscribe","uninstall","computeStackTraceFromStackProp","submatch","parts","element","chrome","winjs","gecko","geckoEval","chromeEval","lines","exec","isNative","columnNumber","xhr","XMLHttpRequest","open","send","status","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","port","stackInfo","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","result","sourceURL","fileName","lineNumber","description","tracekit","safeAdd","x","y","lsw","md5cmn","q","s","t","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","hash","bkey","ipad","opad","rstrHMACMD5","md5_1","string","raw","RavenConfigError","constructor","configError","console$1","console","level","originalConsoleLevel","originalConsole","sentryLevel","logger","extra","Function","wrapConsoleMethod","require$$0","dsnKeys","dsnPattern","now","Date","_document","_navigator","navigator","keepOriginalCallback","Raven","method","_hasJSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","_fetchDefaults","keepalive","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","_lastHref","_resetBackoff","VERSION","config","dsn","options","_logDebug","globalOptions","setDSN","maxBreadcrumbs","min","autoBreadcrumbDefaults","dom","sentry","instrumentDefaults","tryCatch","install","isSetup","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","lastIndexOf","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","wrap","_before","__raven_wrapper__","wrapped","deep","_ignoreNextOnError","captureException","property","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","handled","bind","addEventListener","removeEventListener","trimHeadFrames","captureMessage","_getCaptureExceptionOptionsFromPlainObject","_handleStackInfo","currentOptions","exKeys","sort","fingerprint","md5","__serialized__","initialCall","fileurl","_prepareFrames","_send","captureBreadcrumb","crumb","timestamp","breadcrumbCallback","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","qs","email","globalServer","script","createElement","async","src","head","body","appendChild","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","fn","originalCallback","function","wrapEventTarget","proto","capture","secure","handleEvent","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","origOpen","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","props","onreadystatechange","origFetch","fetchInput","fetchData","then","response","attachEvent","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","builtin","installer","m","allowSecretKey","_processException","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","prefixedMessage","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","User-Agent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","onload","setRequestHeader","evaluated","setUser","setReleaseContext","raven","_Raven","RavenConstructor","noConflict","isLive","singleton","Client","shr","setup","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","historySupport","toggleClass","state","newSource","init","video","audio","youtube","vimeo","button","parentElement","querySelector","cite","setAttribute","removeAttribute","GoogleAnalyticsObject","l","getElementsByTagName","insertBefore","ga"],"mappings":"sLAcA,SAASA,EAAQC,EAAUC,GACzB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAASG,SAAUD,EACrC,GAAIF,EAASE,KAAOD,EAAQ,OAAOC,EAErC,OAAQ,EAyBV,SAASE,EAAWC,EAAUC,GAC5B,IAAIC,KACAC,KAWJ,OATqB,MAAjBF,IACFA,EAAgB,SAASG,EAAKC,GAC5B,OAAIH,EAAM,KAAOG,EACR,eAEF,eAAiBF,EAAKG,MAAM,EAAGZ,EAAQQ,EAAOG,IAAQE,KAAK,KAAO,MAItE,SAASH,EAAKC,GACnB,GAAIH,EAAMJ,OAAS,EAAG,CACpB,IAAIU,EAAUd,EAAQQ,EAAOO,OAC5BD,EAAUN,EAAMQ,OAAOF,EAAU,GAAKN,EAAMS,KAAKF,OACjDD,EAAUL,EAAKO,OAAOF,EAASI,EAAAA,EAAUR,GAAOD,EAAKQ,KAAKP,IAEtDV,EAAQQ,EAAOG,KAClBA,EAAQJ,EAAcY,KAAKJ,KAAML,EAAKC,SAGxCH,EAAMS,KAAKN,GAGb,OAAmB,MAAZL,EACHK,aAAiBS,MA5CzB,SAAwBT,GACtB,IAAIU,GAEFb,MAAOG,EAAMH,MACbc,QAASX,EAAMW,QACfC,KAAMZ,EAAMY,MAGd,IAAK,IAAIpB,KAAKQ,EACRa,OAAOC,UAAUC,eAAeP,KAAKR,EAAOR,KAC9CkB,EAAIlB,GAAKQ,EAAMR,IAInB,OAAOkB,EA8BwBM,CAAehB,GAASA,EACjDL,EAASa,KAAKJ,KAAML,EAAKC,KA5DvBiB,EAAAC,QAUV,SAAmBC,EAAKxB,EAAUyB,EAAQxB,GACxC,OAAOyB,KAAKC,UAAUH,EAAKzB,EAAWC,EAAUC,GAAgBwB,KAVlEG,aAAuB7B,wCCVnB8B,kBACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,SAiC7E,SAASC,EAAYC,GACnB,YAAgB,IAATA,EAOT,SAASC,EAAcD,GACrB,MAAgD,oBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAGxC,SAASG,EAASH,GAChB,MAAgD,oBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAGxC,SAASI,EAAQJ,GACf,MAAgD,mBAAzChB,OAAOC,UAAUiB,SAASvB,KAAKqB,GAyCxC,SAASK,IACP,KAAM,UAAWV,GAAU,OAAO,EAElC,IAIE,OAHA,IAAIW,QACJ,IAAIC,QAAQ,IACZ,IAAIC,UACG,EACP,MAAOC,GACP,OAAO,GAsCX,SAASC,EAAKpB,EAAKqB,GACjB,IAAIhD,EAAGiD,EAEP,GAAIb,EAAYT,EAAI1B,QAClB,IAAKD,KAAK2B,EACJuB,EAAOvB,EAAK3B,IACdgD,EAAShC,KAAK,KAAMhB,EAAG2B,EAAI3B,SAK/B,GADAiD,EAAItB,EAAI1B,OAEN,IAAKD,EAAI,EAAGA,EAAIiD,EAAGjD,IACjBgD,EAAShC,KAAK,KAAMhB,EAAG2B,EAAI3B,IA+BnC,SAASmD,EAASC,EAAKC,GACrB,GAAmB,iBAARA,EACT,MAAM,IAAIpC,MAAM,0DAElB,MAAmB,iBAARmC,GAA4B,IAARC,EACtBD,EAEFA,EAAInD,QAAUoD,EAAMD,EAAMA,EAAIE,OAAO,EAAGD,GAAO,IAUxD,SAASH,EAAOK,EAAQhD,GACtB,OAAOc,OAAOC,UAAUC,eAAeP,KAAKuC,EAAQhD,GAGtD,SAASiD,EAAWC,GAQlB,IALA,IAGEC,EAHEC,KACF3D,EAAI,EACJ4D,EAAMH,EAASxD,OAGVD,EAAI4D,EAAK5D,IAEVwC,EADJkB,EAAUD,EAASzD,IAIjB2D,EAAQ7C,KAAK4C,EAAQG,QAAQ,8BAA+B,SACnDH,GAAWA,EAAQI,QAE5BH,EAAQ7C,KAAK4C,EAAQI,QAIzB,OAAO,IAAIC,OAAOJ,EAAQjD,KAAK,KAAM,KAoHvC,SAASsD,EAAoBC,GAC3B,IACEC,EACAC,EACA5D,EACA6D,EACApE,EALEqE,KAOJ,IAAKJ,IAASA,EAAKK,QACjB,MAAO,GAST,GANAD,EAAIvD,KAAKmD,EAAKK,QAAQC,eAClBN,EAAKO,IACPH,EAAIvD,KAAK,IAAMmD,EAAKO,KAGtBN,EAAYD,EAAKC,YACA1B,EAAS0B,GAExB,IADAC,EAAUD,EAAUO,MAAM,OACrBzE,EAAI,EAAGA,EAAImE,EAAQlE,OAAQD,IAC9BqE,EAAIvD,KAAK,IAAMqD,EAAQnE,IAG3B,IAAI0E,GAAiB,OAAQ,OAAQ,QAAS,OAC9C,IAAK1E,EAAI,EAAGA,EAAI0E,EAAczE,OAAQD,IACpCO,EAAMmE,EAAc1E,IACpBoE,EAAOH,EAAKU,aAAapE,KAEvB8D,EAAIvD,KAAK,IAAMP,EAAM,KAAO6D,EAAO,MAGvC,OAAOC,EAAI3D,KAAK,IAMlB,SAASkE,EAAgBC,EAAGC,GAC1B,WAAYD,IAAMC,GA8BpB,SAASC,EAAiBC,EAAQC,GAChC,GAAIL,EAAgBI,EAAQC,GAAS,OAAO,EAE5C,IAOIJ,EAAGC,EAPHI,EAAUF,EAAOG,OACjBC,EAAUH,EAAOE,OAGrB,GAAID,EAAQjF,SAAWmF,EAAQnF,OAAQ,OAAO,EAI9C,IAAK,IAAID,EAAI,EAAGA,EAAIkF,EAAQjF,OAAQD,IAGlC,GAFA6E,EAAIK,EAAQlF,GACZ8E,EAAIM,EAAQpF,GAEV6E,EAAEQ,WAAaP,EAAEO,UACjBR,EAAES,SAAWR,EAAEQ,QACfT,EAAEU,QAAUT,EAAES,OACdV,EAAY,WAAMC,EAAY,SAE9B,OAAO,EAEX,OAAO,EA4CT,IAAIU,EAAgC,EAEhCC,EAA+B,MAC/BC,EAA4B,GAMhC,SAASC,EAASnF,GAChB,OALF,SAAoBA,GAClB,QAASoF,UAAUpF,GAAOiE,MAAM,SAASxE,OAIlC4F,CAAWhE,KAAKC,UAAUtB,IAGnC,SAASsF,EAAetF,GACtB,GAAqB,iBAAVA,EAAoB,CAE7B,OAAO2C,EAAS3C,EADA,IAEX,GACY,iBAAVA,GACU,kBAAVA,QACU,IAAVA,EAEP,OAAOA,EAGT,IAAIuF,EAAO1E,OAAOC,UAAUiB,SAASvB,KAAKR,GAG1C,MAAa,oBAATuF,EAAmC,WAC1B,mBAATA,EAAkC,UACzB,sBAATA,EACKvF,EAAMY,KAAO,cAAgBZ,EAAMY,KAAO,IAAM,aAElDZ,EA+FT,IAAAwF,GACEC,SAzlBF,SAAkB5D,GAChB,MAAuB,iBAATA,GAA8B,OAATA,GAylBnC6D,QAplBF,SAAiB1F,GACf,OAAQa,OAAOC,UAAUiB,SAASvB,KAAKR,IACrC,IAAK,iBAEL,IAAK,qBAEL,IAAK,wBACH,OAAO,EACT,QACE,OAAOA,aAAiBS,QA4kB5BkF,aAxkBF,SAAsB3F,GACpB,MAAiD,wBAA1Ca,OAAOC,UAAUiB,SAASvB,KAAKR,IAwkBtC4F,WArkBF,SAAoB5F,GAClB,MAAiD,sBAA1Ca,OAAOC,UAAUiB,SAASvB,KAAKR,IAqkBtC6F,eAlkBF,SAAwB7F,GACtB,MAAiD,0BAA1Ca,OAAOC,UAAUiB,SAASvB,KAAKR,IAkkBtC4B,YAAaA,EACbkE,WA5jBF,SAAoBjE,GAClB,MAAuB,mBAATA,GA4jBdC,cAAeA,EACfE,SAAUA,EACVC,QAASA,EACT8D,cAhjBF,SAAuBlE,GACrB,IAAKC,EAAcD,GAAO,OAAO,EAEjC,IAAK,IAAImE,KAAKnE,EACZ,GAAIA,EAAKd,eAAeiF,GACtB,OAAO,EAGX,OAAO,GAyiBPC,mBAtiBF,WACE,IAEE,OADA,IAAIC,WAAW,KACR,EACP,MAAO5D,GACP,OAAO,IAkiBT6D,iBA9hBF,WACE,IAEE,OADA,IAAIC,SAAS,KACN,EACP,MAAO9D,GACP,OAAO,IA0hBT+D,qBAthBF,WACE,IAEE,OADA,IAAIC,aAAa,KACV,EACP,MAAOhE,GACP,OAAO,IAkhBTJ,cAAeA,EACfqE,uBA9fF,WACE,IAAKrE,IAAiB,OAAO,EAE7B,IAKE,OAHA,IAAIE,QAAQ,cACVoE,eAAgB,YAEX,EACP,MAAOlE,GACP,OAAO,IAqfTmE,8BAjfF,WACE,MAAwC,mBAA1BC,uBAifdC,gBA9eF,SAAyBnE,GASvB,OARA,SAAsBoE,EAAMC,GAC1B,IAAIC,EAAiBtE,EAASoE,IAASA,EACvC,OAAIC,GACKA,EAASC,IAEXA,IAyeTvE,KAAMA,EACNwE,YAjdF,SAAqBC,EAAMC,GACzB,OAAKA,GAGL1E,EAAK0E,EAAM,SAASlH,EAAKC,GACvBgH,EAAKjH,GAAOC,IAEPgH,GALEA,GAgdTrE,SAAUA,EACVuE,aAjcF,SAAsB/F,GACpB,QAAKN,OAAOsG,UAGLtG,OAAOsG,SAAShG,IA8bvBuB,OAAQA,EACRM,WAAYA,EACZoE,UAjZF,SAAmBC,GACjB,IAAIC,KAIJ,OAHA/E,EAAK8E,EAAG,SAAStH,EAAKC,GACpBsH,EAAMhH,KAAKiH,mBAAmBxH,GAAO,IAAMwH,mBAAmBvH,MAEzDsH,EAAMpH,KAAK,MA6YlBsH,MAzXF,WACE,IAAIC,EAASjG,EAAQiG,QAAUjG,EAAQkG,SAEvC,IAAK9F,EAAY6F,IAAWA,EAAOE,gBAAiB,CAGlD,IAAIC,EAAM,IAAIC,YAAY,GAC1BJ,EAAOE,gBAAgBC,GAGvBA,EAAI,GAAe,KAATA,EAAI,GAAc,MAE5BA,EAAI,GAAe,MAATA,EAAI,GAAe,MAE7B,IAAIE,EAAM,SAASC,GAEjB,IADA,IAAIC,EAAID,EAAIhG,SAAS,IACdiG,EAAEvI,OAAS,GAChBuI,EAAI,IAAMA,EAEZ,OAAOA,GAGT,OACEF,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IACRE,EAAIF,EAAI,IAIV,MAAO,mCAAmCvE,QAAQ,QAAS,SAAS4E,GAClE,IAAIC,EAAqB,GAAhBC,KAAKC,SAAiB,EAE/B,OADY,MAANH,EAAYC,EAAS,EAAJA,EAAW,GACzBnG,SAAS,OAqVtBsG,iBAzUF,SAA0B5E,GAWxB,IATA,IAOE6E,EALAzE,KACA0E,EAAS,EACTnF,EAAM,EAENoF,EADY,MACU/I,OAGjBgE,GAAQ8E,IATW,KAgBV,UANdD,EAAU9E,EAAoBC,KAO3B8E,EAAS,GAAKnF,EAAMS,EAAIpE,OAAS+I,EAAYF,EAAQ7I,QAhBvC,KAqBjBoE,EAAIvD,KAAKgI,GAETlF,GAAOkF,EAAQ7I,OACfgE,EAAOA,EAAKgF,WAGd,OAAO5E,EAAI6E,UAAUxI,KAvBP,QAmUdsD,oBAAqBA,EACrBmF,gBAhPF,SAAyBC,EAAKC,GAC5B,OAAIzE,EAAgBwE,EAAKC,KAEzBD,EAAMA,EAAIE,OAAO,GACjBD,EAAMA,EAAIC,OAAO,GAEbF,EAAIrD,OAASsD,EAAItD,MAAQqD,EAAI5I,QAAU6I,EAAI7I,QAbxBqE,EAgBHuE,EAAIG,WAhBEzE,EAgBUuE,EAAIE,aAfjCnH,EAAYyC,KAAMzC,EAAY0C,KAiB9BC,EAAiBqE,EAAIG,WAAYF,EAAIE,cAlB9C,IAAyB1E,EAAGC,GAwP1BC,iBAAkBA,EAClByE,SA5YF,SAAkBC,GAChB,GAAmB,iBAARA,EAAkB,SAC7B,IAAIC,EAAQD,EAAIC,MAAM,kEAGlBC,EAAQD,EAAM,IAAM,GACpBE,EAAWF,EAAM,IAAM,GAC3B,OACEG,SAAUH,EAAM,GAChBI,KAAMJ,EAAM,GACZK,KAAML,EAAM,GACZM,SAAUN,EAAM,GAAKC,EAAQC,IAkY/BK,KAlMF,SAActI,EAAKP,EAAM8I,EAAaC,GACpC,GAAW,MAAPxI,EAAJ,CACA,IAAIyI,EAAOzI,EAAIP,GACfO,EAAIP,GAAQ8I,EAAYE,GACxBzI,EAAIP,GAAMiJ,WAAY,EACtB1I,EAAIP,GAAMkJ,SAAWF,EACjBD,GACFA,EAAMrJ,MAAMa,EAAKP,EAAMgJ,MA4LzBG,SAlLF,SAAkBC,EAAOC,GACvB,IAAKhI,EAAQ+H,GAAQ,MAAO,GAI5B,IAFA,IAAIE,KAEK1K,EAAI,EAAGA,EAAIwK,EAAMvK,OAAQD,IAChC,IACE0K,EAAO5J,KAAK6J,OAAOH,EAAMxK,KACzB,MAAO8C,GACP4H,EAAO5J,KAAK,gCAIhB,OAAO4J,EAAOhK,KAAK+J,IAsKnBG,mBA7GF,SAASA,EAAmBC,EAAIC,EAAOC,GACrC,IAAKzI,EAAcuI,GAAK,OAAOA,EAG/BE,EAA2B,iBAD3BD,EAAyB,iBAAVA,EAAqBtF,EAAgCsF,GAC9BrF,EAA+BsF,EAErE,IAAIC,EAvBN,SAASC,EAAgBzK,EAAOsK,GAC9B,OAAc,IAAVA,EAAoBhF,EAAetF,GAEnC8B,EAAc9B,GACTa,OAAOf,KAAKE,GAAO0K,OAAO,SAASC,EAAK5K,GAE7C,OADA4K,EAAI5K,GAAO0K,EAAgBzK,EAAMD,GAAMuK,EAAQ,GACxCK,OAEAC,MAAM3I,QAAQjC,GAChBA,EAAM6K,IAAI,SAASC,GACxB,OAAOL,EAAgBK,EAAKR,EAAQ,KAIjChF,EAAetF,GASLyK,CAAgBJ,EAAIC,GAErC,OAAInF,EAAS7D,EAAUkJ,IAAeD,EAC7BH,EAAmBC,EAAIC,EAAQ,GAGjCE,GAkGPO,wBA/FF,SAAiCjL,EAAMkL,GACrC,GAAoB,iBAATlL,GAAqC,iBAATA,EAAmB,OAAOA,EAAKiC,WACtE,IAAK6I,MAAM3I,QAAQnC,GAAO,MAAO,GAKjC,GAAoB,KAHpBA,EAAOA,EAAKmL,OAAO,SAASlL,GAC1B,MAAsB,iBAARA,KAEPN,OAAc,MAAO,uBAG9B,GADAuL,EAAiC,iBAAdA,EAAyB9F,EAA4B8F,EACpElL,EAAK,GAAGL,QAAUuL,EAAW,OAAOlL,EAAK,GAE7C,IAAK,IAAIoL,EAAWpL,EAAKL,OAAQyL,EAAW,EAAGA,IAAY,CACzD,IAAIV,EAAa1K,EAAKG,MAAM,EAAGiL,GAAUhL,KAAK,MAC9C,KAAIsK,EAAW/K,OAASuL,GACxB,OAAIE,IAAapL,EAAKL,OAAe+K,EAC9BA,EAAa,IAGtB,MAAO,IA6EPW,SA1EF,SAAkBnB,EAAOoB,GACvB,IAAKnJ,EAAQmJ,IAAkBnJ,EAAQmJ,IAAyC,IAAxBA,EAAa3L,OACnE,OAAOuK,EAET,IAEIqB,EAFAC,EAAiBtI,EAAWoI,GAC5BG,EAAe,WAGnB,IACEF,EAAYhK,KAAKmK,MAAMlK,EAAU0I,IACjC,MAAOyB,GACP,OAAOzB,EAwBT,OArBA,SAAS0B,EAAeC,GACtB,OAAI1J,EAAQ0J,GACHA,EAAYd,IAAI,SAASC,GAC9B,OAAOY,EAAeZ,KAItBhJ,EAAc6J,GACT9K,OAAOf,KAAK6L,GAAajB,OAAO,SAASC,EAAKiB,GAMnD,OALIN,EAAeO,KAAKD,GACtBjB,EAAIiB,GAAKL,EAETZ,EAAIiB,GAAKF,EAAeC,EAAYC,IAE/BjB,OAIJgB,EAGFD,CAAeL,KChlBpBS,GACFC,qBAAqB,EACrBC,OAAO,GAILxK,EACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QAGzEsK,KAAYhM,MACZiM,EAAmB,IAGnBC,EAAiB,0GAErB,SAASC,IACP,MAAwB,oBAAbC,UAAiD,MAArBA,SAASC,SAAyB,GAClED,SAASC,SAASC,KA0D3BT,EAASU,OAAS,WAChB,IA0DIC,EAAoBC,EA1DpBC,KACFC,EAAW,KACXC,EAAgB,KAChBC,EAAqB,KAmCvB,SAASC,EAAelN,EAAOmN,GAC7B,IAAIC,EAAY,KAChB,IAAID,GAAkBlB,EAASC,oBAA/B,CAGA,IAAK,IAAIvM,KAAKmN,EACZ,GAAIA,EAAS5L,eAAevB,GAC1B,IACEmN,EAASnN,GAAG0N,MAAM,MAAOrN,GAAOsN,OAAOlB,EAAOzL,KAAK4M,UAAW,KAC9D,MAAOC,GACPJ,EAAYI,EAKlB,GAAIJ,EACF,MAAMA,GAiBV,SAASK,EAAsBC,EAAKtE,EAAKuE,EAAQC,EAAOpD,GACtD,IAEI4C,EAAYzH,EAAMG,aAAa0E,GAAMA,EAAGqD,MAAQrD,EAEhD1J,EAAU6E,EAAMG,aAAa4H,GAAOA,EAAI5M,QAAU4M,EAEtD,GAAIT,EACFhB,EAAS6B,kBAAkBC,oCACzBd,EACA7D,EACAuE,EACA7M,GAEFkN,SACK,GAAIZ,GAAazH,EAAME,QAAQuH,GAOpCF,EADQjB,EAAS6B,kBAAkBV,IACb,OACjB,CACL,IAUMa,EAVFxB,GACFrD,IAAKA,EACL8E,KAAMP,EACNQ,OAAQP,GAGN7M,OAAOqN,EAGX,GAAkC,uBAA3BlM,SAASvB,KAAKG,IACfmN,EAASnN,EAAQuI,MAAMiD,MAEzBvL,EAAOkN,EAAO,GACdnN,EAAUmN,EAAO,IAIrBxB,EAAS4B,KAAOhC,EAQhBa,GALEnM,KAAMA,EACND,QAASA,EACTsI,IAAKmD,IACLvM,OAAQyM,KAEY,GAGxB,QAAIG,GACKA,EAAmBS,MAAM9M,KAAMgN,WAwB1C,SAASS,IACP,IAAIM,EAAsBrB,EACxBsB,EAAYxB,EACdA,EAAW,KACXE,EAAqB,KACrBD,EAAgB,KAChBE,EAAeG,MAAM,MAAOiB,GAAqB,GAAOhB,OAAOiB,IAUjE,SAAS5B,EAAOnC,EAAIgE,GAClB,IAAIC,EAAOrC,EAAOzL,KAAK4M,UAAW,GAClC,GAAIN,EAAoB,CACtB,GAAID,IAAkBxC,EACpB,OAEAwD,IAIJ,IAAIhO,EAAQiM,EAAS6B,kBAAkBtD,GAevC,GAdAyC,EAAqBjN,EACrBgN,EAAgBxC,EAChBuC,EAAW0B,EAMXC,WAAW,WACL1B,IAAkBxC,GACpBwD,KAEDhO,EAAM2O,WAAa,IAAO,IAEb,IAAZH,EACF,MAAMhE,EAOV,OAHAmC,EAAOiC,UAzLP,SAAmBC,GA0HbhC,IAGJD,EAAqBjL,EAAQmN,QAC7BnN,EAAQmN,QAAUrB,EAClBZ,GAA2B,GA7H3BC,EAASrM,KAAKoO,IAwLhBlC,EAAOoC,YAjLP,SAAqBF,GACnB,IAAK,IAAIlP,EAAImN,EAASlN,OAAS,EAAGD,GAAK,IAAKA,EACtCmN,EAASnN,KAAOkP,GAClB/B,EAAStM,OAAOb,EAAG,IA+KzBgN,EAAOqC,UAvKP,WA+GOnC,IAGLlL,EAAQmN,QAAUlC,EAClBC,GAA2B,EAC3BD,OAAqBwB,GAlHrBtB,MAsKKH,EAtMS,GA4PlBV,EAAS6B,kBAAoB,WA4C3B,SAASmB,EAA+BzE,GACtC,QAAwB,IAAbA,EAAGxK,OAA0BwK,EAAGxK,MAA3C,CAiBA,IAfA,IAUIkP,EACAC,EACAC,EAZAC,EAAS,0IACTC,EAAQ,wHAGRC,EAAQ,6JAERC,EAAY,gDACZC,EAAa,gCACbC,EAAQlF,EAAGxK,MAAMoE,MAAM,MACvBpE,KAMKL,GAFO,sBAAsBgQ,KAAKnF,EAAG1J,SAEjC,GAAG8B,EAAI8M,EAAM9P,OAAQD,EAAIiD,IAAKjD,EAAG,CAC5C,GAAKwP,EAAQE,EAAOM,KAAKD,EAAM/P,IAAM,CACnC,IAAIiQ,EAAWT,EAAM,IAAqC,IAA/BA,EAAM,GAAG3P,QAAQ,UAC/B2P,EAAM,IAAmC,IAA7BA,EAAM,GAAG3P,QAAQ,UAC3B0P,EAAWO,EAAWE,KAAKR,EAAM,OAE9CA,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,IAEtBE,GACEhG,IAAMwG,EAAsB,KAAXT,EAAM,GACvBd,KAAMc,EAAM,IAAM9C,EAClBoC,KAAMmB,GAAYT,EAAM,OACxBjB,KAAMiB,EAAM,IAAMA,EAAM,GAAK,KAC7BhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,WAE5B,GAAKA,EAAQG,EAAMK,KAAKD,EAAM/P,IACnCyP,GACEhG,IAAK+F,EAAM,GACXd,KAAMc,EAAM,IAAM9C,EAClBoC,QACAP,MAAOiB,EAAM,GACbhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,UAE5B,CAAA,KAAKA,EAAQI,EAAMI,KAAKD,EAAM/P,KAsBnC,SArBawP,EAAM,IAAMA,EAAM,GAAG3P,QAAQ,YAAc,IACzC0P,EAAWM,EAAUG,KAAKR,EAAM,MAE7CA,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAKD,EAAS,GACpBC,EAAM,GAAK,MACI,IAANxP,GAAYwP,EAAM,SAAiC,IAApB3E,EAAGqF,eAK3C7P,EAAM,GAAGmO,OAAS3D,EAAGqF,aAAe,GAEtCT,GACEhG,IAAK+F,EAAM,GACXd,KAAMc,EAAM,IAAM9C,EAClBoC,KAAMU,EAAM,GAAKA,EAAM,GAAG/K,MAAM,QAChC8J,KAAMiB,EAAM,IAAMA,EAAM,GAAK,KAC7BhB,OAAQgB,EAAM,IAAMA,EAAM,GAAK,MAUnC,IAJKC,EAAQf,MAAQe,EAAQlB,OAC3BkB,EAAQf,KAAOhC,GAGb+C,EAAQhG,KAAoC,UAA7BgG,EAAQhG,IAAInG,OAAO,EAAG,GAAgB,CAMvD,IAAI6M,EAAM,IAAIC,eAKd,GAJAD,EAAIE,KAAK,MAAOZ,EAAQhG,KAAK,GAC7B0G,EAAIG,KAAK,MAGU,MAAfH,EAAII,OAAgB,CACtB,IAAIzM,EAASqM,EAAIK,cAAgB,GAO7BC,GAHJ3M,EAASA,EAAOrD,OAAO,MAGCiJ,MAAM,gCAG9B,GAAI+G,EAAY,CACd,IAAIC,EAAmBD,EAAW,GAIC,MAA/BC,EAAiBC,OAAO,KAC1BD,GAlcY,oBAAb7D,UAAiD,MAArBA,SAASC,SAAyB,GAGpED,SAASC,SAAS8D,OAShB/D,SAASC,SAAS8D,OAPrB/D,SAASC,SAASjD,SAClB,KACAgD,SAASC,SAAS+D,UACjBhE,SAASC,SAASgE,KAAO,IAAMjE,SAASC,SAASgE,KAAO,KA0bRJ,EAAiBjQ,MAAM,IAKlEgP,EAAQhG,IAAMiH,EAAiBjQ,MAAM,GAAI,KAK/CJ,EAAMS,KAAK2O,GAGb,OAAKpP,EAAMJ,QAKTmB,KAAMyJ,EAAGzJ,KACTD,QAAS0J,EAAG1J,QACZsI,IAAKmD,IACLvM,MAAOA,GAPA,MAwBX,SAAS+N,EAAoC2C,EAAWtH,EAAKuE,EAAQ7M,GACnE,IAAI6P,GACFvH,IAAKA,EACL8E,KAAMP,GAGR,GAAIgD,EAAQvH,KAAOuH,EAAQzC,KAAM,CAO/B,GANAwC,EAAU/B,YAAa,EAElBgC,EAAQtC,OACXsC,EAAQtC,KAAOhC,GAGbqE,EAAU1Q,MAAMJ,OAAS,GACvB8Q,EAAU1Q,MAAM,GAAGoJ,MAAQuH,EAAQvH,IAAK,CAC1C,GAAIsH,EAAU1Q,MAAM,GAAGkO,OAASyC,EAAQzC,KACtC,OAAO,EACF,IACJwC,EAAU1Q,MAAM,GAAGkO,MACpBwC,EAAU1Q,MAAM,GAAGqO,OAASsC,EAAQtC,KAGpC,OADAqC,EAAU1Q,MAAM,GAAGkO,KAAOyC,EAAQzC,MAC3B,EAOb,OAFAwC,EAAU1Q,MAAM4Q,QAAQD,GACxBD,EAAUG,SAAU,GACb,EAKT,OAHEH,EAAU/B,YAAa,GAGlB,EAYT,SAASmC,EAAsCtG,EAAIC,GASjD,IARA,IAIE0E,EACA4B,EALEC,EAAe,qEACjBhR,KACAiR,KACAC,GAAY,EAMRC,EAAOL,EAAsCM,OACjDD,IAASD,EACTC,EAAOA,EAAKC,OAEZ,GAAID,IAASrD,GAAqBqD,IAASlF,EAASU,OAApD,CAkBA,GAbAoE,GACE3H,IAAK,KACLiF,KAAMhC,EACN6B,KAAM,KACNC,OAAQ,MAGNgD,EAAKpQ,KACPgQ,EAAK1C,KAAO8C,EAAKpQ,MACPoO,EAAQ6B,EAAarB,KAAKwB,EAAKjP,eACzC6O,EAAK1C,KAAOc,EAAM,SAGK,IAAd4B,EAAK1C,KACd,IACE0C,EAAK1C,KAAOc,EAAMhF,MAAMkH,UAAU,EAAGlC,EAAMhF,MAAM3K,QAAQ,MACzD,MAAOiD,IAGPwO,EAAM,GAAKE,GACbD,GAAY,EAEZD,EAAM,GAAKE,IAAQ,EAGrBnR,EAAMS,KAAKsQ,GAGTtG,GAGFzK,EAAMQ,OAAO,EAAGiK,GAGlB,IAAI6G,GACFvQ,KAAMyJ,EAAGzJ,KACTD,QAAS0J,EAAG1J,QACZsI,IAAKmD,IACLvM,MAAOA,GAQT,OANA+N,EACEuD,EACA9G,EAAG+G,WAAa/G,EAAGgH,SACnBhH,EAAG0D,MAAQ1D,EAAGiH,WACdjH,EAAG1J,SAAW0J,EAAGkH,aAEZJ,EAQT,SAASxD,EAAkBtD,EAAIC,GAC7B,IAAIzK,EAAQ,KACZyK,EAAiB,MAATA,EAAgB,GAAKA,EAE7B,IAEE,GADAzK,EAAQiP,EAA+BzE,GAErC,OAAOxK,EAET,MAAOyC,GACP,GAAIwJ,EAASE,MACX,MAAM1J,EAIV,IAEE,GADAzC,EAAQ8Q,EAAsCtG,EAAIC,EAAQ,GAExD,OAAOzK,EAET,MAAOyC,GACP,GAAIwJ,EAASE,MACX,MAAM1J,EAGV,OACE1B,KAAMyJ,EAAGzJ,KACTD,QAAS0J,EAAG1J,QACZsI,IAAKmD,KAOT,OAHAuB,EAAkBC,oCAAsCA,EACxDD,EAAkBmB,+BAAiCA,EAE5CnB,EAhVoB,GAmV7B,IAAA6D,EAAiB1F,EClpBjB,SAAS2F,EAAQC,EAAGC,GAClB,IAAIC,GAAW,MAAJF,IAAmB,MAAJC,GAE1B,OADWD,GAAK,KAAOC,GAAK,KAAOC,GAAO,KAC3B,GAAa,MAANA,EAaxB,SAASC,EAAOC,EAAGzN,EAAGC,EAAGoN,EAAGK,EAAGC,GAC7B,OAAOP,GARc1J,EAQQ0J,EAAQA,EAAQpN,EAAGyN,GAAIL,EAAQC,EAAGM,OARrCC,EAQ0CF,GAP7ChK,IAAS,GAAKkK,EAOmC3N,GAR1E,IAAuByD,EAAKkK,EAU5B,SAASC,EAAM7N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAQvN,EAAI2D,GAAO3D,EAAI6N,EAAI9N,EAAGC,EAAGoN,EAAGK,EAAGC,GAEhD,SAASI,EAAM/N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAQvN,EAAI6N,EAAMlK,GAAKkK,EAAI9N,EAAGC,EAAGoN,EAAGK,EAAGC,GAEhD,SAASK,EAAMhO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAOvN,EAAI2D,EAAIkK,EAAG9N,EAAGC,EAAGoN,EAAGK,EAAGC,GAEvC,SAASM,EAAMjO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAGK,EAAGC,GAC/B,OAAOH,EAAO5J,GAAK3D,GAAK6N,GAAI9N,EAAGC,EAAGoN,EAAGK,EAAGC,GAM1C,SAASO,EAAQb,EAAGtO,GAKlB,IAAI5D,EACAgT,EACAC,EACAC,EACAC,EAPJjB,EAAEtO,GAAO,IAAM,KAASA,EAAM,GAC9BsO,EAA8B,IAAzBtO,EAAM,KAAQ,GAAM,IAAWA,EAOpC,IAAIiB,EAAI,WACJC,GAAK,UACL2D,GAAK,WACLkK,EAAI,UAER,IAAK3S,EAAI,EAAGA,EAAIkS,EAAEjS,OAAQD,GAAK,GAC7BgT,EAAOnO,EACPoO,EAAOnO,EACPoO,EAAOzK,EACP0K,EAAOR,EAEP9N,EAAI6N,EAAM7N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,GAAI,GAAI,WAChC2S,EAAID,EAAMC,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,IAAK,WACrCyI,EAAIiK,EAAMjK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,GAAI,WACpC8E,EAAI4N,EAAM5N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,YACrC6E,EAAI6N,EAAM7N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,WACpC2S,EAAID,EAAMC,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,GAAI,YACpCyI,EAAIiK,EAAMjK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,IAAK,YACrC8E,EAAI4N,EAAM5N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,UACrC6E,EAAI6N,EAAM7N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,EAAG,YACnC2S,EAAID,EAAMC,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,IAAK,YACrCyI,EAAIiK,EAAMjK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,IAAK,OACtC8E,EAAI4N,EAAM5N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,IAAK,YACtC6E,EAAI6N,EAAM7N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,IAAK,EAAG,YACpC2S,EAAID,EAAMC,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,IAAK,UACtCyI,EAAIiK,EAAMjK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,IAAK,YAGtC6E,EAAI+N,EAAM/N,EAFVC,EAAI4N,EAAM5N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,GAAI,YAErByI,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,WACpC2S,EAAIC,EAAMD,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,GAAI,YACpCyI,EAAImK,EAAMnK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,GAAI,WACrC8E,EAAI8N,EAAM9N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,GAAI,IAAK,WACjC6E,EAAI+N,EAAM/N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,WACpC2S,EAAIC,EAAMD,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,EAAG,UACpCyI,EAAImK,EAAMnK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,IAAK,WACtC8E,EAAI8N,EAAM9N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,WACrC6E,EAAI+N,EAAM/N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,EAAG,WACnC2S,EAAIC,EAAMD,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,GAAI,YACrCyI,EAAImK,EAAMnK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,IAAK,WACrC8E,EAAI8N,EAAM9N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,GAAI,YACpC6E,EAAI+N,EAAM/N,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,IAAK,GAAI,YACrC2S,EAAIC,EAAMD,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,GAAI,UACpCyI,EAAImK,EAAMnK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,GAAI,YAGpC6E,EAAIgO,EAAMhO,EAFVC,EAAI8N,EAAM9N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,IAAK,YAEtByI,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,QACpC2S,EAAIE,EAAMF,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,IAAK,YACrCyI,EAAIoK,EAAMpK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,GAAI,YACrC8E,EAAI+N,EAAM/N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,IAAK,UACtC6E,EAAIgO,EAAMhO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,YACpC2S,EAAIE,EAAMF,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,GAAI,YACpCyI,EAAIoK,EAAMpK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,IAAK,WACrC8E,EAAI+N,EAAM/N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,IAAK,YACtC6E,EAAIgO,EAAMhO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,IAAK,EAAG,WACpC2S,EAAIE,EAAMF,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,GAAI,IAAK,WACjCyI,EAAIoK,EAAMpK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,IAAK,WACrC8E,EAAI+N,EAAM/N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,GAAI,UACpC6E,EAAIgO,EAAMhO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,WACpC2S,EAAIE,EAAMF,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,IAAK,WACtCyI,EAAIoK,EAAMpK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,GAAI,WAGrC6E,EAAIiO,EAAMjO,EAFVC,EAAI+N,EAAM/N,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,WAErByI,EAAGkK,EAAGT,EAAElS,GAAI,GAAI,WAChC2S,EAAIG,EAAMH,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,GAAI,YACpCyI,EAAIqK,EAAMrK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,IAAK,YACtC8E,EAAIgO,EAAMhO,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,UACrC6E,EAAIiO,EAAMjO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,IAAK,EAAG,YACpC2S,EAAIG,EAAMH,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,GAAI,IAAK,YACrCyI,EAAIqK,EAAMrK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,IAAK,IAAK,SACtC8E,EAAIgO,EAAMhO,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,YACrC6E,EAAIiO,EAAMjO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,EAAG,YACnC2S,EAAIG,EAAMH,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,IAAK,UACtCyI,EAAIqK,EAAMrK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,IAAK,YACrC8E,EAAIgO,EAAMhO,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,IAAK,GAAI,YACrC6E,EAAIiO,EAAMjO,EAAGC,EAAG2D,EAAGkK,EAAGT,EAAElS,EAAI,GAAI,GAAI,WACpC2S,EAAIG,EAAMH,EAAG9N,EAAGC,EAAG2D,EAAGyJ,EAAElS,EAAI,IAAK,IAAK,YACtCyI,EAAIqK,EAAMrK,EAAGkK,EAAG9N,EAAGC,EAAGoN,EAAElS,EAAI,GAAI,GAAI,WACpC8E,EAAIgO,EAAMhO,EAAG2D,EAAGkK,EAAG9N,EAAGqN,EAAElS,EAAI,GAAI,IAAK,WAErC6E,EAAIoN,EAAQpN,EAAGmO,GACflO,EAAImN,EAAQnN,EAAGmO,GACfxK,EAAIwJ,EAAQxJ,EAAGyK,GACfP,EAAIV,EAAQU,EAAGQ,GAEjB,OAAQtO,EAAGC,EAAG2D,EAAGkK,GAMnB,SAASS,EAAU5I,GACjB,IAAIxK,EACA0K,EAAS,GACT2I,EAA0B,GAAf7I,EAAMvK,OACrB,IAAKD,EAAI,EAAGA,EAAIqT,EAAUrT,GAAK,EAC7B0K,GAAUC,OAAO2I,aAAc9I,EAAMxK,GAAK,KAAQA,EAAI,GAAO,KAE/D,OAAO0K,EAOT,SAAS6I,EAAU/I,GACjB,IAAIxK,EACA0K,KAEJ,IADAA,GAAQF,EAAMvK,QAAU,GAAK,QAAKwO,EAC7BzO,EAAI,EAAGA,EAAI0K,EAAOzK,OAAQD,GAAK,EAClC0K,EAAO1K,GAAK,EAEd,IAAIwT,EAAyB,EAAfhJ,EAAMvK,OACpB,IAAKD,EAAI,EAAGA,EAAIwT,EAASxT,GAAK,EAC5B0K,EAAO1K,GAAK,KAAiC,IAA1BwK,EAAMiJ,WAAWzT,EAAI,KAAeA,EAAI,GAE7D,OAAO0K,EAkCT,SAASgJ,EAASlJ,GAChB,IAEI0H,EACAlS,EAFA0K,EAAS,GAGb,IAAK1K,EAAI,EAAGA,EAAIwK,EAAMvK,OAAQD,GAAK,EACjCkS,EAAI1H,EAAMiJ,WAAWzT,GACrB0K,GANW,mBAMMiG,OAAQuB,IAAM,EAAK,IANzB,mBAMwCvB,OAAW,GAAJuB,GAE5D,OAAOxH,EAMT,SAASiJ,EAAanJ,GACpB,OAAOoJ,SAAS7L,mBAAmByC,IAMrC,SAASqJ,EAAOtB,GACd,OAnDF,SAAiBA,GACf,OAAOa,EAAUL,EAAQQ,EAAUhB,GAAe,EAAXA,EAAEtS,SAkDlC6T,CAAQH,EAAapB,IAK9B,SAASwB,EAAW3H,EAAGuG,GACrB,OAlDF,SAAqBpS,EAAK6G,GACxB,IAAIpH,EAIAgU,EAHAC,EAAOV,EAAUhT,GACjB2T,KACAC,KAMJ,IAJAD,EAAK,IAAMC,EAAK,SAAM1F,EAClBwF,EAAKhU,OAAS,KAChBgU,EAAOlB,EAAQkB,EAAmB,EAAb1T,EAAIN,SAEtBD,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBkU,EAAKlU,GAAe,UAAViU,EAAKjU,GACfmU,EAAKnU,GAAe,WAAViU,EAAKjU,GAGjB,OADAgU,EAAOjB,EAAQmB,EAAKvG,OAAO4F,EAAUnM,IAAQ,IAAoB,EAAdA,EAAKnH,QACjDmT,EAAUL,EAAQoB,EAAKxG,OAAOqG,GAAO,MAmCrCI,CAAYT,EAAavH,GAAIuH,EAAahB,IAmBnD,IAAA0B,EAbA,SAAaC,EAAQ/T,EAAKgU,GACxB,OAAKhU,EAMAgU,EAGER,EAAWxT,EAAK+T,GAbhBZ,EAASK,EAWIxT,EAAK+T,IANlBC,EAGEV,EAAOS,GAdTZ,EAASG,EAYES,KC/PpB,SAASE,EAAiBrT,GACxBP,KAAKQ,KAAO,mBACZR,KAAKO,QAAUA,EAEjBqT,EAAiBlT,UAAY,IAAIL,MACjCuT,EAAiBlT,UAAUmT,YAAcD,EAEzC,IAAAE,EAAiBF,ECgCjBG,EArCiB,SAASC,EAASC,EAAO7R,GACxC,IAAI8R,EAAuBF,EAAQC,GAC/BE,EAAkBH,EAEtB,GAAMC,KAASD,EAAf,CAIA,IAAII,EAAwB,SAAVH,EAAmB,UAAYA,EAEjDD,EAAQC,GAAS,WACf,IAAI/F,KAAUrO,MAAMO,KAAK4M,WAErBG,EAAM/H,EAAMuE,SAASuE,EAAM,KAC3B1H,GAAQyN,MAAOG,EAAaC,OAAQ,UAAWC,OAAQtH,UAAWkB,IAExD,WAAV+F,GACc,IAAZ/F,EAAK,KAEPf,EACE,sBAAwB/H,EAAMuE,SAASuE,EAAKrO,MAAM,GAAI,MAAQ,kBAChE2G,EAAK8N,MAAMtH,UAAYkB,EAAKrO,MAAM,GAClCuC,GAAYA,EAAS+K,EAAK3G,IAG5BpE,GAAYA,EAAS+K,EAAK3G,GAIxB0N,GAGFK,SAAS7T,UAAUoM,MAAM1M,KAAK8T,EAAsBC,EAAiBjG,MC1BvE3I,EAAeH,EAAMG,aACrBC,EAAaJ,EAAMI,WACnBC,EAAiBL,EAAMK,eACvBH,EAAUF,EAAME,QAChBD,EAAWD,EAAMC,SACjB3D,EAAgB0D,EAAM1D,cACtBF,EAAc4D,EAAM5D,YACpBkE,EAAaN,EAAMM,WACnB9D,GAAWwD,EAAMxD,SACjBC,GAAUuD,EAAMvD,QAChB8D,GAAgBP,EAAMO,cACtBxD,GAAOiD,EAAMjD,KACbwE,GAAcvB,EAAMuB,YACpBpE,GAAW6C,EAAM7C,SACjBuE,GAAe1B,EAAM0B,aACrBxE,GAAS8C,EAAM9C,OACfM,GAAawC,EAAMxC,WACnBoE,GAAY5B,EAAM4B,UAClBI,GAAQhC,EAAMgC,MACda,GAAmB7C,EAAM6C,iBACzBM,GAAkBnD,EAAMmD,gBACxBpE,GAAmBiB,EAAMjB,iBACzByE,GAAWxD,EAAMwD,SACjBS,GAAOjE,EAAMiE,KACbvH,GAAgBsD,EAAMtD,cACtBqE,GAAyBf,EAAMe,uBAC/BwE,GAA0BvF,EAAMuF,wBAChCX,GAAqB5E,EAAM4E,mBAC3Be,GAAW3F,EAAM2F,SAEjByJ,GAAoBC,EAEpBC,GAAU,2CAA2C7Q,MAAM,KAC7D8Q,GAAa,gEAEf,SAASC,KACP,OAAQ,IAAIC,KAId,IAAIzT,GACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QACzEuT,GAAY1T,GAAQ6K,SACpB8I,GAAa3T,GAAQ4T,UAEzB,SAASC,GAAqBxO,EAAUrE,GACtC,OAAOsD,EAAWtD,GACd,SAASoE,GACP,OAAOpE,EAASoE,EAAMC,IAExBrE,EAMN,SAAS8S,KA2DP,IAAK,IAAIC,KA1DTnV,KAAKoV,WAA8B,iBAATnU,OAAqBA,KAAKC,WAEpDlB,KAAKqV,cAAgB7T,EAAYsT,IACjC9U,KAAKsV,eAAiB9T,EAAYuT,IAClC/U,KAAKuV,uBAAyB,KAC9BvV,KAAKwV,UAAY,KACjBxV,KAAKyV,aAAe,KACpBzV,KAAK0V,cAAgB,KACrB1V,KAAK2V,WAAa,KAClB3V,KAAK4V,eAAiB,KACtB5V,KAAK6V,kBACL7V,KAAK8V,gBAEHC,QAAS3U,GAAQ4U,gBAAkB5U,GAAQ4U,eAAepS,GAC1DyQ,OAAQ,aACR4B,gBACAC,cACAC,iBACAC,gBACAC,QAAS,KACT1K,qBAAqB,EACrB2K,4BAA4B,EAC5BC,iBAAkB,EAElBC,aAAc,IACdC,gBAAiB,GACjBC,iBAAiB,EACjBC,YAAY,EACZC,WAAY,EACZ5L,iBAEFhL,KAAK6W,gBACH1B,OAAQ,OACR2B,WAAW,EAKX1Q,eAAgBD,KAA2B,SAAW,IAExDnG,KAAK+W,eAAiB,EACtB/W,KAAKgX,mBAAoB,EACzBhX,KAAKiX,8BAAgC5W,MAAMoW,gBAG3CzW,KAAKkX,iBAAmB9V,GAAQ4S,YAChChU,KAAKmX,2BACLnX,KAAKoX,YACLpX,KAAKqX,WAAazC,KAClB5U,KAAKsX,oBACLtX,KAAKuX,gBACLvX,KAAKwX,mBAAqB,KAC1BxX,KAAKyX,iBACLzX,KAAK0X,UAAYtW,GAAQ8K,SACzBlM,KAAK2X,UAAY3X,KAAK0X,WAAa1X,KAAK0X,UAAUvL,KAClDnM,KAAK4X,gBAGc5X,KAAKkX,iBACtBlX,KAAKmX,wBAAwBhC,GAAUnV,KAAKkX,iBAAiB/B,GAUjED,GAAMxU,WAKJmX,QAAS,SAETjM,OAAO,EAEPF,SAAUA,EASVoM,OAAQ,SAASC,EAAKC,GACpB,IAAIzW,EAAOvB,KAEX,GAAIuB,EAAKmU,cAEP,OADA1V,KAAKiY,UAAU,QAAS,4CACjB1W,EAET,IAAKwW,EAAK,OAAOxW,EAEjB,IAAI2W,EAAgB3W,EAAKuU,eAGrBkC,GACF7V,GAAK6V,EAAS,SAASrY,EAAKC,GAEd,SAARD,GAA0B,UAARA,GAA2B,SAARA,EACvC4B,EAAKsU,eAAelW,GAAOC,EAE3BsY,EAAcvY,GAAOC,IAK3B2B,EAAK4W,OAAOJ,GAIZG,EAAcjC,aAAa/V,KAAK,qBAChCgY,EAAcjC,aAAa/V,KAAK,iDAGhCgY,EAAcjC,aAAerT,GAAWsV,EAAcjC,cACtDiC,EAAchC,aAAagC,EAAchC,WAAW7W,QAChDuD,GAAWsV,EAAchC,YAE7BgC,EAAc/B,gBAAgB+B,EAAc/B,cAAc9W,QACtDuD,GAAWsV,EAAc/B,eAE7B+B,EAAc9B,aAAexT,GAAWsV,EAAc9B,cACtD8B,EAAcE,eAAiBrQ,KAAKtF,IAClC,EACAsF,KAAKsQ,IAAIH,EAAcE,gBAAkB,IAAK,MAGhD,IAAIE,GACF/I,KAAK,EACLyE,SAAS,EACTuE,KAAK,EACLrM,UAAU,EACVsM,QAAQ,GAGN9B,EAAkBwB,EAAcxB,gBACM,uBAAnC/U,SAASvB,KAAKsW,GACnBA,EAAkB/P,GAAY2R,EAAwB5B,IACzB,IAApBA,IACTA,EAAkB4B,GAEpBJ,EAAcxB,gBAAkBA,EAEhC,IAAI+B,GACFC,UAAU,GAGR/B,EAAauB,EAAcvB,WAW/B,MAVqC,uBAA9BhV,SAASvB,KAAKuW,GACnBA,EAAahQ,GAAY8R,EAAoB9B,IACrB,IAAfA,IACTA,EAAa8B,GAEfP,EAAcvB,WAAaA,EAE3BjL,EAASC,sBAAwBuM,EAAcvM,oBAGxCpK,GAWToX,QAAS,WACP,IAAIpX,EAAOvB,KAyBX,OAxBIuB,EAAKqX,YAAcrX,EAAKyV,oBAC1BtL,EAASU,OAAOiC,UAAU,WACxB9M,EAAKsX,wBAAwB/L,MAAMvL,EAAMyL,aAGvCzL,EAAKuU,eAAeQ,4BACtB/U,EAAKuX,iCAGPvX,EAAKwX,yBAEDxX,EAAKuU,eAAea,YAAcpV,EAAKuU,eAAea,WAAW+B,UACnEnX,EAAKyX,sBAGHzX,EAAKuU,eAAeY,iBAAiBnV,EAAK0X,yBAG9C1X,EAAK2X,gBAEL3X,EAAKyV,mBAAoB,GAG3B3W,MAAMoW,gBAAkBlV,EAAKuU,eAAeW,gBACrCzW,MAQTmY,OAAQ,SAASJ,GACf,IACEoB,EADSnZ,KACEoZ,UAAUrB,GACrBsB,EAAYF,EAAIhQ,KAAKmQ,YAAY,KACjCnQ,EAAOgQ,EAAIhQ,KAAKzG,OAAO,EAAG2W,GAHjBrZ,KAKNuZ,KAAOxB,EALD/X,KAMN2V,WAAawD,EAAIK,KANXxZ,KAONyZ,cAAgBN,EAAIO,MAAQP,EAAIO,KAAKhX,OAAO,GAPtC1C,KAQN4V,eAAiBuD,EAAIhQ,KAAKzG,OAAO2W,EAAY,GARvCrZ,KAUN0V,cAVM1V,KAUe2Z,iBAAiBR,GAVhCnZ,KAYN4Z,gBAZM5Z,KAaJ0V,cAAgB,IAAMvM,EAAO,OAbzBnJ,KAauC4V,eAAiB,UAInE5V,KAAK4X,iBAWPiC,QAAS,SAAS7B,EAASlK,EAAMI,GAO/B,OANIxI,EAAWsS,KACb9J,EAAOJ,MACPA,EAAOkK,EACPA,MAGKhY,KAAK8Z,KAAK9B,EAASlK,GAAMhB,MAAM9M,KAAMkO,IAW9C4L,KAAM,SAAS9B,EAASlK,EAAMiM,GAC5B,IAAIxY,EAAOvB,KAGX,GAAIwB,EAAYsM,KAAUpI,EAAWsS,GACnC,OAAOA,EAWT,GAPItS,EAAWsS,KACblK,EAAOkK,EACPA,OAAUnK,IAKPnI,EAAWoI,GACd,OAAOA,EAIT,IACE,GAAIA,EAAKrE,UACP,OAAOqE,EAIT,GAAIA,EAAKkM,kBACP,OAAOlM,EAAKkM,kBAEd,MAAO9X,GAIP,OAAO4L,EAGT,SAASmM,IACP,IAAI/L,KACF9O,EAAI4N,UAAU3N,OACd6a,GAAQlC,GAAYA,IAA4B,IAAjBA,EAAQkC,KAQzC,IANIH,GAAWrU,EAAWqU,IACxBA,EAAQjN,MAAM9M,KAAMgN,WAKf5N,KAAK8O,EAAK9O,GAAK8a,EAAO3Y,EAAKuY,KAAK9B,EAAShL,UAAU5N,IAAM4N,UAAU5N,GAE1E,IAKE,OAAO0O,EAAKhB,MAAM9M,KAAMkO,GACxB,MAAOhM,GAGP,MAFAX,EAAK4Y,qBACL5Y,EAAK6Y,iBAAiBlY,EAAG8V,GACnB9V,GAKV,IAAK,IAAImY,KAAYvM,EACfxL,GAAOwL,EAAMuM,KACfJ,EAAQI,GAAYvM,EAAKuM,IAW7B,OARAJ,EAAQvZ,UAAYoN,EAAKpN,UAEzBoN,EAAKkM,kBAAoBC,EAGzBA,EAAQxQ,WAAY,EACpBwQ,EAAQvQ,SAAWoE,EAEZmM,GAQTxL,UAAW,WAWT,OAVA/C,EAASU,OAAOqC,YAEhBzO,KAAKsa,iCACLta,KAAKua,2BACLva,KAAKwa,mBACLxa,KAAKya,kBAELpa,MAAMoW,gBAAkBzW,KAAKiX,8BAC7BjX,KAAKgX,mBAAoB,EAElBhX,MAWT0a,yBAA0B,SAASC,GACjC3a,KAAKiY,UAAU,QAAS,4CAA6C0C,GACrE3a,KAAKoa,iBAAiBO,EAAMC,QAC1BC,WACE1V,KAAM,uBACN2V,SAAS,MAUfhC,+BAAgC,WAI9B,OAHA9Y,KAAK0a,yBAA2B1a,KAAK0a,yBAAyBK,KAAK/a,MACnEoB,GAAQ4Z,kBACN5Z,GAAQ4Z,iBAAiB,qBAAsBhb,KAAK0a,0BAC/C1a,MAQTsa,+BAAgC,WAG9B,OAFAlZ,GAAQ6Z,qBACN7Z,GAAQ6Z,oBAAoB,qBAAsBjb,KAAK0a,0BAClD1a,MAUToa,iBAAkB,SAASnQ,EAAI+N,GAG7B,GAFAA,EAAUrR,IAAauU,eAAgB,GAAIlD,OAEvCzS,EAAa0E,IAAOA,EAAGqD,MAEzBrD,EAAKA,EAAGqD,UACH,CAAA,GAAI9H,EAAWyE,IAAOxE,EAAewE,GAAK,CAK/C,IAAIzJ,EAAOyJ,EAAGzJ,OAASgF,EAAWyE,GAAM,WAAa,gBACjD1J,EAAU0J,EAAG1J,QAAUC,EAAO,KAAOyJ,EAAG1J,QAAUC,EAEtD,OAAOR,KAAKmb,eACV5a,EACAoG,GAAYqR,GAGVrP,YAAY,EACZuS,eAAgBlD,EAAQkD,eAAiB,KAGxC,GAAI5V,EAAQ2E,GAEjBA,EAAKA,MACA,CAAA,IAAIvI,EAAcuI,GAavB,OAAOjK,KAAKmb,eACVlR,EACAtD,GAAYqR,GACVrP,YAAY,EACZuS,eAAgBlD,EAAQkD,eAAiB,KAb7ClD,EAAUhY,KAAKob,2CAA2CpD,EAAS/N,GACnEA,EAAK,IAAI5J,MAAM2X,EAAQzX,UAkBzBP,KAAKuV,uBAAyBtL,EAO9B,IACE,IAAIxK,EAAQiM,EAAS6B,kBAAkBtD,GACvCjK,KAAKqb,iBAAiB5b,EAAOuY,GAC7B,MAAOxP,GACP,GAAIyB,IAAOzB,EACT,MAAMA,EAIV,OAAOxI,MAGTob,2CAA4C,SAASE,EAAgBrR,GACnE,IAAIsR,EAAS9a,OAAOf,KAAKuK,GAAIuR,OACzBxD,EAAUrR,GAAY2U,GACxB/a,QACE,2CAA6CoK,GAAwB4Q,GACvEE,aAAcC,EAAIH,IAClBjH,MAAOgH,EAAehH,YAIxB,OAFA0D,EAAQ1D,MAAMqH,eAAiB3R,GAAmBC,GAE3C+N,GAUTmD,eAAgB,SAAShO,EAAK6K,GAI5B,IACIhY,KAAK8V,eAAeG,aAAaxK,OACnCzL,KAAK8V,eAAeG,aAAaxK,KAAK0B,GAFxC,CAUA,IAOIlD,EAPAzD,EAAOG,IAEPpG,QAJJ4M,GAAY,IADZ6K,EAAUA,OAeV,IACE,MAAM,IAAI3X,MAAM8M,GAChB,MAAO3E,GACPyB,EAAKzB,EAIPyB,EAAGzJ,KAAO,KACV,IAAIf,EAAQiM,EAAS6B,kBAAkBtD,GAGnC2R,EAAc/Z,GAAQpC,EAAMA,QAAUA,EAAMA,MAAM,GAKlDmc,GAAoC,2BAArBA,EAAY9N,OAC7B8N,EAAcnc,EAAMA,MAAM,IAG5B,IAAIoc,EAAWD,GAAeA,EAAY/S,KAAQ,GAElD,KACI7I,KAAK8V,eAAeI,WAAWzK,OACjCzL,KAAK8V,eAAeI,WAAWzK,KAAKoQ,OAMlC7b,KAAK8V,eAAeK,cAAc1K,MACnCzL,KAAK8V,eAAeK,cAAc1K,KAAKoQ,IAF1C,CAOA,GAAI7b,KAAK8V,eAAenN,YAAeqP,GAAWA,EAAQrP,WAAa,CAErEnC,EAAKiV,YAAkC,MAApBjV,EAAKiV,YAAsBtO,EAAM3G,EAAKiV,aAEzDzD,EAAUrR,IAENuU,eAAgB,GAElBlD,IAMMkD,gBAAkB,EAE1B,IAAI3W,EAASvE,KAAK8b,eAAerc,EAAOuY,GACxCxR,EAAKmC,YAEHpE,OAAQA,EAAO+D,WAcnB,OATI9B,EAAKiV,cACPjV,EAAKiV,YAAc5Z,GAAQ2E,EAAKiV,aAC5BjV,EAAKiV,aACJjV,EAAKiV,cAIZzb,KAAK+b,MAAMvV,GAEJxG,QAGTgc,kBAAmB,SAASjb,GAC1B,IAAIkb,EAAQtV,IAERuV,UAAWtH,KAAQ,KAErB7T,GAGF,GAAI2E,EAAW1F,KAAK8V,eAAeqG,oBAAqB,CACtD,IAAIpL,EAAS/Q,KAAK8V,eAAeqG,mBAAmBF,GAEpD,GAAI5W,EAAS0L,KAAYpL,GAAcoL,GACrCkL,EAAQlL,OACH,IAAe,IAAXA,EACT,OAAO/Q,KAQX,OAJAA,KAAKuX,aAAarX,KAAK+b,GACnBjc,KAAKuX,aAAalY,OAASW,KAAK8V,eAAesC,gBACjDpY,KAAKuX,aAAa6E,QAEbpc,MAGTqc,UAAW,SAASC,GAClB,IAAIC,KAAgB1c,MAAMO,KAAK4M,UAAW,GAO1C,OALAhN,KAAKoX,SAASlX,MAAMoc,EAAQC,IACxBvc,KAAKgX,mBACPhX,KAAKkZ,gBAGAlZ,MASTwc,eAAgB,SAAShD,GAIvB,OAFAxZ,KAAK6V,eAAe2D,KAAOA,EAEpBxZ,MASTyc,gBAAiB,SAASnI,GAGxB,OAFAtU,KAAK0c,cAAc,QAASpI,GAErBtU,MAST2c,eAAgB,SAASC,GAGvB,OAFA5c,KAAK0c,cAAc,OAAQE,GAEpB5c,MAQT6c,aAAc,WAGZ,OAFA7c,KAAK6V,kBAEE7V,MAQT8c,WAAY,WAEV,OAAO7b,KAAKmK,MAAMlK,EAAUlB,KAAK6V,kBASnCkH,eAAgB,SAASC,GAGvB,OAFAhd,KAAK8V,eAAekH,YAAcA,EAE3Bhd,MASTid,WAAY,SAASlH,GAGnB,OAFA/V,KAAK8V,eAAeC,QAAUA,EAEvB/V,MAUTkd,gBAAiB,SAAS9a,GACxB,IAAIqE,EAAWzG,KAAK8V,eAAeqH,aAEnC,OADAnd,KAAK8V,eAAeqH,aAAelI,GAAqBxO,EAAUrE,GAC3DpC,MAUTod,sBAAuB,SAAShb,GAC9B,IAAIqE,EAAWzG,KAAK8V,eAAeqG,mBAEnC,OADAnc,KAAK8V,eAAeqG,mBAAqBlH,GAAqBxO,EAAUrE,GACjEpC,MAUTqd,sBAAuB,SAASjb,GAC9B,IAAIqE,EAAWzG,KAAK8V,eAAewH,mBAEnC,OADAtd,KAAK8V,eAAewH,mBAAqBrI,GAAqBxO,EAAUrE,GACjEpC,MAYTud,aAAc,SAASC,GAGrB,OAFAxd,KAAK8V,eAAe0H,UAAYA,EAEzBxd,MAQTyM,cAAe,WACb,OAAOzM,KAAKuV,wBAQdkI,YAAa,WACX,OAAOzd,KAAKyV,cAQdmD,QAAS,WACP,QAAK5Y,KAAKoV,aACLpV,KAAK0V,gBACH1V,KAAK0d,0BACR1d,KAAK0d,yBAA0B,EAC/B1d,KAAKiY,UAAU,QAAS,2CAEnB,KAKX0F,UAAW,WAIT,IAAIC,EAAcxc,GAAQwc,YACtBA,GACF5d,KAAK8X,OAAO8F,EAAY7F,IAAK6F,EAAY9F,QAAQa,WAIrDkF,iBAAkB,SAAS7F,GACzB,GACGlD,GADH,CAOA,IAAI2I,GAFJzF,EAAUA,OAEgB8F,SAAW9d,KAAKyd,cAC1C,IAAKA,EACH,MAAM,IAAI7J,EAAiB,mBAG7B,IAAImE,EAAMC,EAAQD,KAAO/X,KAAKuZ,KAC9B,IAAKxB,EACH,MAAM,IAAInE,EAAiB,eAG7B,IAAImK,EAAS5W,mBACT6W,EAAK,GACTA,GAAM,YAAcD,EAAON,GAC3BO,GAAM,QAAUD,EAAOhG,GAEvB,IAAIyB,EAAOxB,EAAQwB,MAAQxZ,KAAK6V,eAAe2D,KAC3CA,IACEA,EAAKhZ,OAAMwd,GAAM,SAAWD,EAAOvE,EAAKhZ,OACxCgZ,EAAKyE,QAAOD,GAAM,UAAYD,EAAOvE,EAAKyE,SAGhD,IAAIC,EAAele,KAAK2Z,iBAAiB3Z,KAAKoZ,UAAUrB,IAEpDoG,EAASrJ,GAAUsJ,cAAc,UACrCD,EAAOE,OAAQ,EACfF,EAAOG,IAAMJ,EAAe,yBAA2BF,GACtDlJ,GAAUyJ,MAAQzJ,GAAU0J,MAAMC,YAAYN,KAIjDhE,mBAAoB,WAClB,IAAI5Y,EAAOvB,KACXA,KAAK+W,gBAAkB,EACvB5I,WAAW,WAET5M,EAAKwV,gBAAkB,KAI3B2H,cAAe,SAASC,EAAW3G,GAEjC,IAAI4G,EAAKjf,EAET,GAAKK,KAAKqV,aAAV,CAcA,IAAK1V,KAZLqY,EAAUA,MAEV2G,EAAY,QAAUA,EAAUjc,OAAO,EAAG,GAAGmc,cAAgBF,EAAUjc,OAAO,GAE1EoS,GAAUgK,aACZF,EAAM9J,GAAUgK,YAAY,eACxBC,UAAUJ,GAAW,GAAM,IAE/BC,EAAM9J,GAAUkK,qBACZL,UAAYA,EAGN3G,EACN1V,GAAO0V,EAASrY,KAClBif,EAAIjf,GAAOqY,EAAQrY,IAGvB,GAAImV,GAAUgK,YAEZhK,GAAUmK,cAAcL,QAIxB,IACE9J,GAAUoK,UAAU,KAAON,EAAID,UAAUhb,cAAeib,GACxD,MAAO1c,OAYbid,wBAAyB,SAASC,GAChC,IAAI7d,EAAOvB,KACX,OAAO,SAAS4e,GASd,GALArd,EAAKkW,iBAAmB,KAKpBlW,EAAKiW,qBAAuBoH,EAAhC,CAQA,IAAIS,EANJ9d,EAAKiW,mBAAqBoH,EAO1B,IACES,EAASpX,GAAiB2W,EAAIS,QAC9B,MAAOnd,GACPmd,EAAS,YAGX9d,EAAKya,mBACHsD,SAAU,MAAQF,EAClB7e,QAAS8e,OAUfE,sBAAuB,WACrB,IAAIhe,EAAOvB,KAMX,OAAO,SAAS4e,GACd,IAAIS,EACJ,IACEA,EAAST,EAAIS,OACb,MAAOnd,GAGP,OAEF,IAAIwB,EAAU2b,GAAUA,EAAO3b,QAK/B,GACGA,IACY,UAAZA,GAAmC,aAAZA,GAA2B2b,EAAOG,mBAF5D,CAQA,IAAIC,EAAUle,EAAKkW,iBACdgI,GACHle,EAAK4d,wBAAwB,QAA7B5d,CAAsCqd,GAExCc,aAAaD,GACble,EAAKkW,iBAAmBtJ,WAAW,WACjC5M,EAAKkW,iBAAmB,MAjCP,QA4CvBkI,kBAAmB,SAASC,EAAMC,GAChC,IAAIC,EAAYlX,GAAS5I,KAAK0X,UAAUvL,MACpC4T,EAAWnX,GAASiX,GACpBG,EAAapX,GAASgX,GAK1B5f,KAAK2X,UAAYkI,EAIbC,EAAU7W,WAAa8W,EAAS9W,UAAY6W,EAAU5W,OAAS6W,EAAS7W,OAC1E2W,EAAKE,EAAS3W,UACZ0W,EAAU7W,WAAa+W,EAAW/W,UAAY6W,EAAU5W,OAAS8W,EAAW9W,OAC9E0W,EAAOI,EAAW5W,UAEpBpJ,KAAKgc,mBACHsD,SAAU,aACV9Y,MACEqZ,GAAIA,EACJD,KAAMA,MAKZ7G,uBAAwB,WACtB,IAAIxX,EAAOvB,KACXuB,EAAK0e,0BAA4B1L,SAAS7T,UAAUiB,SAEpD4S,SAAS7T,UAAUiB,SAAW,WAC5B,MAAoB,mBAAT3B,MAAuBA,KAAKyJ,UAC9BlI,EAAK0e,0BAA0BnT,MAAM9M,KAAK0J,SAAUsD,WAEtDzL,EAAK0e,0BAA0BnT,MAAM9M,KAAMgN,aAItDuN,yBAA0B,WACpBva,KAAKigB,4BAEP1L,SAAS7T,UAAUiB,SAAW3B,KAAKigB,4BAQvCjH,oBAAqB,WACnB,IAAIzX,EAAOvB,KAEPkgB,EAAkB3e,EAAK+V,iBAE3B,SAAS6I,EAAW3W,GAClB,OAAO,SAAS4W,EAAIxO,GAKlB,IADA,IAAI1D,EAAO,IAAI1D,MAAMwC,UAAU3N,QACtBD,EAAI,EAAGA,EAAI8O,EAAK7O,SAAUD,EACjC8O,EAAK9O,GAAK4N,UAAU5N,GAEtB,IAAIihB,EAAmBnS,EAAK,GAgB5B,OAfIxI,EAAW2a,KACbnS,EAAK,GAAK3M,EAAKuY,MAEXe,WACE1V,KAAM,aACNqB,MAAO8Z,SAAU9W,EAAKhJ,QAG1B6f,IAOA7W,EAAKsD,MACAtD,EAAKsD,MAAM9M,KAAMkO,GAEjB1E,EAAK0E,EAAK,GAAIA,EAAK,KAKhC,IAAIwI,EAAkB1W,KAAK8V,eAAeY,gBAE1C,SAAS6J,EAAgBjf,GACvB,IAAIkf,EAAQpf,GAAQE,IAAWF,GAAQE,GAAQZ,UAC3C8f,GAASA,EAAM7f,gBAAkB6f,EAAM7f,eAAe,sBACxD0I,GACEmX,EACA,mBACA,SAAShX,GACP,OAAO,SAAS4V,EAASgB,EAAIK,EAASC,GAEpC,IACMN,GAAMA,EAAGO,cACXP,EAAGO,YAAcpf,EAAKuY,MAElBe,WACE1V,KAAM,aACNqB,MAAO6Y,OAAQ/d,EAAQgf,SAAU,cAAehS,QAAS8R,EAAG5f,QAGhE4f,EAAGO,cAGP,MAAOrgB,IAMT,IAAIsgB,EAAQC,EAAcC,EA6B1B,OA1BEpK,GACAA,EAAgB6B,MACJ,gBAAXjX,GAAuC,SAAXA,KAI7Buf,EAAetf,EAAK4d,wBAAwB,SAC5C2B,EAAkBvf,EAAKge,wBACvBqB,EAAS,SAAShC,GAIhB,GAAKA,EAAL,CAEA,IAAID,EACJ,IACEA,EAAYC,EAAIzZ,KAChB,MAAOjD,GAGP,OAEF,MAAkB,UAAdyc,EAA8BkC,EAAajC,GACxB,aAAdD,EAAiCmC,EAAgBlC,QAArD,KAGFpV,EAAKpJ,KACVJ,KACAof,EACA7d,EAAKuY,MAEDe,WACE1V,KAAM,aACNqB,MACE6Y,OAAQ/d,EACRgf,SAAU,mBACVhS,QAAS8R,EAAG5f,QAIlB4f,EACAQ,GAEFH,EACAC,KAINR,GAEF7W,GACEmX,EACA,sBACA,SAAShX,GACP,OAAO,SAASoV,EAAKwB,EAAIK,EAASC,GAChC,IACEN,EAAKA,IAAOA,EAAGpG,kBAAoBoG,EAAGpG,kBAAoBoG,GAC1D,MAAOle,IAGT,OAAOsH,EAAKpJ,KAAKJ,KAAM4e,EAAKwB,EAAIK,EAASC,KAG7CR,IAKN7W,GAAKjI,GAAS,aAAc+e,EAAYD,GACxC7W,GAAKjI,GAAS,cAAe+e,EAAYD,GACrC9e,GAAQ2f,uBACV1X,GACEjI,GACA,wBACA,SAASoI,GACP,OAAO,SAASwX,GACd,OAAOxX,EACLjI,EAAKuY,MAEDe,WACE1V,KAAM,aACNqB,MAAO8Z,SAAU,wBAAyBhS,QAAS9E,EAAKhJ,QAG5DwgB,MAKRd,GAqCJ,IA/BA,IAAIe,GACF,cACA,SACA,OACA,mBACA,iBACA,oBACA,kBACA,cACA,aACA,qBACA,cACA,aACA,iBACA,eACA,kBACA,cACA,cACA,eACA,qBACA,SACA,YACA,eACA,gBACA,YACA,kBACA,SACA,iBACA,4BACA,wBAEO7hB,EAAI,EAAGA,EAAI6hB,EAAa5hB,OAAQD,IACvCmhB,EAAgBU,EAAa7hB,KAajC6Z,uBAAwB,WACtB,IAAI1X,EAAOvB,KACP0W,EAAkB1W,KAAK8V,eAAeY,gBAEtCwJ,EAAkB3e,EAAK+V,iBAE3B,SAAS4J,EAASC,EAAM5R,GAClB4R,KAAQ5R,GAAO7J,EAAW6J,EAAI4R,KAChC9X,GAAKkG,EAAK4R,EAAM,SAAS3X,GACvB,OAAOjI,EAAKuY,MAERe,WACE1V,KAAM,aACNqB,MAAO8Z,SAAUa,EAAM7S,QAAS9E,EAAKhJ,QAGzCgJ,KAMR,GAAIkN,EAAgBnH,KAAO,mBAAoBnO,GAAS,CACtD,IAAIggB,EAAWhgB,GAAQoO,gBAAkBpO,GAAQoO,eAAe9O,UAChE2I,GACE+X,EACA,OACA,SAASC,GACP,OAAO,SAASlM,EAAQtM,GAYtB,OARIjH,GAASiH,KAA0C,IAAlCA,EAAI5J,QAAQsC,EAAKoU,cACpC3V,KAAKshB,aACHnM,OAAQA,EACRtM,IAAKA,EACL0Y,YAAa,OAIVF,EAASvU,MAAM9M,KAAMgN,aAGhCkT,GAGF7W,GACE+X,EACA,OACA,SAASI,GACP,OAAO,WAEL,IAAIjS,EAAMvP,KAEV,SAASyhB,IACP,GAAIlS,EAAI+R,aAAkC,IAAnB/R,EAAImS,WAAkB,CAC3C,IAGEnS,EAAI+R,YAAYC,YAAchS,EAAII,OAClC,MAAOzN,IAITX,EAAKya,mBACH7W,KAAM,OACNma,SAAU,MACV9Y,KAAM+I,EAAI+R,eAMhB,IADA,IAAIK,GAAS,SAAU,UAAW,cACzBtf,EAAI,EAAGA,EAAIsf,EAAMtiB,OAAQgD,IAChC6e,EAASS,EAAMtf,GAAIkN,GA6BrB,MA1BI,uBAAwBA,GAAO7J,EAAW6J,EAAIqS,oBAChDvY,GACEkG,EACA,qBACA,SAAS/F,GACP,OAAOjI,EAAKuY,MAERe,WACE1V,KAAM,aACNqB,MACE8Z,SAAU,qBACVhS,QAAS9E,EAAKhJ,QAIpBgJ,EACAiY,KAONlS,EAAIqS,mBAAqBH,EAGpBD,EAAS1U,MAAM9M,KAAMgN,aAGhCkT,GAIAxJ,EAAgBnH,KAAOzN,MACzBuH,GACEjI,GACA,QACA,SAASygB,GACP,OAAO,WAKL,IADA,IAAI3T,EAAO,IAAI1D,MAAMwC,UAAU3N,QACtBD,EAAI,EAAGA,EAAI8O,EAAK7O,SAAUD,EACjC8O,EAAK9O,GAAK4N,UAAU5N,GAGtB,IAEIyJ,EAFAiZ,EAAa5T,EAAK,GAClBiH,EAAS,MAeb,GAZ0B,iBAAf2M,EACTjZ,EAAMiZ,EACG,YAAa1gB,IAAW0gB,aAAsB1gB,GAAQY,SAC/D6G,EAAMiZ,EAAWjZ,IACbiZ,EAAW3M,SACbA,EAAS2M,EAAW3M,SAGtBtM,EAAM,GAAKiZ,GAIyB,IAAlCjZ,EAAI5J,QAAQsC,EAAKoU,YACnB,OAAOkM,EAAU/U,MAAM9M,KAAMkO,GAG3BA,EAAK,IAAMA,EAAK,GAAGiH,SACrBA,EAASjH,EAAK,GAAGiH,QAGnB,IAAI4M,GACF5M,OAAQA,EACRtM,IAAKA,EACL0Y,YAAa,MAGf,OAAOM,EACJ/U,MAAM9M,KAAMkO,GACZ8T,KAAK,SAASC,GASb,OARAF,EAAUR,YAAcU,EAAStS,OAEjCpO,EAAKya,mBACH7W,KAAM,OACNma,SAAU,QACV9Y,KAAMub,IAGDE,IAED,MAAE,SAAS3hB,GASjB,MAPAiB,EAAKya,mBACH7W,KAAM,OACNma,SAAU,QACV9Y,KAAMub,EACN9N,MAAO,UAGH3T,MAId4f,GAMAxJ,EAAgB6B,KAAOvY,KAAKqV,eAC1BP,GAAUkG,kBACZlG,GAAUkG,iBAAiB,QAASzZ,EAAK4d,wBAAwB,UAAU,GAC3ErK,GAAUkG,iBAAiB,WAAYzZ,EAAKge,yBAAyB,IAC5DzK,GAAUoN,cAEnBpN,GAAUoN,YAAY,UAAW3gB,EAAK4d,wBAAwB,UAC9DrK,GAAUoN,YAAY,aAAc3gB,EAAKge,2BAQ7C,IAAIzQ,EAAS1N,GAAQ0N,OAEjBqT,IADsBrT,GAAUA,EAAOsT,KAAOtT,EAAOsT,IAAIC,UAG3DjhB,GAAQkhB,SACRlhB,GAAQkhB,QAAQC,WAChBnhB,GAAQkhB,QAAQE,aAClB,GAAI9L,EAAgBxK,UAAYiW,EAAwB,CAEtD,IAAIM,EAAgBrhB,GAAQshB,WAC5BthB,GAAQshB,WAAa,WACnB,IAAIC,EAAcphB,EAAKmW,UAAUvL,KAGjC,GAFA5K,EAAKoe,kBAAkBpe,EAAKoW,UAAWgL,GAEnCF,EACF,OAAOA,EAAc3V,MAAM9M,KAAMgN,YAIrC,IAAI4V,EAA6B,SAASC,GAGxC,OAAO,WACL,IAAIha,EAAMmE,UAAU3N,OAAS,EAAI2N,UAAU,QAAKa,EAQhD,OALIhF,GAEFtH,EAAKoe,kBAAkBpe,EAAKoW,UAAW9O,EAAM,IAGxCga,EAAiB/V,MAAM9M,KAAMgN,aAIxC3D,GAAKjI,GAAQkhB,QAAS,YAAaM,EAA4B1C,GAC/D7W,GAAKjI,GAAQkhB,QAAS,eAAgBM,EAA4B1C,GAGpE,GAAIxJ,EAAgB1C,SAAW,YAAa5S,IAAW4S,QAAQ8O,IAAK,CAElE,IAAIC,EAAwB,SAAS5V,EAAK3G,GACxCjF,EAAKya,mBACHzb,QAAS4M,EACT8G,MAAOzN,EAAKyN,MACZqL,SAAU,aAIdnd,IAAM,QAAS,OAAQ,OAAQ,QAAS,OAAQ,SAASyD,EAAGqO,GAC1DO,GAAkBR,QAASC,EAAO8O,OAKxCvI,iBAAkB,WAGhB,IADA,IAAIwI,EACGhjB,KAAKsX,iBAAiBjY,QAAQ,CAGnC,IAAI0B,GAFJiiB,EAAUhjB,KAAKsX,iBAAiB8E,SAEd,GAChB5b,EAAOwiB,EAAQ,GACfxZ,EAAOwZ,EAAQ,GAEjBjiB,EAAIP,GAAQgJ,IAIhBiR,gBAAiB,WAEf,IAAK,IAAItF,KAAUnV,KAAKmX,wBACtBnX,KAAKkX,iBAAiB/B,GAAUnV,KAAKmX,wBAAwBhC,IAIjE+D,cAAe,WACb,IAAI3X,EAAOvB,KAGXmC,GAAKnC,KAAKoX,SAAU,SAASxR,EAAG0W,GAC9B,IAAI2G,EAAY3G,EAAO,GACnBpO,EAAOoO,EAAO,GAClB2G,EAAUnW,MAAMvL,GAAOA,GAAMwL,OAAOmB,OAIxCkL,UAAW,SAAS5W,GAClB,IAAI0gB,EAAIvO,GAAWvF,KAAK5M,GACtBuV,KACA3Y,EAAI,EAEN,IACE,KAAOA,KAAK2Y,EAAIrD,GAAQtV,IAAM8jB,EAAE9jB,IAAM,GACtC,MAAO8C,GACP,MAAM,IAAI0R,EAAiB,gBAAkBpR,GAG/C,GAAIuV,EAAI2B,OAAS1Z,KAAK8V,eAAeqN,eACnC,MAAM,IAAIvP,EACR,kFAIJ,OAAOmE,GAGT4B,iBAAkB,SAASR,GAEzB,IAAI+E,EAAe,KAAO/E,EAAIjQ,MAAQiQ,EAAIjJ,KAAO,IAAMiJ,EAAIjJ,KAAO,IAKlE,OAHIiJ,EAAIlQ,WACNiV,EAAe/E,EAAIlQ,SAAW,IAAMiV,GAE/BA,GAGTrF,wBAAyB,SAAS1I,EAAW6H,IAC3CA,EAAUA,OACF6C,UAAY7C,EAAQ6C,YAC1B1V,KAAM,UACN2V,SAAS,GAIN9a,KAAK+W,gBACR/W,KAAKqb,iBAAiBlL,EAAW6H,IAIrCqD,iBAAkB,SAASlL,EAAW6H,GACpC,IAAIzT,EAASvE,KAAK8b,eAAe3L,EAAW6H,GAE5ChY,KAAK0e,cAAc,UACjBvO,UAAWA,EACX6H,QAASA,IAGXhY,KAAKojB,kBACHjT,EAAU3P,KACV2P,EAAU5P,QACV4P,EAAUtH,IACVsH,EAAUzL,OACVH,EACAyT,IAIJ8D,eAAgB,SAAS3L,EAAW6H,GAClC,IAAIzW,EAAOvB,KACPuE,KACJ,GAAI4L,EAAU1Q,OAAS0Q,EAAU1Q,MAAMJ,SACrC8C,GAAKgO,EAAU1Q,MAAO,SAASL,EAAGK,GAChC,IAAI4jB,EAAQ9hB,EAAK+hB,gBAAgB7jB,EAAO0Q,EAAUtH,KAC9Cwa,GACF9e,EAAOrE,KAAKmjB,KAKZrL,GAAWA,EAAQkD,gBACrB,IAAK,IAAI7Y,EAAI,EAAGA,EAAI2V,EAAQkD,gBAAkB7Y,EAAIkC,EAAOlF,OAAQgD,IAC/DkC,EAAOlC,GAAGkhB,QAAS,EAKzB,OADAhf,EAASA,EAAO1E,MAAM,EAAGG,KAAK8V,eAAeW,kBAI/C6M,gBAAiB,SAASD,EAAOG,GAE/B,IAAIC,GACFhf,SAAU4e,EAAMxa,IAChBnE,OAAQ2e,EAAM1V,KACdhJ,MAAO0e,EAAMzV,OACb0S,SAAU+C,EAAMvV,MAAQ,KAuB1B,OAfKuV,EAAMxa,MACT4a,EAAWhf,SAAW+e,GAGxBC,EAAWF,SAGNvjB,KAAK8V,eAAeM,aAAa3K,OACjCzL,KAAK8V,eAAeM,aAAa3K,KAAKgY,EAAWhf,WAEpD,qBAAqBgH,KAAKgY,EAAqB,WAE/C,qBAAqBhY,KAAKgY,EAAWhf,WAGhCgf,GAGTL,kBAAmB,SAASje,EAAM5E,EAASsb,EAASnX,EAAQH,EAAQyT,GAClE,IASIrP,EATA+a,GAAmBve,EAAOA,EAAO,KAAO,KAAO5E,GAAW,IAC9D,KACIP,KAAK8V,eAAeG,aAAaxK,OAClCzL,KAAK8V,eAAeG,aAAaxK,KAAKlL,KACrCP,KAAK8V,eAAeG,aAAaxK,KAAKiY,MAOtCnf,GAAUA,EAAOlF,QACnBwc,EAAUtX,EAAO,GAAGE,UAAYoX,EAGhCtX,EAAO+D,UACPK,GAAcpE,OAAQA,IACbsX,IACTlT,GACEpE,SAEIE,SAAUoX,EACVnX,OAAQA,EACR6e,QAAQ,QAOZvjB,KAAK8V,eAAeI,WAAWzK,OACjCzL,KAAK8V,eAAeI,WAAWzK,KAAKoQ,OAMlC7b,KAAK8V,eAAeK,cAAc1K,MACnCzL,KAAK8V,eAAeK,cAAc1K,KAAKoQ,KAF1C,CAOA,IAAIrV,EAAOG,IAGPkG,WACEnE,SAEIvD,KAAMA,EACNvF,MAAOW,EACPoI,WAAYA,KAIlBgb,YAAa9H,GAEf7D,IAMGxR,EAAKqG,UAAUgO,WAAarU,EAAKqU,YACpCrU,EAAKqG,UAAUgO,UAAYrU,EAAKqU,iBACzBrU,EAAKqU,WAGdrU,EAAKqG,UAAUgO,UAAYlU,GAAYH,EAAKqG,UAAUgO,eACpD1V,KAAM,UACN2V,SAAS,IAIX9a,KAAK+b,MAAMvV,KAGbod,YAAa,SAASpd,GAGpB,IAAI/D,EAAMzC,KAAK8V,eAAeS,iBAI9B,GAHI/P,EAAKjG,UACPiG,EAAKjG,QAAUgC,GAASiE,EAAKjG,QAASkC,IAEpC+D,EAAKqG,UAAW,CAClB,IAAIA,EAAYrG,EAAKqG,UAAUnE,OAAO,GACtCmE,EAAUjN,MAAQ2C,GAASsK,EAAUjN,MAAO6C,GAG9C,IAAIohB,EAAUrd,EAAKqd,QAanB,OAZIA,IACEA,EAAQhb,MACVgb,EAAQhb,IAAMtG,GAASshB,EAAQhb,IAAK7I,KAAK8V,eAAeU,eAEtDqN,EAAQC,UACVD,EAAQC,QAAUvhB,GAASshB,EAAQC,QAAS9jB,KAAK8V,eAAeU,gBAIhEhQ,EAAKud,aAAevd,EAAKud,YAAYrb,QACvC1I,KAAKgkB,iBAAiBxd,EAAKud,aAEtBvd,GAMTwd,iBAAkB,SAASD,GAQzB,IALA,IACEE,EACAhI,EACAzV,EAHE0d,GAAY,KAAM,OAAQ,OAKrB9kB,EAAI,EAAGA,EAAI2kB,EAAYrb,OAAOrJ,SAAUD,EAE/C,IADA6c,EAAQ8H,EAAYrb,OAAOtJ,IAElBuB,eAAe,SACrB0E,EAAS4W,EAAMzV,QAChBM,GAAamV,EAAMzV,MAHrB,CAOAA,EAAOG,MAAgBsV,EAAMzV,MAC7B,IAAK,IAAInE,EAAI,EAAGA,EAAI6hB,EAAS7kB,SAAUgD,EACrC4hB,EAAUC,EAAS7hB,GACfmE,EAAK7F,eAAesjB,IAAYzd,EAAKyd,KACvCzd,EAAKyd,GAAW1hB,GAASiE,EAAKyd,GAAUjkB,KAAK8V,eAAeU,eAGhEuN,EAAYrb,OAAOtJ,GAAGoH,KAAOA,IAIjC2d,aAAc,WACZ,GAAKnkB,KAAKsV,eAAkBtV,KAAKqV,aAAjC,CACA,IAAI+O,KAkBJ,OAhBIpkB,KAAKsV,eAAiBP,GAAWsP,YACnCD,EAAS/N,SACPiO,aAAcvP,GAAWsP,YAKzBjjB,GAAQ8K,UAAY9K,GAAQ8K,SAASC,OACvCiY,EAASvb,IAAMzH,GAAQ8K,SAASC,MAG9BnM,KAAKqV,cAAgBP,GAAUyP,WAC5BH,EAAS/N,UAAS+N,EAAS/N,YAChC+N,EAAS/N,QAAQyN,QAAUhP,GAAUyP,UAGhCH,IAGTxM,cAAe,WACb5X,KAAKwkB,iBAAmB,EACxBxkB,KAAKykB,cAAgB,MAGvBC,eAAgB,WACd,OAAO1kB,KAAKwkB,kBAAoB5P,KAAQ5U,KAAKykB,cAAgBzkB,KAAKwkB,kBAYpEG,cAAe,SAASC,GACtB,IAAIC,EAAO7kB,KAAKwV,UAEhB,SACGqP,GACDD,EAAQrkB,UAAYskB,EAAKtkB,SACzBqkB,EAAQjB,cAAgBkB,EAAKlB,eAK3BiB,EAAQjc,YAAckc,EAAKlc,WACtBxE,GAAiBygB,EAAQjc,WAAYkc,EAAKlc,aACxCic,EAAQ/X,YAAagY,EAAKhY,WAE5BtE,GAAgBqc,EAAQ/X,UAAWgY,EAAKhY,aAMnDiY,iBAAkB,SAASjB,GAEzB,IAAI7jB,KAAK0kB,iBAAT,CAIA,IAAI/U,EAASkU,EAAQlU,OAKrB,GAAiB,MAAXA,GAA6B,MAAXA,GAA6B,MAAXA,EAA1C,CAEA,IAAIoV,EACJ,IAIIA,EADEjjB,KACM+hB,EAAQxN,QAAQ2O,IAAI,eAEpBnB,EAAQoB,kBAAkB,eAIpCF,EAA8B,IAAtBG,SAASH,EAAO,IACxB,MAAO7iB,IAITlC,KAAKwkB,iBAAmBO,IAII,EAAxB/kB,KAAKwkB,kBAAwB,KAEjCxkB,KAAKykB,cAAgB7P,QAGvBmH,MAAO,SAASvV,GACd,IAAI0R,EAAgBlY,KAAK8V,eAErBqP,GACAC,QAASplB,KAAK4V,eACdvB,OAAQ6D,EAAc7D,OACtBgR,SAAU,cAEZjB,EAAWpkB,KAAKmkB,eAEdC,IACFe,EAAStB,QAAUO,GAIjB5d,EAAK0U,uBAAuB1U,EAAK0U,gBAErC1U,EAAOG,GAAYwe,EAAU3e,IAGxBoW,KAAOjW,GAAYA,MAAgB3G,KAAK6V,eAAe+G,MAAOpW,EAAKoW,MACxEpW,EAAK8N,MAAQ3N,GAAYA,MAAgB3G,KAAK6V,eAAevB,OAAQ9N,EAAK8N,OAG1E9N,EAAK8N,MAAM,oBAAsBM,KAAQ5U,KAAKqX,WAE1CrX,KAAKuX,cAAgBvX,KAAKuX,aAAalY,OAAS,IAGlDmH,EAAKud,aACHrb,UAAW7I,MAAMO,KAAKJ,KAAKuX,aAAc,KAIzCvX,KAAK6V,eAAe2D,OAEtBhT,EAAKgT,KAAOxZ,KAAK6V,eAAe2D,MAI9BtB,EAAc8E,cAAaxW,EAAKwW,YAAc9E,EAAc8E,aAG5D9E,EAAcnC,UAASvP,EAAKuP,QAAUmC,EAAcnC,SAGpDmC,EAAcoN,aAAY9e,EAAK+e,YAAcrN,EAAcoN,YAE/D9e,EAAOxG,KAAKwlB,cAAchf,GAG1B/F,OAAOf,KAAK8G,GAAMif,QAAQ,SAAS9lB,IAChB,MAAb6G,EAAK7G,IAA8B,KAAd6G,EAAK7G,IAAegG,GAAca,EAAK7G,aACvD6G,EAAK7G,KAIZ+F,EAAWwS,EAAciF,gBAC3B3W,EAAO0R,EAAciF,aAAa3W,IAASA,GAIxCA,IAAQb,GAAca,KAMzBd,EAAWwS,EAAcoF,sBACxBpF,EAAcoF,mBAAmB9W,KAOhCxG,KAAK0kB,iBACP1kB,KAAKiY,UAAU,OAAQ,uCAAwCzR,GAIzB,iBAA7B0R,EAActB,WACnB7O,KAAKC,SAAWkQ,EAActB,YAChC5W,KAAK0lB,sBAAsBlf,GAG7BxG,KAAK0lB,sBAAsBlf,MAI/Bgf,cAAe,SAAShf,GACtB,OAAOuE,GAASvE,EAAMxG,KAAK8V,eAAe9K,eAG5C2a,SAAU,WACR,OAAOve,MAGTse,sBAAuB,SAASlf,EAAMpE,GACpC,IAAIb,EAAOvB,KACPkY,EAAgBlY,KAAK8V,eAEzB,GAAK9V,KAAK4Y,UAQV,GALApS,EAAOxG,KAAK4jB,YAAYpd,GAKnBxG,KAAK8V,eAAe8P,kBAAmB5lB,KAAK2kB,cAAcne,GAA/D,CAQAxG,KAAKyV,aAAejP,EAAKqf,WAAarf,EAAKqf,SAAW7lB,KAAK2lB,YAG3D3lB,KAAKwV,UAAYhP,EAEjBxG,KAAKiY,UAAU,QAAS,uBAAwBzR,GAEhD,IAAIsf,GACFC,eAAgB,IAChBC,cAAe,YAAchmB,KAAK6X,QAClCoO,WAAYjmB,KAAK2V,YAGf3V,KAAKyZ,gBACPqM,EAAKI,cAAgBlmB,KAAKyZ,eAG5B,IAAI5M,EAAYrG,EAAKqG,WAAarG,EAAKqG,UAAUnE,OAAO,GAItD1I,KAAK8V,eAAeY,iBACpB1W,KAAK8V,eAAeY,gBAAgB8B,QAEpCxY,KAAKgc,mBACHsD,SAAU,SACV/e,QAASsM,GACJA,EAAU1H,KAAO0H,EAAU1H,KAAO,KAAO,IAAM0H,EAAUjN,MAC1D4G,EAAKjG,QACTslB,SAAUrf,EAAKqf,SACf5R,MAAOzN,EAAKyN,OAAS,UAIzB,IAAIpL,EAAM7I,KAAK4Z,iBACd1B,EAAcsF,WAAaxd,KAAKmmB,cAAc/lB,KAAKJ,MAClD6I,IAAKA,EACLid,KAAMA,EACNtf,KAAMA,EACNwR,QAASE,EACTkO,UAAW,WACT7kB,EAAKqW,gBAELrW,EAAKmd,cAAc,WACjBlY,KAAMA,EACN8X,IAAKzV,IAEPzG,GAAYA,KAEdikB,QAAS,SAAiB/Y,GACxB/L,EAAK0W,UAAU,QAAS,mCAAoC3K,GAExDA,EAAMuW,SACRtiB,EAAKujB,iBAAiBxX,EAAMuW,SAG9BtiB,EAAKmd,cAAc,WACjBlY,KAAMA,EACN8X,IAAKzV,IAEPyE,EAAQA,GAAS,IAAIjN,MAAM,sDAC3B+B,GAAYA,EAASkL,WApEvBtN,KAAKiY,UAAU,OAAQ,+BAAgCzR,IAyE3D2f,aAAc,SAASG,GAErB,IAAIzd,EAAMyd,EAAKzd,IAAM,IAAM7B,GAAUsf,EAAKR,MAEtCS,EAAmB,KACnBC,KAUJ,GARIF,EAAKtO,QAAQ3B,UACfkQ,EAAmBvmB,KAAKymB,cAAcH,EAAKtO,QAAQ3B,UAGjDiQ,EAAKtO,QAAQ0O,kBACfF,EAA2BxmB,KAAKymB,cAAcH,EAAKtO,QAAQ0O,kBAGzD5kB,KAAiB,CACnB0kB,EAAyBhI,KAAOtd,EAAUolB,EAAK9f,MAE/C,IAAImgB,EAAsBhgB,MAAgB3G,KAAK6W,gBAC3C+P,EAAejgB,GAAYggB,EAAqBH,GAMpD,OAJID,IACFK,EAAavQ,QAAUkQ,GAGlBnlB,GACJylB,MAAMhe,EAAK+d,GACX5E,KAAK,SAASC,GACb,GAAIA,EAAS6E,GACXR,EAAKF,WAAaE,EAAKF,gBAClB,CACL,IAAI9Y,EAAQ,IAAIjN,MAAM,sBAAwB4hB,EAAStS,QAGvDrC,EAAMuW,QAAU5B,EAChBqE,EAAKD,SAAWC,EAAKD,QAAQ/Y,MAGzB,MAAE,WACRgZ,EAAKD,SACHC,EAAKD,QAAQ,IAAIhmB,MAAM,6CAI/B,IAAIwjB,EAAUziB,GAAQoO,gBAAkB,IAAIpO,GAAQoO,eAC/CqU,KAGS,oBAAqBA,GAAqC,oBAAnBkD,kBAIjD,oBAAqBlD,EACvBA,EAAQjC,mBAAqB,WAC3B,GAA2B,IAAvBiC,EAAQnC,WAEL,GAAuB,MAAnBmC,EAAQlU,OACjB2W,EAAKF,WAAaE,EAAKF,iBAClB,GAAIE,EAAKD,QAAS,CACvB,IAAI/lB,EAAM,IAAID,MAAM,sBAAwBwjB,EAAQlU,QACpDrP,EAAIujB,QAAUA,EACdyC,EAAKD,QAAQ/lB,MAIjBujB,EAAU,IAAIkD,eAGdle,EAAMA,EAAI5F,QAAQ,WAAY,IAG1BqjB,EAAKF,YACPvC,EAAQmD,OAASV,EAAKF,WAEpBE,EAAKD,UACPxC,EAAQtV,QAAU,WAChB,IAAIjO,EAAM,IAAID,MAAM,qCACpBC,EAAIujB,QAAUA,EACdyC,EAAKD,QAAQ/lB,MAKnBujB,EAAQpU,KAAK,OAAQ5G,GAEjB0d,GACFpkB,GAAKokB,EAAkB,SAAS5mB,EAAKC,GACnCikB,EAAQoD,iBAAiBtnB,EAAKC,KAIlCikB,EAAQnU,KAAKxO,EAAUolB,EAAK9f,UAG9BigB,cAAe,SAASrT,GACtB,IAAI8T,KAEJ,IAAK,IAAIvnB,KAAOyT,EACd,GAAIA,EAAKzS,eAAehB,GAAM,CAC5B,IAAIC,EAAQwT,EAAKzT,GACjBunB,EAAUvnB,GAAwB,mBAAVC,EAAuBA,IAAUA,EAI7D,OAAOsnB,GAGTjP,UAAW,SAAShE,GAGhBjU,KAAKmX,wBAAwBlD,KAC5BjU,KAAK4L,OAAS5L,KAAK8V,eAAelK,QAGnC2I,SAAS7T,UAAUoM,MAAM1M,KACvBJ,KAAKmX,wBAAwBlD,GAC7BjU,KAAKkX,oBACFrX,MAAMO,KAAK4M,UAAW,KAK/B0P,cAAe,SAAS/c,EAAKka,GACvBrY,EAAYqY,UACP7Z,KAAK6V,eAAelW,GAE3BK,KAAK6V,eAAelW,GAAOgH,GAAY3G,KAAK6V,eAAelW,OAAYka,KAM7E3E,GAAMxU,UAAUymB,QAAUjS,GAAMxU,UAAU8b,eAC1CtH,GAAMxU,UAAU0mB,kBAAoBlS,GAAMxU,UAAUuc,WAEpD,IAAAoK,GAAiBnS,GC9sEb9T,GACgB,oBAAXC,OACHA,YACkB,IAAXC,EAAyBA,EAAyB,oBAATC,KAAuBA,QACzE+lB,GAASlmB,GAAQ8T,MAEjBA,GAAQ,IAAIqS,GAQhBrS,GAAMsS,WAAa,WAEjB,OADApmB,GAAQ8T,MAAQoS,GACTpS,IAGTA,GAAMyI,YAEN,ICsRAve,GAAAuS,GAAA1K,GAAAa,GAAA7D,GAAAif,GA3SAuE,GDqBAC,GAAiBxS,GAoCjByS,GAAwBJ,iBCzDxBE,GAAA,YAAApmB,OAAA6K,SAAAhD,UAKA4O,OAAA,6DAAAa,mBAGAqC,iBAAA,mBAAA,cACAnB,QAAA,WACAxY,OAAAumB,YACAA,IAAAC,wBRRA,4BASA7M,iBAAA,WAAA,SAAAL,KQWA0E,OAAAyI,UAAAC,OAJA,wBRFA/M,iBAAA,UAAA,SAAAL,GQWA,IAAAA,EAAAqN,oBAMA,oBACAC,cAAAH,UAAAI,IAhBA,cAiBA,SAIAC,EAAA,IAAAC,KAAA,kBACA,QACA,gCACA,qCAEA,uBAGA,qBAqDA,gBAGA,yDAGA,cACA,4BAKAD,OAAAA,MAGAE,EAAApc,SAAAqc,iBAAA,iBACAC,SPpFA,cOsFA,gBACA,gBACA,SAEAC,EAAAnnB,OAAA6K,SAAAkH,KAAAnQ,QAAA,IAAA,IACAwlB,EAAApnB,OAAAihB,SAAAjhB,OAAAihB,QAAAC,mBAGAmG,EAAA7Z,EAAAvL,EAAAqlB,GACA9Z,KACAiZ,UAAAa,EAAA,MAAA,UAAArlB,YPhFAslB,EAAAzjB,EAAA0jB,MOuFA1jB,KAAAojB,IAAAM,GAAA1jB,IAAAqjB,KAAAA,EAAAnpB,QAAA8F,IAAAojB,EAAAO,eAIA3jB,QACAojB,EAAAO,QACA5lB,aACA,cACA,sCAGA,8EACA,iBACA,UAGA,8EACA,iBPpFA,UOwFA,+EACA,iBACA,WAGA,+EPpFA,iBOsFA,cAGA,qFAGA,iBACA,kBPpFA,SOsFA,mFACA,SAGA,iBACA,iBACA,SACA,wFAOAqlB,EAAAQ,QACA7lB,aPpFA,cOsFA,4EAGA,mFACA,kBAGA,mFACA,0BAOAqlB,EAAAS,UACA9lB,aPpFA,sBOuFA,mDACA,wBAMAqlB,EAAAU,QACA/lB,aACA,sBAEA,sCACA,aAWAiC,QAGAya,KAAAyI,GAAA5C,QAAA,SAAAyD,UAAAR,EAAAQ,EAAAC,cAAA,UAAA,OPlFAld,SAAAmd,cAAA,iBAAAjkB,EAAA,MAAA,UAAA,SOwFAya,KAAA3T,SAAAqc,iBAAA,gBAAA7C,QAAA,SAAA4D,KACAC,aAAA,SAAA,eAEAF,cAAA,gBAAAjkB,GAAAokB,gBAAA,oBAIA3J,KAAAyI,GAAA5C,QAAA,SAAAyD,KACAlO,iBAAA,QAAA,eACA7V,EAAA+jB,EAAAnlB,aAAA,iBAEAoB,GAEAsjB,UACAnG,QAAAC,WAAApd,KAAAA,GAAA,GAAA,IAAAA,cAMA6V,iBAAA,WAAA,SAAAL,GACAA,EAAAgO,OAAA,SAAAhO,EAAAgO,SPpFAhO,EAAAgO,MAAAxjB,QO0FAsjB,EAAA,KACAK,GAAAN,EAAAnpB,OAGAypB,MACAP,EAAAO,OAIAN,KAAAD,UACAjG,QAAAE,mBPnFAgG,GOuFA,GACAM,EAAA,GAAA,IAAAN,GAKAA,IAAAD,EAAAO,SACAN,GAAA,QASAf,KACAroB,GAaAiC,OAbAsQ,GAaA1F,SAbAhF,GAaA,SAbAa,GAaA,QAZA0hB,sBAAA1hB,MACA,GACA1I,GAAA,IACA,YACAA,GAAA,GAAAsS,EAAAtS,GAAA,GAAAsS,OAAAxR,KAAA8M,eAEA,GAAAyc,EAAA,EAAA,IAAA5U,QPpFAlD,GAAAyM,cAAAnX,OOsFA0K,GAAA+X,qBAAAziB,IAAA,MACAoX,MAAA,KACAC,IAEA,mDADAjW,WAAAshB,aAAA1lB,GAAAif,WAEA0G,GAAA,SAAA,iBAAA,eACAA,GAAA,OAAA","file":"demo.min.js","sourcesContent":["/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) return i;\n }\n return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n var err = {\n // These properties are implemented as magical getters and don't show up in for in\n stack: value.stack,\n message: value.message,\n name: value.name\n };\n\n for (var i in value) {\n if (Object.prototype.hasOwnProperty.call(value, i)) {\n err[i] = value[i];\n }\n }\n\n return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n var stack = [];\n var keys = [];\n\n if (cycleReplacer == null) {\n cycleReplacer = function(key, value) {\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n };\n }\n\n return function(key, value) {\n if (stack.length > 0) {\n var thisPos = indexOf(stack, this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n if (~indexOf(stack, value)) {\n value = cycleReplacer.call(this, key, value);\n }\n } else {\n stack.push(value);\n }\n\n return replacer == null\n ? value instanceof Error ? stringifyError(value) : value\n : replacer.call(this, key, value);\n };\n}\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction isObject(what) {\n return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n switch (Object.prototype.toString.call(value)) {\n case '[object Error]':\n return true;\n case '[object Exception]':\n return true;\n case '[object DOMException]':\n return true;\n default:\n return value instanceof Error;\n }\n}\n\nfunction isErrorEvent(value) {\n return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n return what === void 0;\n}\n\nfunction isFunction(what) {\n return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n if (!isPlainObject(what)) return false;\n\n for (var _ in what) {\n if (what.hasOwnProperty(_)) {\n return false;\n }\n }\n return true;\n}\n\nfunction supportsErrorEvent() {\n try {\n new ErrorEvent(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMError() {\n try {\n new DOMError(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsDOMException() {\n try {\n new DOMException(''); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsFetch() {\n if (!('fetch' in _window)) return false;\n\n try {\n new Headers(); // eslint-disable-line no-new\n new Request(''); // eslint-disable-line no-new\n new Response(); // eslint-disable-line no-new\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n if (!supportsFetch()) return false;\n\n try {\n // eslint-disable-next-line no-new\n new Request('pickleRick', {\n referrerPolicy: 'origin'\n });\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction supportsPromiseRejectionEvent() {\n return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n function dataCallback(data, original) {\n var normalizedData = callback(data) || data;\n if (original) {\n return original(normalizedData) || normalizedData;\n }\n return normalizedData;\n }\n\n return dataCallback;\n}\n\nfunction each(obj, callback) {\n var i, j;\n\n if (isUndefined(obj.length)) {\n for (i in obj) {\n if (hasKey(obj, i)) {\n callback.call(null, i, obj[i]);\n }\n }\n } else {\n j = obj.length;\n if (j) {\n for (i = 0; i < j; i++) {\n callback.call(null, i, obj[i]);\n }\n }\n }\n}\n\nfunction objectMerge(obj1, obj2) {\n if (!obj2) {\n return obj1;\n }\n each(obj2, function(key, value) {\n obj1[key] = value;\n });\n return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n if (!Object.isFrozen) {\n return false;\n }\n return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n if (typeof max !== 'number') {\n throw new Error('2nd argument to `truncate` function should be a number');\n }\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n // Combine an array of regular expressions and strings into one large regexp\n // Be mad.\n var sources = [],\n i = 0,\n len = patterns.length,\n pattern;\n\n for (; i < len; i++) {\n pattern = patterns[i];\n if (isString(pattern)) {\n // If it's a string, we need to escape it\n // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n } else if (pattern && pattern.source) {\n // If it's a regexp already, we want to extract the source\n sources.push(pattern.source);\n }\n // Intentionally skip other cases\n }\n return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n var pairs = [];\n each(o, function(key, value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n if (typeof url !== 'string') return {};\n var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n // coerce to undefined values to empty string so we don't get 'undefined'\n var query = match[6] || '';\n var fragment = match[8] || '';\n return {\n protocol: match[2],\n host: match[4],\n path: match[5],\n relative: match[5] + query + fragment // everything minus origin\n };\n}\nfunction uuid4() {\n var crypto = _window.crypto || _window.msCrypto;\n\n if (!isUndefined(crypto) && crypto.getRandomValues) {\n // Use window.crypto API if available\n // eslint-disable-next-line no-undef\n var arr = new Uint16Array(8);\n crypto.getRandomValues(arr);\n\n // set 4 in byte 7\n arr[3] = (arr[3] & 0xfff) | 0x4000;\n // set 2 most significant bits of byte 9 to '10'\n arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n var pad = function(num) {\n var v = num.toString(16);\n while (v.length < 4) {\n v = '0' + v;\n }\n return v;\n };\n\n return (\n pad(arr[0]) +\n pad(arr[1]) +\n pad(arr[2]) +\n pad(arr[3]) +\n pad(arr[4]) +\n pad(arr[5]) +\n pad(arr[6]) +\n pad(arr[7])\n );\n } else {\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0,\n v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n /* eslint no-extra-parens:0*/\n var MAX_TRAVERSE_HEIGHT = 5,\n MAX_OUTPUT_LEN = 80,\n out = [],\n height = 0,\n len = 0,\n separator = ' > ',\n sepLength = separator.length,\n nextStr;\n\n while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = htmlElementAsString(elem);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n // (ignore this limit if we are on the first iteration)\n if (\n nextStr === 'html' ||\n (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n ) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n elem = elem.parentNode;\n }\n\n return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n var out = [],\n className,\n classes,\n key,\n attr,\n i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n out.push(elem.tagName.toLowerCase());\n if (elem.id) {\n out.push('#' + elem.id);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push('.' + classes[i]);\n }\n }\n var attrWhitelist = ['type', 'name', 'title', 'alt'];\n for (i = 0; i < attrWhitelist.length; i++) {\n key = attrWhitelist[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push('[' + key + '=\"' + attr + '\"]');\n }\n }\n return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n ex1 = ex1.values[0];\n ex2 = ex2.values[0];\n\n if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n // in case both stacktraces are undefined, we can't decide so default to false\n if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n var frames1 = stack1.frames;\n var frames2 = stack2.frames;\n\n // Exit early if frame count differs\n if (frames1.length !== frames2.length) return false;\n\n // Iterate through every frame; bail out if anything differs\n var a, b;\n for (var i = 0; i < frames1.length; i++) {\n a = frames1[i];\n b = frames2[i];\n if (\n a.filename !== b.filename ||\n a.lineno !== b.lineno ||\n a.colno !== b.colno ||\n a['function'] !== b['function']\n )\n return false;\n }\n return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n if (obj == null) return;\n var orig = obj[name];\n obj[name] = replacement(orig);\n obj[name].__raven__ = true;\n obj[name].__orig__ = orig;\n if (track) {\n track.push([obj, name, orig]);\n }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n if (!isArray(input)) return '';\n\n var output = [];\n\n for (var i = 0; i < input.length; i++) {\n try {\n output.push(String(input[i]));\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n if (typeof value === 'string') {\n var maxLength = 40;\n return truncate(value, maxLength);\n } else if (\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n typeof value === 'undefined'\n ) {\n return value;\n }\n\n var type = Object.prototype.toString.call(value);\n\n // Node.js REPL notation\n if (type === '[object Object]') return '[Object]';\n if (type === '[object Array]') return '[Array]';\n if (type === '[object Function]')\n return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n return value;\n}\n\nfunction serializeObject(value, depth) {\n if (depth === 0) return serializeValue(value);\n\n if (isPlainObject(value)) {\n return Object.keys(value).reduce(function(acc, key) {\n acc[key] = serializeObject(value[key], depth - 1);\n return acc;\n }, {});\n } else if (Array.isArray(value)) {\n return value.map(function(val) {\n return serializeObject(val, depth - 1);\n });\n }\n\n return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n if (!isPlainObject(ex)) return ex;\n\n depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n var serialized = serializeObject(ex, depth);\n\n if (jsonSize(stringify(serialized)) > maxSize) {\n return serializeException(ex, depth - 1);\n }\n\n return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n if (!Array.isArray(keys)) return '';\n\n keys = keys.filter(function(key) {\n return typeof key === 'string';\n });\n if (keys.length === 0) return '[object has no keys]';\n\n maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n if (keys[0].length >= maxLength) return keys[0];\n\n for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n var serialized = keys.slice(0, usedKeys).join(', ');\n if (serialized.length > maxLength) continue;\n if (usedKeys === keys.length) return serialized;\n return serialized + '\\u2026';\n }\n\n return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n return input;\n\n var sanitizeRegExp = joinRegExp(sanitizeKeys);\n var sanitizeMask = '********';\n var safeInput;\n\n try {\n safeInput = JSON.parse(stringify(input));\n } catch (o_O) {\n return input;\n }\n\n function sanitizeWorker(workerInput) {\n if (isArray(workerInput)) {\n return workerInput.map(function(val) {\n return sanitizeWorker(val);\n });\n }\n\n if (isPlainObject(workerInput)) {\n return Object.keys(workerInput).reduce(function(acc, k) {\n if (sanitizeRegExp.test(k)) {\n acc[k] = sanitizeMask;\n } else {\n acc[k] = sanitizeWorker(workerInput[k]);\n }\n return acc;\n }, {});\n }\n\n return workerInput;\n }\n\n return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n isObject: isObject,\n isError: isError,\n isErrorEvent: isErrorEvent,\n isDOMError: isDOMError,\n isDOMException: isDOMException,\n isUndefined: isUndefined,\n isFunction: isFunction,\n isPlainObject: isPlainObject,\n isString: isString,\n isArray: isArray,\n isEmptyObject: isEmptyObject,\n supportsErrorEvent: supportsErrorEvent,\n supportsDOMError: supportsDOMError,\n supportsDOMException: supportsDOMException,\n supportsFetch: supportsFetch,\n supportsReferrerPolicy: supportsReferrerPolicy,\n supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n wrappedCallback: wrappedCallback,\n each: each,\n objectMerge: objectMerge,\n truncate: truncate,\n objectFrozen: objectFrozen,\n hasKey: hasKey,\n joinRegExp: joinRegExp,\n urlencode: urlencode,\n uuid4: uuid4,\n htmlTreeAsString: htmlTreeAsString,\n htmlElementAsString: htmlElementAsString,\n isSameException: isSameException,\n isSameStacktrace: isSameStacktrace,\n parseUrl: parseUrl,\n fill: fill,\n safeJoin: safeJoin,\n serializeException: serializeException,\n serializeKeysForMessage: serializeKeysForMessage,\n sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js. Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n collectWindowErrors: true,\n debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n if (typeof document === 'undefined' || document.location == null) return '';\n return document.location.href;\n}\n\nfunction getLocationOrigin() {\n if (typeof document === 'undefined' || document.location == null) return '';\n\n // Oh dear IE10...\n if (!document.location.origin) {\n return (\n document.location.protocol +\n '//' +\n document.location.hostname +\n (document.location.port ? ':' + document.location.port : '')\n );\n }\n\n return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n * TraceKit.report.subscribe(function(stackInfo) { ... })\n * TraceKit.report.unsubscribe(function(stackInfo) { ... })\n * TraceKit.report(exception)\n * try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n * - Firefox: full stack trace with line numbers, plus column number\n * on top frame; column number is not guaranteed\n * - Opera: full stack trace with line and column numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n * - IE: line and column number for the top frame only; some frames\n * may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n * - IE5.5+ (only 8.0 tested)\n * - Firefox 0.9+ (only 3.5+ tested)\n * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n * Exceptions Have Stacktrace to be enabled in opera:config)\n * - Safari 3+ (only 4+ tested)\n * - Chrome 1+ (only 5+ tested)\n * - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n var handlers = [],\n lastArgs = null,\n lastException = null,\n lastExceptionStack = null;\n\n /**\n * Add a crash handler.\n * @param {Function} handler\n */\n function subscribe(handler) {\n installGlobalHandler();\n handlers.push(handler);\n }\n\n /**\n * Remove a crash handler.\n * @param {Function} handler\n */\n function unsubscribe(handler) {\n for (var i = handlers.length - 1; i >= 0; --i) {\n if (handlers[i] === handler) {\n handlers.splice(i, 1);\n }\n }\n }\n\n /**\n * Remove all crash handlers.\n */\n function unsubscribeAll() {\n uninstallGlobalHandler();\n handlers = [];\n }\n\n /**\n * Dispatch stack information to all handlers.\n * @param {Object.} stack\n */\n function notifyHandlers(stack, isWindowError) {\n var exception = null;\n if (isWindowError && !TraceKit.collectWindowErrors) {\n return;\n }\n for (var i in handlers) {\n if (handlers.hasOwnProperty(i)) {\n try {\n handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n } catch (inner) {\n exception = inner;\n }\n }\n }\n\n if (exception) {\n throw exception;\n }\n }\n\n var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n /**\n * Ensures all global unhandled exceptions are recorded.\n * Supported by Gecko and IE.\n * @param {string} msg Error message.\n * @param {string} url URL of script that generated the exception.\n * @param {(number|string)} lineNo The line number at which the error\n * occurred.\n * @param {?(number|string)} colNo The column number at which the error\n * occurred.\n * @param {?Error} ex The actual Error object.\n */\n function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n var stack = null;\n // If 'ex' is ErrorEvent, get real Error from inside\n var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n // If 'msg' is ErrorEvent, get real message from inside\n var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n if (lastExceptionStack) {\n TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n lastExceptionStack,\n url,\n lineNo,\n message\n );\n processLastException();\n } else if (exception && utils.isError(exception)) {\n // non-string `exception` arg; attempt to extract stack trace\n\n // New chrome and blink send along a real error object\n // Let's just report that like a normal error.\n // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n stack = TraceKit.computeStackTrace(exception);\n notifyHandlers(stack, true);\n } else {\n var location = {\n url: url,\n line: lineNo,\n column: colNo\n };\n\n var name = undefined;\n var groups;\n\n if ({}.toString.call(message) === '[object String]') {\n var groups = message.match(ERROR_TYPES_RE);\n if (groups) {\n name = groups[1];\n message = groups[2];\n }\n }\n\n location.func = UNKNOWN_FUNCTION;\n\n stack = {\n name: name,\n message: message,\n url: getLocationHref(),\n stack: [location]\n };\n notifyHandlers(stack, true);\n }\n\n if (_oldOnerrorHandler) {\n return _oldOnerrorHandler.apply(this, arguments);\n }\n\n return false;\n }\n\n function installGlobalHandler() {\n if (_onErrorHandlerInstalled) {\n return;\n }\n _oldOnerrorHandler = _window.onerror;\n _window.onerror = traceKitWindowOnError;\n _onErrorHandlerInstalled = true;\n }\n\n function uninstallGlobalHandler() {\n if (!_onErrorHandlerInstalled) {\n return;\n }\n _window.onerror = _oldOnerrorHandler;\n _onErrorHandlerInstalled = false;\n _oldOnerrorHandler = undefined;\n }\n\n function processLastException() {\n var _lastExceptionStack = lastExceptionStack,\n _lastArgs = lastArgs;\n lastArgs = null;\n lastExceptionStack = null;\n lastException = null;\n notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n }\n\n /**\n * Reports an unhandled Error to TraceKit.\n * @param {Error} ex\n * @param {?boolean} rethrow If false, do not re-throw the exception.\n * Only used for window.onerror to not cause an infinite loop of\n * rethrowing.\n */\n function report(ex, rethrow) {\n var args = _slice.call(arguments, 1);\n if (lastExceptionStack) {\n if (lastException === ex) {\n return; // already caught by an inner catch block, ignore\n } else {\n processLastException();\n }\n }\n\n var stack = TraceKit.computeStackTrace(ex);\n lastExceptionStack = stack;\n lastException = ex;\n lastArgs = args;\n\n // If the stack trace is incomplete, wait for 2 seconds for\n // slow slow IE to see if onerror occurs or not before reporting\n // this exception; otherwise, we will end up with an incomplete\n // stack trace\n setTimeout(function() {\n if (lastException === ex) {\n processLastException();\n }\n }, stack.incomplete ? 2000 : 0);\n\n if (rethrow !== false) {\n throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n }\n }\n\n report.subscribe = subscribe;\n report.unsubscribe = unsubscribe;\n report.uninstall = unsubscribeAll;\n return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n * s.name - exception name\n * s.message - exception message\n * s.stack[i].url - JavaScript or HTML file URL\n * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)\n * s.stack[i].args - arguments passed to the function, if known\n * s.stack[i].line - line number, if known\n * s.stack[i].column - column number, if known\n *\n * Supports:\n * - Firefox: full stack trace with line numbers and unreliable column\n * number on top frame\n * - Opera 10: full stack trace with line and column numbers\n * - Opera 9-: full stack trace with line numbers\n * - Chrome: full stack trace with line and column numbers\n * - Safari: line and column number for the topmost stacktrace element\n * only\n * - IE: no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n * * in Safari, some methods may be missing from the stack trace;\n * * in IE, the topmost function in the stack trace will always be the\n * caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n // Contents of Exception in various browsers.\n //\n // SAFARI:\n // ex.message = Can't find variable: qq\n // ex.line = 59\n // ex.sourceId = 580238192\n // ex.sourceURL = http://...\n // ex.expressionBeginOffset = 96\n // ex.expressionCaretOffset = 98\n // ex.expressionEndOffset = 98\n // ex.name = ReferenceError\n //\n // FIREFOX:\n // ex.message = qq is not defined\n // ex.fileName = http://...\n // ex.lineNumber = 59\n // ex.columnNumber = 69\n // ex.stack = ...stack trace... (see the example below)\n // ex.name = ReferenceError\n //\n // CHROME:\n // ex.message = qq is not defined\n // ex.name = ReferenceError\n // ex.type = not_defined\n // ex.arguments = ['aa']\n // ex.stack = ...stack trace...\n //\n // INTERNET EXPLORER:\n // ex.message = ...\n // ex.name = ReferenceError\n //\n // OPERA:\n // ex.message = ...message... (see the example below)\n // ex.name = ReferenceError\n // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)\n // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n /**\n * Computes stack trace information from the stack property.\n * Chrome and Gecko use this property.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceFromStackProp(ex) {\n if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack||[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n // Used to additionally parse URL/line/column from eval frames\n var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n var lines = ex.stack.split('\\n');\n var stack = [];\n var submatch;\n var parts;\n var element;\n var reference = /^(.*) is undefined$/.exec(ex.message);\n\n for (var i = 0, j = lines.length; i < j; ++i) {\n if ((parts = chrome.exec(lines[i]))) {\n var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n // throw out eval line/column and use top-most line/column number\n parts[2] = submatch[1]; // url\n parts[3] = submatch[2]; // line\n parts[4] = submatch[3]; // column\n }\n element = {\n url: !isNative ? parts[2] : null,\n func: parts[1] || UNKNOWN_FUNCTION,\n args: isNative ? [parts[2]] : [],\n line: parts[3] ? +parts[3] : null,\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = winjs.exec(lines[i]))) {\n element = {\n url: parts[2],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: [],\n line: +parts[3],\n column: parts[4] ? +parts[4] : null\n };\n } else if ((parts = gecko.exec(lines[i]))) {\n var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n // throw out eval line/column and use top-most line number\n parts[3] = submatch[1];\n parts[4] = submatch[2];\n parts[5] = null; // no column when eval\n } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n // FireFox uses this awesome columnNumber property for its top frame\n // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n // so adding 1\n // NOTE: this hack doesn't work if top-most frame is eval\n stack[0].column = ex.columnNumber + 1;\n }\n element = {\n url: parts[3],\n func: parts[1] || UNKNOWN_FUNCTION,\n args: parts[2] ? parts[2].split(',') : [],\n line: parts[4] ? +parts[4] : null,\n column: parts[5] ? +parts[5] : null\n };\n } else {\n continue;\n }\n\n if (!element.func && element.line) {\n element.func = UNKNOWN_FUNCTION;\n }\n\n if (element.url && element.url.substr(0, 5) === 'blob:') {\n // Special case for handling JavaScript loaded into a blob.\n // We use a synchronous AJAX request here as a blob is already in\n // memory - it's not making a network request. This will generate a warning\n // in the browser console, but there has already been an error so that's not\n // that much of an issue.\n var xhr = new XMLHttpRequest();\n xhr.open('GET', element.url, false);\n xhr.send(null);\n\n // If we failed to download the source, skip this patch\n if (xhr.status === 200) {\n var source = xhr.responseText || '';\n\n // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n source = source.slice(-300);\n\n // Now we dig out the source map URL\n var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n // If we don't find a source map comment or we find more than one, continue on to the next element.\n if (sourceMaps) {\n var sourceMapAddress = sourceMaps[1];\n\n // Now we check to see if it's a relative URL.\n // If it is, convert it to an absolute one.\n if (sourceMapAddress.charAt(0) === '~') {\n sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n }\n\n // Now we strip the '.map' off of the end of the URL and update the\n // element so that Sentry can match the map to the blob.\n element.url = sourceMapAddress.slice(0, -4);\n }\n }\n }\n\n stack.push(element);\n }\n\n if (!stack.length) {\n return null;\n }\n\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n }\n\n /**\n * Adds information about the first frame to incomplete stack traces.\n * Safari and IE require this to get complete data on the first frame.\n * @param {Object.} stackInfo Stack trace information from\n * one of the compute* methods.\n * @param {string} url The URL of the script that caused an error.\n * @param {(number|string)} lineNo The line number of the script that\n * caused an error.\n * @param {string=} message The error generated by the browser, which\n * hopefully contains the name of the object that caused the error.\n * @return {boolean} Whether or not the stack information was\n * augmented.\n */\n function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n var initial = {\n url: url,\n line: lineNo\n };\n\n if (initial.url && initial.line) {\n stackInfo.incomplete = false;\n\n if (!initial.func) {\n initial.func = UNKNOWN_FUNCTION;\n }\n\n if (stackInfo.stack.length > 0) {\n if (stackInfo.stack[0].url === initial.url) {\n if (stackInfo.stack[0].line === initial.line) {\n return false; // already in stack trace\n } else if (\n !stackInfo.stack[0].line &&\n stackInfo.stack[0].func === initial.func\n ) {\n stackInfo.stack[0].line = initial.line;\n return false;\n }\n }\n }\n\n stackInfo.stack.unshift(initial);\n stackInfo.partial = true;\n return true;\n } else {\n stackInfo.incomplete = true;\n }\n\n return false;\n }\n\n /**\n * Computes stack trace information by walking the arguments.caller\n * chain at the time the exception occurred. This will cause earlier\n * frames to be missed but is the only way to get any stack trace in\n * Safari and IE. The top frame is restored by\n * {@link augmentStackTraceWithInitialElement}.\n * @param {Error} ex\n * @return {?Object.} Stack trace information.\n */\n function computeStackTraceByWalkingCallerChain(ex, depth) {\n var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n stack = [],\n funcs = {},\n recursion = false,\n parts,\n item,\n source;\n\n for (\n var curr = computeStackTraceByWalkingCallerChain.caller;\n curr && !recursion;\n curr = curr.caller\n ) {\n if (curr === computeStackTrace || curr === TraceKit.report) {\n // console.log('skipping internal function');\n continue;\n }\n\n item = {\n url: null,\n func: UNKNOWN_FUNCTION,\n line: null,\n column: null\n };\n\n if (curr.name) {\n item.func = curr.name;\n } else if ((parts = functionName.exec(curr.toString()))) {\n item.func = parts[1];\n }\n\n if (typeof item.func === 'undefined') {\n try {\n item.func = parts.input.substring(0, parts.input.indexOf('{'));\n } catch (e) {}\n }\n\n if (funcs['' + curr]) {\n recursion = true;\n } else {\n funcs['' + curr] = true;\n }\n\n stack.push(item);\n }\n\n if (depth) {\n // console.log('depth is ' + depth);\n // console.log('stack is ' + stack.length);\n stack.splice(0, depth);\n }\n\n var result = {\n name: ex.name,\n message: ex.message,\n url: getLocationHref(),\n stack: stack\n };\n augmentStackTraceWithInitialElement(\n result,\n ex.sourceURL || ex.fileName,\n ex.line || ex.lineNumber,\n ex.message || ex.description\n );\n return result;\n }\n\n /**\n * Computes a stack trace for an exception.\n * @param {Error} ex\n * @param {(string|number)=} depth\n */\n function computeStackTrace(ex, depth) {\n var stack = null;\n depth = depth == null ? 0 : +depth;\n\n try {\n stack = computeStackTraceFromStackProp(ex);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n\n try {\n stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n if (stack) {\n return stack;\n }\n } catch (e) {\n if (TraceKit.debug) {\n throw e;\n }\n }\n return {\n name: ex.name,\n message: ex.message,\n url: getLocationHref()\n };\n }\n\n computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << (len % 32);\n x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n var i;\n var olda;\n var oldb;\n var oldc;\n var oldd;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (i = 0; i < x.length; i += 16) {\n olda = a;\n oldb = b;\n oldc = c;\n oldd = d;\n\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n var i;\n var output = '';\n var length32 = input.length * 32;\n for (i = 0; i < length32; i += 8) {\n output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n }\n return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n var i;\n var output = [];\n output[(input.length >> 2) - 1] = undefined;\n for (i = 0; i < output.length; i += 1) {\n output[i] = 0;\n }\n var length8 = input.length * 8;\n for (i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n }\n return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n var i;\n var bkey = rstr2binl(key);\n var ipad = [];\n var opad = [];\n var hash;\n ipad[15] = opad[15] = undefined;\n if (bkey.length > 16) {\n bkey = binlMD5(bkey, key.length * 8);\n }\n for (i = 0; i < 16; i += 1) {\n ipad[i] = bkey[i] ^ 0x36363636;\n opad[i] = bkey[i] ^ 0x5c5c5c5c;\n }\n hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n var hexTab = '0123456789abcdef';\n var output = '';\n var x;\n var i;\n for (i = 0; i < input.length; i += 1) {\n x = input.charCodeAt(i);\n output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n }\n return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n if (!key) {\n if (!raw) {\n return hexMD5(string);\n }\n return rawMD5(string);\n }\n if (!raw) {\n return hexHMACMD5(key, string);\n }\n return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","function RavenConfigError(message) {\n this.name = 'RavenConfigError';\n this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n var originalConsoleLevel = console[level];\n var originalConsole = console;\n\n if (!(level in console)) {\n return;\n }\n\n var sentryLevel = level === 'warn' ? 'warning' : level;\n\n console[level] = function() {\n var args = [].slice.call(arguments);\n\n var msg = utils.safeJoin(args, ' ');\n var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n if (level === 'assert') {\n if (args[0] === false) {\n // Default browsers message\n msg =\n 'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n data.extra.arguments = args.slice(1);\n callback && callback(msg, data);\n }\n } else {\n callback && callback(msg, data);\n }\n\n // this fails for some browsers. :(\n if (originalConsoleLevel) {\n // IE9 doesn't allow calling apply on console functions directly\n // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n }\n };\n};\n\nmodule.exports = {\n wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n return isFunction(callback)\n ? function(data) {\n return callback(data, original);\n }\n : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n // Raven can run in contexts where there's no document (react-native)\n this._hasDocument = !isUndefined(_document);\n this._hasNavigator = !isUndefined(_navigator);\n this._lastCapturedException = null;\n this._lastData = null;\n this._lastEventId = null;\n this._globalServer = null;\n this._globalKey = null;\n this._globalProject = null;\n this._globalContext = {};\n this._globalOptions = {\n // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n logger: 'javascript',\n ignoreErrors: [],\n ignoreUrls: [],\n whitelistUrls: [],\n includePaths: [],\n headers: null,\n collectWindowErrors: true,\n captureUnhandledRejections: true,\n maxMessageLength: 0,\n // By default, truncates URL values to 250 chars\n maxUrlLength: 250,\n stackTraceLimit: 50,\n autoBreadcrumbs: true,\n instrument: true,\n sampleRate: 1,\n sanitizeKeys: []\n };\n this._fetchDefaults = {\n method: 'POST',\n keepalive: true,\n // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n // https://caniuse.com/#feat=referrer-policy\n // It doesn't. And it throw exception instead of ignoring this parameter...\n // REF: https://github.com/getsentry/raven-js/issues/1233\n referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n };\n this._ignoreOnError = 0;\n this._isRavenInstalled = false;\n this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n // capture references to window.console *and* all its methods first\n // before the console plugin has a chance to monkey patch\n this._originalConsole = _window.console || {};\n this._originalConsoleMethods = {};\n this._plugins = [];\n this._startTime = now();\n this._wrappedBuiltIns = [];\n this._breadcrumbs = [];\n this._lastCapturedEvent = null;\n this._keypressTimeout;\n this._location = _window.location;\n this._lastHref = this._location && this._location.href;\n this._resetBackoff();\n\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsole) {\n this._originalConsoleMethods[method] = this._originalConsole[method];\n }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n // Hardcode version string so that raven source can be loaded directly via\n // webpack (using a build step causes webpack #1617). Grunt verifies that\n // this value matches package.json during build.\n // See: https://github.com/getsentry/raven-js/issues/465\n VERSION: '3.26.1',\n\n debug: false,\n\n TraceKit: TraceKit, // alias to TraceKit\n\n /*\n * Configure Raven with a DSN and extra options\n *\n * @param {string} dsn The public Sentry DSN\n * @param {object} options Set of global options [optional]\n * @return {Raven}\n */\n config: function(dsn, options) {\n var self = this;\n\n if (self._globalServer) {\n this._logDebug('error', 'Error: Raven has already been configured');\n return self;\n }\n if (!dsn) return self;\n\n var globalOptions = self._globalOptions;\n\n // merge in options\n if (options) {\n each(options, function(key, value) {\n // tags and extra are special and need to be put into context\n if (key === 'tags' || key === 'extra' || key === 'user') {\n self._globalContext[key] = value;\n } else {\n globalOptions[key] = value;\n }\n });\n }\n\n self.setDSN(dsn);\n\n // \"Script error.\" is hard coded into browsers for errors that it can't read.\n // this is the result of a script being pulled in from an external domain and CORS.\n globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n // join regexp rules into one big rule\n globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n ? joinRegExp(globalOptions.ignoreUrls)\n : false;\n globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n ? joinRegExp(globalOptions.whitelistUrls)\n : false;\n globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n globalOptions.maxBreadcrumbs = Math.max(\n 0,\n Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n ); // default and hard limit is 100\n\n var autoBreadcrumbDefaults = {\n xhr: true,\n console: true,\n dom: true,\n location: true,\n sentry: true\n };\n\n var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n } else if (autoBreadcrumbs !== false) {\n autoBreadcrumbs = autoBreadcrumbDefaults;\n }\n globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n var instrumentDefaults = {\n tryCatch: true\n };\n\n var instrument = globalOptions.instrument;\n if ({}.toString.call(instrument) === '[object Object]') {\n instrument = objectMerge(instrumentDefaults, instrument);\n } else if (instrument !== false) {\n instrument = instrumentDefaults;\n }\n globalOptions.instrument = instrument;\n\n TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n // return for chaining\n return self;\n },\n\n /*\n * Installs a global window.onerror error handler\n * to capture and report uncaught exceptions.\n * At this point, install() is required to be called due\n * to the way TraceKit is set up.\n *\n * @return {Raven}\n */\n install: function() {\n var self = this;\n if (self.isSetup() && !self._isRavenInstalled) {\n TraceKit.report.subscribe(function() {\n self._handleOnErrorStackInfo.apply(self, arguments);\n });\n\n if (self._globalOptions.captureUnhandledRejections) {\n self._attachPromiseRejectionHandler();\n }\n\n self._patchFunctionToString();\n\n if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n self._instrumentTryCatch();\n }\n\n if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n // Install all of the plugins\n self._drainPlugins();\n\n self._isRavenInstalled = true;\n }\n\n Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n return this;\n },\n\n /*\n * Set the DSN (can be called multiple time unlike config)\n *\n * @param {string} dsn The public Sentry DSN\n */\n setDSN: function(dsn) {\n var self = this,\n uri = self._parseDSN(dsn),\n lastSlash = uri.path.lastIndexOf('/'),\n path = uri.path.substr(1, lastSlash);\n\n self._dsn = dsn;\n self._globalKey = uri.user;\n self._globalSecret = uri.pass && uri.pass.substr(1);\n self._globalProject = uri.path.substr(lastSlash + 1);\n\n self._globalServer = self._getGlobalServer(uri);\n\n self._globalEndpoint =\n self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n // Reset backoff state since we may be pointing at a\n // new project/server\n this._resetBackoff();\n },\n\n /*\n * Wrap code within a context so Raven can capture errors\n * reliably across domains that is executed immediately.\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The callback to be immediately executed within the context\n * @param {array} args An array of arguments to be called with the callback [optional]\n */\n context: function(options, func, args) {\n if (isFunction(options)) {\n args = func || [];\n func = options;\n options = {};\n }\n\n return this.wrap(options, func).apply(this, args);\n },\n\n /*\n * Wrap code within a context and returns back a new function to be executed\n *\n * @param {object} options A specific set of options for this context [optional]\n * @param {function} func The function to be wrapped in a new context\n * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n * @return {function} The newly wrapped functions with a context\n */\n wrap: function(options, func, _before) {\n var self = this;\n // 1 argument has been passed, and it's not a function\n // so just return it\n if (isUndefined(func) && !isFunction(options)) {\n return options;\n }\n\n // options is optional\n if (isFunction(options)) {\n func = options;\n options = undefined;\n }\n\n // At this point, we've passed along 2 arguments, and the second one\n // is not a function either, so we'll just return the second argument.\n if (!isFunction(func)) {\n return func;\n }\n\n // We don't wanna wrap it twice!\n try {\n if (func.__raven__) {\n return func;\n }\n\n // If this has already been wrapped in the past, return that\n if (func.__raven_wrapper__) {\n return func.__raven_wrapper__;\n }\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n // Bail on wrapping and return the function as-is (defers to window.onerror).\n return func;\n }\n\n function wrapped() {\n var args = [],\n i = arguments.length,\n deep = !options || (options && options.deep !== false);\n\n if (_before && isFunction(_before)) {\n _before.apply(this, arguments);\n }\n\n // Recursively wrap all of a function's arguments that are\n // functions themselves.\n while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n try {\n // Attempt to invoke user-land function\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n // means Raven caught an error invoking your application code. This is\n // expected behavior and NOT indicative of a bug with Raven.js.\n return func.apply(this, args);\n } catch (e) {\n self._ignoreNextOnError();\n self.captureException(e, options);\n throw e;\n }\n }\n\n // copy over properties of the old function\n for (var property in func) {\n if (hasKey(func, property)) {\n wrapped[property] = func[property];\n }\n }\n wrapped.prototype = func.prototype;\n\n func.__raven_wrapper__ = wrapped;\n // Signal that this function has been wrapped/filled already\n // for both debugging and to prevent it to being wrapped/filled twice\n wrapped.__raven__ = true;\n wrapped.__orig__ = func;\n\n return wrapped;\n },\n\n /**\n * Uninstalls the global error handler.\n *\n * @return {Raven}\n */\n uninstall: function() {\n TraceKit.report.uninstall();\n\n this._detachPromiseRejectionHandler();\n this._unpatchFunctionToString();\n this._restoreBuiltIns();\n this._restoreConsole();\n\n Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n this._isRavenInstalled = false;\n\n return this;\n },\n\n /**\n * Callback used for `unhandledrejection` event\n *\n * @param {PromiseRejectionEvent} event An object containing\n * promise: the Promise that was rejected\n * reason: the value with which the Promise was rejected\n * @return void\n */\n _promiseRejectionHandler: function(event) {\n this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n this.captureException(event.reason, {\n mechanism: {\n type: 'onunhandledrejection',\n handled: false\n }\n });\n },\n\n /**\n * Installs the global promise rejection handler.\n *\n * @return {raven}\n */\n _attachPromiseRejectionHandler: function() {\n this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n _window.addEventListener &&\n _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Uninstalls the global promise rejection handler.\n *\n * @return {raven}\n */\n _detachPromiseRejectionHandler: function() {\n _window.removeEventListener &&\n _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n return this;\n },\n\n /**\n * Manually capture an exception and send it over to Sentry\n *\n * @param {error} ex An exception to be logged\n * @param {object} options A specific set of options for this error [optional]\n * @return {Raven}\n */\n captureException: function(ex, options) {\n options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n if (isErrorEvent(ex) && ex.error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n ex = ex.error;\n } else if (isDOMError(ex) || isDOMException(ex)) {\n // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n // then we just extract the name and message, as they don't provide anything else\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n var message = ex.message ? name + ': ' + ex.message : name;\n\n return this.captureMessage(\n message,\n objectMerge(options, {\n // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n // but it's barely any overhead so we may at least try\n stacktrace: true,\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n } else if (isError(ex)) {\n // we have a real Error object\n ex = ex;\n } else if (isPlainObject(ex)) {\n // If it is plain Object, serialize it manually and extract options\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n ex = new Error(options.message);\n } else {\n // If none of previous checks were valid, then it means that\n // it's not a DOMError/DOMException\n // it's not a plain Object\n // it's not a valid ErrorEvent (one with an error property)\n // it's not an Error\n // So bail out and capture it as a simple message:\n return this.captureMessage(\n ex,\n objectMerge(options, {\n stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n trimHeadFrames: options.trimHeadFrames + 1\n })\n );\n }\n\n // Store the raw exception object for potential debugging and introspection\n this._lastCapturedException = ex;\n\n // TraceKit.report will re-raise any exception passed to it,\n // which means you have to wrap it in try/catch. Instead, we\n // can wrap it here and only re-raise if TraceKit.report\n // raises an exception different from the one we asked to\n // report on.\n try {\n var stack = TraceKit.computeStackTrace(ex);\n this._handleStackInfo(stack, options);\n } catch (ex1) {\n if (ex !== ex1) {\n throw ex1;\n }\n }\n\n return this;\n },\n\n _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n var exKeys = Object.keys(ex).sort();\n var options = objectMerge(currentOptions, {\n message:\n 'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n fingerprint: [md5(exKeys)],\n extra: currentOptions.extra || {}\n });\n options.extra.__serialized__ = serializeException(ex);\n\n return options;\n },\n\n /*\n * Manually send a message to Sentry\n *\n * @param {string} msg A plain message to be captured in Sentry\n * @param {object} options A specific set of options for this message [optional]\n * @return {Raven}\n */\n captureMessage: function(msg, options) {\n // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n // early call; we'll error on the side of logging anything called before configuration since it's\n // probably something you should see:\n if (\n !!this._globalOptions.ignoreErrors.test &&\n this._globalOptions.ignoreErrors.test(msg)\n ) {\n return;\n }\n\n options = options || {};\n msg = msg + ''; // Make sure it's actually a string\n\n var data = objectMerge(\n {\n message: msg\n },\n options\n );\n\n var ex;\n // Generate a \"synthetic\" stack trace from this point.\n // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n // of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n // or if it catches a thrown object without a \"stack\" property.\n try {\n throw new Error(msg);\n } catch (ex1) {\n ex = ex1;\n }\n\n // null exception name so `Error` isn't prefixed to msg\n ex.name = null;\n var stack = TraceKit.computeStackTrace(ex);\n\n // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n var initialCall = isArray(stack.stack) && stack.stack[1];\n\n // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n // initialCall => captureException(string) => captureMessage(string)\n if (initialCall && initialCall.func === 'Raven.captureException') {\n initialCall = stack.stack[2];\n }\n\n var fileurl = (initialCall && initialCall.url) || '';\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n if (this._globalOptions.stacktrace || (options && options.stacktrace)) {\n // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n options = objectMerge(\n {\n trimHeadFrames: 0\n },\n options\n );\n // Since we know this is a synthetic trace, the top frame (this function call)\n // MUST be from Raven.js, so mark it for trimming\n // We add to the trim counter so that callers can choose to trim extra frames, such\n // as utility functions.\n options.trimHeadFrames += 1;\n\n var frames = this._prepareFrames(stack, options);\n data.stacktrace = {\n // Sentry expects frames oldest to newest\n frames: frames.reverse()\n };\n }\n\n // Make sure that fingerprint is always wrapped in an array\n if (data.fingerprint) {\n data.fingerprint = isArray(data.fingerprint)\n ? data.fingerprint\n : [data.fingerprint];\n }\n\n // Fire away!\n this._send(data);\n\n return this;\n },\n\n captureBreadcrumb: function(obj) {\n var crumb = objectMerge(\n {\n timestamp: now() / 1000\n },\n obj\n );\n\n if (isFunction(this._globalOptions.breadcrumbCallback)) {\n var result = this._globalOptions.breadcrumbCallback(crumb);\n\n if (isObject(result) && !isEmptyObject(result)) {\n crumb = result;\n } else if (result === false) {\n return this;\n }\n }\n\n this._breadcrumbs.push(crumb);\n if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n this._breadcrumbs.shift();\n }\n return this;\n },\n\n addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n var pluginArgs = [].slice.call(arguments, 1);\n\n this._plugins.push([plugin, pluginArgs]);\n if (this._isRavenInstalled) {\n this._drainPlugins();\n }\n\n return this;\n },\n\n /*\n * Set/clear a user to be sent along with the payload.\n *\n * @param {object} user An object representing user data [optional]\n * @return {Raven}\n */\n setUserContext: function(user) {\n // Intentionally do not merge here since that's an unexpected behavior.\n this._globalContext.user = user;\n\n return this;\n },\n\n /*\n * Merge extra attributes to be sent along with the payload.\n *\n * @param {object} extra An object representing extra data [optional]\n * @return {Raven}\n */\n setExtraContext: function(extra) {\n this._mergeContext('extra', extra);\n\n return this;\n },\n\n /*\n * Merge tags to be sent along with the payload.\n *\n * @param {object} tags An object representing tags [optional]\n * @return {Raven}\n */\n setTagsContext: function(tags) {\n this._mergeContext('tags', tags);\n\n return this;\n },\n\n /*\n * Clear all of the context.\n *\n * @return {Raven}\n */\n clearContext: function() {\n this._globalContext = {};\n\n return this;\n },\n\n /*\n * Get a copy of the current context. This cannot be mutated.\n *\n * @return {object} copy of context\n */\n getContext: function() {\n // lol javascript\n return JSON.parse(stringify(this._globalContext));\n },\n\n /*\n * Set environment of application\n *\n * @param {string} environment Typically something like 'production'.\n * @return {Raven}\n */\n setEnvironment: function(environment) {\n this._globalOptions.environment = environment;\n\n return this;\n },\n\n /*\n * Set release version of application\n *\n * @param {string} release Typically something like a git SHA to identify version\n * @return {Raven}\n */\n setRelease: function(release) {\n this._globalOptions.release = release;\n\n return this;\n },\n\n /*\n * Set the dataCallback option\n *\n * @param {function} callback The callback to run which allows the\n * data blob to be mutated before sending\n * @return {Raven}\n */\n setDataCallback: function(callback) {\n var original = this._globalOptions.dataCallback;\n this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the breadcrumbCallback option\n *\n * @param {function} callback The callback to run which allows filtering\n * or mutating breadcrumbs\n * @return {Raven}\n */\n setBreadcrumbCallback: function(callback) {\n var original = this._globalOptions.breadcrumbCallback;\n this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /*\n * Set the shouldSendCallback option\n *\n * @param {function} callback The callback to run which allows\n * introspecting the blob before sending\n * @return {Raven}\n */\n setShouldSendCallback: function(callback) {\n var original = this._globalOptions.shouldSendCallback;\n this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n return this;\n },\n\n /**\n * Override the default HTTP transport mechanism that transmits data\n * to the Sentry server.\n *\n * @param {function} transport Function invoked instead of the default\n * `makeRequest` handler.\n *\n * @return {Raven}\n */\n setTransport: function(transport) {\n this._globalOptions.transport = transport;\n\n return this;\n },\n\n /*\n * Get the latest raw exception that was captured by Raven.\n *\n * @return {error}\n */\n lastException: function() {\n return this._lastCapturedException;\n },\n\n /*\n * Get the last event id\n *\n * @return {string}\n */\n lastEventId: function() {\n return this._lastEventId;\n },\n\n /*\n * Determine if Raven is setup and ready to go.\n *\n * @return {boolean}\n */\n isSetup: function() {\n if (!this._hasJSON) return false; // needs JSON support\n if (!this._globalServer) {\n if (!this.ravenNotConfiguredError) {\n this.ravenNotConfiguredError = true;\n this._logDebug('error', 'Error: Raven has not been configured.');\n }\n return false;\n }\n return true;\n },\n\n afterLoad: function() {\n // TODO: remove window dependence?\n\n // Attempt to initialize Raven on load\n var RavenConfig = _window.RavenConfig;\n if (RavenConfig) {\n this.config(RavenConfig.dsn, RavenConfig.config).install();\n }\n },\n\n showReportDialog: function(options) {\n if (\n !_document // doesn't work without a document (React native)\n )\n return;\n\n options = options || {};\n\n var lastEventId = options.eventId || this.lastEventId();\n if (!lastEventId) {\n throw new RavenConfigError('Missing eventId');\n }\n\n var dsn = options.dsn || this._dsn;\n if (!dsn) {\n throw new RavenConfigError('Missing DSN');\n }\n\n var encode = encodeURIComponent;\n var qs = '';\n qs += '?eventId=' + encode(lastEventId);\n qs += '&dsn=' + encode(dsn);\n\n var user = options.user || this._globalContext.user;\n if (user) {\n if (user.name) qs += '&name=' + encode(user.name);\n if (user.email) qs += '&email=' + encode(user.email);\n }\n\n var globalServer = this._getGlobalServer(this._parseDSN(dsn));\n\n var script = _document.createElement('script');\n script.async = true;\n script.src = globalServer + '/api/embed/error-page/' + qs;\n (_document.head || _document.body).appendChild(script);\n },\n\n /**** Private functions ****/\n _ignoreNextOnError: function() {\n var self = this;\n this._ignoreOnError += 1;\n setTimeout(function() {\n // onerror should trigger before setTimeout\n self._ignoreOnError -= 1;\n });\n },\n\n _triggerEvent: function(eventType, options) {\n // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n var evt, key;\n\n if (!this._hasDocument) return;\n\n options = options || {};\n\n eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n if (_document.createEvent) {\n evt = _document.createEvent('HTMLEvents');\n evt.initEvent(eventType, true, true);\n } else {\n evt = _document.createEventObject();\n evt.eventType = eventType;\n }\n\n for (key in options)\n if (hasKey(options, key)) {\n evt[key] = options[key];\n }\n\n if (_document.createEvent) {\n // IE9 if standards\n _document.dispatchEvent(evt);\n } else {\n // IE8 regardless of Quirks or Standards\n // IE9 if quirks\n try {\n _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n } catch (e) {\n // Do nothing\n }\n }\n },\n\n /**\n * Wraps addEventListener to capture UI breadcrumbs\n * @param evtName the event name (e.g. \"click\")\n * @returns {Function}\n * @private\n */\n _breadcrumbEventHandler: function(evtName) {\n var self = this;\n return function(evt) {\n // reset keypress timeout; e.g. triggering a 'click' after\n // a 'keypress' will reset the keypress debounce so that a new\n // set of keypresses can be recorded\n self._keypressTimeout = null;\n\n // It's possible this handler might trigger multiple times for the same\n // event (e.g. event propagation through node ancestors). Ignore if we've\n // already captured the event.\n if (self._lastCapturedEvent === evt) return;\n\n self._lastCapturedEvent = evt;\n\n // try/catch both:\n // - accessing evt.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // can throw an exception in some circumstances.\n var target;\n try {\n target = htmlTreeAsString(evt.target);\n } catch (e) {\n target = '';\n }\n\n self.captureBreadcrumb({\n category: 'ui.' + evtName, // e.g. ui.click, ui.input\n message: target\n });\n };\n },\n\n /**\n * Wraps addEventListener to capture keypress UI events\n * @returns {Function}\n * @private\n */\n _keypressEventHandler: function() {\n var self = this,\n debounceDuration = 1000; // milliseconds\n\n // TODO: if somehow user switches keypress target before\n // debounce timeout is triggered, we will only capture\n // a single breadcrumb from the FIRST target (acceptable?)\n return function(evt) {\n var target;\n try {\n target = evt.target;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n var tagName = target && target.tagName;\n\n // only consider keypress events on actual input elements\n // this will disregard keypresses targeting body (e.g. tabbing\n // through elements, hotkeys, etc)\n if (\n !tagName ||\n (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n )\n return;\n\n // record first keypress in a series, but ignore subsequent\n // keypresses until debounce clears\n var timeout = self._keypressTimeout;\n if (!timeout) {\n self._breadcrumbEventHandler('input')(evt);\n }\n clearTimeout(timeout);\n self._keypressTimeout = setTimeout(function() {\n self._keypressTimeout = null;\n }, debounceDuration);\n };\n },\n\n /**\n * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n * @param to the originating URL\n * @param from the target URL\n * @private\n */\n _captureUrlChange: function(from, to) {\n var parsedLoc = parseUrl(this._location.href);\n var parsedTo = parseUrl(to);\n var parsedFrom = parseUrl(from);\n\n // because onpopstate only tells you the \"new\" (to) value of location.href, and\n // not the previous (from) value, we need to track the value of the current URL\n // state ourselves\n this._lastHref = to;\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n to = parsedTo.relative;\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n from = parsedFrom.relative;\n\n this.captureBreadcrumb({\n category: 'navigation',\n data: {\n to: to,\n from: from\n }\n });\n },\n\n _patchFunctionToString: function() {\n var self = this;\n self._originalFunctionToString = Function.prototype.toString;\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = function() {\n if (typeof this === 'function' && this.__raven__) {\n return self._originalFunctionToString.apply(this.__orig__, arguments);\n }\n return self._originalFunctionToString.apply(this, arguments);\n };\n },\n\n _unpatchFunctionToString: function() {\n if (this._originalFunctionToString) {\n // eslint-disable-next-line no-extend-native\n Function.prototype.toString = this._originalFunctionToString;\n }\n },\n\n /**\n * Wrap timer functions and event targets to catch errors and provide\n * better metadata.\n */\n _instrumentTryCatch: function() {\n var self = this;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapTimeFn(orig) {\n return function(fn, t) {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n var originalCallback = args[0];\n if (isFunction(originalCallback)) {\n args[0] = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: orig.name}\n }\n },\n originalCallback\n );\n }\n\n // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n // also supports only two arguments and doesn't care what this is, so we\n // can just call the original function directly.\n if (orig.apply) {\n return orig.apply(this, args);\n } else {\n return orig(args[0], args[1]);\n }\n };\n }\n\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n function wrapEventTarget(global) {\n var proto = _window[global] && _window[global].prototype;\n if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n fill(\n proto,\n 'addEventListener',\n function(orig) {\n return function(evtName, fn, capture, secure) {\n // preserve arity\n try {\n if (fn && fn.handleEvent) {\n fn.handleEvent = self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {target: global, function: 'handleEvent', handler: fn.name}\n }\n },\n fn.handleEvent\n );\n }\n } catch (err) {\n // can sometimes get 'Permission denied to access property \"handle Event'\n }\n\n // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n // so that we don't have more than one wrapper function\n var before, clickHandler, keypressHandler;\n\n if (\n autoBreadcrumbs &&\n autoBreadcrumbs.dom &&\n (global === 'EventTarget' || global === 'Node')\n ) {\n // NOTE: generating multiple handlers per addEventListener invocation, should\n // revisit and verify we can just use one (almost certainly)\n clickHandler = self._breadcrumbEventHandler('click');\n keypressHandler = self._keypressEventHandler();\n before = function(evt) {\n // need to intercept every DOM event in `before` argument, in case that\n // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n // see #724\n if (!evt) return;\n\n var eventType;\n try {\n eventType = evt.type;\n } catch (e) {\n // just accessing event properties can throw an exception in some rare circumstances\n // see: https://github.com/getsentry/raven-js/issues/838\n return;\n }\n if (eventType === 'click') return clickHandler(evt);\n else if (eventType === 'keypress') return keypressHandler(evt);\n };\n }\n return orig.call(\n this,\n evtName,\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n target: global,\n function: 'addEventListener',\n handler: fn.name\n }\n }\n },\n fn,\n before\n ),\n capture,\n secure\n );\n };\n },\n wrappedBuiltIns\n );\n fill(\n proto,\n 'removeEventListener',\n function(orig) {\n return function(evt, fn, capture, secure) {\n try {\n fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n } catch (e) {\n // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n }\n return orig.call(this, evt, fn, capture, secure);\n };\n },\n wrappedBuiltIns\n );\n }\n }\n\n fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n if (_window.requestAnimationFrame) {\n fill(\n _window,\n 'requestAnimationFrame',\n function(orig) {\n return function(cb) {\n return orig(\n self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: 'requestAnimationFrame', handler: orig.name}\n }\n },\n cb\n )\n );\n };\n },\n wrappedBuiltIns\n );\n }\n\n // event targets borrowed from bugsnag-js:\n // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n var eventTargets = [\n 'EventTarget',\n 'Window',\n 'Node',\n 'ApplicationCache',\n 'AudioTrackList',\n 'ChannelMergerNode',\n 'CryptoOperation',\n 'EventSource',\n 'FileReader',\n 'HTMLUnknownElement',\n 'IDBDatabase',\n 'IDBRequest',\n 'IDBTransaction',\n 'KeyOperation',\n 'MediaController',\n 'MessagePort',\n 'ModalWindow',\n 'Notification',\n 'SVGElementInstance',\n 'Screen',\n 'TextTrack',\n 'TextTrackCue',\n 'TextTrackList',\n 'WebSocket',\n 'WebSocketWorker',\n 'Worker',\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'XMLHttpRequestUpload'\n ];\n for (var i = 0; i < eventTargets.length; i++) {\n wrapEventTarget(eventTargets[i]);\n }\n },\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - XMLHttpRequests\n * - DOM interactions (click/typing)\n * - window.location changes\n * - console\n *\n * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n */\n _instrumentBreadcrumbs: function() {\n var self = this;\n var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n var wrappedBuiltIns = self._wrappedBuiltIns;\n\n function wrapProp(prop, xhr) {\n if (prop in xhr && isFunction(xhr[prop])) {\n fill(xhr, prop, function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {function: prop, handler: orig.name}\n }\n },\n orig\n );\n }); // intentionally don't track filled methods on XHR instances\n }\n }\n\n if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n fill(\n xhrproto,\n 'open',\n function(origOpen) {\n return function(method, url) {\n // preserve arity\n\n // if Sentry key appears in URL, don't capture\n if (isString(url) && url.indexOf(self._globalKey) === -1) {\n this.__raven_xhr = {\n method: method,\n url: url,\n status_code: null\n };\n }\n\n return origOpen.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n\n fill(\n xhrproto,\n 'send',\n function(origSend) {\n return function() {\n // preserve arity\n var xhr = this;\n\n function onreadystatechangeHandler() {\n if (xhr.__raven_xhr && xhr.readyState === 4) {\n try {\n // touching statusCode in some platforms throws\n // an exception\n xhr.__raven_xhr.status_code = xhr.status;\n } catch (e) {\n /* do nothing */\n }\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'xhr',\n data: xhr.__raven_xhr\n });\n }\n }\n\n var props = ['onload', 'onerror', 'onprogress'];\n for (var j = 0; j < props.length; j++) {\n wrapProp(props[j], xhr);\n }\n\n if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n fill(\n xhr,\n 'onreadystatechange',\n function(orig) {\n return self.wrap(\n {\n mechanism: {\n type: 'instrument',\n data: {\n function: 'onreadystatechange',\n handler: orig.name\n }\n }\n },\n orig,\n onreadystatechangeHandler\n );\n } /* intentionally don't track this instrumentation */\n );\n } else {\n // if onreadystatechange wasn't actually set by the page on this xhr, we\n // are free to set our own and capture the breadcrumb\n xhr.onreadystatechange = onreadystatechangeHandler;\n }\n\n return origSend.apply(this, arguments);\n };\n },\n wrappedBuiltIns\n );\n }\n\n if (autoBreadcrumbs.xhr && supportsFetch()) {\n fill(\n _window,\n 'fetch',\n function(origFetch) {\n return function() {\n // preserve arity\n // Make a copy of the arguments to prevent deoptimization\n // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = arguments[i];\n }\n\n var fetchInput = args[0];\n var method = 'GET';\n var url;\n\n if (typeof fetchInput === 'string') {\n url = fetchInput;\n } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n url = fetchInput.url;\n if (fetchInput.method) {\n method = fetchInput.method;\n }\n } else {\n url = '' + fetchInput;\n }\n\n // if Sentry key appears in URL, don't capture, as it's our own request\n if (url.indexOf(self._globalKey) !== -1) {\n return origFetch.apply(this, args);\n }\n\n if (args[1] && args[1].method) {\n method = args[1].method;\n }\n\n var fetchData = {\n method: method,\n url: url,\n status_code: null\n };\n\n return origFetch\n .apply(this, args)\n .then(function(response) {\n fetchData.status_code = response.status;\n\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData\n });\n\n return response;\n })\n ['catch'](function(err) {\n // if there is an error performing the request\n self.captureBreadcrumb({\n type: 'http',\n category: 'fetch',\n data: fetchData,\n level: 'error'\n });\n\n throw err;\n });\n };\n },\n wrappedBuiltIns\n );\n }\n\n // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n // to the document. Do this before we instrument addEventListener.\n if (autoBreadcrumbs.dom && this._hasDocument) {\n if (_document.addEventListener) {\n _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n _document.addEventListener('keypress', self._keypressEventHandler(), false);\n } else if (_document.attachEvent) {\n // IE8 Compatibility\n _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n _document.attachEvent('onkeypress', self._keypressEventHandler());\n }\n }\n\n // record navigation (URL) changes\n // NOTE: in Chrome App environment, touching history.pushState, *even inside\n // a try/catch block*, will cause Chrome to output an error to console.error\n // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n var chrome = _window.chrome;\n var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n var hasPushAndReplaceState =\n !isChromePackagedApp &&\n _window.history &&\n _window.history.pushState &&\n _window.history.replaceState;\n if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n // TODO: remove onpopstate handler on uninstall()\n var oldOnPopState = _window.onpopstate;\n _window.onpopstate = function() {\n var currentHref = self._location.href;\n self._captureUrlChange(self._lastHref, currentHref);\n\n if (oldOnPopState) {\n return oldOnPopState.apply(this, arguments);\n }\n };\n\n var historyReplacementFunction = function(origHistFunction) {\n // note history.pushState.length is 0; intentionally not declaring\n // params to preserve 0 arity\n return function(/* state, title, url */) {\n var url = arguments.length > 2 ? arguments[2] : undefined;\n\n // url argument is optional\n if (url) {\n // coerce to string (this is what pushState does)\n self._captureUrlChange(self._lastHref, url + '');\n }\n\n return origHistFunction.apply(this, arguments);\n };\n };\n\n fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n }\n\n if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n // console\n var consoleMethodCallback = function(msg, data) {\n self.captureBreadcrumb({\n message: msg,\n level: data.level,\n category: 'console'\n });\n };\n\n each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n wrapConsoleMethod(console, level, consoleMethodCallback);\n });\n }\n },\n\n _restoreBuiltIns: function() {\n // restore any wrapped builtins\n var builtin;\n while (this._wrappedBuiltIns.length) {\n builtin = this._wrappedBuiltIns.shift();\n\n var obj = builtin[0],\n name = builtin[1],\n orig = builtin[2];\n\n obj[name] = orig;\n }\n },\n\n _restoreConsole: function() {\n // eslint-disable-next-line guard-for-in\n for (var method in this._originalConsoleMethods) {\n this._originalConsole[method] = this._originalConsoleMethods[method];\n }\n },\n\n _drainPlugins: function() {\n var self = this;\n\n // FIX ME TODO\n each(this._plugins, function(_, plugin) {\n var installer = plugin[0];\n var args = plugin[1];\n installer.apply(self, [self].concat(args));\n });\n },\n\n _parseDSN: function(str) {\n var m = dsnPattern.exec(str),\n dsn = {},\n i = 7;\n\n try {\n while (i--) dsn[dsnKeys[i]] = m[i] || '';\n } catch (e) {\n throw new RavenConfigError('Invalid DSN: ' + str);\n }\n\n if (dsn.pass && !this._globalOptions.allowSecretKey) {\n throw new RavenConfigError(\n 'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n );\n }\n\n return dsn;\n },\n\n _getGlobalServer: function(uri) {\n // assemble the endpoint from the uri pieces\n var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n if (uri.protocol) {\n globalServer = uri.protocol + ':' + globalServer;\n }\n return globalServer;\n },\n\n _handleOnErrorStackInfo: function(stackInfo, options) {\n options = options || {};\n options.mechanism = options.mechanism || {\n type: 'onerror',\n handled: false\n };\n\n // if we are intentionally ignoring errors via onerror, bail out\n if (!this._ignoreOnError) {\n this._handleStackInfo(stackInfo, options);\n }\n },\n\n _handleStackInfo: function(stackInfo, options) {\n var frames = this._prepareFrames(stackInfo, options);\n\n this._triggerEvent('handle', {\n stackInfo: stackInfo,\n options: options\n });\n\n this._processException(\n stackInfo.name,\n stackInfo.message,\n stackInfo.url,\n stackInfo.lineno,\n frames,\n options\n );\n },\n\n _prepareFrames: function(stackInfo, options) {\n var self = this;\n var frames = [];\n if (stackInfo.stack && stackInfo.stack.length) {\n each(stackInfo.stack, function(i, stack) {\n var frame = self._normalizeFrame(stack, stackInfo.url);\n if (frame) {\n frames.push(frame);\n }\n });\n\n // e.g. frames captured via captureMessage throw\n if (options && options.trimHeadFrames) {\n for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n frames[j].in_app = false;\n }\n }\n }\n frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n return frames;\n },\n\n _normalizeFrame: function(frame, stackInfoUrl) {\n // normalize the frames data\n var normalized = {\n filename: frame.url,\n lineno: frame.line,\n colno: frame.column,\n function: frame.func || '?'\n };\n\n // Case when we don't have any information about the error\n // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n // Generating synthetic error doesn't add any value here\n //\n // We should probably somehow let a user know that they should fix their code\n if (!frame.url) {\n normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n }\n\n normalized.in_app = !// determine if an exception came from outside of our app\n // first we check the global includePaths list.\n (\n (!!this._globalOptions.includePaths.test &&\n !this._globalOptions.includePaths.test(normalized.filename)) ||\n // Now we check for fun, if the function name is Raven or TraceKit\n /(Raven|TraceKit)\\./.test(normalized['function']) ||\n // finally, we do a last ditch effort and check for raven.min.js\n /raven\\.(min\\.)?js$/.test(normalized.filename)\n );\n\n return normalized;\n },\n\n _processException: function(type, message, fileurl, lineno, frames, options) {\n var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n if (\n !!this._globalOptions.ignoreErrors.test &&\n (this._globalOptions.ignoreErrors.test(message) ||\n this._globalOptions.ignoreErrors.test(prefixedMessage))\n ) {\n return;\n }\n\n var stacktrace;\n\n if (frames && frames.length) {\n fileurl = frames[0].filename || fileurl;\n // Sentry expects frames oldest to newest\n // and JS sends them as newest to oldest\n frames.reverse();\n stacktrace = {frames: frames};\n } else if (fileurl) {\n stacktrace = {\n frames: [\n {\n filename: fileurl,\n lineno: lineno,\n in_app: true\n }\n ]\n };\n }\n\n if (\n !!this._globalOptions.ignoreUrls.test &&\n this._globalOptions.ignoreUrls.test(fileurl)\n ) {\n return;\n }\n\n if (\n !!this._globalOptions.whitelistUrls.test &&\n !this._globalOptions.whitelistUrls.test(fileurl)\n ) {\n return;\n }\n\n var data = objectMerge(\n {\n // sentry.interfaces.Exception\n exception: {\n values: [\n {\n type: type,\n value: message,\n stacktrace: stacktrace\n }\n ]\n },\n transaction: fileurl\n },\n options\n );\n\n // Move mechanism from options to exception interface\n // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n // too much\n if (!data.exception.mechanism && data.mechanism) {\n data.exception.mechanism = data.mechanism;\n delete data.mechanism;\n }\n\n data.exception.mechanism = objectMerge(data.exception.mechanism || {}, {\n type: 'generic',\n handled: true\n });\n\n // Fire away!\n this._send(data);\n },\n\n _trimPacket: function(data) {\n // For now, we only want to truncate the two different messages\n // but this could/should be expanded to just trim everything\n var max = this._globalOptions.maxMessageLength;\n if (data.message) {\n data.message = truncate(data.message, max);\n }\n if (data.exception) {\n var exception = data.exception.values[0];\n exception.value = truncate(exception.value, max);\n }\n\n var request = data.request;\n if (request) {\n if (request.url) {\n request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n }\n if (request.Referer) {\n request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n }\n }\n\n if (data.breadcrumbs && data.breadcrumbs.values)\n this._trimBreadcrumbs(data.breadcrumbs);\n\n return data;\n },\n\n /**\n * Truncate breadcrumb values (right now just URLs)\n */\n _trimBreadcrumbs: function(breadcrumbs) {\n // known breadcrumb properties with urls\n // TODO: also consider arbitrary prop values that start with (https?)?://\n var urlProps = ['to', 'from', 'url'],\n urlProp,\n crumb,\n data;\n\n for (var i = 0; i < breadcrumbs.values.length; ++i) {\n crumb = breadcrumbs.values[i];\n if (\n !crumb.hasOwnProperty('data') ||\n !isObject(crumb.data) ||\n objectFrozen(crumb.data)\n )\n continue;\n\n data = objectMerge({}, crumb.data);\n for (var j = 0; j < urlProps.length; ++j) {\n urlProp = urlProps[j];\n if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n }\n }\n breadcrumbs.values[i].data = data;\n }\n },\n\n _getHttpData: function() {\n if (!this._hasNavigator && !this._hasDocument) return;\n var httpData = {};\n\n if (this._hasNavigator && _navigator.userAgent) {\n httpData.headers = {\n 'User-Agent': _navigator.userAgent\n };\n }\n\n // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n if (_window.location && _window.location.href) {\n httpData.url = _window.location.href;\n }\n\n if (this._hasDocument && _document.referrer) {\n if (!httpData.headers) httpData.headers = {};\n httpData.headers.Referer = _document.referrer;\n }\n\n return httpData;\n },\n\n _resetBackoff: function() {\n this._backoffDuration = 0;\n this._backoffStart = null;\n },\n\n _shouldBackoff: function() {\n return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n },\n\n /**\n * Returns true if the in-process data payload matches the signature\n * of the previously-sent data\n *\n * NOTE: This has to be done at this level because TraceKit can generate\n * data from window.onerror WITHOUT an exception object (IE8, IE9,\n * other old browsers). This can take the form of an \"exception\"\n * data object with a single frame (derived from the onerror args).\n */\n _isRepeatData: function(current) {\n var last = this._lastData;\n\n if (\n !last ||\n current.message !== last.message || // defined for captureMessage\n current.transaction !== last.transaction // defined for captureException/onerror\n )\n return false;\n\n // Stacktrace interface (i.e. from captureMessage)\n if (current.stacktrace || last.stacktrace) {\n return isSameStacktrace(current.stacktrace, last.stacktrace);\n } else if (current.exception || last.exception) {\n // Exception interface (i.e. from captureException/onerror)\n return isSameException(current.exception, last.exception);\n }\n\n return true;\n },\n\n _setBackoffState: function(request) {\n // If we are already in a backoff state, don't change anything\n if (this._shouldBackoff()) {\n return;\n }\n\n var status = request.status;\n\n // 400 - project_id doesn't exist or some other fatal\n // 401 - invalid/revoked dsn\n // 429 - too many requests\n if (!(status === 400 || status === 401 || status === 429)) return;\n\n var retry;\n try {\n // If Retry-After is not in Access-Control-Expose-Headers, most\n // browsers will throw an exception trying to access it\n if (supportsFetch()) {\n retry = request.headers.get('Retry-After');\n } else {\n retry = request.getResponseHeader('Retry-After');\n }\n\n // Retry-After is returned in seconds\n retry = parseInt(retry, 10) * 1000;\n } catch (e) {\n /* eslint no-empty:0 */\n }\n\n this._backoffDuration = retry\n ? // If Sentry server returned a Retry-After value, use it\n retry\n : // Otherwise, double the last backoff duration (starts at 1 sec)\n this._backoffDuration * 2 || 1000;\n\n this._backoffStart = now();\n },\n\n _send: function(data) {\n var globalOptions = this._globalOptions;\n\n var baseData = {\n project: this._globalProject,\n logger: globalOptions.logger,\n platform: 'javascript'\n },\n httpData = this._getHttpData();\n\n if (httpData) {\n baseData.request = httpData;\n }\n\n // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n data = objectMerge(baseData, data);\n\n // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n // Send along our own collected metadata with extra\n data.extra['session:duration'] = now() - this._startTime;\n\n if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n // intentionally make shallow copy so that additions\n // to breadcrumbs aren't accidentally sent in this request\n data.breadcrumbs = {\n values: [].slice.call(this._breadcrumbs, 0)\n };\n }\n\n if (this._globalContext.user) {\n // sentry.interfaces.User\n data.user = this._globalContext.user;\n }\n\n // Include the environment if it's defined in globalOptions\n if (globalOptions.environment) data.environment = globalOptions.environment;\n\n // Include the release if it's defined in globalOptions\n if (globalOptions.release) data.release = globalOptions.release;\n\n // Include server_name if it's defined in globalOptions\n if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n data = this._sanitizeData(data);\n\n // Cleanup empty properties before sending them to the server\n Object.keys(data).forEach(function(key) {\n if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n delete data[key];\n }\n });\n\n if (isFunction(globalOptions.dataCallback)) {\n data = globalOptions.dataCallback(data) || data;\n }\n\n // Why??????????\n if (!data || isEmptyObject(data)) {\n return;\n }\n\n // Check if the request should be filtered or not\n if (\n isFunction(globalOptions.shouldSendCallback) &&\n !globalOptions.shouldSendCallback(data)\n ) {\n return;\n }\n\n // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n // so drop requests until \"cool-off\" period has elapsed.\n if (this._shouldBackoff()) {\n this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n return;\n }\n\n if (typeof globalOptions.sampleRate === 'number') {\n if (Math.random() < globalOptions.sampleRate) {\n this._sendProcessedPayload(data);\n }\n } else {\n this._sendProcessedPayload(data);\n }\n },\n\n _sanitizeData: function(data) {\n return sanitize(data, this._globalOptions.sanitizeKeys);\n },\n\n _getUuid: function() {\n return uuid4();\n },\n\n _sendProcessedPayload: function(data, callback) {\n var self = this;\n var globalOptions = this._globalOptions;\n\n if (!this.isSetup()) return;\n\n // Try and clean up the packet before sending by truncating long values\n data = this._trimPacket(data);\n\n // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n // but this would require copying an un-truncated copy of the data packet, which can be\n // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n this._logDebug('warn', 'Raven dropped repeat event: ', data);\n return;\n }\n\n // Send along an event_id if not explicitly passed.\n // This event_id can be used to reference the error within Sentry itself.\n // Set lastEventId after we know the error should actually be sent\n this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n // Store outbound payload after trim\n this._lastData = data;\n\n this._logDebug('debug', 'Raven about to send:', data);\n\n var auth = {\n sentry_version: '7',\n sentry_client: 'raven-js/' + this.VERSION,\n sentry_key: this._globalKey\n };\n\n if (this._globalSecret) {\n auth.sentry_secret = this._globalSecret;\n }\n\n var exception = data.exception && data.exception.values[0];\n\n // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n if (\n this._globalOptions.autoBreadcrumbs &&\n this._globalOptions.autoBreadcrumbs.sentry\n ) {\n this.captureBreadcrumb({\n category: 'sentry',\n message: exception\n ? (exception.type ? exception.type + ': ' : '') + exception.value\n : data.message,\n event_id: data.event_id,\n level: data.level || 'error' // presume error unless specified\n });\n }\n\n var url = this._globalEndpoint;\n (globalOptions.transport || this._makeRequest).call(this, {\n url: url,\n auth: auth,\n data: data,\n options: globalOptions,\n onSuccess: function success() {\n self._resetBackoff();\n\n self._triggerEvent('success', {\n data: data,\n src: url\n });\n callback && callback();\n },\n onError: function failure(error) {\n self._logDebug('error', 'Raven transport failed to send: ', error);\n\n if (error.request) {\n self._setBackoffState(error.request);\n }\n\n self._triggerEvent('failure', {\n data: data,\n src: url\n });\n error = error || new Error('Raven send failed (no additional details provided)');\n callback && callback(error);\n }\n });\n },\n\n _makeRequest: function(opts) {\n // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n var url = opts.url + '?' + urlencode(opts.auth);\n\n var evaluatedHeaders = null;\n var evaluatedFetchParameters = {};\n\n if (opts.options.headers) {\n evaluatedHeaders = this._evaluateHash(opts.options.headers);\n }\n\n if (opts.options.fetchParameters) {\n evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n }\n\n if (supportsFetch()) {\n evaluatedFetchParameters.body = stringify(opts.data);\n\n var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n if (evaluatedHeaders) {\n fetchOptions.headers = evaluatedHeaders;\n }\n\n return _window\n .fetch(url, fetchOptions)\n .then(function(response) {\n if (response.ok) {\n opts.onSuccess && opts.onSuccess();\n } else {\n var error = new Error('Sentry error code: ' + response.status);\n // It's called request only to keep compatibility with XHR interface\n // and not add more redundant checks in setBackoffState method\n error.request = response;\n opts.onError && opts.onError(error);\n }\n })\n ['catch'](function() {\n opts.onError &&\n opts.onError(new Error('Sentry error code: network unavailable'));\n });\n }\n\n var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n if (!request) return;\n\n // if browser doesn't support CORS (e.g. IE7), we are out of luck\n var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n if (!hasCORS) return;\n\n if ('withCredentials' in request) {\n request.onreadystatechange = function() {\n if (request.readyState !== 4) {\n return;\n } else if (request.status === 200) {\n opts.onSuccess && opts.onSuccess();\n } else if (opts.onError) {\n var err = new Error('Sentry error code: ' + request.status);\n err.request = request;\n opts.onError(err);\n }\n };\n } else {\n request = new XDomainRequest();\n // xdomainrequest cannot go http -> https (or vice versa),\n // so always use protocol relative\n url = url.replace(/^https?:/, '');\n\n // onreadystatechange not supported by XDomainRequest\n if (opts.onSuccess) {\n request.onload = opts.onSuccess;\n }\n if (opts.onError) {\n request.onerror = function() {\n var err = new Error('Sentry error code: XDomainRequest');\n err.request = request;\n opts.onError(err);\n };\n }\n }\n\n request.open('POST', url);\n\n if (evaluatedHeaders) {\n each(evaluatedHeaders, function(key, value) {\n request.setRequestHeader(key, value);\n });\n }\n\n request.send(stringify(opts.data));\n },\n\n _evaluateHash: function(hash) {\n var evaluated = {};\n\n for (var key in hash) {\n if (hash.hasOwnProperty(key)) {\n var value = hash[key];\n evaluated[key] = typeof value === 'function' ? value() : value;\n }\n }\n\n return evaluated;\n },\n\n _logDebug: function(level) {\n // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n if (\n this._originalConsoleMethods[level] &&\n (this.debug || this._globalOptions.debug)\n ) {\n // In IE<10 console methods do not have their own 'apply' method\n Function.prototype.apply.call(\n this._originalConsoleMethods[level],\n this._originalConsole,\n [].slice.call(arguments, 1)\n );\n }\n },\n\n _mergeContext: function(key, context) {\n if (isUndefined(context)) {\n delete this._globalContext[key];\n } else {\n this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n }\n }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n _window.Raven = _Raven;\n return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n * ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n * ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\nimport Raven from 'raven-js';\n\n(() => {\n const isLive = window.location.host === 'plyr.io';\n\n // Raven / Sentry\n // For demo site (https://plyr.io) only\n if (isLive) {\n Raven.config('https://d4ad9866ad834437a4754e23937071e4@sentry.io/305555').install();\n }\n\n document.addEventListener('DOMContentLoaded', () => {\n Raven.context(() => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n /* controls: [\n 'play-large',\n 'restart',\n 'rewind',\n 'play',\n 'fast-forward',\n 'progress',\n 'current-time',\n 'duration',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ], */\n /* i18n: {\n restart: '重新開始',\n rewind: '快退{seektime}秒',\n play: '播放',\n pause: '暫停',\n fastForward: '快進{seektime}秒',\n seek: '尋求',\n played: '發揮',\n buffered: '緩衝的',\n currentTime: '當前時間戳',\n duration: '長短',\n volume: '音量',\n mute: '靜音',\n unmute: '取消靜音',\n enableCaptions: '開啟字幕',\n disableCaptions: '關閉字幕',\n enterFullscreen: '進入全螢幕',\n exitFullscreen: '退出全螢幕',\n frameTitle: '球員為{title}',\n captions: '字幕',\n settings: '設定',\n speed: '速度',\n normal: '正常',\n quality: '質量',\n loop: '循環',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: '重啟',\n disabled: '殘',\n enabled: '啟用',\n advertisement: '廣告',\n }, */\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n publisherId: '918848828995742',\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-576p.mp4',\n type: 'video/mp4',\n size: 576,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4',\n type: 'video/mp4',\n size: 720,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1080p.mp4',\n type: 'video/mp4',\n size: 1080,\n },\n {\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-1440p.mp4',\n type: 'video/mp4',\n size: 1440,\n },\n ],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n });\n });\n\n // Google analytics\n // For demo site (https://plyr.io) only\n /* eslint-disable */\n if (isLive) {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n }\n /* eslint-enable */\n})();\n"]} \ No newline at end of file diff --git a/dist/plyr.css b/dist/plyr.css index 10ad948a..5b27e716 100644 --- a/dist/plyr.css +++ b/dist/plyr.css @@ -1 +1 @@ -@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions span{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions span div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file +@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;direction:ltr;font-family:Avenir,"Avenir Next","Helvetica Neue","Segoe UI",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transform:translateY(-40px);transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr--hide-controls .plyr__captions{transform:translateY(-15px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__control[aria-pressed=false] .icon--pressed,.plyr__control[aria-pressed=false] .label--pressed,.plyr__control[aria-pressed=true] .icon--not-pressed,.plyr__control[aria-pressed=true] .label--not-pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{height:20px;left:2px;position:relative;width:20px}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;text-align:center}.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:5px}.plyr__controls .plyr__menu:first-child,.plyr__controls .plyr__menu:first-child+[data-plyr=pause],.plyr__controls .plyr__progress:first-child,.plyr__controls .plyr__progress:first-child+[data-plyr=pause],.plyr__controls .plyr__time:first-child,.plyr__controls .plyr__time:first-child+[data-plyr=pause],.plyr__controls>.plyr__control:first-child,.plyr__controls>.plyr__control:first-child+[data-plyr=pause]{margin-left:0}.plyr__controls .plyr__volume{margin-left:5px}@media (min-width:480px){.plyr__controls .plyr__menu,.plyr__controls .plyr__progress,.plyr__controls .plyr__time,.plyr__controls>.plyr__control{margin-left:10px}.plyr__controls .plyr__menu+.plyr__control,.plyr__controls>.plyr__control+.plyr__control,.plyr__controls>.plyr__control+.plyr__menu{margin-left:5px}}.plyr--video .plyr__controls{background:linear-gradient(transparent,rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:35px 10px 10px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:2}.plyr--video .plyr__controls .plyr__control svg{-webkit-filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15));filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__controls .plyr__control.plyr__tab-focus,.plyr--video .plyr__controls .plyr__control:hover,.plyr--video .plyr__controls .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__video-embed{height:0;padding-bottom:56.25%;position:relative}.plyr__video-embed iframe{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed iframe{pointer-events:none}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container ul{list-style:none;margin:0;overflow:hidden;padding:7px}.plyr__menu__container ul li{margin-top:2px}.plyr__menu__container ul li:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 14px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container label.plyr__control{padding-left:7px}.plyr__menu__container label.plyr__control input[type=radio]+span{background:rgba(0,0,0,.1);border-radius:100%;display:block;flex-shrink:0;height:16px;margin-right:10px;position:relative;transition:all .3s ease;width:16px}.plyr__menu__container label.plyr__control input[type=radio]+span::after{background:#fff;border-radius:100%;content:'';height:6px;left:5px;opacity:0;position:absolute;top:5px;transform:scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container label.plyr__control input[type=radio]:checked+span{background:#1aafff}.plyr__menu__container label.plyr__control input[type=radio]:checked+span::after{opacity:1;transform:scale(1)}.plyr__menu__container label.plyr__control input[type=radio]:focus+span{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr__menu__container label.plyr__control.plyr__tab-focus input[type=radio]+span,.plyr__menu__container label.plyr__control:hover input[type=radio]+span{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-7px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:28px;color:#1aafff;display:block;height:20px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:3px;height:6px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:3px;height:6px;transition:all .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);box-sizing:border-box;height:14px;position:relative;transition:all .2s ease;width:14px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 3px rgba(26,175,255,.35);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:100%;z-index:1;pointer-events:none}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__progress{display:flex;flex:1;left:7px;margin-right:14px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-7px;margin-right:-7px;width:calc(100% + 14px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:6px;left:0;margin-top:-3px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0;transition:width .2s ease}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:6px}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:6px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{flex:1;position:relative}.plyr__volume input[type=range]{position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:50px}}@media (min-width:768px){.plyr__volume{max-width:80px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:fullscreen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-moz-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen .plyr__video-embed{overflow:visible}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen .plyr__video-embed{overflow:visible}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-embed{overflow:visible}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback .plyr__video-embed{overflow:visible}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:6px;left:0;margin:-3px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important} \ No newline at end of file diff --git a/dist/plyr.js b/dist/plyr.js index 0c5dde21..141c5dd5 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -493,61 +493,63 @@ var utils = { // Check variable types is: { object: function object(input) { - return this.getConstructor(input) === Object; + return utils.getConstructor(input) === Object; }, number: function number(input) { - return this.getConstructor(input) === Number && !Number.isNaN(input); + return utils.getConstructor(input) === Number && !Number.isNaN(input); }, string: function string(input) { - return this.getConstructor(input) === String; + return utils.getConstructor(input) === String; }, boolean: function boolean(input) { - return this.getConstructor(input) === Boolean; + return utils.getConstructor(input) === Boolean; }, function: function _function(input) { - return this.getConstructor(input) === Function; + return utils.getConstructor(input) === Function; }, array: function array(input) { - return !this.nullOrUndefined(input) && Array.isArray(input); + return !utils.is.nullOrUndefined(input) && Array.isArray(input); }, weakMap: function weakMap(input) { - return this.instanceof(input, WeakMap); + return utils.is.instanceof(input, WeakMap); }, nodeList: function nodeList(input) { - return this.instanceof(input, NodeList); + return utils.is.instanceof(input, NodeList); }, element: function element(input) { - return this.instanceof(input, Element); + return utils.is.instanceof(input, Element); }, textNode: function textNode(input) { - return this.getConstructor(input) === Text; + return utils.getConstructor(input) === Text; }, event: function event(input) { - return this.instanceof(input, Event); + return utils.is.instanceof(input, Event); }, cue: function cue(input) { - return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue); + return utils.is.instanceof(input, window.TextTrackCue) || utils.is.instanceof(input, window.VTTCue); }, track: function track(input) { - return this.instanceof(input, TextTrack) || !this.nullOrUndefined(input) && this.string(input.kind); + return utils.is.instanceof(input, TextTrack) || !utils.is.nullOrUndefined(input) && utils.is.string(input.kind); }, url: function url(input) { - return !this.nullOrUndefined(input) && /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(input); + return !utils.is.nullOrUndefined(input) && /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(input); }, nullOrUndefined: function nullOrUndefined(input) { return input === null || typeof input === 'undefined'; }, empty: function empty(input) { - return this.nullOrUndefined(input) || (this.string(input) || this.array(input) || this.nodeList(input)) && !input.length || this.object(input) && !Object.keys(input).length; + return utils.is.nullOrUndefined(input) || (utils.is.string(input) || utils.is.array(input) || utils.is.nodeList(input)) && !input.length || utils.is.object(input) && !Object.keys(input).length; }, instanceof: function _instanceof$$1(input, constructor) { return Boolean(input && constructor && input instanceof constructor); - }, - getConstructor: function getConstructor(input) { - return !this.nullOrUndefined(input) ? input.constructor : null; } }, + getConstructor: function getConstructor(input) { + return !utils.is.nullOrUndefined(input) ? input.constructor : null; + }, + + // Unfortunately, due to mixed support, UA sniffing is required getBrowser: function getBrowser() { return { @@ -1167,7 +1169,7 @@ var utils = { // Bail if the value isn't a number if (!utils.is.number(time)) { - return this.formatTime(null, displayHours, inverted); + return utils.formatTime(null, displayHours, inverted); } // Format time component to add leading zero @@ -1176,9 +1178,9 @@ var utils = { }; // Breakdown to hours, mins, secs - var hours = this.getHours(time); - var mins = this.getMinutes(time); - var secs = this.getSeconds(time); + var hours = utils.getHours(time); + var mins = utils.getMinutes(time); + var secs = utils.getSeconds(time); // Do we need to display hours? if (displayHours || hours > 0) { @@ -1374,12 +1376,12 @@ var utils = { // Parse URL if needed if (input.startsWith('http://') || input.startsWith('https://')) { - var _parseUrl = this.parseUrl(input); + var _utils$parseUrl = utils.parseUrl(input); - search = _parseUrl.search; + search = _utils$parseUrl.search; } - if (this.is.empty(search)) { + if (utils.is.empty(search)) { return null; } @@ -1418,6 +1420,14 @@ var utils = { }, + // Like outerHTML, but also works for DocumentFragment + getHTML: function getHTML(element) { + var wrapper = document.createElement('div'); + wrapper.appendChild(element); + return wrapper.innerHTML; + }, + + // Get aspect ratio for dimensions getAspectRatio: function getAspectRatio(width, height) { var getRatio = function getRatio(w, h) { @@ -2159,9 +2169,15 @@ var controls = { // Create a settings menu item - createMenuItem: function createMenuItem(value, list, type, title) { - var badge = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; - var checked = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false; + createMenuItem: function createMenuItem(_ref) { + var value = _ref.value, + list = _ref.list, + type = _ref.type, + title = _ref.title, + _ref$badge = _ref.badge, + badge = _ref$badge === undefined ? null : _ref$badge, + _ref$checked = _ref.checked, + checked = _ref$checked === undefined ? false : _ref$checked; var item = utils.createElement('li'); @@ -2477,8 +2493,13 @@ var controls = { var sorting = _this3.config.quality.options; return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1; }).forEach(function (quality) { - var label = controls.getLabel.call(_this3, 'quality', quality); - controls.createMenuItem.call(_this3, quality, list, type, label, getBadge(quality)); + controls.createMenuItem.call(_this3, { + value: quality, + list: list, + type: type, + title: controls.getLabel.call(_this3, 'quality', quality), + badge: getBadge(quality) + }); }); controls.updateSetting.call(this, type, list); @@ -2521,18 +2542,7 @@ var controls = { switch (setting) { case 'captions': - if (this.captions.active) { - if (this.options.captions.length > 2 || !this.options.captions.some(function (lang) { - return lang === 'enabled'; - })) { - value = this.captions.language; - } else { - value = 'enabled'; - } - } else { - value = ''; - } - + value = this.currentTrack; break; default: @@ -2627,10 +2637,10 @@ var controls = { // TODO: Captions or language? Currently it's mixed var type = 'captions'; var list = this.elements.settings.panes.captions.querySelector('ul'); + var tracks = captions.getTracks.call(this); // Toggle the pane and tab - var toggle = captions.getTracks.call(this).length; - controls.toggleTab.call(this, type, toggle); + controls.toggleTab.call(this, type, tracks.length); // Empty the menu utils.emptyElement(list); @@ -2639,28 +2649,33 @@ var controls = { controls.checkMenu.call(this); // If there's no captions, bail - if (!toggle) { + if (!tracks.length) { return; } - // Re-map the tracks into just the data we need - var tracks = captions.getTracks.call(this).map(function (track) { + // Generate options data + var options = tracks.map(function (track, value) { return { - language: !utils.is.empty(track.language) ? track.language : 'enabled', - label: captions.getLabel.call(_this4, track) + value: value, + checked: _this4.captions.active && _this4.currentTrack === value, + title: captions.getLabel.call(_this4, track), + badge: track.language && controls.createBadge.call(_this4, track.language.toUpperCase()), + list: list, + type: 'language' }; }); // Add the "Disabled" option to turn off captions - tracks.unshift({ - language: '', - label: i18n.get('disabled', this.config) + options.unshift({ + value: -1, + checked: !this.captions.active, + title: i18n.get('disabled', this.config), + list: list, + type: 'language' }); // Generate options - tracks.forEach(function (track) { - controls.createMenuItem.call(_this4, track.language, list, 'language', track.label, track.language !== 'enabled' ? controls.createBadge.call(_this4, track.language.toUpperCase()) : null, track.language.toLowerCase() === _this4.language); - }); + options.forEach(controls.createMenuItem.bind(this)); controls.updateSetting.call(this, type, list); }, @@ -2714,8 +2729,12 @@ var controls = { // Create items this.options.speed.forEach(function (speed) { - var label = controls.getLabel.call(_this5, 'speed', speed); - controls.createMenuItem.call(_this5, speed, list, type, label); + controls.createMenuItem.call(_this5, { + value: speed, + list: list, + type: type, + title: controls.getLabel.call(_this5, 'speed', speed) + }); }); controls.updateSetting.call(this, type, list); @@ -3189,10 +3208,10 @@ var controls = { var replace = function replace(input) { var result = input; - Object.entries(props).forEach(function (_ref) { - var _ref2 = slicedToArray(_ref, 2), - key = _ref2[0], - value = _ref2[1]; + Object.entries(props).forEach(function (_ref2) { + var _ref3 = slicedToArray(_ref2, 2), + key = _ref3[0], + value = _ref3[1]; result = utils.replaceAll(result, '{' + key + '}', value); }); @@ -3309,91 +3328,168 @@ var captions = { active = this.config.captions.active; } - // Set toggled state - this.toggleCaptions(active); + // Get language from storage, fallback to config + var language = this.storage.get('language') || this.config.captions.language; + if (language === 'auto') { + var _split = (navigator.language || navigator.userLanguage).split('-'); + + var _split2 = slicedToArray(_split, 1); + + language = _split2[0]; + } + // Set language and show if active + captions.setLanguage.call(this, language, active); // Watch changes to textTracks and update captions menu - if (this.config.captions.update) { - utils.on(this.media.textTracks, 'addtrack removetrack', captions.update.bind(this)); + if (this.isHTML5) { + var trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack'; + utils.on(this.media.textTracks, trackEvents, captions.update.bind(this)); } // Update available languages in list next tick (the event must not be triggered before the listeners) setTimeout(captions.update.bind(this), 0); }, update: function update() { - // Update tracks - var tracks = captions.getTracks.call(this); - this.options.captions = tracks.map(function (_ref) { - var language = _ref.language; - return language; - }); + var _this = this; - // Set language if it hasn't been set already - if (!this.language) { - var language = this.config.captions.language; + var tracks = captions.getTracks.call(this, true); + // Get the wanted language + var _captions = this.captions, + language = _captions.language, + meta = _captions.meta; - if (language === 'auto') { - var _split = (navigator.language || navigator.userLanguage).split('-'); + // Handle tracks (add event listener and "pseudo"-default) - var _split2 = slicedToArray(_split, 1); + if (this.isHTML5 && this.isVideo) { + tracks.filter(function (track) { + return !meta.get(track); + }).forEach(function (track) { + _this.debug.log('Track added', track); + // Attempt to store if the original dom element was "default" + meta.set(track, { + default: track.mode === 'showing' + }); - language = _split2[0]; - } - this.language = this.storage.get('language') || (language || '').toLowerCase(); + // Turn off native caption rendering to avoid double captions + track.mode = 'hidden'; + + // Add event listener for cue changes + utils.on(track, 'cuechange', function () { + return captions.updateCues.call(_this); + }); + }); } - // Toggle the class hooks - utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this))); + var trackRemoved = !tracks.find(function (track) { + return track === _this.captions.currentTrackNode; + }); + var firstMatch = this.language !== language && tracks.find(function (track) { + return track.language === language; + }); + + // Update language if removed or first matching track added + if (trackRemoved || firstMatch) { + captions.setLanguage.call(this, language, this.config.captions.active); + } + + // Enable or disable captions based on track length + utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(tracks)); // Update available languages in list if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) { controls.setCaptionsMenu.call(this); } }, + set: function set$$1(index) { + var setLanguage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + var show = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + var tracks = captions.getTracks.call(this); - // Set the captions language - setLanguage: function setLanguage() { - var _this = this; - - // Setup HTML5 track rendering - if (this.isHTML5 && this.isVideo) { - captions.getTracks.call(this).forEach(function (track) { - // Show track - utils.on(track, 'cuechange', function (event) { - return captions.setCue.call(_this, event); - }); - - // Turn off native caption rendering to avoid double captions - // eslint-disable-next-line - track.mode = 'hidden'; - }); - - // Get current track - var currentTrack = captions.getCurrentTrack.call(this); - - // Check if suported kind - if (utils.is.track(currentTrack)) { - // If we change the active track while a cue is already displayed we need to update it - if (Array.from(currentTrack.activeCues || []).length) { - captions.setCue.call(this, currentTrack); - } - } - } else if (this.isVimeo && this.captions.active) { - this.embed.enableTextTrack(this.language); + // Disable captions if setting to -1 + if (index === -1) { + this.toggleCaptions(false); + return; } + + if (!utils.is.number(index)) { + this.debug.warn('Invalid caption argument', index); + return; + } + + if (!(index in tracks)) { + this.debug.warn('Track not found', index); + return; + } + + if (this.captions.currentTrack !== index) { + this.captions.currentTrack = index; + var track = captions.getCurrentTrack.call(this); + + var _ref = track || {}, + language = _ref.language; + + // Store reference to node for invalidation on remove + + + this.captions.currentTrackNode = track; + + // Prevent setting language in some cases, since it can violate user's intentions + if (setLanguage) { + this.captions.language = language; + } + + // Handle Vimeo captions + if (this.isVimeo) { + this.embed.enableTextTrack(language); + } + + // Trigger event + utils.dispatchEvent.call(this, this.media, 'languagechange'); + } + + if (this.isHTML5 && this.isVideo) { + // If we change the active track while a cue is already displayed we need to update it + captions.updateCues.call(this); + } + + // Show captions + if (show) { + this.toggleCaptions(true); + } + }, + setLanguage: function setLanguage(language) { + var show = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (!utils.is.string(language)) { + this.debug.warn('Invalid language argument', language); + return; + } + // Normalize + this.captions.language = language.toLowerCase(); + + // Set currentTrack + var tracks = captions.getTracks.call(this); + var track = captions.getCurrentTrack.call(this, true); + captions.set.call(this, tracks.indexOf(track), false, show); }, - // Get the tracks + // Get current valid caption tracks + // If update is false it will also ignore tracks without metadata + // This is used to "freeze" the language options when captions.update is false getTracks: function getTracks() { - // Return empty array at least - if (utils.is.nullOrUndefined(this.media)) { - return []; - } + var _this2 = this; - // Only get accepted kinds - return Array.from(this.media.textTracks || []).filter(function (track) { + var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + + // Handle media or textTracks missing or null + var tracks = Array.from((this.media || {}).textTracks || []); + // For HTML5, use cache instead of current tracks when it exists (if captions.update is false) + // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata) + return tracks.filter(function (track) { + return !_this2.isHTML5 || update || _this2.captions.meta.has(track); + }).filter(function (track) { return ['captions', 'subtitles'].includes(track.kind); }); }, @@ -3401,32 +3497,20 @@ var captions = { // Get the current track for the current language getCurrentTrack: function getCurrentTrack() { - var _this2 = this; + var _this3 = this; + + var fromLanguage = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var tracks = captions.getTracks.call(this); - - if (!tracks.length) { - return null; - } - - // Get track based on current language - var track = tracks.find(function (track) { - return track.language.toLowerCase() === _this2.language; + var sortIsDefault = function sortIsDefault(track) { + return Number((_this3.captions.meta.get(track) || {}).default); + }; + var sorted = Array.from(tracks).sort(function (a, b) { + return sortIsDefault(b) - sortIsDefault(a); }); - - // Get the with default attribute - if (!track) { - track = utils.getElement.call(this, 'track[default]'); - } - - // Get the first track - if (!track) { - var _tracks = slicedToArray(tracks, 1); - - track = _tracks[0]; - } - - return track; + return !fromLanguage && tracks[this.currentTrack] || sorted.find(function (track) { + return track.language === _this3.captions.language; + }) || sorted[0]; }, @@ -3454,58 +3538,50 @@ var captions = { }, - // Display active caption if it contains text - setCue: function setCue(input) { - // Get the track from the event if needed - var track = utils.is.event(input) ? input.target : input; - var activeCues = track.activeCues; - - var active = activeCues.length && activeCues[0]; - var currentTrack = captions.getCurrentTrack.call(this); - - // Only display current track - if (track !== currentTrack) { - return; - } - - // Display a cue, if there is one - if (utils.is.cue(active)) { - captions.setText.call(this, active.getCueAsHTML()); - } else { - captions.setText.call(this, null); - } - - utils.dispatchEvent.call(this, this.media, 'cuechange'); - }, - - - // Set the current caption - setText: function setText(input) { + // Update captions using current track's active cues + // Also optional array argument in case there isn't any track (ex: vimeo) + updateCues: function updateCues(input) { // Requires UI if (!this.supported.ui) { return; } - if (utils.is.element(this.elements.captions)) { - var content = utils.createElement('span'); - - // Empty the container - utils.emptyElement(this.elements.captions); - - // Default to empty - var caption = !utils.is.nullOrUndefined(input) ? input : ''; - - // Set the span content - if (utils.is.string(caption)) { - content.innerText = caption.trim(); - } else { - content.appendChild(caption); - } - - // Set new caption text - this.elements.captions.appendChild(content); - } else { + if (!utils.is.element(this.elements.captions)) { this.debug.warn('No captions element to render to'); + return; + } + + // Only accept array or empty input + if (!utils.is.nullOrUndefined(input) && !Array.isArray(input)) { + this.debug.warn('updateCues: Invalid input', input); + return; + } + + var cues = input; + + // Get cues from track + if (!cues) { + var track = captions.getCurrentTrack.call(this); + cues = Array.from((track || {}).activeCues || []).map(function (cue) { + return cue.getCueAsHTML(); + }).map(utils.getHTML); + } + + // Set new caption text + var content = cues.map(function (cueText) { + return cueText.trim(); + }).join('\n'); + var changed = content !== this.elements.captions.innerHTML; + + if (changed) { + // Empty the container and create a new child element + utils.emptyElement(this.elements.captions); + var caption = utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.caption)); + caption.innerHTML = content; + this.elements.captions.appendChild(caption); + + // Trigger event + utils.dispatchEvent.call(this, this.media, 'cuechange'); } } }; @@ -3809,6 +3885,7 @@ var defaults$1 = { }, progress: '.plyr__progress', captions: '.plyr__captions', + caption: '.plyr__caption', menu: { quality: '.js-plyr__menu__list--quality' } @@ -4787,9 +4864,11 @@ var Listeners = function () { // Proxy events to container // Bubble up key events for Edge utils.on(this.player.media, this.player.config.events.concat(['keyup', 'keydown']).join(' '), function (event) { - var detail = {}; + var _event$detail = event.detail, + detail = _event$detail === undefined ? {} : _event$detail; // Get error details from media + if (event.type === 'error') { detail = _this3.player.media.error; } @@ -4888,7 +4967,7 @@ var Listeners = function () { // Settings menu items - use event delegation as items are added/removed if (utils.matches(event.target, _this4.player.config.selectors.inputs.language)) { proxy(event, function () { - _this4.player.language = event.target.value; + _this4.player.currentTrack = Number(event.target.value); showHomeTab(); }, 'language'); } else if (utils.matches(event.target, _this4.player.config.selectors.inputs.quality)) { @@ -5083,6 +5162,9 @@ var Listeners = function () { // Set playback state and trigger change (only on actual change) function assurePlaybackState(play) { + if (play && !this.embed.hasPlayed) { + this.embed.hasPlayed = true; + } if (this.media.paused === play) { this.media.paused = !play; utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause'); @@ -5235,24 +5317,25 @@ var vimeo = { paused = player.paused, volume = player.volume; - // Set seeking state and trigger event + var restorePause = paused && !embed.hasPlayed; + // Set seeking state and trigger event media.seeking = true; utils.dispatchEvent.call(player, media, 'seeking'); // If paused, mute until seek is complete - Promise.resolve(paused && embed.setVolume(0)) + Promise.resolve(restorePause && embed.setVolume(0)) // Seek .then(function () { return embed.setCurrentTime(time); }) // Restore paused .then(function () { - return paused && embed.pause(); + return restorePause && embed.pause(); }) // Restore volume .then(function () { - return paused && embed.setVolume(volume); + return restorePause && embed.setVolume(volume); }).catch(function () { // Do nothing }); @@ -5382,17 +5465,25 @@ var vimeo = { captions.setup.call(player); }); - player.embed.on('cuechange', function (data) { - var cue = null; + player.embed.on('cuechange', function (_ref) { + var _ref$cues = _ref.cues, + cues = _ref$cues === undefined ? [] : _ref$cues; - if (data.cues.length) { - cue = utils.stripHTML(data.cues[0].text); - } - - captions.setText.call(player, cue); + var strippedCues = cues.map(function (cue) { + return utils.stripHTML(cue.text); + }); + captions.updateCues.call(player, strippedCues); }); player.embed.on('loaded', function () { + // Assure state and events are updated on autoplay + player.embed.getPaused().then(function (paused) { + assurePlaybackState.call(player, !paused); + if (!paused) { + utils.dispatchEvent.call(player, player.media, 'playing'); + } + }); + if (utils.is.element(player.embed.element) && player.supported.ui) { var frame = player.embed.element; @@ -5522,6 +5613,9 @@ function mapQualityUnits(levels) { // Set playback state and trigger change (only on actual change) function assurePlaybackState$1(play) { + if (play && !this.embed.hasPlayed) { + this.embed.hasPlayed = true; + } if (this.media.paused === play) { this.media.paused = !play; utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause'); @@ -5935,7 +6029,7 @@ var youtube = { case 1: // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet) - if (player.media.paused) { + if (player.media.paused && !player.embed.hasPlayed) { player.media.pause(); } else { assurePlaybackState$1.call(player, true); @@ -6926,7 +7020,8 @@ var Plyr = function () { // Captions this.captions = { active: null, - currentTrack: null + currentTrack: -1, + meta: new WeakMap() }; // Fullscreen @@ -6937,8 +7032,7 @@ var Plyr = function () { // Options this.options = { speed: [], - quality: [], - captions: [] + quality: [] }; // Debugging @@ -7314,8 +7408,8 @@ var Plyr = function () { } /** - * Set the captions language - * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc) + * Set the caption track by index + * @param {number} - Caption index */ }, { @@ -8006,60 +8100,41 @@ var Plyr = function () { return Boolean(this.config.autoplay); } }, { - key: 'language', + key: 'currentTrack', set: function set$$1(input) { - // Nothing specified - if (!utils.is.string(input)) { - return; - } - - // If empty string is passed, assume disable captions - if (utils.is.empty(input)) { - this.toggleCaptions(false); - return; - } - - // Normalize - var language = input.toLowerCase(); - - // Check for support - if (!this.options.captions.includes(language)) { - this.debug.warn('Unsupported language option: ' + language); - return; - } - - // Ensure captions are enabled - this.toggleCaptions(true); - - // Enabled only - if (language === 'enabled') { - return; - } - - // If nothing to change, bail - if (this.language === language) { - return; - } - - // Update config - this.captions.language = language; - - // Clear caption - captions.setText.call(this, null); - - // Update captions - captions.setLanguage.call(this); - - // Trigger an event - utils.dispatchEvent.call(this, this.media, 'languagechange'); + captions.set.call(this, input); } /** - * Get the current captions language + * Get the current caption track index (-1 if disabled) */ , get: function get$$1() { - return this.captions.language; + var _captions = this.captions, + active = _captions.active, + currentTrack = _captions.currentTrack; + + return active ? currentTrack : -1; + } + + /** + * Set the wanted language for captions + * Since tracks can be added later it won't update the actual caption track until there is a matching track + * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc) + */ + + }, { + key: 'language', + set: function set$$1(input) { + captions.setLanguage.call(this, input); + } + + /** + * Get the current track's language + */ + , + get: function get$$1() { + return (captions.getCurrentTrack.call(this) || {}).language; } /** @@ -8135,9 +8210,7 @@ var Plyr = function () { } else if (utils.is.nodeList(selector)) { targets = Array.from(selector); } else if (utils.is.array(selector)) { - targets = selector.filter(function (i) { - return utils.is.element(i); - }); + targets = selector.filter(utils.is.element); } if (utils.is.empty(targets)) { diff --git a/dist/plyr.js.map b/dist/plyr.js.map index 4cf320f6..e06b4a47 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/loadjs/dist/loadjs.umd.js","storage.js","types.js","utils.js","support.js","html5.js","i18n.js","controls.js","captions.js","console.js","defaults.js","fullscreen.js","ui.js","listeners.js","plugins/vimeo.js","plugins/youtube.js","media.js","plugins/ads.js","source.js","plyr.js"],"names":["define","this","Storage","player","enabled","config","storage","key","supported","store","window","localStorage","getItem","utils","is","empty","json","JSON","parse","string","length","object","get","extend","setItem","stringify","test","removeItem","e","providers","types","input","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","instanceof","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","kind","array","nodeList","keys","constructor","document","documentMode","documentElement","style","navigator","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","responseText","response","Error","statusText","open","send","src","minWidth","image","Image","handler","onload","onerror","naturalWidth","assign","id","prefix","hasId","isCached","exists","getElementById","update","container","data","innerHTML","body","insertAdjacentElement","useStorage","createElement","toggleHidden","setAttribute","cached","content","fetch","then","result","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","type","attributes","text","setAttributes","innerText","target","removeElement","removeChild","childNodes","lastChild","newChild","oldChild","replaceChild","entries","value","sel","existingAttributes","existing","split","selector","s","trim","className","replace","stripped","parts","start","charAt","class","hidden","hide","boolean","hasAttribute","removeAttribute","force","method","classList","contains","prototype","match","querySelectorAll","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","call","querySelector","focused","activeElement","toggle","focusable","getElements","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","support","passiveListeners","bubbles","detail","CustomEvent","dispatchEvent","toggleState","pressed","getAttribute","state","args","toString","i","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","filter","item","indexOf","path","reduce","obj","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","defineProperty","removeEventListener","range","matchMedia","html5","getSources","sizes","dedupe","mime","currentTime","playing","onLoadedMetaData","load","play","blankVideo","debug","log","i18n","getDeep","seekTime","title","controls","URL","iconUrl","location","cors","host","isIE","svg4everybody","getElement","selectors","buttons","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","namespace","getIconUrl","iconPath","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","badge","menu","buttonType","button","toCamelCase","label","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","push","updateRangeFill","suffix","list","checked","radio","faux","insertAdjacentHTML","forceHours","setRange","muted","setProgress","getElementsByTagName","nodeValue","getPercentage","buffered","isWebkit","setProperty","tooltips","percent","clientRect","getBoundingClientRect","visible","toggleClass","touch","pageX","left","hasClass","parseFloat","updateTimeDisplay","invert","invertTime","seeking","updateProgress","hasDuration","displayDuration","paused","updateSeekTooltip","setting","tabs","panes","quality","toggleTab","checkMenu","emptyElement","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","pane","active","some","lang","language","default","getTracks","tracks","track","unshift","speed","isVimeo","values","tab","form","show","isMenuItem","isButton","stopPropagation","clone","position","opacity","name","scrollWidth","scrollHeight","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","props","create","findElements","repaint","labels","isYouTube","textTracks","setCaptionsMenu","insertAfter","hostname","protocol","createObjectURL","blob","toggleCaptions","bind","userLanguage","setCue","mode","currentTrack","getCurrentTrack","activeCues","embed","enableTextTrack","cue","setText","getCueAsHTML","caption","noop","Console","console","defaults","onChange","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","fallback","Fullscreen","property","native","iosNative","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","uiSupported","listeners","inject","setup","loop","updateVolume","timeUpdate","checkPlaying","isTouch","ready","setTitle","poster","backgroundImage","setPoster","durationUpdate","isEmbed","iframe","enable","posterEnabled","loadPromise","loadImage","togglePoster","stopped","toggleControls","loading","timers","setTimeout","hideControls","hover","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","keyboard","global","tabFocus","delay","hasAudio","resetOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","showTab","currentTarget","eventType","done","seekTo","toggleInvert","noTransition","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","assurePlaybackState","setAspectRatio","Vimeo","loadScript","urls","sdk","padding","paddingBottom","offset","transform","autoplay","buildUrlParams","parseVimeoId","embedContainer","replaceElement","thumbnail_large","pathname","Player","autopause","disableTextTrack","stop","setVolume","setCurrentTime","selected","setPlaybackRate","setLoop","currentSrc","getVideoUrl","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","cues","stripHTML","frame","seconds","build","mapQualityUnit","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","google","items","snippet","currentId","parseYouTubeId","generateId","posterSrc","backgroundSize","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","buffering","setInterval","getVideoLoadedFraction","lastBuffered","seeked","getAvailableQualityLevels","unMute","wrap","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","apply","Date","now","base","insertElement","attribute","cancelRequests","check","crossorigin","addStyleHook","insertElements","Plyr","failed","jQuery","plyr","original","tagName","getProviderByUrl","getUrlParams","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","clear","unload","inputIsValid","min","end","fauxDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","setLanguage","states","inline","webkitPresentationMode","t","cloneDeep"],"mappings":"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","file":"plyr.js","sourcesContent":["(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped; \n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\nimport Storage from './storage';\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, NodeList);\n },\n element(input) {\n return this.instanceof(input, Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load image avoiding xhr/fetch CORS issues\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded.\n // By default it checks if it is at least 1px, but you can add a second argument to change this.\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {onload: handler, onerror: handler, src});\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n window.localStorage.setItem(\n `${prefix}-${id}`,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n update(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new \n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove element(s)\n removeElement(element) {\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle hidden\n toggleHidden(element, hidden) {\n if (!utils.is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!utils.is.boolean(hide)) {\n hide = !element.hasAttribute('hidden');\n }\n\n if (hide) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n toggleClass(element, className, force) {\n if (utils.is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: this,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Format string\n format(input, ...args) {\n if (utils.is.empty(input)) {\n return input;\n }\n\n return input.toString().replace(/{(\\d+)}/g, (match, i) => (utils.is.string(args[i]) ? args[i] : ''));\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Clone nested objects\n cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n },\n\n // Get a nested value in an object\n getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Restore time\n const onLoadedMetaData = () => {\n player.currentTime = currentTime;\n player.off('loadedmetadata', onLoadedMetaData);\n };\n player.on('loadedmetadata', onLoadedMetaData);\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\n });\n },\n });\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config)) {\n return '';\n }\n\n let string = utils.getDeep(config.i18n, key);\n\n if (utils.is.empty(string)) {\n return '';\n }\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport utils from './utils';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n\n\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n return {\n url: this.config.iconUrl,\n cors,\n };\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add to \n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a
to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n // muted: player.muted,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = utils.format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div', { class: player.config.classNames.embedContainer });\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Get poster image\n utils.fetch(utils.format(player.config.urls.vimeo.api, id), 'json').then(response => {\n if (utils.is.empty(response)) {\n return;\n }\n\n // Get the URL for thumbnail\n const url = new URL(response[0].thumbnail_large);\n\n // Get original image\n url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n // Set and show poster\n ui.setPoster.call(player, url.href);\n });\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted,\n });\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const { embed, media, paused, volume } = player;\n\n // Set seeking state and trigger event\n media.seeking = true;\n utils.dispatchEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(paused && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => paused && embed.pause())\n // Restore volume\n .then(() => paused && embed.setVolume(volume))\n .catch(() => {\n // Do nothing\n });\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n assurePlaybackState.call(player, true);\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n assurePlaybackState.call(player, false);\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport controls from './../controls';\nimport ui from './../ui';\nimport utils from './../utils';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (this.media.paused === play) {\n this.media.paused = !play;\n utils.dispatchEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = utils.format(this.config.urls.youtube.api, videoId, key);\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the