/* react-datetime v2.6.1 https://github.com/arqex/react-datetime MIT: https://github.com/arqex/react-datetime/raw/master/LICENSE */ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("React"),require("moment"),require("ReactDOM")):"function"==typeof define&&define.amd?define(["React","moment","ReactDOM"],e):"object"==typeof exports?exports.Datetime=e(require("React"),require("moment"),require("ReactDOM")):t.Datetime=e(t.React,t.moment,t.ReactDOM)}(this,function(t,e,s){return function(t){function e(a){if(s[a])return s[a].exports;var n=s[a]={exports:{},id:a,loaded:!1};return t[a].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}var s={};return e.m=t,e.c=s,e.p="",e(0)}([function(t,e,s){"use strict";var a=s(1),n=s(2),r=s(3),i=s(5),o=s(6),c=s(7),p=s(4),u=n.PropTypes,d=n.createClass({mixins:[s(8)],viewComponents:{days:r,months:i,years:o,time:c},propTypes:{onFocus:u.func,onBlur:u.func,onChange:u.func,locale:u.string,input:u.bool,inputProps:u.object,timeConstraints:u.object,viewMode:u.oneOf(["years","months","days","time"]),isValidDate:u.func,open:u.bool,strictParsing:u.bool,closeOnSelect:u.bool,closeOnTab:u.bool},getDefaultProps:function(){var t=function(){};return{className:"",defaultValue:"",inputProps:{},input:!0,onFocus:t,onBlur:t,onChange:t,timeFormat:!0,timeConstraints:{},dateFormat:!0,strictParsing:!0,closeOnSelect:!1,closeOnTab:!0}},getInitialState:function(){var t=this.getStateFromProps(this.props);return void 0===t.open&&(t.open=!this.props.input),t.currentView=this.props.dateFormat?this.props.viewMode||t.updateOn||"days":"time",t},getStateFromProps:function(t){var e,s,a,n,r=this.getFormats(t),i=t.value||t.defaultValue;return i&&"string"==typeof i?e=this.localMoment(i,r.datetime):i&&(e=this.localMoment(i)),e&&!e.isValid()&&(e=null),s=e?e.clone().startOf("month"):this.localMoment().startOf("month"),a=this.getUpdateOn(r),n=e?e.format(r.datetime):i.isValid&&!i.isValid()?"":i||"",{updateOn:a,inputFormat:r.datetime,viewDate:s,selectedDate:e,inputValue:n,open:t.open}},getUpdateOn:function(t){return t.date.match(/[lLD]/)?"days":t.date.indexOf("M")!==-1?"months":t.date.indexOf("Y")!==-1?"years":"days"},getFormats:function(t){var e={date:t.dateFormat||"",time:t.timeFormat||""},s=this.localMoment(t.date).localeData();return e.date===!0?e.date=s.longDateFormat("L"):"days"!==this.getUpdateOn(e)&&(e.time=""),e.time===!0&&(e.time=s.longDateFormat("LT")),e.datetime=e.date&&e.time?e.date+" "+e.time:e.date||e.time,e},componentWillReceiveProps:function(t){var e=this.getFormats(t),s={};t.value!==this.props.value&&(s=this.getStateFromProps(t)),e.datetime!==this.getFormats(this.props).datetime&&(s.inputFormat=e.datetime),void 0===s.open&&(this.props.closeOnSelect&&"time"!==this.state.currentView?s.open=!1:s.open=this.state.open),this.setState(s)},onInputChange:function(t){var e=null===t.target?t:t.target.value,s=this.localMoment(e,this.state.inputFormat),a={inputValue:e};return s.isValid()&&!this.props.value?(a.selectedDate=s,a.viewDate=s.clone().startOf("month")):a.selectedDate=null,this.setState(a,function(){return this.props.onChange(s.isValid()?s:this.state.inputValue)})},onInputKey:function(t){9===t.which&&this.props.closeOnTab&&this.closeCalendar()},showView:function(t){var e=this;return function(){e.setState({currentView:t})}},setDate:function(t){var e=this,s={month:"days",year:"months"};return function(a){e.setState({viewDate:e.state.viewDate.clone()[t](parseInt(a.target.getAttribute("data-value"),10)).startOf(t),currentView:s[t]})}},addTime:function(t,e,s){return this.updateTime("add",t,e,s)},subtractTime:function(t,e,s){return this.updateTime("subtract",t,e,s)},updateTime:function(t,e,s,a){var n=this;return function(){var r={},i=a?"selectedDate":"viewDate";r[i]=n.state[i].clone()[t](e,s),n.setState(r)}},allowedSetTime:["hours","minutes","seconds","milliseconds"],setTime:function(t,e){var s,a=this.allowedSetTime.indexOf(t)+1,n=this.state,r=(n.selectedDate||n.viewDate).clone();for(r[t](e);au||c.year()>p)&&(t+=" rdtNew"),o&&c.isSame(o,"day")&&(t+=" rdtActive"),c.isSame(n(),"day")&&(t+=" rdtToday"),e=!m(a,o),e&&(t+=" rdtDisabled"),s={key:c.format("M_D"),"data-value":c.date(),className:t},e||(s.onClick=this.updateSelectedDate),l.push(h(s,a,o)),7===l.length&&(d.push(r.tr({key:c.format("M_D")},l)),l=[]),c.add(1,"d");return d},updateSelectedDate:function(t){this.props.updateSelectedDate(t,!0)},renderDay:function(t,e){return r.td(t,e.date())},renderFooter:function(){if(!this.props.timeFormat)return"";var t=this.props.selectedDate||this.props.viewDate;return r.tfoot({key:"tf"},r.tr({},r.td({onClick:this.props.showView("time"),colSpan:7,className:"rdtTimeToggle"},t.format(this.props.timeFormat))))},isValidDate:function(){return 1}});t.exports=i},function(t,s){t.exports=e},function(t,e,s){"use strict";function a(t){return t.charAt(0).toUpperCase()+t.slice(1)}var n=s(2),r=n.DOM,i=n.createClass({render:function(){return r.div({className:"rdtMonths"},[r.table({key:"a"},r.thead({},r.tr({},[r.th({key:"prev",className:"rdtPrev"},r.span({onClick:this.props.subtractTime(1,"years")},"‹")),r.th({key:"year",className:"rdtSwitch",onClick:this.props.showView("years"),colSpan:2,"data-value":this.props.viewDate.year()},this.props.viewDate.year()),r.th({key:"next",className:"rdtNext"},r.span({onClick:this.props.addTime(1,"years")},"›"))]))),r.table({key:"months"},r.tbody({key:"b"},this.renderMonths()))])},renderMonths:function(){for(var t,e,s=this.props.selectedDate,a=this.props.viewDate.month(),n=this.props.viewDate.year(),i=[],o=0,c=[],p=this.props.renderMonth||this.renderMonth;o<12;)t="rdtMonth",s&&o===a&&n===s.year()&&(t+=" rdtActive"),e={key:o,"data-value":o,className:t,onClick:"months"===this.props.updateOn?this.updateSelectedMonth:this.props.setDate("month")},c.push(p(e,o,n,s&&s.clone())),4===c.length&&(i.push(r.tr({key:a+"_"+i.length},c)),c=[]),o++;return i},updateSelectedMonth:function(t){this.props.updateSelectedDate(t,!0)},renderMonth:function(t,e){var s=this.props.viewDate.localeData()._monthsShort;return r.td(t,s.standalone?a(s.standalone[e]):s[e])}});t.exports=i},function(t,e,s){"use strict";var a=s(2),n=a.DOM,r=a.createClass({render:function(){var t=10*parseInt(this.props.viewDate.year()/10,10);return n.div({className:"rdtYears"},[n.table({key:"a"},n.thead({},n.tr({},[n.th({key:"prev",className:"rdtPrev"},n.span({onClick:this.props.subtractTime(10,"years")},"‹")),n.th({key:"year",className:"rdtSwitch",onClick:this.props.showView("years"),colSpan:2},t+"-"+(t+9)),n.th({key:"next",className:"rdtNext"},n.span({onClick:this.props.addTime(10,"years")},"›"))]))),n.table({key:"years"},n.tbody({},this.renderYears(t)))])},renderYears:function(t){var e,s,a=[],r=-1,i=[],o=this.props.renderYear||this.renderYear,c=this.props.selectedDate;for(t--;r<11;)e="rdtYear",r===-1|10===r&&(e+=" rdtOld"),c&&c.year()===t&&(e+=" rdtActive"),s={key:t,"data-value":t,className:e,onClick:"years"===this.props.updateOn?this.updateSelectedYear:this.props.setDate("year")},a.push(o(s,t,c&&c.clone())),4===a.length&&(i.push(n.tr({key:r},a)),a=[]),t++,r++;return i},updateSelectedYear:function(t){this.props.updateSelectedDate(t,!0)},renderYear:function(t,e){return n.td(t,e)}});t.exports=r},function(t,e,s){"use strict";var a=s(2),n=s(1),r=a.DOM,i=a.createClass({getInitialState:function(){return this.calculateState(this.props)},calculateState:function(t){var e=t.selectedDate||t.viewDate,s=t.timeFormat,a=[];s.indexOf("H")===-1&&s.indexOf("h")===-1||(a.push("hours"),s.indexOf("m")!==-1&&(a.push("minutes"),s.indexOf("s")!==-1&&a.push("seconds")));var n=!1;return this.props.timeFormat.indexOf(" A")!==-1&&null!==this.state&&(n=this.state.hours>=12?"PM":"AM"),{hours:e.format("H"),minutes:e.format("mm"),seconds:e.format("ss"),milliseconds:e.format("SSS"),daypart:n,counters:a}},renderCounter:function(t){if("daypart"!==t){var e=this.state[t];return"hours"===t&&this.props.timeFormat.indexOf(" A")!==-1&&(e=(e-1)%12+1,0===e&&(e=12)),r.div({key:t,className:"rdtCounter"},[r.span({key:"up",className:"rdtBtn",onMouseDown:this.onStartClicking("increase",t)},"▲"),r.div({key:"c",className:"rdtCount"},e),r.span({key:"do",className:"rdtBtn",onMouseDown:this.onStartClicking("decrease",t)},"▼")])}return""},renderDayPart:function(){return r.div({className:"rdtCounter",key:"dayPart"},[r.span({key:"up",className:"rdtBtn",onMouseDown:this.onStartClicking("toggleDayPart","hours")},"▲"),r.div({key:this.state.daypart,className:"rdtCount"},this.state.daypart),r.span({key:"do",className:"rdtBtn",onMouseDown:this.onStartClicking("toggleDayPart","hours")},"▼")])},render:function(){var t=this,e=[];return this.state.counters.forEach(function(s){e.length&&e.push(r.div({key:"sep"+e.length,className:"rdtCounterSeparator"},":")),e.push(t.renderCounter(s))}),this.state.daypart!==!1&&e.push(t.renderDayPart()),3===this.state.counters.length&&this.props.timeFormat.indexOf("S")!==-1&&(e.push(r.div({className:"rdtCounterSeparator",key:"sep5"},":")),e.push(r.div({className:"rdtCounter rdtMilli",key:"m"},r.input({value:this.state.milliseconds,type:"text",onChange:this.updateMilli})))),r.div({className:"rdtTime"},r.table({},[this.renderHeader(),r.tbody({key:"b"},r.tr({},r.td({},r.div({className:"rdtCounters"},e))))]))},componentWillMount:function(){var t=this;t.timeConstraints={hours:{min:0,max:23,step:1},minutes:{min:0,max:59,step:1},seconds:{min:0,max:59,step:1},milliseconds:{min:0,max:999,step:1}},["hours","minutes","seconds","milliseconds"].forEach(function(e){n(t.timeConstraints[e],t.props.timeConstraints[e])}),this.setState(this.calculateState(this.props))},componentWillReceiveProps:function(t){this.setState(this.calculateState(t))},updateMilli:function(t){var e=parseInt(t.target.value,10);e===t.target.value&&e>=0&&e<1e3&&(this.props.setTime("milliseconds",e),this.setState({milliseconds:e}))},renderHeader:function(){if(!this.props.dateFormat)return null;var t=this.props.selectedDate||this.props.viewDate;return r.thead({key:"h"},r.tr({},r.th({className:"rdtSwitch",colSpan:4,onClick:this.props.showView("days")},t.format(this.props.dateFormat))))},onStartClicking:function(t,e){var s=this;return function(){var a={};a[e]=s[t](e),s.setState(a),s.timer=setTimeout(function(){s.increaseTimer=setInterval(function(){a[e]=s[t](e),s.setState(a)},70)},500),s.mouseUpListener=function(){clearTimeout(s.timer),clearInterval(s.increaseTimer),s.props.setTime(e,s.state[e]),document.body.removeEventListener("mouseup",s.mouseUpListener)},document.body.addEventListener("mouseup",s.mouseUpListener)}},padValues:{hours:1,minutes:2,seconds:2,milliseconds:3},toggleDayPart:function(t){var e=parseInt(this.state[t],10)+12;return e>this.timeConstraints[t].max&&(e=this.timeConstraints[t].min+(e-(this.timeConstraints[t].max+1))),this.pad(t,e)},increase:function(t){var e=parseInt(this.state[t],10)+this.timeConstraints[t].step;return e>this.timeConstraints[t].max&&(e=this.timeConstraints[t].min+(e-(this.timeConstraints[t].max+1))),this.pad(t,e)},decrease:function(t){var e=parseInt(this.state[t],10)-this.timeConstraints[t].step;return e0||n[1]>13)&&(a=s(9));var r=[],i=[],o="ignore-react-onclickoutside",c=function(t,e){return t===e||(t.correspondingElement?t.correspondingElement.classList.contains(o):t.classList.contains(o))};t.exports={componentDidMount:function(){if("function"!=typeof this.handleClickOutside)throw new Error("Component lacks a handleClickOutside(event) function for processing outside click events.");var t=this.__outsideClickHandler=function(t,e){return function(s){s.stopPropagation();for(var a=s.target,n=!1;a.parentNode;){if(n=c(a,t))return;a=a.parentNode}e(s)}}(a.findDOMNode(this),this.handleClickOutside),e=r.length;r.push(this),i[e]=t,this.props.disableOnClickOutside||this.enableOnClickOutside()},componentWillUnmount:function(){this.disableOnClickOutside(),this.__outsideClickHandler=!1;var t=r.indexOf(this);t>-1&&i[t]&&(i.splice(t,1),r.splice(t,1))},enableOnClickOutside:function(){var t=this.__outsideClickHandler;document.addEventListener("mousedown",t),document.addEventListener("touchstart",t)},disableOnClickOutside:function(){var t=this.__outsideClickHandler;document.removeEventListener("mousedown",t),document.removeEventListener("touchstart",t)}}},function(t,e){t.exports=s}])}); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlYWN0LWRhdGV0aW1lLm1pbi5qcyJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwidGhpcyIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV80X18iLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzlfXyIsIm1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJpbnN0YWxsZWRNb2R1bGVzIiwiaWQiLCJsb2FkZWQiLCJjYWxsIiwibSIsImMiLCJwIiwiYXNzaWduIiwiUmVhY3QiLCJEYXlzVmlldyIsIk1vbnRoc1ZpZXciLCJZZWFyc1ZpZXciLCJUaW1lVmlldyIsIm1vbWVudCIsIlRZUEVTIiwiUHJvcFR5cGVzIiwiRGF0ZXRpbWUiLCJjcmVhdGVDbGFzcyIsIm1peGlucyIsInZpZXdDb21wb25lbnRzIiwiZGF5cyIsIm1vbnRocyIsInllYXJzIiwidGltZSIsInByb3BUeXBlcyIsIm9uRm9jdXMiLCJmdW5jIiwib25CbHVyIiwib25DaGFuZ2UiLCJsb2NhbGUiLCJzdHJpbmciLCJpbnB1dCIsImJvb2wiLCJpbnB1dFByb3BzIiwib2JqZWN0IiwidGltZUNvbnN0cmFpbnRzIiwidmlld01vZGUiLCJvbmVPZiIsImlzVmFsaWREYXRlIiwib3BlbiIsInN0cmljdFBhcnNpbmciLCJjbG9zZU9uU2VsZWN0IiwiY2xvc2VPblRhYiIsImdldERlZmF1bHRQcm9wcyIsIm5vZiIsImNsYXNzTmFtZSIsImRlZmF1bHRWYWx1ZSIsInRpbWVGb3JtYXQiLCJkYXRlRm9ybWF0IiwiZ2V0SW5pdGlhbFN0YXRlIiwic3RhdGUiLCJnZXRTdGF0ZUZyb21Qcm9wcyIsInByb3BzIiwidW5kZWZpbmVkIiwiY3VycmVudFZpZXciLCJ1cGRhdGVPbiIsInNlbGVjdGVkRGF0ZSIsInZpZXdEYXRlIiwiaW5wdXRWYWx1ZSIsImZvcm1hdHMiLCJnZXRGb3JtYXRzIiwiZGF0ZSIsInZhbHVlIiwibG9jYWxNb21lbnQiLCJkYXRldGltZSIsImlzVmFsaWQiLCJjbG9uZSIsInN0YXJ0T2YiLCJnZXRVcGRhdGVPbiIsImZvcm1hdCIsImlucHV0Rm9ybWF0IiwibWF0Y2giLCJpbmRleE9mIiwibG9jYWxlRGF0YSIsImxvbmdEYXRlRm9ybWF0IiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsInVwZGF0ZSIsInNldFN0YXRlIiwib25JbnB1dENoYW5nZSIsImUiLCJ0YXJnZXQiLCJvbklucHV0S2V5Iiwid2hpY2giLCJjbG9zZUNhbGVuZGFyIiwic2hvd1ZpZXciLCJ2aWV3IiwibWUiLCJzZXREYXRlIiwidHlwZSIsIm5leHRWaWV3cyIsIm1vbnRoIiwieWVhciIsInBhcnNlSW50IiwiZ2V0QXR0cmlidXRlIiwiYWRkVGltZSIsImFtb3VudCIsInRvU2VsZWN0ZWQiLCJ1cGRhdGVUaW1lIiwic3VidHJhY3RUaW1lIiwib3AiLCJhbGxvd2VkU2V0VGltZSIsInNldFRpbWUiLCJuZXh0VHlwZSIsImluZGV4IiwibGVuZ3RoIiwidXBkYXRlU2VsZWN0ZWREYXRlIiwiY2xvc2UiLCJtb2RpZmllciIsImN1cnJlbnREYXRlIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsIm1pbGxpc2Vjb25kcyIsIm9wZW5DYWxlbmRhciIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImNvbXBvbmVudFByb3BzIiwiZnJvbVByb3BzIiwiZnJvbVN0YXRlIiwiZnJvbVRoaXMiLCJnZXRDb21wb25lbnRQcm9wcyIsImZvckVhY2giLCJuYW1lIiwicmVuZGVyIiwiQ29tcG9uZW50IiwiRE9NIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsImNoaWxkcmVuIiwia2V5Iiwib25LZXlEb3duIiwiZGl2IiwiY29uY2F0IiwiY3JlYXRlRWxlbWVudCIsIlRvT2JqZWN0IiwidmFsIiwiVHlwZUVycm9yIiwiT2JqZWN0Iiwib3duRW51bWVyYWJsZUtleXMiLCJvYmoiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsInByb3BJc0VudW1lcmFibGUiLCJwcm90b3R5cGUiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInNvdXJjZSIsImZyb20iLCJ0byIsInMiLCJhcmd1bWVudHMiLCJpIiwiRGF0ZVRpbWVQaWNrZXJEYXlzIiwidGFibGVDaGlsZHJlbiIsImZvb3RlciIsInJlbmRlckZvb3RlciIsInRoZWFkIiwidHIiLCJ0aCIsInNwYW4iLCJvbkNsaWNrIiwiY29sU3BhbiIsImRhdGEtdmFsdWUiLCJnZXREYXlzT2ZXZWVrIiwibWFwIiwiZGF5IiwidGJvZHkiLCJyZW5kZXJEYXlzIiwicHVzaCIsInRhYmxlIiwiX3dlZWtkYXlzTWluIiwiZmlyc3QiLCJmaXJzdERheU9mV2VlayIsImRvdyIsImNsYXNzZXMiLCJkaXNhYmxlZCIsImRheVByb3BzIiwic2VsZWN0ZWQiLCJwcmV2TW9udGgiLCJzdWJ0cmFjdCIsImN1cnJlbnRZZWFyIiwiY3VycmVudE1vbnRoIiwid2Vla3MiLCJyZW5kZXJlciIsInJlbmRlckRheSIsImRheXNJbk1vbnRoIiwibGFzdERheSIsImFkZCIsImlzQmVmb3JlIiwiaXNTYW1lIiwiZXZlbnQiLCJ0ZCIsInRmb290IiwiY2FwaXRhbGl6ZSIsInN0ciIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJEYXRlVGltZVBpY2tlck1vbnRocyIsInJlbmRlck1vbnRocyIsInJvd3MiLCJyZW5kZXJNb250aCIsInVwZGF0ZVNlbGVjdGVkTW9udGgiLCJtb250aHNTaG9ydCIsIl9tb250aHNTaG9ydCIsInN0YW5kYWxvbmUiLCJEYXRlVGltZVBpY2tlclllYXJzIiwicmVuZGVyWWVhcnMiLCJyZW5kZXJZZWFyIiwidXBkYXRlU2VsZWN0ZWRZZWFyIiwiRGF0ZVRpbWVQaWNrZXJUaW1lIiwiY2FsY3VsYXRlU3RhdGUiLCJjb3VudGVycyIsImRheXBhcnQiLCJyZW5kZXJDb3VudGVyIiwib25Nb3VzZURvd24iLCJvblN0YXJ0Q2xpY2tpbmciLCJyZW5kZXJEYXlQYXJ0IiwidXBkYXRlTWlsbGkiLCJyZW5kZXJIZWFkZXIiLCJjb21wb25lbnRXaWxsTW91bnQiLCJtaW4iLCJtYXgiLCJzdGVwIiwibWlsbGkiLCJhY3Rpb24iLCJ0aW1lciIsInNldFRpbWVvdXQiLCJpbmNyZWFzZVRpbWVyIiwic2V0SW50ZXJ2YWwiLCJtb3VzZVVwTGlzdGVuZXIiLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwiZG9jdW1lbnQiLCJib2R5IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYWRWYWx1ZXMiLCJ0b2dnbGVEYXlQYXJ0IiwicGFkIiwiaW5jcmVhc2UiLCJkZWNyZWFzZSIsInZlcnNpb24iLCJzcGxpdCIsInJlZ2lzdGVyZWRDb21wb25lbnRzIiwiaGFuZGxlcnMiLCJJR05PUkVfQ0xBU1MiLCJpc1NvdXJjZUZvdW5kIiwibG9jYWxOb2RlIiwiY29ycmVzcG9uZGluZ0VsZW1lbnQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNvbXBvbmVudERpZE1vdW50IiwiRXJyb3IiLCJmbiIsIl9fb3V0c2lkZUNsaWNrSGFuZGxlciIsImV2ZW50SGFuZGxlciIsImV2dCIsInN0b3BQcm9wYWdhdGlvbiIsImZvdW5kIiwicGFyZW50Tm9kZSIsImZpbmRET01Ob2RlIiwicG9zIiwiZGlzYWJsZU9uQ2xpY2tPdXRzaWRlIiwiZW5hYmxlT25DbGlja091dHNpZGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInNwbGljZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGdCQUFaQyxVQUEwQyxnQkFBWEMsUUFDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsU0FBVUEsUUFBUSxVQUFXQSxRQUFRLGFBQzdDLGtCQUFYQyxTQUF5QkEsT0FBT0MsSUFDOUNELFFBQVEsUUFBUyxTQUFVLFlBQWFKLEdBQ2QsZ0JBQVpD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RCxFQUFRWixFQUFjckcsRUFBUXNHLEdBQ25CLE1BQ1h0RyxHQUFTQSxFQUFPa0gsV0FFbEJKLEVBQWFDLEtBRWYzUCxFQUFNK1AsWUFBWTlRLE1BQU9BLEtBQUswSCxvQkFFNUJxSixFQUFNbEIsRUFBcUI3SSxNQUMvQjZJLEdBQXFCNUUsS0FBS2pMLE1BQzFCOFAsRUFBU2lCLEdBQU9SLEVBSVh2USxLQUFLMkQsTUFBTXFOLHVCQUNkaFIsS0FBS2lSLHdCQUlUQyxxQkFBc0IsV0FDcEJsUixLQUFLZ1Isd0JBQ0xoUixLQUFLd1EsdUJBQXdCLENBQzdCLElBQUlPLEdBQU1sQixFQUFxQjlLLFFBQVEvRSxLQUNsQytRLE9BQ0NqQixFQUFTaUIsS0FFWGpCLEVBQVNxQixPQUFPSixFQUFLLEdBQ3JCbEIsRUFBcUJzQixPQUFPSixFQUFLLEtBU3ZDRSxxQkFBc0IsV0FDcEIsR0FBSVYsR0FBS3ZRLEtBQUt3USxxQkFDZHRCLFVBQVNHLGlCQUFpQixZQUFha0IsR0FDdkNyQixTQUFTRyxpQkFBaUIsYUFBY2tCLElBTzFDUyxzQkFBdUIsV0FDckIsR0FBSVQsR0FBS3ZRLEtBQUt3USxxQkFDZHRCLFVBQVNFLG9CQUFvQixZQUFhbUIsR0FDMUNyQixTQUFTRSxvQkFBb0IsYUFBY21CLE1BT3pDLFNBQVMzUSxFQUFRRCxHQUV0QkMsRUFBT0QsUUFBVVEiLCJmaWxlIjoicmVhY3QtZGF0ZXRpbWUubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiUmVhY3RcIiksIHJlcXVpcmUoXCJtb21lbnRcIiksIHJlcXVpcmUoXCJSZWFjdERPTVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJSZWFjdFwiLCBcIm1vbWVudFwiLCBcIlJlYWN0RE9NXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkRhdGV0aW1lXCJdID0gZmFjdG9yeShyZXF1aXJlKFwiUmVhY3RcIiksIHJlcXVpcmUoXCJtb21lbnRcIiksIHJlcXVpcmUoXCJSZWFjdERPTVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiRGF0ZXRpbWVcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIm1vbWVudFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzRfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV85X18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBhc3NpZ24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpLFxuXHRcdFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKSxcblx0XHREYXlzVmlldyA9IF9fd2VicGFja19yZXF1aXJlX18oMyksXG5cdFx0TW9udGhzVmlldyA9IF9fd2VicGFja19yZXF1aXJlX18oNSksXG5cdFx0WWVhcnNWaWV3ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KSxcblx0XHRUaW1lVmlldyA9IF9fd2VicGFja19yZXF1aXJlX18oNyksXG5cdFx0bW9tZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KVxuXHQ7XG5cblx0dmFyIFRZUEVTID0gUmVhY3QuUHJvcFR5cGVzO1xuXHR2YXIgRGF0ZXRpbWUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cdFx0bWl4aW5zOiBbXG5cdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgpXG5cdFx0XSxcblx0XHR2aWV3Q29tcG9uZW50czoge1xuXHRcdFx0ZGF5czogRGF5c1ZpZXcsXG5cdFx0XHRtb250aHM6IE1vbnRoc1ZpZXcsXG5cdFx0XHR5ZWFyczogWWVhcnNWaWV3LFxuXHRcdFx0dGltZTogVGltZVZpZXdcblx0XHR9LFxuXHRcdHByb3BUeXBlczoge1xuXHRcdFx0Ly8gdmFsdWU6IFRZUEVTLm9iamVjdCB8IFRZUEVTLnN0cmluZyxcblx0XHRcdC8vIGRlZmF1bHRWYWx1ZTogVFlQRVMub2JqZWN0IHwgVFlQRVMuc3RyaW5nLFxuXHRcdFx0b25Gb2N1czogVFlQRVMuZnVuYyxcblx0XHRcdG9uQmx1cjogVFlQRVMuZnVuYyxcblx0XHRcdG9uQ2hhbmdlOiBUWVBFUy5mdW5jLFxuXHRcdFx0bG9jYWxlOiBUWVBFUy5zdHJpbmcsXG5cdFx0XHRpbnB1dDogVFlQRVMuYm9vbCxcblx0XHRcdC8vIGRhdGVGb3JtYXQ6IFRZUEVTLnN0cmluZyB8IFRZUEVTLmJvb2wsXG5cdFx0XHQvLyB0aW1lRm9ybWF0OiBUWVBFUy5zdHJpbmcgfCBUWVBFUy5ib29sLFxuXHRcdFx0aW5wdXRQcm9wczogVFlQRVMub2JqZWN0LFxuXHRcdFx0dGltZUNvbnN0cmFpbnRzOiBUWVBFUy5vYmplY3QsXG5cdFx0XHR2aWV3TW9kZTogVFlQRVMub25lT2YoWyd5ZWFycycsICdtb250aHMnLCAnZGF5cycsICd0aW1lJ10pLFxuXHRcdFx0aXNWYWxpZERhdGU6IFRZUEVTLmZ1bmMsXG5cdFx0XHRvcGVuOiBUWVBFUy5ib29sLFxuXHRcdFx0c3RyaWN0UGFyc2luZzogVFlQRVMuYm9vbCxcblx0XHRcdGNsb3NlT25TZWxlY3Q6IFRZUEVTLmJvb2wsXG5cdFx0XHRjbG9zZU9uVGFiOiBUWVBFUy5ib29sXG5cdFx0fSxcblxuXHRcdGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbm9mID0gZnVuY3Rpb24oKXt9O1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y2xhc3NOYW1lOiAnJyxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlOiAnJyxcblx0XHRcdFx0aW5wdXRQcm9wczoge30sXG5cdFx0XHRcdGlucHV0OiB0cnVlLFxuXHRcdFx0XHRvbkZvY3VzOiBub2YsXG5cdFx0XHRcdG9uQmx1cjogbm9mLFxuXHRcdFx0XHRvbkNoYW5nZTogbm9mLFxuXHRcdFx0XHR0aW1lRm9ybWF0OiB0cnVlLFxuXHRcdFx0XHR0aW1lQ29uc3RyYWludHM6IHt9LFxuXHRcdFx0XHRkYXRlRm9ybWF0OiB0cnVlLFxuXHRcdFx0XHRzdHJpY3RQYXJzaW5nOiB0cnVlLFxuXHRcdFx0XHRjbG9zZU9uU2VsZWN0OiBmYWxzZSxcblx0XHRcdFx0Y2xvc2VPblRhYjogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Z2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGVGcm9tUHJvcHMoIHRoaXMucHJvcHMgKTtcblxuXHRcdFx0aWYgKCBzdGF0ZS5vcGVuID09PSB1bmRlZmluZWQgKVxuXHRcdFx0XHRzdGF0ZS5vcGVuID0gIXRoaXMucHJvcHMuaW5wdXQ7XG5cblx0XHRcdHN0YXRlLmN1cnJlbnRWaWV3ID0gdGhpcy5wcm9wcy5kYXRlRm9ybWF0ID8gKHRoaXMucHJvcHMudmlld01vZGUgfHwgc3RhdGUudXBkYXRlT24gfHwgJ2RheXMnKSA6ICd0aW1lJztcblxuXHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdH0sXG5cblx0XHRnZXRTdGF0ZUZyb21Qcm9wczogZnVuY3Rpb24oIHByb3BzICl7XG5cdFx0XHR2YXIgZm9ybWF0cyA9IHRoaXMuZ2V0Rm9ybWF0cyggcHJvcHMgKSxcblx0XHRcdFx0ZGF0ZSA9IHByb3BzLnZhbHVlIHx8IHByb3BzLmRlZmF1bHRWYWx1ZSxcblx0XHRcdFx0c2VsZWN0ZWREYXRlLCB2aWV3RGF0ZSwgdXBkYXRlT24sIGlucHV0VmFsdWVcblx0XHRcdDtcblxuXHRcdFx0aWYgKCBkYXRlICYmIHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyApXG5cdFx0XHRcdHNlbGVjdGVkRGF0ZSA9IHRoaXMubG9jYWxNb21lbnQoIGRhdGUsIGZvcm1hdHMuZGF0ZXRpbWUgKTtcblx0XHRcdGVsc2UgaWYgKCBkYXRlIClcblx0XHRcdFx0c2VsZWN0ZWREYXRlID0gdGhpcy5sb2NhbE1vbWVudCggZGF0ZSApO1xuXG5cdFx0XHRpZiAoIHNlbGVjdGVkRGF0ZSAmJiAhc2VsZWN0ZWREYXRlLmlzVmFsaWQoKSApXG5cdFx0XHRcdHNlbGVjdGVkRGF0ZSA9IG51bGw7XG5cblx0XHRcdHZpZXdEYXRlID0gc2VsZWN0ZWREYXRlID9cblx0XHRcdFx0c2VsZWN0ZWREYXRlLmNsb25lKCkuc3RhcnRPZignbW9udGgnKSA6XG5cdFx0XHRcdHRoaXMubG9jYWxNb21lbnQoKS5zdGFydE9mKCdtb250aCcpXG5cdFx0XHQ7XG5cblx0XHRcdHVwZGF0ZU9uID0gdGhpcy5nZXRVcGRhdGVPbihmb3JtYXRzKTtcblxuXHRcdFx0aWYgKCBzZWxlY3RlZERhdGUgKVxuXHRcdFx0XHRpbnB1dFZhbHVlID0gc2VsZWN0ZWREYXRlLmZvcm1hdChmb3JtYXRzLmRhdGV0aW1lKTtcblx0XHRcdGVsc2UgaWYgKCBkYXRlLmlzVmFsaWQgJiYgIWRhdGUuaXNWYWxpZCgpIClcblx0XHRcdFx0aW5wdXRWYWx1ZSA9ICcnO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRpbnB1dFZhbHVlID0gZGF0ZSB8fCAnJztcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dXBkYXRlT246IHVwZGF0ZU9uLFxuXHRcdFx0XHRpbnB1dEZvcm1hdDogZm9ybWF0cy5kYXRldGltZSxcblx0XHRcdFx0dmlld0RhdGU6IHZpZXdEYXRlLFxuXHRcdFx0XHRzZWxlY3RlZERhdGU6IHNlbGVjdGVkRGF0ZSxcblx0XHRcdFx0aW5wdXRWYWx1ZTogaW5wdXRWYWx1ZSxcblx0XHRcdFx0b3BlbjogcHJvcHMub3BlblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Z2V0VXBkYXRlT246IGZ1bmN0aW9uKGZvcm1hdHMpe1xuXHRcdFx0aWYgKCBmb3JtYXRzLmRhdGUubWF0Y2goL1tsTERdLykgKXtcblx0XHRcdFx0cmV0dXJuICdkYXlzJztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKCBmb3JtYXRzLmRhdGUuaW5kZXhPZignTScpICE9PSAtMSApe1xuXHRcdFx0XHRyZXR1cm4gJ21vbnRocyc7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICggZm9ybWF0cy5kYXRlLmluZGV4T2YoJ1knKSAhPT0gLTEgKXtcblx0XHRcdFx0cmV0dXJuICd5ZWFycyc7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnZGF5cyc7XG5cdFx0fSxcblxuXHRcdGdldEZvcm1hdHM6IGZ1bmN0aW9uKCBwcm9wcyApe1xuXHRcdFx0dmFyIGZvcm1hdHMgPSB7XG5cdFx0XHRcdFx0ZGF0ZTogcHJvcHMuZGF0ZUZvcm1hdCB8fCAnJyxcblx0XHRcdFx0XHR0aW1lOiBwcm9wcy50aW1lRm9ybWF0IHx8ICcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxvY2FsZSA9IHRoaXMubG9jYWxNb21lbnQoIHByb3BzLmRhdGUgKS5sb2NhbGVEYXRhKClcblx0XHRcdDtcblxuXHRcdFx0aWYgKCBmb3JtYXRzLmRhdGUgPT09IHRydWUgKXtcblx0XHRcdFx0Zm9ybWF0cy5kYXRlID0gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICggdGhpcy5nZXRVcGRhdGVPbihmb3JtYXRzKSAhPT0gJ2RheXMnICl7XG5cdFx0XHRcdGZvcm1hdHMudGltZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGZvcm1hdHMudGltZSA9PT0gdHJ1ZSApe1xuXHRcdFx0XHRmb3JtYXRzLnRpbWUgPSBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoJ0xUJyk7XG5cdFx0XHR9XG5cblx0XHRcdGZvcm1hdHMuZGF0ZXRpbWUgPSBmb3JtYXRzLmRhdGUgJiYgZm9ybWF0cy50aW1lID9cblx0XHRcdFx0Zm9ybWF0cy5kYXRlICsgJyAnICsgZm9ybWF0cy50aW1lIDpcblx0XHRcdFx0Zm9ybWF0cy5kYXRlIHx8IGZvcm1hdHMudGltZVxuXHRcdFx0O1xuXG5cdFx0XHRyZXR1cm4gZm9ybWF0cztcblx0XHR9LFxuXG5cdFx0Y29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzKSB7XG5cdFx0XHR2YXIgZm9ybWF0cyA9IHRoaXMuZ2V0Rm9ybWF0cyggbmV4dFByb3BzICksXG5cdFx0XHRcdHVwZGF0ZSA9IHt9XG5cdFx0XHQ7XG5cblx0XHRcdGlmICggbmV4dFByb3BzLnZhbHVlICE9PSB0aGlzLnByb3BzLnZhbHVlICl7XG5cdFx0XHRcdHVwZGF0ZSA9IHRoaXMuZ2V0U3RhdGVGcm9tUHJvcHMoIG5leHRQcm9wcyApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBmb3JtYXRzLmRhdGV0aW1lICE9PSB0aGlzLmdldEZvcm1hdHMoIHRoaXMucHJvcHMgKS5kYXRldGltZSApIHtcblx0XHRcdFx0dXBkYXRlLmlucHV0Rm9ybWF0ID0gZm9ybWF0cy5kYXRldGltZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB1cGRhdGUub3BlbiA9PT0gdW5kZWZpbmVkICl7XG5cdFx0XHRcdGlmICggdGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0ICYmIHRoaXMuc3RhdGUuY3VycmVudFZpZXcgIT09ICd0aW1lJyApe1xuXHRcdFx0XHRcdHVwZGF0ZS5vcGVuID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dXBkYXRlLm9wZW4gPSB0aGlzLnN0YXRlLm9wZW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZXRTdGF0ZSggdXBkYXRlICk7XG5cdFx0fSxcblxuXHRcdG9uSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uKCBlICkge1xuXHRcdFx0dmFyIHZhbHVlID0gZS50YXJnZXQgPT09IG51bGwgPyBlIDogZS50YXJnZXQudmFsdWUsXG5cdFx0XHRcdGxvY2FsTW9tZW50ID0gdGhpcy5sb2NhbE1vbWVudCggdmFsdWUsIHRoaXMuc3RhdGUuaW5wdXRGb3JtYXQgKSxcblx0XHRcdFx0dXBkYXRlID0geyBpbnB1dFZhbHVlOiB2YWx1ZSB9XG5cdFx0XHQ7XG5cblx0XHRcdGlmICggbG9jYWxNb21lbnQuaXNWYWxpZCgpICYmICF0aGlzLnByb3BzLnZhbHVlICkge1xuXHRcdFx0XHR1cGRhdGUuc2VsZWN0ZWREYXRlID0gbG9jYWxNb21lbnQ7XG5cdFx0XHRcdHVwZGF0ZS52aWV3RGF0ZSA9IGxvY2FsTW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR1cGRhdGUuc2VsZWN0ZWREYXRlID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRoaXMuc2V0U3RhdGUoIHVwZGF0ZSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLm9uQ2hhbmdlKCBsb2NhbE1vbWVudC5pc1ZhbGlkKCkgPyBsb2NhbE1vbWVudCA6IHRoaXMuc3RhdGUuaW5wdXRWYWx1ZSApO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdG9uSW5wdXRLZXk6IGZ1bmN0aW9uKCBlICl7XG5cdFx0XHRpZiAoIGUud2hpY2ggPT09IDkgJiYgdGhpcy5wcm9wcy5jbG9zZU9uVGFiICl7XG5cdFx0XHRcdHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzaG93VmlldzogZnVuY3Rpb24oIHZpZXcgKXtcblx0XHRcdHZhciBtZSA9IHRoaXM7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oKXtcblx0XHRcdFx0bWUuc2V0U3RhdGUoeyBjdXJyZW50VmlldzogdmlldyB9KTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdHNldERhdGU6IGZ1bmN0aW9uKCB0eXBlICl7XG5cdFx0XHR2YXIgbWUgPSB0aGlzLFxuXHRcdFx0XHRuZXh0Vmlld3MgPSB7XG5cdFx0XHRcdFx0bW9udGg6ICdkYXlzJyxcblx0XHRcdFx0XHR5ZWFyOiAnbW9udGhzJ1xuXHRcdFx0XHR9XG5cdFx0XHQ7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGUgKXtcblx0XHRcdFx0bWUuc2V0U3RhdGUoe1xuXHRcdFx0XHRcdHZpZXdEYXRlOiBtZS5zdGF0ZS52aWV3RGF0ZS5jbG9uZSgpWyB0eXBlIF0oIHBhcnNlSW50KGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpLCAxMCkgKS5zdGFydE9mKCB0eXBlICksXG5cdFx0XHRcdFx0Y3VycmVudFZpZXc6IG5leHRWaWV3c1sgdHlwZSBdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0YWRkVGltZTogZnVuY3Rpb24oIGFtb3VudCwgdHlwZSwgdG9TZWxlY3RlZCApe1xuXHRcdFx0cmV0dXJuIHRoaXMudXBkYXRlVGltZSggJ2FkZCcsIGFtb3VudCwgdHlwZSwgdG9TZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRzdWJ0cmFjdFRpbWU6IGZ1bmN0aW9uKCBhbW91bnQsIHR5cGUsIHRvU2VsZWN0ZWQgKXtcblx0XHRcdHJldHVybiB0aGlzLnVwZGF0ZVRpbWUoICdzdWJ0cmFjdCcsIGFtb3VudCwgdHlwZSwgdG9TZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHR1cGRhdGVUaW1lOiBmdW5jdGlvbiggb3AsIGFtb3VudCwgdHlwZSwgdG9TZWxlY3RlZCApe1xuXHRcdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB1cGRhdGUgPSB7fSxcblx0XHRcdFx0XHRkYXRlID0gdG9TZWxlY3RlZCA/ICdzZWxlY3RlZERhdGUnIDogJ3ZpZXdEYXRlJ1xuXHRcdFx0XHQ7XG5cblx0XHRcdFx0dXBkYXRlWyBkYXRlIF0gPSBtZS5zdGF0ZVsgZGF0ZSBdLmNsb25lKClbIG9wIF0oIGFtb3VudCwgdHlwZSApO1xuXG5cdFx0XHRcdG1lLnNldFN0YXRlKCB1cGRhdGUgKTtcblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdGFsbG93ZWRTZXRUaW1lOiBbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcycsICdtaWxsaXNlY29uZHMnXSxcblx0XHRzZXRUaW1lOiBmdW5jdGlvbiggdHlwZSwgdmFsdWUgKXtcblx0XHRcdHZhciBpbmRleCA9IHRoaXMuYWxsb3dlZFNldFRpbWUuaW5kZXhPZiggdHlwZSApICsgMSxcblx0XHRcdFx0c3RhdGUgPSB0aGlzLnN0YXRlLFxuXHRcdFx0XHRkYXRlID0gKHN0YXRlLnNlbGVjdGVkRGF0ZSB8fCBzdGF0ZS52aWV3RGF0ZSkuY2xvbmUoKSxcblx0XHRcdFx0bmV4dFR5cGVcblx0XHRcdDtcblxuXHRcdFx0Ly8gSXQgaXMgbmVlZGVkIHRvIHNldCBhbGwgdGhlIHRpbWUgcHJvcGVydGllc1xuXHRcdFx0Ly8gdG8gbm90IHRvIHJlc2V0IHRoZSB0aW1lXG5cdFx0XHRkYXRlWyB0eXBlIF0oIHZhbHVlICk7XG5cdFx0XHRmb3IgKDsgaW5kZXggPCB0aGlzLmFsbG93ZWRTZXRUaW1lLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0XHRuZXh0VHlwZSA9IHRoaXMuYWxsb3dlZFNldFRpbWVbaW5kZXhdO1xuXHRcdFx0XHRkYXRlWyBuZXh0VHlwZSBdKCBkYXRlW25leHRUeXBlXSgpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggIXRoaXMucHJvcHMudmFsdWUgKXtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0c2VsZWN0ZWREYXRlOiBkYXRlLFxuXHRcdFx0XHRcdGlucHV0VmFsdWU6IGRhdGUuZm9ybWF0KCBzdGF0ZS5pbnB1dEZvcm1hdCApXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9wcy5vbkNoYW5nZSggZGF0ZSApO1xuXHRcdH0sXG5cblx0XHR1cGRhdGVTZWxlY3RlZERhdGU6IGZ1bmN0aW9uKCBlLCBjbG9zZSApIHtcblx0XHRcdHZhciB0YXJnZXQgPSBlLnRhcmdldCxcblx0XHRcdFx0bW9kaWZpZXIgPSAwLFxuXHRcdFx0XHR2aWV3RGF0ZSA9IHRoaXMuc3RhdGUudmlld0RhdGUsXG5cdFx0XHRcdGN1cnJlbnREYXRlID0gdGhpcy5zdGF0ZS5zZWxlY3RlZERhdGUgfHwgdmlld0RhdGUsXG5cdFx0XHRcdGRhdGVcblx0ICAgIDtcblxuXHRcdFx0aWYgKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncmR0RGF5JykgIT09IC0xKXtcblx0XHRcdFx0aWYgKHRhcmdldC5jbGFzc05hbWUuaW5kZXhPZigncmR0TmV3JykgIT09IC0xKVxuXHRcdFx0XHRcdG1vZGlmaWVyID0gMTtcblx0XHRcdFx0ZWxzZSBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdyZHRPbGQnKSAhPT0gLTEpXG5cdFx0XHRcdFx0bW9kaWZpZXIgPSAtMTtcblxuXHRcdFx0XHRkYXRlID0gdmlld0RhdGUuY2xvbmUoKVxuXHRcdFx0XHRcdC5tb250aCggdmlld0RhdGUubW9udGgoKSArIG1vZGlmaWVyIClcblx0XHRcdFx0XHQuZGF0ZSggcGFyc2VJbnQoIHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSwgMTAgKSApO1xuXHRcdFx0fSBlbHNlIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ3JkdE1vbnRoJykgIT09IC0xKXtcblx0XHRcdFx0ZGF0ZSA9IHZpZXdEYXRlLmNsb25lKClcblx0XHRcdFx0XHQubW9udGgoIHBhcnNlSW50KCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJyksIDEwICkgKVxuXHRcdFx0XHRcdC5kYXRlKCBjdXJyZW50RGF0ZS5kYXRlKCkgKTtcblx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdyZHRZZWFyJykgIT09IC0xKXtcblx0XHRcdFx0ZGF0ZSA9IHZpZXdEYXRlLmNsb25lKClcblx0XHRcdFx0XHQubW9udGgoIGN1cnJlbnREYXRlLm1vbnRoKCkgKVxuXHRcdFx0XHRcdC5kYXRlKCBjdXJyZW50RGF0ZS5kYXRlKCkgKVxuXHRcdFx0XHRcdC55ZWFyKCBwYXJzZUludCggdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpLCAxMCApICk7XG5cdFx0XHR9XG5cblx0XHRcdGRhdGUuaG91cnMoIGN1cnJlbnREYXRlLmhvdXJzKCkgKVxuXHRcdFx0XHQubWludXRlcyggY3VycmVudERhdGUubWludXRlcygpIClcblx0XHRcdFx0LnNlY29uZHMoIGN1cnJlbnREYXRlLnNlY29uZHMoKSApXG5cdFx0XHRcdC5taWxsaXNlY29uZHMoIGN1cnJlbnREYXRlLm1pbGxpc2Vjb25kcygpICk7XG5cblx0XHRcdGlmICggIXRoaXMucHJvcHMudmFsdWUgKXtcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7XG5cdFx0XHRcdFx0c2VsZWN0ZWREYXRlOiBkYXRlLFxuXHRcdFx0XHRcdHZpZXdEYXRlOiBkYXRlLmNsb25lKCkuc3RhcnRPZignbW9udGgnKSxcblx0XHRcdFx0XHRpbnB1dFZhbHVlOiBkYXRlLmZvcm1hdCggdGhpcy5zdGF0ZS5pbnB1dEZvcm1hdCApLFxuXHRcdFx0XHRcdG9wZW46ICEodGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0ICYmIGNsb3NlIClcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodGhpcy5wcm9wcy5jbG9zZU9uU2VsZWN0ICYmIGNsb3NlKSB7XG5cdFx0XHRcdFx0dGhpcy5jbG9zZUNhbGVuZGFyKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5wcm9wcy5vbkNoYW5nZSggZGF0ZSApO1xuXHRcdH0sXG5cblx0XHRvcGVuQ2FsZW5kYXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCF0aGlzLnN0YXRlLm9wZW4pIHtcblx0XHRcdFx0dGhpcy5wcm9wcy5vbkZvY3VzKCk7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlIH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjbG9zZUNhbGVuZGFyOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcblx0XHRcdHRoaXMucHJvcHMub25CbHVyKCB0aGlzLnN0YXRlLnNlbGVjdGVkRGF0ZSB8fCB0aGlzLnN0YXRlLmlucHV0VmFsdWUgKTtcblx0XHR9LFxuXG5cdFx0aGFuZGxlQ2xpY2tPdXRzaWRlOiBmdW5jdGlvbigpe1xuXHRcdFx0aWYgKCB0aGlzLnByb3BzLmlucHV0ICYmIHRoaXMuc3RhdGUub3BlbiAmJiAhdGhpcy5wcm9wcy5vcGVuICl7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSB9KTtcblx0XHRcdFx0dGhpcy5wcm9wcy5vbkJsdXIoIHRoaXMuc3RhdGUuc2VsZWN0ZWREYXRlIHx8IHRoaXMuc3RhdGUuaW5wdXRWYWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRsb2NhbE1vbWVudDogZnVuY3Rpb24oIGRhdGUsIGZvcm1hdCApe1xuXHRcdFx0dmFyIG0gPSBtb21lbnQoIGRhdGUsIGZvcm1hdCwgdGhpcy5wcm9wcy5zdHJpY3RQYXJzaW5nICk7XG5cdFx0XHRpZiAoIHRoaXMucHJvcHMubG9jYWxlIClcblx0XHRcdFx0bS5sb2NhbGUoIHRoaXMucHJvcHMubG9jYWxlICk7XG5cdFx0XHRyZXR1cm4gbTtcblx0XHR9LFxuXG5cdFx0Y29tcG9uZW50UHJvcHM6IHtcblx0XHRcdGZyb21Qcm9wczogWyd2YWx1ZScsICdpc1ZhbGlkRGF0ZScsICdyZW5kZXJEYXknLCAncmVuZGVyTW9udGgnLCAncmVuZGVyWWVhcicsICd0aW1lQ29uc3RyYWludHMnXSxcblx0XHRcdGZyb21TdGF0ZTogWyd2aWV3RGF0ZScsICdzZWxlY3RlZERhdGUnLCAndXBkYXRlT24nXSxcblx0XHRcdGZyb21UaGlzOiBbJ3NldERhdGUnLCAnc2V0VGltZScsICdzaG93VmlldycsICdhZGRUaW1lJywgJ3N1YnRyYWN0VGltZScsICd1cGRhdGVTZWxlY3RlZERhdGUnLCAnbG9jYWxNb21lbnQnXVxuXHRcdH0sXG5cblx0XHRnZXRDb21wb25lbnRQcm9wczogZnVuY3Rpb24oKXtcblx0XHRcdHZhciBtZSA9IHRoaXMsXG5cdFx0XHRcdGZvcm1hdHMgPSB0aGlzLmdldEZvcm1hdHMoIHRoaXMucHJvcHMgKSxcblx0XHRcdFx0cHJvcHMgPSB7ZGF0ZUZvcm1hdDogZm9ybWF0cy5kYXRlLCB0aW1lRm9ybWF0OiBmb3JtYXRzLnRpbWV9XG5cdFx0XHQ7XG5cblx0XHRcdHRoaXMuY29tcG9uZW50UHJvcHMuZnJvbVByb3BzLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICl7XG5cdFx0XHRcdHByb3BzWyBuYW1lIF0gPSBtZS5wcm9wc1sgbmFtZSBdO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzLmNvbXBvbmVudFByb3BzLmZyb21TdGF0ZS5mb3JFYWNoKCBmdW5jdGlvbiggbmFtZSApe1xuXHRcdFx0XHRwcm9wc1sgbmFtZSBdID0gbWUuc3RhdGVbIG5hbWUgXTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5jb21wb25lbnRQcm9wcy5mcm9tVGhpcy5mb3JFYWNoKCBmdW5jdGlvbiggbmFtZSApe1xuXHRcdFx0XHRwcm9wc1sgbmFtZSBdID0gbWVbIG5hbWUgXTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gcHJvcHM7XG5cdFx0fSxcblxuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgQ29tcG9uZW50ID0gdGhpcy52aWV3Q29tcG9uZW50c1sgdGhpcy5zdGF0ZS5jdXJyZW50VmlldyBdLFxuXHRcdFx0XHRET00gPSBSZWFjdC5ET00sXG5cdFx0XHRcdGNsYXNzTmFtZSA9ICdyZHQnICsgKHRoaXMucHJvcHMuY2xhc3NOYW1lID9cblx0ICAgICAgICAgICAgICAgICAgKCBBcnJheS5pc0FycmF5KCB0aGlzLnByb3BzLmNsYXNzTmFtZSApID9cblx0ICAgICAgICAgICAgICAgICAgJyAnICsgdGhpcy5wcm9wcy5jbGFzc05hbWUuam9pbiggJyAnICkgOiAnICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSkgOiAnJyksXG5cdFx0XHRcdGNoaWxkcmVuID0gW11cblx0XHRcdDtcblxuXHRcdFx0aWYgKCB0aGlzLnByb3BzLmlucHV0ICl7XG5cdFx0XHRcdGNoaWxkcmVuID0gWyBET00uaW5wdXQoIGFzc2lnbih7XG5cdFx0XHRcdFx0a2V5OiAnaScsXG5cdFx0XHRcdFx0dHlwZTondGV4dCcsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiAnZm9ybS1jb250cm9sJyxcblx0XHRcdFx0XHRvbkZvY3VzOiB0aGlzLm9wZW5DYWxlbmRhcixcblx0XHRcdFx0XHRvbkNoYW5nZTogdGhpcy5vbklucHV0Q2hhbmdlLFxuXHRcdFx0XHRcdG9uS2V5RG93bjogdGhpcy5vbklucHV0S2V5LFxuXHRcdFx0XHRcdHZhbHVlOiB0aGlzLnN0YXRlLmlucHV0VmFsdWVcblx0XHRcdFx0fSwgdGhpcy5wcm9wcy5pbnB1dFByb3BzICkpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsYXNzTmFtZSArPSAnIHJkdFN0YXRpYyc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdGhpcy5zdGF0ZS5vcGVuIClcblx0XHRcdFx0Y2xhc3NOYW1lICs9ICcgcmR0T3Blbic7XG5cblx0XHRcdHJldHVybiBET00uZGl2KHtjbGFzc05hbWU6IGNsYXNzTmFtZX0sIGNoaWxkcmVuLmNvbmNhdChcblx0XHRcdFx0RE9NLmRpdihcblx0XHRcdFx0XHR7IGtleTogJ2R0JywgY2xhc3NOYW1lOiAncmR0UGlja2VyJyB9LFxuXHRcdFx0XHRcdFJlYWN0LmNyZWF0ZUVsZW1lbnQoIENvbXBvbmVudCwgdGhpcy5nZXRDb21wb25lbnRQcm9wcygpKVxuXHRcdFx0XHQpXG5cdFx0XHQpKTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIE1ha2UgbW9tZW50IGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgRGF0ZXRpbWUgY2xhc3Ncblx0RGF0ZXRpbWUubW9tZW50ID0gbW9tZW50O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gRGF0ZXRpbWU7XG5cblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5cdGZ1bmN0aW9uIFRvT2JqZWN0KHZhbCkge1xuXHRcdGlmICh2YWwgPT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gT2JqZWN0KHZhbCk7XG5cdH1cblxuXHRmdW5jdGlvbiBvd25FbnVtZXJhYmxlS2V5cyhvYmopIHtcblx0XHR2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaik7XG5cblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0a2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGtleXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBwcm9wSXNFbnVtZXJhYmxlLmNhbGwob2JqLCBrZXkpO1xuXHRcdH0pO1xuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHRcdHZhciBmcm9tO1xuXHRcdHZhciBrZXlzO1xuXHRcdHZhciB0byA9IFRvT2JqZWN0KHRhcmdldCk7XG5cblx0XHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdFx0ZnJvbSA9IGFyZ3VtZW50c1tzXTtcblx0XHRcdGtleXMgPSBvd25FbnVtZXJhYmxlS2V5cyhPYmplY3QoZnJvbSkpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dG9ba2V5c1tpXV0gPSBmcm9tW2tleXNbaV1dO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0bztcblx0fTtcblxuXG4vKioqLyB9LFxuLyogMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXztcblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpLFxuXHRcdG1vbWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNClcblx0O1xuXG5cdHZhciBET00gPSBSZWFjdC5ET007XG5cdHZhciBEYXRlVGltZVBpY2tlckRheXMgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG5cblx0XHRyZW5kZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGZvb3RlciA9IHRoaXMucmVuZGVyRm9vdGVyKCksXG5cdFx0XHRcdGRhdGUgPSB0aGlzLnByb3BzLnZpZXdEYXRlLFxuXHRcdFx0XHRsb2NhbGUgPSBkYXRlLmxvY2FsZURhdGEoKSxcblx0XHRcdFx0dGFibGVDaGlsZHJlblxuXHRcdFx0O1xuXG5cdFx0XHR0YWJsZUNoaWxkcmVuID0gW1xuXHRcdFx0XHRET00udGhlYWQoeyBrZXk6ICd0aCd9LCBbXG5cdFx0XHRcdFx0RE9NLnRyKHsga2V5OiAnaCd9LCBbXG5cdFx0XHRcdFx0XHRET00udGgoeyBrZXk6ICdwJywgY2xhc3NOYW1lOiAncmR0UHJldicgfSwgRE9NLnNwYW4oe29uQ2xpY2s6IHRoaXMucHJvcHMuc3VidHJhY3RUaW1lKDEsICdtb250aHMnKX0sICfigLknKSksXG5cdFx0XHRcdFx0XHRET00udGgoeyBrZXk6ICdzJywgY2xhc3NOYW1lOiAncmR0U3dpdGNoJywgb25DbGljazogdGhpcy5wcm9wcy5zaG93VmlldygnbW9udGhzJyksIGNvbFNwYW46IDUsICdkYXRhLXZhbHVlJzogdGhpcy5wcm9wcy52aWV3RGF0ZS5tb250aCgpIH0sIGxvY2FsZS5tb250aHMoIGRhdGUgKSArICcgJyArIGRhdGUueWVhcigpICksXG5cdFx0XHRcdFx0XHRET00udGgoeyBrZXk6ICduJywgY2xhc3NOYW1lOiAncmR0TmV4dCcgfSwgRE9NLnNwYW4oe29uQ2xpY2s6IHRoaXMucHJvcHMuYWRkVGltZSgxLCAnbW9udGhzJyl9LCAn4oC6JykpXG5cdFx0XHRcdFx0XSksXG5cdFx0XHRcdFx0RE9NLnRyKHsga2V5OiAnZCd9LCB0aGlzLmdldERheXNPZldlZWsoIGxvY2FsZSApLm1hcCggZnVuY3Rpb24oIGRheSwgaW5kZXggKXsgcmV0dXJuIERPTS50aCh7IGtleTogZGF5ICsgaW5kZXgsIGNsYXNzTmFtZTogJ2Rvdyd9LCBkYXkgKTsgfSkgKVxuXHRcdFx0XHRdKSxcblx0XHRcdFx0RE9NLnRib2R5KHtrZXk6ICd0Yid9LCB0aGlzLnJlbmRlckRheXMoKSlcblx0XHRcdF07XG5cblx0XHRcdGlmICggZm9vdGVyIClcblx0XHRcdFx0dGFibGVDaGlsZHJlbi5wdXNoKCBmb290ZXIgKTtcblxuXHRcdFx0cmV0dXJuIERPTS5kaXYoeyBjbGFzc05hbWU6ICdyZHREYXlzJyB9LFxuXHRcdFx0XHRET00udGFibGUoe30sIHRhYmxlQ2hpbGRyZW4gKVxuXHRcdFx0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogR2V0IGEgbGlzdCBvZiB0aGUgZGF5cyBvZiB0aGUgd2Vla1xuXHRcdCAqIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBsb2NhbGVcblx0XHQgKiBAcmV0dXJuIHthcnJheX0gQSBsaXN0IHdpdGggdGhlIHNob3J0bmFtZSBvZiB0aGUgZGF5c1xuXHRcdCAqL1xuXHRcdGdldERheXNPZldlZWs6IGZ1bmN0aW9uKCBsb2NhbGUgKXtcblx0XHRcdHZhciBkYXlzID0gbG9jYWxlLl93ZWVrZGF5c01pbixcblx0XHRcdFx0Zmlyc3QgPSBsb2NhbGUuZmlyc3REYXlPZldlZWsoKSxcblx0XHRcdFx0ZG93ID0gW10sXG5cdFx0XHRcdGkgPSAwXG5cdFx0XHQ7XG5cblx0XHRcdGRheXMuZm9yRWFjaCggZnVuY3Rpb24oIGRheSApe1xuXHRcdFx0XHRkb3dbICg3ICsgKGkrKykgLSBmaXJzdCkgJSA3IF0gPSBkYXk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGRvdztcblx0XHR9LFxuXG5cdFx0cmVuZGVyRGF5czogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMucHJvcHMudmlld0RhdGUsXG5cdFx0XHRcdHNlbGVjdGVkID0gdGhpcy5wcm9wcy5zZWxlY3RlZERhdGUgJiYgdGhpcy5wcm9wcy5zZWxlY3RlZERhdGUuY2xvbmUoKSxcblx0XHRcdFx0cHJldk1vbnRoID0gZGF0ZS5jbG9uZSgpLnN1YnRyYWN0KCAxLCAnbW9udGhzJyApLFxuXHRcdFx0XHRjdXJyZW50WWVhciA9IGRhdGUueWVhcigpLFxuXHRcdFx0XHRjdXJyZW50TW9udGggPSBkYXRlLm1vbnRoKCksXG5cdFx0XHRcdHdlZWtzID0gW10sXG5cdFx0XHRcdGRheXMgPSBbXSxcblx0XHRcdFx0cmVuZGVyZXIgPSB0aGlzLnByb3BzLnJlbmRlckRheSB8fCB0aGlzLnJlbmRlckRheSxcblx0XHRcdFx0aXNWYWxpZCA9IHRoaXMucHJvcHMuaXNWYWxpZERhdGUgfHwgdGhpcy5pc1ZhbGlkRGF0ZSxcblx0XHRcdFx0Y2xhc3NlcywgZGlzYWJsZWQsIGRheVByb3BzLCBjdXJyZW50RGF0ZVxuXHRcdFx0O1xuXG5cdFx0XHQvLyBHbyB0byB0aGUgbGFzdCB3ZWVrIG9mIHRoZSBwcmV2aW91cyBtb250aFxuXHRcdFx0cHJldk1vbnRoLmRhdGUoIHByZXZNb250aC5kYXlzSW5Nb250aCgpICkuc3RhcnRPZignd2VlaycpO1xuXHRcdFx0dmFyIGxhc3REYXkgPSBwcmV2TW9udGguY2xvbmUoKS5hZGQoNDIsICdkJyk7XG5cblx0XHRcdHdoaWxlICggcHJldk1vbnRoLmlzQmVmb3JlKCBsYXN0RGF5ICkgKXtcblx0XHRcdFx0Y2xhc3NlcyA9ICdyZHREYXknO1xuXHRcdFx0XHRjdXJyZW50RGF0ZSA9IHByZXZNb250aC5jbG9uZSgpO1xuXG5cdFx0XHRcdGlmICggKCBwcmV2TW9udGgueWVhcigpID09PSBjdXJyZW50WWVhciAmJiBwcmV2TW9udGgubW9udGgoKSA8IGN1cnJlbnRNb250aCApIHx8ICggcHJldk1vbnRoLnllYXIoKSA8IGN1cnJlbnRZZWFyICkgKVxuXHRcdFx0XHRcdGNsYXNzZXMgKz0gJyByZHRPbGQnO1xuXHRcdFx0XHRlbHNlIGlmICggKCBwcmV2TW9udGgueWVhcigpID09PSBjdXJyZW50WWVhciAmJiBwcmV2TW9udGgubW9udGgoKSA+IGN1cnJlbnRNb250aCApIHx8ICggcHJldk1vbnRoLnllYXIoKSA+IGN1cnJlbnRZZWFyICkgKVxuXHRcdFx0XHRcdGNsYXNzZXMgKz0gJyByZHROZXcnO1xuXG5cdFx0XHRcdGlmICggc2VsZWN0ZWQgJiYgcHJldk1vbnRoLmlzU2FtZShzZWxlY3RlZCwgJ2RheScpIClcblx0XHRcdFx0XHRjbGFzc2VzICs9ICcgcmR0QWN0aXZlJztcblxuXHRcdFx0XHRpZiAocHJldk1vbnRoLmlzU2FtZShtb21lbnQoKSwgJ2RheScpIClcblx0XHRcdFx0XHRjbGFzc2VzICs9ICcgcmR0VG9kYXknO1xuXG5cdFx0XHRcdGRpc2FibGVkID0gIWlzVmFsaWQoIGN1cnJlbnREYXRlLCBzZWxlY3RlZCApO1xuXHRcdFx0XHRpZiAoIGRpc2FibGVkIClcblx0XHRcdFx0XHRjbGFzc2VzICs9ICcgcmR0RGlzYWJsZWQnO1xuXG5cdFx0XHRcdGRheVByb3BzID0ge1xuXHRcdFx0XHRcdGtleTogcHJldk1vbnRoLmZvcm1hdCgnTV9EJyksXG5cdFx0XHRcdFx0J2RhdGEtdmFsdWUnOiBwcmV2TW9udGguZGF0ZSgpLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogY2xhc3Nlc1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoICFkaXNhYmxlZCApXG5cdFx0XHRcdFx0ZGF5UHJvcHMub25DbGljayA9IHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlO1xuXG5cdFx0XHRcdGRheXMucHVzaCggcmVuZGVyZXIoIGRheVByb3BzLCBjdXJyZW50RGF0ZSwgc2VsZWN0ZWQgKSApO1xuXG5cdFx0XHRcdGlmICggZGF5cy5sZW5ndGggPT09IDcgKXtcblx0XHRcdFx0XHR3ZWVrcy5wdXNoKCBET00udHIoIHtrZXk6IHByZXZNb250aC5mb3JtYXQoJ01fRCcpfSwgZGF5cyApICk7XG5cdFx0XHRcdFx0ZGF5cyA9IFtdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHJldk1vbnRoLmFkZCggMSwgJ2QnICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB3ZWVrcztcblx0XHR9LFxuXG5cdFx0dXBkYXRlU2VsZWN0ZWREYXRlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR0aGlzLnByb3BzLnVwZGF0ZVNlbGVjdGVkRGF0ZShldmVudCwgdHJ1ZSk7XG5cdFx0fSxcblxuXHRcdHJlbmRlckRheTogZnVuY3Rpb24oIHByb3BzLCBjdXJyZW50RGF0ZSApe1xuXHRcdFx0cmV0dXJuIERPTS50ZCggcHJvcHMsIGN1cnJlbnREYXRlLmRhdGUoKSApO1xuXHRcdH0sXG5cblx0XHRyZW5kZXJGb290ZXI6IGZ1bmN0aW9uKCl7XG5cdFx0XHRpZiAoICF0aGlzLnByb3BzLnRpbWVGb3JtYXQgKVxuXHRcdFx0XHRyZXR1cm4gJyc7XG5cblx0XHRcdHZhciBkYXRlID0gdGhpcy5wcm9wcy5zZWxlY3RlZERhdGUgfHwgdGhpcy5wcm9wcy52aWV3RGF0ZTtcblxuXHRcdFx0cmV0dXJuIERPTS50Zm9vdCh7IGtleTogJ3RmJ30sXG5cdFx0XHRcdERPTS50cih7fSxcblx0XHRcdFx0XHRET00udGQoeyBvbkNsaWNrOiB0aGlzLnByb3BzLnNob3dWaWV3KCd0aW1lJyksIGNvbFNwYW46IDcsIGNsYXNzTmFtZTogJ3JkdFRpbWVUb2dnbGUnfSwgZGF0ZS5mb3JtYXQoIHRoaXMucHJvcHMudGltZUZvcm1hdCApKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH0sXG5cdFx0aXNWYWxpZERhdGU6IGZ1bmN0aW9uKCl7IHJldHVybiAxOyB9XG5cdH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gRGF0ZVRpbWVQaWNrZXJEYXlzO1xuXG5cbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfNF9fO1xuXG4vKioqLyB9LFxuLyogNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cblx0dmFyIERPTSA9IFJlYWN0LkRPTTtcblx0dmFyIERhdGVUaW1lUGlja2VyTW9udGhzID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRE9NLmRpdih7IGNsYXNzTmFtZTogJ3JkdE1vbnRocycgfSwgW1xuXHRcdFx0XHRET00udGFibGUoeyBrZXk6ICdhJ30sIERPTS50aGVhZCh7fSwgRE9NLnRyKHt9LCBbXG5cdFx0XHRcdFx0RE9NLnRoKHsga2V5OiAncHJldicsIGNsYXNzTmFtZTogJ3JkdFByZXYnIH0sIERPTS5zcGFuKHtvbkNsaWNrOiB0aGlzLnByb3BzLnN1YnRyYWN0VGltZSgxLCAneWVhcnMnKX0sICfigLknKSksXG5cdFx0XHRcdFx0RE9NLnRoKHsga2V5OiAneWVhcicsIGNsYXNzTmFtZTogJ3JkdFN3aXRjaCcsIG9uQ2xpY2s6IHRoaXMucHJvcHMuc2hvd1ZpZXcoJ3llYXJzJyksIGNvbFNwYW46IDIsICdkYXRhLXZhbHVlJzogdGhpcy5wcm9wcy52aWV3RGF0ZS55ZWFyKCl9LCB0aGlzLnByb3BzLnZpZXdEYXRlLnllYXIoKSApLFxuXHRcdFx0XHRcdERPTS50aCh7IGtleTogJ25leHQnLCBjbGFzc05hbWU6ICdyZHROZXh0JyB9LCBET00uc3Bhbih7b25DbGljazogdGhpcy5wcm9wcy5hZGRUaW1lKDEsICd5ZWFycycpfSwgJ+KAuicpKVxuXHRcdFx0XHRdKSkpLFxuXHRcdFx0XHRET00udGFibGUoeyBrZXk6ICdtb250aHMnfSwgRE9NLnRib2R5KHsga2V5OiAnYid9LCB0aGlzLnJlbmRlck1vbnRocygpKSlcblx0XHRcdF0pO1xuXHRcdH0sXG5cblx0XHRyZW5kZXJNb250aHM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRhdGUgPSB0aGlzLnByb3BzLnNlbGVjdGVkRGF0ZSxcblx0XHRcdFx0bW9udGggPSB0aGlzLnByb3BzLnZpZXdEYXRlLm1vbnRoKCksXG5cdFx0XHRcdHllYXIgPSB0aGlzLnByb3BzLnZpZXdEYXRlLnllYXIoKSxcblx0XHRcdFx0cm93cyA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bW9udGhzID0gW10sXG5cdFx0XHRcdHJlbmRlcmVyID0gdGhpcy5wcm9wcy5yZW5kZXJNb250aCB8fCB0aGlzLnJlbmRlck1vbnRoLFxuXHRcdFx0XHRjbGFzc2VzLCBwcm9wc1xuXHRcdFx0O1xuXG5cdFx0XHR3aGlsZSAoaSA8IDEyKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSAncmR0TW9udGgnO1xuXHRcdFx0XHRpZiAoIGRhdGUgJiYgaSA9PT0gbW9udGggJiYgeWVhciA9PT0gZGF0ZS55ZWFyKCkgKVxuXHRcdFx0XHRcdGNsYXNzZXMgKz0gJyByZHRBY3RpdmUnO1xuXG5cdFx0XHRcdHByb3BzID0ge1xuXHRcdFx0XHRcdGtleTogaSxcblx0XHRcdFx0XHQnZGF0YS12YWx1ZSc6IGksXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzLFxuXHRcdFx0XHRcdG9uQ2xpY2s6IHRoaXMucHJvcHMudXBkYXRlT24gPT09ICdtb250aHMnPyB0aGlzLnVwZGF0ZVNlbGVjdGVkTW9udGggOiB0aGlzLnByb3BzLnNldERhdGUoJ21vbnRoJylcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRtb250aHMucHVzaCggcmVuZGVyZXIoIHByb3BzLCBpLCB5ZWFyLCBkYXRlICYmIGRhdGUuY2xvbmUoKSApKTtcblxuXHRcdFx0XHRpZiAoIG1vbnRocy5sZW5ndGggPT09IDQgKXtcblx0XHRcdFx0XHRyb3dzLnB1c2goIERPTS50cih7IGtleTogbW9udGggKyAnXycgKyByb3dzLmxlbmd0aCB9LCBtb250aHMpICk7XG5cdFx0XHRcdFx0bW9udGhzID0gW107XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpKys7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByb3dzO1xuXHRcdH0sXG5cblx0XHR1cGRhdGVTZWxlY3RlZE1vbnRoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR0aGlzLnByb3BzLnVwZGF0ZVNlbGVjdGVkRGF0ZShldmVudCwgdHJ1ZSk7XG5cdFx0fSxcblxuXHRcdHJlbmRlck1vbnRoOiBmdW5jdGlvbiggcHJvcHMsIG1vbnRoICkge1xuXHRcdFx0dmFyIG1vbnRoc1Nob3J0ID0gdGhpcy5wcm9wcy52aWV3RGF0ZS5sb2NhbGVEYXRhKCkuX21vbnRoc1Nob3J0O1xuXHRcdFx0cmV0dXJuIERPTS50ZCggcHJvcHMsIG1vbnRoc1Nob3J0LnN0YW5kYWxvbmVcblx0XHRcdFx0PyBjYXBpdGFsaXplKCBtb250aHNTaG9ydC5zdGFuZGFsb25lWyBtb250aCBdIClcblx0XHRcdFx0OiBtb250aHNTaG9ydFsgbW9udGggXVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyKSB7XG5cdFx0cmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0gRGF0ZVRpbWVQaWNrZXJNb250aHM7XG5cblxuLyoqKi8gfSxcbi8qIDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG5cdHZhciBET00gPSBSZWFjdC5ET007XG5cdHZhciBEYXRlVGltZVBpY2tlclllYXJzID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgeWVhciA9IHBhcnNlSW50KHRoaXMucHJvcHMudmlld0RhdGUueWVhcigpIC8gMTAsIDEwKSAqIDEwO1xuXG5cdFx0XHRyZXR1cm4gRE9NLmRpdih7IGNsYXNzTmFtZTogJ3JkdFllYXJzJyB9LCBbXG5cdFx0XHRcdERPTS50YWJsZSh7IGtleTogJ2EnfSwgRE9NLnRoZWFkKHt9LCBET00udHIoe30sIFtcblx0XHRcdFx0XHRET00udGgoeyBrZXk6ICdwcmV2JywgY2xhc3NOYW1lOiAncmR0UHJldicgfSwgRE9NLnNwYW4oe29uQ2xpY2s6IHRoaXMucHJvcHMuc3VidHJhY3RUaW1lKDEwLCAneWVhcnMnKX0sICfigLknKSksXG5cdFx0XHRcdFx0RE9NLnRoKHsga2V5OiAneWVhcicsIGNsYXNzTmFtZTogJ3JkdFN3aXRjaCcsIG9uQ2xpY2s6IHRoaXMucHJvcHMuc2hvd1ZpZXcoJ3llYXJzJyksIGNvbFNwYW46IDIgfSwgeWVhciArICctJyArICh5ZWFyICsgOSkgKSxcblx0XHRcdFx0XHRET00udGgoeyBrZXk6ICduZXh0JywgY2xhc3NOYW1lOiAncmR0TmV4dCd9LCBET00uc3Bhbih7b25DbGljazogdGhpcy5wcm9wcy5hZGRUaW1lKDEwLCAneWVhcnMnKX0sICfigLonKSlcblx0XHRcdFx0XHRdKSkpLFxuXHRcdFx0XHRET00udGFibGUoeyBrZXk6ICd5ZWFycyd9LCBET00udGJvZHkoe30sIHRoaXMucmVuZGVyWWVhcnMoIHllYXIgKSkpXG5cdFx0XHRdKTtcblx0XHR9LFxuXG5cdFx0cmVuZGVyWWVhcnM6IGZ1bmN0aW9uKCB5ZWFyICkge1xuXHRcdFx0dmFyIHllYXJzID0gW10sXG5cdFx0XHRcdGkgPSAtMSxcblx0XHRcdFx0cm93cyA9IFtdLFxuXHRcdFx0XHRyZW5kZXJlciA9IHRoaXMucHJvcHMucmVuZGVyWWVhciB8fCB0aGlzLnJlbmRlclllYXIsXG5cdFx0XHRcdHNlbGVjdGVkRGF0ZSA9IHRoaXMucHJvcHMuc2VsZWN0ZWREYXRlLFxuXHRcdFx0XHRjbGFzc2VzLCBwcm9wc1xuXHRcdFx0O1xuXG5cdFx0XHR5ZWFyLS07XG5cdFx0XHR3aGlsZSAoaSA8IDExKSB7XG5cdFx0XHRcdGNsYXNzZXMgPSAncmR0WWVhcic7XG5cdFx0XHRcdGlmICggaSA9PT0gLTEgfCBpID09PSAxMCApXG5cdFx0XHRcdFx0Y2xhc3NlcyArPSAnIHJkdE9sZCc7XG5cdFx0XHRcdGlmICggc2VsZWN0ZWREYXRlICYmIHNlbGVjdGVkRGF0ZS55ZWFyKCkgPT09IHllYXIgKVxuXHRcdFx0XHRcdGNsYXNzZXMgKz0gJyByZHRBY3RpdmUnO1xuXG5cdFx0XHRcdHByb3BzID0ge1xuXHRcdFx0XHRcdGtleTogeWVhcixcblx0XHRcdFx0XHQnZGF0YS12YWx1ZSc6IHllYXIsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lOiBjbGFzc2VzLFxuXHRcdFx0XHRcdG9uQ2xpY2s6IHRoaXMucHJvcHMudXBkYXRlT24gPT09ICd5ZWFycycgPyB0aGlzLnVwZGF0ZVNlbGVjdGVkWWVhciA6IHRoaXMucHJvcHMuc2V0RGF0ZSgneWVhcicpXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0eWVhcnMucHVzaCggcmVuZGVyZXIoIHByb3BzLCB5ZWFyLCBzZWxlY3RlZERhdGUgJiYgc2VsZWN0ZWREYXRlLmNsb25lKCkgKSk7XG5cblx0XHRcdFx0aWYgKCB5ZWFycy5sZW5ndGggPT09IDQgKXtcblx0XHRcdFx0XHRyb3dzLnB1c2goIERPTS50cih7IGtleTogaSB9LCB5ZWFycyApICk7XG5cdFx0XHRcdFx0eWVhcnMgPSBbXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHllYXIrKztcblx0XHRcdFx0aSsrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcm93cztcblx0XHR9LFxuXG5cdFx0dXBkYXRlU2VsZWN0ZWRZZWFyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR0aGlzLnByb3BzLnVwZGF0ZVNlbGVjdGVkRGF0ZShldmVudCwgdHJ1ZSk7XG5cdFx0fSxcblxuXHRcdHJlbmRlclllYXI6IGZ1bmN0aW9uKCBwcm9wcywgeWVhciApe1xuXHRcdFx0cmV0dXJuIERPTS50ZCggcHJvcHMsIHllYXIgKTtcblx0XHR9XG5cdH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gRGF0ZVRpbWVQaWNrZXJZZWFycztcblxuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMiksXG5cdFx0YXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuXHR2YXIgRE9NID0gUmVhY3QuRE9NO1xuXHR2YXIgRGF0ZVRpbWVQaWNrZXJUaW1lID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXHRcdGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKXtcblx0XHRcdHJldHVybiB0aGlzLmNhbGN1bGF0ZVN0YXRlKCB0aGlzLnByb3BzICk7XG5cdFx0fSxcblx0XHRjYWxjdWxhdGVTdGF0ZTogZnVuY3Rpb24oIHByb3BzICl7XG5cdFx0XHR2YXIgZGF0ZSA9IHByb3BzLnNlbGVjdGVkRGF0ZSB8fCBwcm9wcy52aWV3RGF0ZSxcblx0XHRcdFx0Zm9ybWF0ID0gcHJvcHMudGltZUZvcm1hdCxcblx0XHRcdFx0Y291bnRlcnMgPSBbXVxuXHRcdFx0O1xuXG5cdFx0XHRpZiAoIGZvcm1hdC5pbmRleE9mKCdIJykgIT09IC0xIHx8IGZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0xICl7XG5cdFx0XHRcdGNvdW50ZXJzLnB1c2goJ2hvdXJzJyk7XG5cdFx0XHRcdGlmICggZm9ybWF0LmluZGV4T2YoJ20nKSAhPT0gLTEgKXtcblx0XHRcdFx0XHRjb3VudGVycy5wdXNoKCdtaW51dGVzJyk7XG5cdFx0XHRcdFx0aWYgKCBmb3JtYXQuaW5kZXhPZigncycpICE9PSAtMSApe1xuXHRcdFx0XHRcdFx0Y291bnRlcnMucHVzaCgnc2Vjb25kcycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZGF5cGFydCA9IGZhbHNlO1xuXHRcdFx0aWYgKCB0aGlzLnByb3BzLnRpbWVGb3JtYXQuaW5kZXhPZignIEEnKSAhPT0gLTEgICYmIHRoaXMuc3RhdGUgIT09IG51bGwgKXtcblx0XHRcdFx0ZGF5cGFydCA9ICggdGhpcy5zdGF0ZS5ob3VycyA+PSAxMiApID8gJ1BNJyA6ICdBTSc7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGhvdXJzOiBkYXRlLmZvcm1hdCgnSCcpLFxuXHRcdFx0XHRtaW51dGVzOiBkYXRlLmZvcm1hdCgnbW0nKSxcblx0XHRcdFx0c2Vjb25kczogZGF0ZS5mb3JtYXQoJ3NzJyksXG5cdFx0XHRcdG1pbGxpc2Vjb25kczogZGF0ZS5mb3JtYXQoJ1NTUycpLFxuXHRcdFx0XHRkYXlwYXJ0OiBkYXlwYXJ0LFxuXHRcdFx0XHRjb3VudGVyczogY291bnRlcnNcblx0XHRcdH07XG5cdFx0fSxcblx0XHRyZW5kZXJDb3VudGVyOiBmdW5jdGlvbiggdHlwZSApe1xuXHRcdFx0aWYgKHR5cGUgIT09ICdkYXlwYXJ0Jykge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSB0aGlzLnN0YXRlWyB0eXBlIF07XG5cdFx0XHRcdGlmICh0eXBlID09PSAnaG91cnMnICYmIHRoaXMucHJvcHMudGltZUZvcm1hdC5pbmRleE9mKCcgQScpICE9PSAtMSkge1xuXHRcdFx0XHRcdHZhbHVlID0gKHZhbHVlIC0gMSkgJSAxMiArIDE7XG5cblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IDApIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gMTI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBET00uZGl2KHsga2V5OiB0eXBlLCBjbGFzc05hbWU6ICdyZHRDb3VudGVyJ30sIFtcblx0XHRcdFx0XHRET00uc3Bhbih7IGtleTondXAnLCBjbGFzc05hbWU6ICdyZHRCdG4nLCBvbk1vdXNlRG93bjogdGhpcy5vblN0YXJ0Q2xpY2tpbmcoICdpbmNyZWFzZScsIHR5cGUgKSB9LCAn4payJyApLFxuXHRcdFx0XHRcdERPTS5kaXYoeyBrZXk6J2MnLCBjbGFzc05hbWU6ICdyZHRDb3VudCcgfSwgdmFsdWUgKSxcblx0XHRcdFx0XHRET00uc3Bhbih7IGtleTonZG8nLCBjbGFzc05hbWU6ICdyZHRCdG4nLCBvbk1vdXNlRG93bjogdGhpcy5vblN0YXJ0Q2xpY2tpbmcoICdkZWNyZWFzZScsIHR5cGUgKSB9LCAn4pa8JyApXG5cdFx0XHRcdF0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH0sXG5cdFx0cmVuZGVyRGF5UGFydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gRE9NLmRpdih7IGNsYXNzTmFtZTogJ3JkdENvdW50ZXInLCBrZXk6ICdkYXlQYXJ0J30sIFtcblx0XHRcdFx0RE9NLnNwYW4oeyBrZXk6J3VwJywgY2xhc3NOYW1lOiAncmR0QnRuJywgb25Nb3VzZURvd246IHRoaXMub25TdGFydENsaWNraW5nKCAndG9nZ2xlRGF5UGFydCcsICdob3VycycpIH0sICfilrInICksXG5cdFx0XHRcdERPTS5kaXYoeyBrZXk6IHRoaXMuc3RhdGUuZGF5cGFydCwgY2xhc3NOYW1lOiAncmR0Q291bnQnfSwgdGhpcy5zdGF0ZS5kYXlwYXJ0ICksXG5cdFx0XHRcdERPTS5zcGFuKHsga2V5OidkbycsIGNsYXNzTmFtZTogJ3JkdEJ0bicsIG9uTW91c2VEb3duOiB0aGlzLm9uU3RhcnRDbGlja2luZyggJ3RvZ2dsZURheVBhcnQnLCAnaG91cnMnKSB9LCAn4pa8JyApXG5cdFx0XHRdKTtcblx0XHR9LFxuXHRcdHJlbmRlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbWUgPSB0aGlzLFxuXHRcdFx0XHRjb3VudGVycyA9IFtdXG5cdFx0XHQ7XG5cblx0XHRcdHRoaXMuc3RhdGUuY291bnRlcnMuZm9yRWFjaCggZnVuY3Rpb24oYyl7XG5cdFx0XHRcdGlmICggY291bnRlcnMubGVuZ3RoIClcblx0XHRcdFx0XHRjb3VudGVycy5wdXNoKCBET00uZGl2KCB7a2V5OiAnc2VwJyArIGNvdW50ZXJzLmxlbmd0aCwgY2xhc3NOYW1lOiAncmR0Q291bnRlclNlcGFyYXRvcicgfSwgJzonICkpO1xuXHRcdFx0XHRjb3VudGVycy5wdXNoKCBtZS5yZW5kZXJDb3VudGVyKCBjICkgKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5kYXlwYXJ0ICE9PSBmYWxzZSkge1xuXHRcdFx0XHRjb3VudGVycy5wdXNoKCBtZS5yZW5kZXJEYXlQYXJ0KCkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB0aGlzLnN0YXRlLmNvdW50ZXJzLmxlbmd0aCA9PT0gMyAmJiB0aGlzLnByb3BzLnRpbWVGb3JtYXQuaW5kZXhPZignUycpICE9PSAtMSApe1xuXHRcdFx0XHRjb3VudGVycy5wdXNoKCBET00uZGl2KCB7Y2xhc3NOYW1lOiAncmR0Q291bnRlclNlcGFyYXRvcicsIGtleTogJ3NlcDUnIH0sICc6JyApKTtcblx0XHRcdFx0Y291bnRlcnMucHVzaChcblx0XHRcdFx0XHRET00uZGl2KCB7Y2xhc3NOYW1lOiAncmR0Q291bnRlciByZHRNaWxsaScsIGtleTonbSd9LFxuXHRcdFx0XHRcdFx0RE9NLmlucHV0KHsgdmFsdWU6IHRoaXMuc3RhdGUubWlsbGlzZWNvbmRzLCB0eXBlOiAndGV4dCcsIG9uQ2hhbmdlOiB0aGlzLnVwZGF0ZU1pbGxpIH0pXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIERPTS5kaXYoIHtjbGFzc05hbWU6ICdyZHRUaW1lJ30sXG5cdFx0XHRcdERPTS50YWJsZSgge30sIFtcblx0XHRcdFx0XHR0aGlzLnJlbmRlckhlYWRlcigpLFxuXHRcdFx0XHRcdERPTS50Ym9keSh7a2V5OiAnYid9LCBET00udHIoe30sIERPTS50ZCh7fSxcblx0XHRcdFx0XHRcdERPTS5kaXYoeyBjbGFzc05hbWU6ICdyZHRDb3VudGVycycgfSwgY291bnRlcnMgKVxuXHRcdFx0XHRcdCkpKVxuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHR9LFxuXHRcdGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgbWUgPSB0aGlzO1xuXHRcdFx0bWUudGltZUNvbnN0cmFpbnRzID0ge1xuXHRcdFx0XHRob3Vyczoge1xuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDIzLFxuXHRcdFx0XHRcdHN0ZXA6IDFcblx0XHRcdFx0fSxcblx0XHRcdFx0bWludXRlczoge1xuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDU5LFxuXHRcdFx0XHRcdHN0ZXA6IDFcblx0XHRcdFx0fSxcblx0XHRcdFx0c2Vjb25kczoge1xuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDU5LFxuXHRcdFx0XHRcdHN0ZXA6IDEsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1pbGxpc2Vjb25kczoge1xuXHRcdFx0XHRcdG1pbjogMCxcblx0XHRcdFx0XHRtYXg6IDk5OSxcblx0XHRcdFx0XHRzdGVwOiAxXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcycsICdtaWxsaXNlY29uZHMnXS5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUpIHtcblx0XHRcdFx0YXNzaWduKG1lLnRpbWVDb25zdHJhaW50c1t0eXBlXSwgbWUucHJvcHMudGltZUNvbnN0cmFpbnRzW3R5cGVdKTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5zZXRTdGF0ZSggdGhpcy5jYWxjdWxhdGVTdGF0ZSggdGhpcy5wcm9wcyApICk7XG5cdFx0fSxcblx0XHRjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbiggbmV4dFByb3BzICl7XG5cdFx0XHR0aGlzLnNldFN0YXRlKCB0aGlzLmNhbGN1bGF0ZVN0YXRlKCBuZXh0UHJvcHMgKSApO1xuXHRcdH0sXG5cdFx0dXBkYXRlTWlsbGk6IGZ1bmN0aW9uKCBlICl7XG5cdFx0XHR2YXIgbWlsbGkgPSBwYXJzZUludCggZS50YXJnZXQudmFsdWUsIDEwICk7XG5cdFx0XHRpZiAoIG1pbGxpID09PSBlLnRhcmdldC52YWx1ZSAmJiBtaWxsaSA+PSAwICYmIG1pbGxpIDwgMTAwMCApe1xuXHRcdFx0XHR0aGlzLnByb3BzLnNldFRpbWUoICdtaWxsaXNlY29uZHMnLCBtaWxsaSApO1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHsgbWlsbGlzZWNvbmRzOiBtaWxsaSB9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlbmRlckhlYWRlcjogZnVuY3Rpb24oKXtcblx0XHRcdGlmICggIXRoaXMucHJvcHMuZGF0ZUZvcm1hdCApXG5cdFx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0XHR2YXIgZGF0ZSA9IHRoaXMucHJvcHMuc2VsZWN0ZWREYXRlIHx8IHRoaXMucHJvcHMudmlld0RhdGU7XG5cdFx0XHRyZXR1cm4gRE9NLnRoZWFkKHsga2V5OiAnaCd9LCBET00udHIoe30sXG5cdFx0XHRcdERPTS50aCgge2NsYXNzTmFtZTogJ3JkdFN3aXRjaCcsIGNvbFNwYW46IDQsIG9uQ2xpY2s6IHRoaXMucHJvcHMuc2hvd1ZpZXcoJ2RheXMnKX0sIGRhdGUuZm9ybWF0KCB0aGlzLnByb3BzLmRhdGVGb3JtYXQgKSApXG5cdFx0XHQpKTtcblx0XHR9LFxuXHRcdG9uU3RhcnRDbGlja2luZzogZnVuY3Rpb24oIGFjdGlvbiwgdHlwZSApe1xuXHRcdFx0dmFyIG1lID0gdGhpcztcblxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdHZhciB1cGRhdGUgPSB7fTtcblx0XHRcdFx0dXBkYXRlWyB0eXBlIF0gPSBtZVsgYWN0aW9uIF0oIHR5cGUgKTtcblx0XHRcdFx0bWUuc2V0U3RhdGUoIHVwZGF0ZSApO1xuXG5cdFx0XHRcdG1lLnRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRtZS5pbmNyZWFzZVRpbWVyID0gc2V0SW50ZXJ2YWwoIGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHR1cGRhdGVbIHR5cGUgXSA9IG1lWyBhY3Rpb24gXSggdHlwZSApO1xuXHRcdFx0XHRcdFx0bWUuc2V0U3RhdGUoIHVwZGF0ZSApO1xuXHRcdFx0XHRcdH0sIDcwKTtcblx0XHRcdFx0fSwgNTAwKTtcblxuXHRcdFx0XHRtZS5tb3VzZVVwTGlzdGVuZXIgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggbWUudGltZXIgKTtcblx0XHRcdFx0XHRjbGVhckludGVydmFsKCBtZS5pbmNyZWFzZVRpbWVyICk7XG5cdFx0XHRcdFx0bWUucHJvcHMuc2V0VGltZSggdHlwZSwgbWUuc3RhdGVbIHR5cGUgXSApO1xuXHRcdFx0XHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG1lLm1vdXNlVXBMaXN0ZW5lcik7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbWUubW91c2VVcExpc3RlbmVyKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRwYWRWYWx1ZXM6IHtcblx0XHRcdGhvdXJzOiAxLFxuXHRcdFx0bWludXRlczogMixcblx0XHRcdHNlY29uZHM6IDIsXG5cdFx0XHRtaWxsaXNlY29uZHM6IDNcblx0XHR9LFxuXHRcdHRvZ2dsZURheVBhcnQ6IGZ1bmN0aW9uKCB0eXBlICl7IC8vIHR5cGUgaXMgYWx3YXlzICdob3Vycydcblx0XHRcdHZhciB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuc3RhdGVbIHR5cGUgXSwgMTApICsgMTI7XG5cdFx0XHRpZiAoIHZhbHVlID4gdGhpcy50aW1lQ29uc3RyYWludHNbIHR5cGUgXS5tYXggKVxuXHRcdFx0XHR2YWx1ZSA9IHRoaXMudGltZUNvbnN0cmFpbnRzWyB0eXBlIF0ubWluICsgKHZhbHVlIC0gKHRoaXMudGltZUNvbnN0cmFpbnRzWyB0eXBlIF0ubWF4ICsgMSkpO1xuXHRcdFx0cmV0dXJuIHRoaXMucGFkKCB0eXBlLCB2YWx1ZSApO1xuXHRcdH0sXG5cdFx0aW5jcmVhc2U6IGZ1bmN0aW9uKCB0eXBlICl7XG5cdFx0XHR2YXIgdmFsdWUgPSBwYXJzZUludCh0aGlzLnN0YXRlWyB0eXBlIF0sIDEwKSArIHRoaXMudGltZUNvbnN0cmFpbnRzWyB0eXBlIF0uc3RlcDtcblx0XHRcdGlmICggdmFsdWUgPiB0aGlzLnRpbWVDb25zdHJhaW50c1sgdHlwZSBdLm1heCApXG5cdFx0XHRcdHZhbHVlID0gdGhpcy50aW1lQ29uc3RyYWludHNbIHR5cGUgXS5taW4gKyAoIHZhbHVlIC0gKCB0aGlzLnRpbWVDb25zdHJhaW50c1sgdHlwZSBdLm1heCAgKyAxKSApO1xuXHRcdFx0cmV0dXJuIHRoaXMucGFkKCB0eXBlLCB2YWx1ZSApO1xuXHRcdH0sXG5cdFx0ZGVjcmVhc2U6IGZ1bmN0aW9uKCB0eXBlICl7XG5cdFx0XHR2YXIgdmFsdWUgPSBwYXJzZUludCh0aGlzLnN0YXRlWyB0eXBlIF0sIDEwKSAtIHRoaXMudGltZUNvbnN0cmFpbnRzWyB0eXBlIF0uc3RlcDtcblx0XHRcdGlmICggdmFsdWUgPCB0aGlzLnRpbWVDb25zdHJhaW50c1sgdHlwZSBdLm1pbiApXG5cdFx0XHRcdHZhbHVlID0gdGhpcy50aW1lQ29uc3RyYWludHNbIHR5cGUgXS5tYXggKyAxIC0gKCB0aGlzLnRpbWVDb25zdHJhaW50c1sgdHlwZSBdLm1pbiAtIHZhbHVlICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYWQoIHR5cGUsIHZhbHVlICk7XG5cdFx0fSxcblx0XHRwYWQ6IGZ1bmN0aW9uKCB0eXBlLCB2YWx1ZSApe1xuXHRcdFx0dmFyIHN0ciA9IHZhbHVlICsgJyc7XG5cdFx0XHR3aGlsZSAoIHN0ci5sZW5ndGggPCB0aGlzLnBhZFZhbHVlc1sgdHlwZSBdIClcblx0XHRcdFx0c3RyID0gJzAnICsgc3RyO1xuXHRcdFx0cmV0dXJuIHN0cjtcblx0XHR9XG5cdH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gRGF0ZVRpbWVQaWNrZXJUaW1lO1xuXG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0Ly8gVGhpcyBpcyBleHRyYWN0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vUG9tYXgvcmVhY3Qtb25jbGlja291dHNpZGVcblx0Ly8gQW5kIG1vZGlmaWVkIHRvIHN1cHBvcnQgcmVhY3QgMC4xMyBhbmQgcmVhY3QgMC4xNFxuXG5cdHZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMiksXG5cdFx0dmVyc2lvbiA9IFJlYWN0LnZlcnNpb24gJiYgUmVhY3QudmVyc2lvbi5zcGxpdCgnLicpXG5cdDtcblxuXHRpZiAoIHZlcnNpb24gJiYgKCB2ZXJzaW9uWzBdID4gMCB8fCB2ZXJzaW9uWzFdID4gMTMgKSApXG5cdFx0UmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xuXG5cdC8vIFVzZSBhIHBhcmFsbGVsIGFycmF5IGJlY2F1c2Ugd2UgY2FuJ3QgdXNlXG5cdC8vIG9iamVjdHMgYXMga2V5cywgdGhleSBnZXQgdG9TdHJpbmctY29lcmNlZFxuXHR2YXIgcmVnaXN0ZXJlZENvbXBvbmVudHMgPSBbXTtcblx0dmFyIGhhbmRsZXJzID0gW107XG5cblx0dmFyIElHTk9SRV9DTEFTUyA9ICdpZ25vcmUtcmVhY3Qtb25jbGlja291dHNpZGUnO1xuXG5cdHZhciBpc1NvdXJjZUZvdW5kID0gZnVuY3Rpb24oc291cmNlLCBsb2NhbE5vZGUpIHtcblx0IGlmIChzb3VyY2UgPT09IGxvY2FsTm9kZSkge1xuXHQgICByZXR1cm4gdHJ1ZTtcblx0IH1cblx0IC8vIFNWRyA8dXNlLz4gZWxlbWVudHMgZG8gbm90IHRlY2huaWNhbGx5IHJlc2lkZSBpbiB0aGUgcmVuZGVyZWQgRE9NLCBzb1xuXHQgLy8gdGhleSBkbyBub3QgaGF2ZSBjbGFzc0xpc3QgZGlyZWN0bHksIGJ1dCB0aGV5IG9mZmVyIGEgbGluayB0byB0aGVpclxuXHQgLy8gY29ycmVzcG9uZGluZyBlbGVtZW50LCB3aGljaCBjYW4gaGF2ZSBjbGFzc0xpc3QuIFRoaXMgZXh0cmEgY2hlY2sgaXMgZm9yXG5cdCAvLyB0aGF0IGNhc2UuXG5cdCAvLyBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL3N0cnVjdC5odG1sI0ludGVyZmFjZVNWR1VzZUVsZW1lbnRcblx0IC8vIERpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9Qb21heC9yZWFjdC1vbmNsaWNrb3V0c2lkZS9wdWxsLzE3XG5cdCBpZiAoc291cmNlLmNvcnJlc3BvbmRpbmdFbGVtZW50KSB7XG5cdCAgIHJldHVybiBzb3VyY2UuY29ycmVzcG9uZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKElHTk9SRV9DTEFTUyk7XG5cdCB9XG5cdCByZXR1cm4gc291cmNlLmNsYXNzTGlzdC5jb250YWlucyhJR05PUkVfQ0xBU1MpO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuXHQgICBpZiAodHlwZW9mIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlICE9PSAnZnVuY3Rpb24nKVxuXHQgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGxhY2tzIGEgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50KSBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBvdXRzaWRlIGNsaWNrIGV2ZW50cy4nKTtcblxuXHQgICB2YXIgZm4gPSB0aGlzLl9fb3V0c2lkZUNsaWNrSGFuZGxlciA9IChmdW5jdGlvbihsb2NhbE5vZGUsIGV2ZW50SGFuZGxlcikge1xuXHQgICAgIHJldHVybiBmdW5jdGlvbihldnQpIHtcblx0ICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgIHZhciBzb3VyY2UgPSBldnQudGFyZ2V0O1xuXHQgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XG5cdCAgICAgICAvLyBJZiBzb3VyY2U9bG9jYWwgdGhlbiB0aGlzIGV2ZW50IGNhbWUgZnJvbSBcInNvbWV3aGVyZVwiXG5cdCAgICAgICAvLyBpbnNpZGUgYW5kIHNob3VsZCBiZSBpZ25vcmVkLiBXZSBjb3VsZCBoYW5kbGUgdGhpcyB3aXRoXG5cdCAgICAgICAvLyBhIGxheWVyZWQgYXBwcm9hY2gsIHRvbywgYnV0IHRoYXQgcmVxdWlyZXMgZ29pbmcgYmFjayB0b1xuXHQgICAgICAgLy8gdGhpbmtpbmcgaW4gdGVybXMgb2YgRG9tIG5vZGUgbmVzdGluZywgcnVubmluZyBjb3VudGVyXG5cdCAgICAgICAvLyB0byBSZWFjdCdzIFwieW91IHNob3VsZG4ndCBjYXJlIGFib3V0IHRoZSBET01cIiBwaGlsb3NvcGh5LlxuXHQgICAgICAgd2hpbGUgKHNvdXJjZS5wYXJlbnROb2RlKSB7XG5cdCAgICAgICAgIGZvdW5kID0gaXNTb3VyY2VGb3VuZChzb3VyY2UsIGxvY2FsTm9kZSk7XG5cdCAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXHQgICAgICAgICBzb3VyY2UgPSBzb3VyY2UucGFyZW50Tm9kZTtcblx0ICAgICAgIH1cblx0ICAgICAgIGV2ZW50SGFuZGxlcihldnQpO1xuXHQgICAgIH07XG5cdCAgIH0oUmVhY3QuZmluZERPTU5vZGUodGhpcyksIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKSk7XG5cblx0ICAgdmFyIHBvcyA9IHJlZ2lzdGVyZWRDb21wb25lbnRzLmxlbmd0aDtcblx0ICAgcmVnaXN0ZXJlZENvbXBvbmVudHMucHVzaCh0aGlzKTtcblx0ICAgaGFuZGxlcnNbcG9zXSA9IGZuO1xuXG5cdCAgIC8vIElmIHRoZXJlIGlzIGEgdHJ1dGh5IGRpc2FibGVPbkNsaWNrT3V0c2lkZSBwcm9wZXJ0eSBmb3IgdGhpc1xuXHQgICAvLyBjb21wb25lbnQsIGRvbid0IGltbWVkaWF0ZWx5IHN0YXJ0IGxpc3RlbmluZyBmb3Igb3V0c2lkZSBldmVudHMuXG5cdCAgIGlmICghdGhpcy5wcm9wcy5kaXNhYmxlT25DbGlja091dHNpZGUpIHtcblx0ICAgICB0aGlzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlKCk7XG5cdCAgIH1cblx0IH0sXG5cblx0IGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcblx0ICAgdGhpcy5kaXNhYmxlT25DbGlja091dHNpZGUoKTtcblx0ICAgdGhpcy5fX291dHNpZGVDbGlja0hhbmRsZXIgPSBmYWxzZTtcblx0ICAgdmFyIHBvcyA9IHJlZ2lzdGVyZWRDb21wb25lbnRzLmluZGV4T2YodGhpcyk7XG5cdCAgIGlmICggcG9zPi0xKSB7XG5cdCAgICAgaWYgKGhhbmRsZXJzW3Bvc10pIHtcblx0ICAgICAgIC8vIGNsZWFuIHVwIHNvIHdlIGRvbid0IGxlYWsgbWVtb3J5XG5cdCAgICAgICBoYW5kbGVycy5zcGxpY2UocG9zLCAxKTtcblx0ICAgICAgIHJlZ2lzdGVyZWRDb21wb25lbnRzLnNwbGljZShwb3MsIDEpO1xuXHQgICAgIH1cblx0ICAgfVxuXHQgfSxcblxuXHQgLyoqXG5cdCAgKiBDYW4gYmUgY2FsbGVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGV2ZW50IGxpc3RlbmluZ1xuXHQgICogZm9yIGNsaWNrcyBhbmQgdG91Y2hlcyBvdXRzaWRlIG9mIHRoaXMgZWxlbWVudC5cblx0ICAqL1xuXHQgZW5hYmxlT25DbGlja091dHNpZGU6IGZ1bmN0aW9uKCkge1xuXHQgICB2YXIgZm4gPSB0aGlzLl9fb3V0c2lkZUNsaWNrSGFuZGxlcjtcblx0ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZm4pO1xuXHQgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgZm4pO1xuXHQgfSxcblxuXHQgLyoqXG5cdCAgKiBDYW4gYmUgY2FsbGVkIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBldmVudCBsaXN0ZW5pbmdcblx0ICAqIGZvciBjbGlja3MgYW5kIHRvdWNoZXMgb3V0c2lkZSBvZiB0aGlzIGVsZW1lbnQuXG5cdCAgKi9cblx0IGRpc2FibGVPbkNsaWNrT3V0c2lkZTogZnVuY3Rpb24oKSB7XG5cdCAgIHZhciBmbiA9IHRoaXMuX19vdXRzaWRlQ2xpY2tIYW5kbGVyO1xuXHQgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmbik7XG5cdCAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBmbik7XG5cdCB9XG5cdH07XG5cblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV85X187XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjsiXX0=