UNPKG

793 kBJavaScriptView Raw
1module.exports=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=31)}([function(t,e){t.exports=require("react")},function(t,e){t.exports=require("@babel/runtime/helpers/defineProperty")},function(t,e){t.exports=require("@babel/runtime/helpers/getPrototypeOf")},function(t,e){t.exports=require("prop-types")},function(t,e){t.exports=require("@babel/runtime/helpers/createClass")},function(t,e){t.exports=require("@babel/runtime/helpers/classCallCheck")},function(t,e){t.exports=require("@babel/runtime/helpers/possibleConstructorReturn")},function(t,e){t.exports=require("@babel/runtime/helpers/inherits")},function(t,e){t.exports=require("we-edit")},function(t,e){t.exports=require("@babel/runtime/helpers/get")},function(t,e){t.exports=require("@babel/runtime/helpers/assertThisInitialized")},function(t,e){t.exports=require("@babel/runtime/helpers/objectWithoutProperties")},function(t,e){t.exports=require("@babel/runtime/helpers/extends")},function(t,e){t.exports=require("memoize-one")},function(t,e){t.exports=require("@babel/runtime/helpers/slicedToArray")},function(t,e){t.exports=require("recompose")},function(t,e){t.exports=require("@babel/runtime/helpers/construct")},function(t,e){t.exports=require("@babel/runtime/helpers/typeof")},function(t,e){t.exports=require("fontkit")},function(t,e){t.exports=require("is-node")},function(t,e){t.exports=require("react-waypoint")},function(t,e){t.exports=require("@babel/runtime/helpers/objectDestructuringEmpty")},function(t,e){t.exports=require("@babel/runtime/regenerator")},function(t,e){t.exports=require("linebreak")},function(t,e){t.exports=require("fs")},function(t,e){t.exports=require("react-dom")},function(t,e){t.exports=require("svgpath")},function(t,e){t.exports=require("simplify-path")},function(t,e){t.exports=require("svg-path-contours")},function(t,e){t.exports=require("htmlparser2")},function(t,e){t.exports=require("get-system-fonts")},function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"Canvas",(function(){return ht})),n.d(r,"Group",(function(){return ut})),n.d(r,"Text",(function(){return st})),n.d(r,"Image",(function(){return yt})),n.d(r,"Shape",(function(){return mt}));var i={};n.r(i),n.d(i,"default",(function(){return Xt})),n.d(i,"enablify",(function(){return Qt})),n.d(i,"editable",(function(){return Yt})),n.d(i,"Layout",(function(){return qt})),n.d(i,"HasChild",(function(){return R})),n.d(i,"HasParentAndChild",(function(){return N})),n.d(i,"NoChild",(function(){return W})),n.d(i,"ComposedAllTrigger",(function(){return I})),n.d(i,"Recomposable",(function(){return z})),n.d(i,"Locatable",(function(){return G})),n.d(i,"Stoppable",(function(){return Y})),n.d(i,"Continuable",(function(){return Z}));var o={};n.r(o),n.d(o,"SVGMeasure",(function(){return Dr})),n.d(o,"FontMeasure",(function(){return Fr}));var a=n(11),s=n.n(a),c=n(10),u=n.n(c),l=n(1),p=n.n(l),h=n(5),f=n.n(h),d=n(4),y=n.n(d),m=n(6),g=n.n(m),v=n(2),b=n.n(v),w=n(9),x=n.n(w),O=n(7),k=n.n(O),C=n(0),P=n.n(C),E=n(3),j=n.n(E),S=n(19),A=n.n(S),T=n(8),I=function(t){return t.host.onAllChildrenComposed(),null},D=n(13),F=n.n(D);function M(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function L(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?M(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):M(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var R=function(t){var e,n;return t.already?t:(n=e=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"childrenArray",F()((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.props.children;return C.Children.toArray(e)}))),t.computed={composed:[],allComposed:void 0},t.debug&&(t.state={computed:t.computed}),t}return k()(e,t),y()(e,[{key:"getChildContext",value:function(){return L({},x()(b()(e.prototype),"getChildContext",this)?x()(b()(e.prototype),"getChildContext",this).call(this):{},{parent:this})}},{key:"render",value:function(){return P.a.createElement(C.Fragment,null,this.childrenArray(this.props.children),P.a.createElement(I,{host:this}))}},{key:"appendComposed",value:function(t){}},{key:"nextAvailableSpace",value:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]}},{key:"isAllChildrenComposed",value:function(){return this.computed.allComposed}},{key:"onAllChildrenComposed",value:function(){!1!==this.computed.allComposed&&(this.computed.allComposed=!0)}},{key:"notifyNotAllComposed",value:function(t){for(t.computed.allComposed=!1;t=t.context.parent;)t.computed.allComposed=!1}},{key:"createComposed2Parent",value:function(t){return t}},{key:"closest",value:function(t){var e=t;"string"==typeof t&&(e=function(e){return e.getComposeType()==t});for(var n=this;n;){if(e(n))return n;n.context&&(n=n.context.parent)}}},{key:"debug",get:function(){return!!this.context.debug||this.props.debug}}]),e}(t),p()(e,"displayName","composable-".concat(t.displayName)),p()(e,"already",(function(t){return this.displayName.split("-").includes(t)})),p()(e,"contextTypes",L({},t.contextTypes,{debug:j.a.bool,ModelTypes:j.a.object})),p()(e,"childContextTypes",L({},t.childContextTypes||{},{parent:j.a.object})),n)};function _(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var N=function(t){var e,n,r=R(t);return n=e=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"nextAvailableSpace",value:function(){var t;return(t=this.context.parent).nextAvailableSpace.apply(t,arguments)}},{key:"appendComposed",value:function(){return this.context.parent.appendComposed(this.createComposed2Parent.apply(this,arguments))}}]),e}(r),p()(e,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},r.contextTypes,{parent:j.a.object})),n},W=function(t){return function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"isAtomChanged",value:function(t){var e=t.hash,n=t.changed;return void 0===n?e==this.props.hash:n}},{key:"render",value:function(){return this.appendComposed(),this.onAllChildrenComposed(),null}},{key:"isAtom",get:function(){return!0}}]),e}(N(t))},z=function(t){var e=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"childrenNeedRecompose",F()((function(e,n){var r=C.Children.toArray(e.children),i=t.childrenArray(n.children),o=i.findIndex((function(t,e,n,i){var o=t.props,a=o.id,s=o.hash,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r[e];return!(c&&c.props.id==a&&c.props.hash==s)}));return i.slice(o).map((function(t){return t&&t.props.id}))}))),t.computed.lastComposed=[],t}return k()(e,t),y()(e,[{key:"recomposable_createComposed2Parent",value:function(){return x()(b()(e.prototype),"createComposed2Parent",this).apply(this,arguments)}},{key:"createComposed2Parent",value:function(){var t=this.recomposable_createComposed2Parent.apply(this,arguments);return this.computed.lastComposed.push(t),t}},{key:"shouldComponentUpdate",value:function(t){return this.computed.composedUUID=Date.now(),this.isAllChildrenComposed()||(this.computed.allComposed=void 0),!(this.context.shouldContinueCompose&&!this.context.shouldContinueCompose(this))&&(this.cancelUnusableLastComposed.apply(this,arguments),!0)}},{key:"cancelUnusableLastComposed",value:function(t){this.isAtomCollector()&&!this.isAtomChanged.apply(this,arguments)||(this.computed.composed=[],this.computed.lastComposed=[],this.computed.allComposed=void 0)}},{key:"appendLastComposed",value:function(){var t=this;if(this.isAtomCollector())return this.computed.lastComposed.forEach((function(e){return t.context.parent.appendComposed(e)})),!0}},{key:"render",value:function(){if(this.computed.lastComposed.length>0){var t=this.appendLastComposed();if("number"==typeof t&&t>-1)return console.debug("".concat(this.getComposeType(),"[").concat(this.props.id,"] used ").concat(t+1," children caches")),P.a.createElement(C.Fragment,null,this.childrenArray(this.props.children).slice(t+1),P.a.createElement(I,{host:this}));if(!0===t)return console.debug("".concat(this.getComposeType(),"[").concat(this.props.id,"] used all children caches")),null}return console.debug("".concat(this.getComposeType(),"[").concat(this.props.id,"] used 0 children caches")),x()(b()(e.prototype),"render",this).call(this)}},{key:"childIdOf",value:function(t,e){if(function t(n){var r=n.props,i=r["data-content"],o=r.children;return null!=(e=i)||-1!=C.Children.toArray(o).findIndex(t)}(t),-1!=this.childrenArray(this.props.children).findIndex((function(t){return t&&t.props.id==e})))return e}},{key:"isAtomCollector",value:function(){return this.isAtom||this.props.isInlineContainer}}]),e}(t);return p()(e,"displayName","recomposable-".concat(t.displayName)),e};function B(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function U(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?B(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):B(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function q(t){var e,n;return n=e=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).context.mount&&t.props.id&&t.context.mount(u()(t)),t}return k()(e,t),y()(e,[{key:"componentWillUnmount",value:function(){}},{key:"createComposed2Parent",value:function(){var t=x()(b()(e.prototype),"createComposed2Parent",this).apply(this,arguments);return P.a.isValidElement(t)&&this.props.id?P.a.cloneElement(t,{"data-content":this.props.id,"data-type":this.getComposeType()}):t}}]),e}(t),p()(e,"displayName","locatable-".concat(t.displayName)),p()(e,"propTypes",U({},t.propTypes,{id:j.a.oneOfType([j.a.string,j.a.number]).isRequired})),p()(e,"contextTypes",U({},t.contextTypes,{mount:j.a.func,unmount:j.a.func,getComposer:j.a.func})),n}q.Locatorize=function(t){var e,n;return n=e=function(t){function e(){var t;f()(this,e);var n=(t=g()(this,b()(e).apply(this,arguments))).composers=new Map([[t.props.id,u()(t)]]);return t.mount=function(t){return n.set(t.props.id,t)},t.unmount=function(t){n.get(t.props.id)==t&&n.delete(t.props.id)},t.getComposer=function(t){return n.get(t)},t}return k()(e,t),y()(e,[{key:"getChildContext",value:function(){var t=this.mount,n=this.unmount,r=this.getComposer;return U({},x()(b()(e.prototype),"getChildContext",this).call(this),{mount:t,unmount:n,getComposer:r})}}]),e}(t),p()(e,"displayName","locator-".concat(t.displayName)),p()(e,"childContextTypes",U({},t.childContextTypes,{mount:j.a.func,unmount:j.a.func,getComposer:j.a.func})),n};var G=q;function H(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function X(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?H(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):H(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Y=function(t){var e,n,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return n=e=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){return this.context.shouldContinueCompose&&(r||this.props.stoppable)&&!this.context.shouldContinueCompose(this)?(console.debug("".concat(this.getComposeType(),"[").concat(this.props.id,"] skip composed")),null):x()(b()(e.prototype),"render",this).call(this)}}]),e}(t),p()(e,"displayName","stoppable-".concat(t.displayName)),p()(e,"contextTypes",X({},t.contextTypes,{shouldContinueCompose:j.a.func})),n};function Q(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function V(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Q(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Q(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var K,J,Z=function(t){var e,n;return n=e=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getChildContext",value:function(){return V({},x()(b()(e.prototype),"getChildContext",this).call(this),{shouldContinueCompose:this.shouldContinueCompose.bind(this)})}},{key:"shouldContinueCompose",value:function(t){throw new Error("shouldContinueCompose must be implemented, and notifyNotAllComposed when false")}}]),e}(t),p()(e,"displayName","continuable-".concat(t.displayName)),p()(e,"childContextTypes",V({},t.childContextTypes,{shouldContinueCompose:j.a.func})),n},$=n(16),tt=n.n($),et=n(14),nt=n.n(et),rt=n(12),it=n.n(rt),ot=n(20),at=n.n(ot),st=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=(t.whiteSpace,t.color),r=t.highlight,i=t.border,o=t.underline,a=t.strike,c=t.descent,u=(t.minWidth,t.height),l=t.width,p=(t.blockOffset,t.mergeOpportunity,t.y),h=s()(t,["children","whiteSpace","color","highlight","border","underline","strike","descent","minWidth","height","width","blockOffset","mergeOpportunity","y"]),f=null;if(r||i){var d={width:Math.ceil(l),height:Math.ceil(u),fill:r||"none",x:0,y:p-u+c};i&&(d.stroke="black",d.strokeWidth=.5),f=P.a.createElement("rect",d)}var y=null;if(o){var m=Math.ceil(c/2),g=function(t){switch(o){case"double":return 1;default:return.5}}();y=P.a.createElement("line",{y1:m,x2:l,y2:m,stroke:"black",strokeWidth:g})}var v=null;if(a){var b=-c;v=P.a.createElement("line",{y1:b,x2:l,y2:b,stroke:"black",strokeWidth:.5})}return P.a.createElement(C.Fragment,null,f,v,y,P.a.createElement("text",it()({style:{userSelect:"none",whiteSpace:"pre",cursor:"text"},y:p||0},h,{fill:n}),e))}}]),e}(C.PureComponent);p()(st,"Dynamic",(function(t){var e=t.children,n=s()(t,["children"]);return P.a.createElement(st,it()({},n,{children:e()}))}));var ct=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.active,n=void 0===e||e,r=t.children;return n?P.a.createElement(ut,null,r):P.a.createElement(ut,{style:{opacity:.4},onDoubleClick:function(t){return t}},r)}}]),e}(C.Component);p()(ct,"displayName","layer"),p()(ct,"propTypes",{z:j.a.number,active:j.a.bool}),p()(ct,"Container",Object(T.whenSelectionChange)((function(t){var e=t.selection;if(!e)return{};var n=e.props("page");return{active:n?n.layer:void 0}}))((J=K=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){if(!this.context.editable)return P.a.createElement(C.Fragment,null,this.props.children);var t=this.props.active,e=C.Children.toArray(this.props.children).filter((function(t){return!!t})).sort((function(t,e){var n=t.props,r=e.props;return n.z-r.z}));return P.a.createElement(C.Fragment,null,[].concat(e.filter((function(e){return e.props.z!=t})).map((function(t){return P.a.cloneElement(t,{active:!1})})),[e.find((function(e){return e.props.z==t}))]).filter((function(t){return!!t})))}}]),e}(C.Component),p()(K,"contextTypes",{editable:j.a.any}),J)));var ut=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.innerRef,n=t.rotate,r=t.x,i=void 0===r?0:r,o=t.y,a=void 0===o?0:o,c=t.children,u=t.background,l=(t.margin,t.minWidth,t.width),p=t.height,h=(t.index,t.childIndex,t.geometry,t.baseline,t.lineDescent,t.isLastRankOfRow,t.isFirstRowInPage,t.contentWidth,t.wrap,t.pagination,t.anchor,t.blockOffset,t.named,t.descent,t.mergeOpportunity,t.spaceHeight,t.editable,t.dispatch,t.I,s()(t,["innerRef","rotate","x","y","children","background","margin","minWidth","width","height","index","childIndex","geometry","baseline","lineDescent","isLastRankOfRow","isFirstRowInPage","contentWidth","wrap","pagination","anchor","blockOffset","named","descent","mergeOpportunity","spaceHeight","editable","dispatch","I"])),f={};e&&(f.ref=e);var d="";(i||a)&&(d="translate(".concat(parseInt(i||0)," ").concat(parseInt(a||0),")")),n&&(d="".concat(d," rotate(").concat(n,")")),d.length>0&&(f.transform=d);var y=[u&&"transparent"!=u&&P.a.createElement("rect",{width:l,height:p,fill:u,key:"background"})].concat(C.Children.toArray(c).map((function(t,e){return P.a.cloneElement(t,{key:e})}))).filter((function(t){return t}));if(this.context.debug)return P.a.createElement("g",it()({},h,f),y);var m=Object.keys(f);if(0==m.length)return P.a.createElement(C.Fragment,null,y);if(1==y.length&&1==m.length&&"transform"==m[0]&&!n){var g=y[0],v=g.props,b=v.x,w=void 0===b?0:b,x=v.y,O=void 0===x?0:x;switch(g.type){case st:case this.constructor:return P.a.cloneElement(y[0],{x:w+i,y:O+a})}}return P.a.createElement("g",f,y)}}]),e}(C.Component);function lt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function pt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?lt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):lt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(ut,"propTypes",{width:j.a.number,height:j.a.number,x:j.a.number,y:j.a.number,z:j.a.number}),p()(ut,"contextTypes",{debug:j.a.bool}),p()(ut,"Layer",ct),p()(ut,"Layers",ct.Container);var ht=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getComposed",F()((function(t,e){var n=t.map((function(t){return t.createComposed2Parent()}));return n.reduce((function(t,n){var r=n.props,i=r.width,o=r.height;return Object.assign(t,{width:Math.max(t.width,i),height:t.height+o+e})}),{width:0,height:e,composed:n})}))),t.state={},t}return k()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t){var e=t.document,n=s()(t,["document"]),r=e.pages,i=e.props,o=i.scale,a=void 0===o?n.scale:o,c=i.pageGap,u=void 0===c?n.pageGap:c,l=i.precision;return{pages:r,precision:void 0===l?n.precision:l,scale:a,pageGap:u}}}]),y()(e,[{key:"render",value:function(){var t=this.state,e=t.pages,n=t.pageGap,r=t.scale,i=t.precision,o=void 0===i?1:i,a=this.props,c=a.style,u=a.children,l=a.innerRef,p=(a.document,a.pages,a.pageGap,a.scale,a.precision,a.paper,a.__sequentialCompose,s()(a,["style","children","innerRef","document","pages","pageGap","scale","precision","paper","__sequentialCompose"])),h=this.getComposed(e,n),f=h.width,d=h.height,y=h.composed;return P.a.createElement("svg",it()({},p,{ref:l,preserveAspectRatio:"xMidYMin",viewBox:"0 0 ".concat(f," ").concat(d),style:pt({background:"transparent",width:f*r*o,height:d*r*o},c)}),this.positionPages(y,f),u)}},{key:"positionPages",value:function(t,e){var n=this.state,r=n.pageGap,i=n.precision,o=this.props.paper,a=this.context.media;return P.a.createElement(ut,{y:r,x:0},t.reduce((function(t,n){var s=n.props,c=s.width,u=s.height,l=s.margin,p=s.I;return t.push(P.a.createElement("g",{key:p,className:"page",id:"page".concat(p)},P.a.createElement(ut,{y:t.y,x:(e-c)/2},"file"==a?n:P.a.createElement(ft,{children:n,width:c,height:u,margin:l,precision:i,paper:o})))),t.y+=u+r,t}),Object.assign([],{y:0})))}}],[{key:"composedY",value:function(t,e){var n=t[t.length-1];if(!n)return 0;var r=n.context.parent.isAllChildrenComposed()?n.props.height:n.composedHeight;return t.slice(0,t.length-1).reduce((function(t,n){return t+n.props.height+e}),r)}},{key:"pageRect",value:function(t,e){var n=e.querySelector("#page"+t);return n&&n.getBoundingClientRect()}}]),e}(C.Component);p()(ht,"displayName","composed-document-default-canvas"),p()(ht,"contextTypes",{media:j.a.string}),p()(ht,"propTypes",{pages:j.a.arrayOf(j.a.object),pageGap:j.a.number,scale:j.a.number,document:j.a.object}),p()(ht,"defaultProps",{pageGap:24,scale:1});var ft=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"state",{display:!1}),n}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this,e=this.state.display,n=this.props,r=n.children,i=n.width,o=n.height,a=n.margin,s=n.precision,c=n.paper;return P.a.createElement(at.a,{fireOnRapidScroll:!1,onEnter:function(e){t.setState({display:!0})},onLeave:function(e){return t.setState({display:!1})}},P.a.createElement("g",null,c&&P.a.createElement(dt,pt({width:i,height:o,margin:a,fill:"white",precision:s},c)),e?r:null))}}]),e}(C.Component),dt=function(t){var e=t.width,n=t.height,r=t.margin,i=(r=void 0===r?{}:r).left,o=void 0===i?0:i,a=r.right,c=void 0===a?0:a,u=r.top,l=void 0===u?0:u,p=r.bottom,h=void 0===p?0:p,f=t.precision,d=t.border,y=void 0===d||d,m=t.strokeWidth,g=void 0===m?1*f:m,v=t.marginWidth,b=void 0===v?20*f:v,w=s()(t,["width","height","margin","precision","border","strokeWidth","marginWidth"]);return P.a.createElement("g",{className:"paper"},P.a.createElement("rect",it()({},w,{width:e,height:n})),y&&P.a.createElement("path",{strokeWidth:g,stroke:"lightgray",fill:"none",d:"\n\t\t \t\tM0 0 h".concat(e," v").concat(n," h").concat(-e,"z\n\t\t\t\tM").concat(o-Math.min(o,b)," ").concat(l," h").concat(Math.min(o,b)," v").concat(-Math.min(l,b),"\n\t\t\t\tM").concat(o-Math.min(o,b)," ").concat(n-h," h").concat(Math.min(o,b)," v").concat(Math.min(h,b),"\n\t\t\t\tM").concat(e-c+Math.min(c,b)," ").concat(n-h," h").concat(-Math.min(c,b)," v").concat(Math.min(h,b),"\n\t\t\t\tM").concat(e-c+Math.min(c,b)," ").concat(l," h").concat(-Math.min(c,b)," v").concat(-Math.min(l,b),"\n\t\t\t")}))},yt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){return P.a.createElement("image",this.props)}}]),e}(C.PureComponent),mt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){return null}}]),e}(C.Component);function gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function vt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?gt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):gt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var bt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(e.width,e.left,e.right,s()(e,["width","left","right"]));f()(this,t),Object.assign(this,n),this.props=arguments[0]||{}}return y()(t,null,[{key:"create",value:function(e){return e instanceof t?e:tt()(t,Array.prototype.slice.call(arguments))}}]),y()(t,[{key:"clone",value:function(e){return e instanceof t&&(e=e.props),new t(vt({},this.props,{},e,{edges:vt({},this.props.edges,{},e.edges)}))}},{key:"anchor",value:function(t){var e=t.base,n=t.offset,r=void 0===n?0:n,i=t.align,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=o.width,s=void 0===a?0:a,c=o.height,u=void 0===c?0:c,l=this.props.edges;if(!(l&&l[e]&&i in l[e]))return r;var p=l[e],h=(p=void 0===p?{}:p)[i],f=void 0===h?0:h;switch(i){case"right":return f-r-s;case"bottom":return f-r-u;default:return f+r}}},{key:"isInlineSizeDifferent",value:function(t){if(!!this.cols!=!!t.cols)return!0;var e=t.width,n=t.cols;return n?n.length!=this.cols.length||(!!this.cols.find((function(t,e,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:n[e];return t.width!=o.width}))||void 0):e!=this.width}},{key:"equals",value:function(t){return!this.isInlineSizeDifferent(t)&&this.height==t.height}},{key:"width",get:function(){return this.right-this.left}},{key:"left",get:function(){var t=this.props.left;return void 0===t?0:t}},{key:"right",get:function(){var t=this.props,e=t.width,n=t.right;return void 0===n?e:n}}]),t}();function wt(t,e){this.set(t,e)}function xt(t,e,n,r){this.left=t,this.top=e,this.right=t+n,this.bottom=e+r}wt.prototype={clone:function(){return new wt(this.x,this.y)},set:function(t,e){return this.x=t,this.y=e,this},equals:function(t,e){return this.x==t&&this.y==e},toString:function(){return"("+this.x+","+this.y+")"},map:function(t){return this.x=t.call(this,this.x),this.y=t.call(this,this.y),this},add:function(t,e){return this.x+=t,this.y+=e,this},subtract:function(t,e){return this.x-=t,this.y-=e,this},scale:function(t){return this.x*=t,this.y*=t,this},isZero:function(){return 0==this.x&&0==this.y}},function(){function t(t){return function(e,n){return void 0===n?t.call(this,e.x,e.y):t.call(this,e,n)}}for(var e=0,n=["add","subtract","equals","set"];e<n.length;e++){var r=n[e];wt.prototype[r]=t(wt.prototype[r])}}(),xt.fromRect=function(t){return new xt(t.left,t.top,t.right-t.left,t.bottom-t.top)},xt.prototype={get x(){return this.left},get y(){return this.top},get width(){return this.right-this.left},get height(){return this.bottom-this.top},set x(t){var e=this.left-t;this.left=t,this.right-=e},set y(t){var e=this.top-t;this.top=t,this.bottom-=e},set width(t){this.right=this.left+t},set height(t){this.bottom=this.top+t},isEmpty:function(){return this.left>=this.right||this.top>=this.bottom},setRect:function(t,e,n,r){return this.left=t,this.top=e,this.right=t+n,this.bottom=e+r,this},setBounds:function(t,e,n,r){return this.top=e,this.left=t,this.bottom=r,this.right=n,this},equals:function(t){return null!=t&&(this.isEmpty()&&t.isEmpty()||this.top==t.top&&this.left==t.left&&this.bottom==t.bottom&&this.right==t.right)},clone:function(){return new xt(this.left,this.top,this.right-this.left,this.bottom-this.top)},center:function(){if(this.isEmpty())throw"Empty rectangles do not have centers";return new wt(this.left+(this.right-this.left)/2,this.top+(this.bottom-this.top)/2)},copyFrom:function(t){return this.top=t.top,this.left=t.left,this.bottom=t.bottom,this.right=t.right,this},translate:function(t,e){return this.left+=t,this.right+=t,this.top+=e,this.bottom+=e,this},toString:function(){return"["+this.x+","+this.y+","+this.width+","+this.height+"]"},union:function(t){return this.clone().expandToContain(t)},contains:function(t){return!!t.isEmpty()||!this.isEmpty()&&(t.left>=this.left&&t.right<=this.right&&t.top>=this.top&&t.bottom<=this.bottom)},intersect:function(t){return this.clone().restrictTo(t)},intersects:function(t){if(this.isEmpty()||t.isEmpty())return!1;var e=Math.max(this.left,t.left),n=Math.min(this.right,t.right),r=Math.max(this.top,t.top),i=Math.min(this.bottom,t.bottom);return e<n&&r<i},restrictTo:function(t){if(this.isEmpty()||t.isEmpty())return this.setRect(0,0,0,0);var e=Math.max(this.left,t.left),n=Math.min(this.right,t.right),r=Math.max(this.top,t.top),i=Math.min(this.bottom,t.bottom);return this.setRect(e,r,Math.max(0,n-e),Math.max(0,i-r))},expandToContain:function(t){if(this.isEmpty())return this.copyFrom(t);if(t.isEmpty())return this;var e=Math.min(this.left,t.left),n=Math.max(this.right,t.right),r=Math.min(this.top,t.top),i=Math.max(this.bottom,t.bottom);return this.setRect(e,r,n-e,i-r)},expandToIntegers:function(){return this.left=Math.floor(this.left),this.top=Math.floor(this.top),this.right=Math.ceil(this.right),this.bottom=Math.ceil(this.bottom),this},scale:function(t,e){return this.left*=t,this.right*=t,this.top*=e,this.bottom*=e,this},map:function(t){return this.left=t.call(this,this.left),this.top=t.call(this,this.top),this.right=t.call(this,this.right),this.bottom=t.call(this,this.bottom),this},translateInside:function(t){var e=0;this.left<=t.left?e=t.left-this.left:this.right>t.right&&(e=t.right-this.right);var n=0;return this.top<=t.top?n=t.top-this.top:this.bottom>t.bottom&&(n=t.bottom-this.bottom),this.translate(e,n)},subtract:function(t){var e=new xt(0,0,0,0),n=[];return(t=t.intersect(this)).isEmpty()?[this.clone()]:(e.setBounds(this.left,this.top,t.left,this.bottom),e.isEmpty()||n.push(e.clone()),e.setBounds(t.left,this.top,t.right,t.top),e.isEmpty()||n.push(e.clone()),e.setBounds(t.left,t.bottom,t.right,this.bottom),e.isEmpty()||n.push(e.clone()),e.setBounds(t.right,this.top,this.right,this.bottom),e.isEmpty()||n.push(e.clone()),n)},blend:function(t,e){return new xt(this.left+(t.left-this.left)*e,this.top+(t.top-this.top)*e,this.width+(t.width-this.width)*e,this.height+(t.height-this.height)*e)},inflate:function(t,e){var n=(this.width*t-this.width)/2,r=arguments.length>1?e:t,i=(this.height*r-this.height)/2;return this.left-=n,this.right+=n,this.top-=i,this.bottom+=i,this},inflateFixed:function(t){return this.left-=t,this.right+=t,this.top-=t,this.bottom+=t,this}};var Ot=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).computed.anchors=[],t.defineProperties(),t}return k()(e,t),y()(e,[{key:"defineProperties",value:function(){Object.defineProperties(this,{firstLine:{enumerable:!0,configurable:!0,get:function(){return this.lines[0]}},lastLine:{enumerable:!0,configurable:!0,get:function(){var t=this.lines;return t[t.length-1]}},lines:{enumerable:!0,configurable:!0,get:function(){return this.computed.composed},set:function(t){this.computed.composed=t}},totalLines:{enumerable:!0,configurable:!0,get:function(){return this.lines.length}},blockOffset:{enumerable:!1,configurable:!0,get:function(){var t=this.getSpace().blockOffset;return(void 0===t?0:t)+this.contentHeight}},availableBlockSize:{enumerable:!0,configurable:!0,get:function(){var t=this.getSpace().height;return(void 0===t?Number.MAX_SAFE_INTEGER:t)-this.contentHeight}},anchors:{enumerable:!0,configurable:!1,get:function(){return this.computed.anchors},set:function(t){this.computed.anchors=t}},wrappees:{enumerable:!0,configurable:!0,get:function(){return this.anchors.filter((function(t){return!!t.props.wrap}))}},contentHeight:{enumerable:!0,configurable:!0,get:function(){return this.lines.reduce((function(t,e){var n=e.props.height;return(void 0===n?0:n)+t}),0)}}})}},{key:"onAllChildrenComposed",value:function(){var t=this.createComposed2Parent();this.context.parent.appendComposed(t),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"appendComposed",value:function(t){null!=t.props.y?this.anchors.push(t):this.lines.push(t)}},{key:"getSpace",value:function(){return this.props.space}},{key:"positionLines",value:function(t){var e=0,n=t.map((function(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t,a=o.props.height,s=void 0===a?0:a,c=P.a.cloneElement(t,{key:n,y:e});return e+=s,c}));return P.a.createElement(ut,{height:e},n)}},{key:"nextAvailableSpace",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.height,r=void 0===n?1:n,i=this.props.allowOverflow,o=void 0!==i&&i;if(this.isEmpty()||this.availableBlockSize>=r){var a=this.getSpace();return bt.create(a||{}).clone({blockOffset:this.blockOffset,height:o?Number.MAX_SAFE_INTEGER:this.availableBlockSize,frame:this,findInlineSegments:function(e,n,r){for(var i=t.blockOffset,o=t.exclusive(i,i+e,n,r),a=0;"number"==typeof o;)a=o,o=t.exclusive(a,a+e,n,r);var s=t.nextAvailableSpace({height:a-i+e});return s?{top:a,segments:o.reduce((function(t,e){var n=e.x,i=e.width,o=t.splice(-1),a=nt()(o,1)[0];return[].concat(t,[{x:a.x,width:n-a.x},{x:n+i,width:r-n-i}])}),[{x:n,width:r-n}])}:s},isAnchored:function(e){return t.isAnchored(e)}})}return!1}},{key:"exclusive",value:function(t,e,n,r){var i={x1:n,x2:r,y1:t,y2:e},o=this.wrappees.reduce((function(t,e){var n=(0,e.props.wrap)(i);return t.splice.apply(t,[t.length,0].concat(Array.isArray(n)?n:[n])),t}),[]).filter((function(t){return!!t})).filter((function(t){return t.width>0})).sort((function(t,e){return t.x-e.x})),a=o.filter((function(t){return"clear"==t.type}));return a.length>0?Math.max.apply(Math,a.map((function(t){return t.y}))):(o.length>1&&(o.forEach((function(t){return t.x2=t.x+t.width})),(o=o.reduce((function(t,e){var n=t[t.length-1];return e.x2>n.x2&&(e.x>n.x2?t.push(e):(n.x2=e.x2,n.width=n.x2-n.x)),t}),[o[0]])).forEach((function(t){return delete t.x2}))),o)}},{key:"recompose",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(t){return t};if(this.recompose.deadLoop||(this.recompose.deadLoop=1),++this.recompose.deadLoop,this.isEmpty())return e([],[]),function(t){return t};var n=[].concat(this.lines),r=[].concat(this.anchors),i=this.cols?[].concat(this.columns):void 0,o=function(){t.lines=n,t.anchors=r,i&&(t.columns=i)};try{this.lines=[],this.anchors=[],this.columns=[];var a=[].concat(n);this.computed.recomposing=e(a,[].concat(r));for(var s,c=function(t){return new T.ReactQuery(t).findFirst('[data-type="paragraph"]').attr("data-content")},u=null,l=[],p=0;p<a.length;p++){var h=c(s=a[p]);if(h){if(u){if(h!==u){this.context.getComposer(u).recommit(l),u=h,l=[s];continue}l.push(s);continue}u=h,l.push(s)}else u&&(this.context.getComposer(u).recommit(l),u=null,l=[]),this.appendComposed(s)}u&&this.context.getComposer(u).recommit(l)}catch(t){console.error(t)}finally{return delete this.computed.recomposing,o}}},{key:"rollbackLines",value:function(t){return 0==t?[]:this.lines.splice(-t)}},{key:"isEmpty",value:function(){return this.lines.length+this.anchors.length==0}},{key:"isAnchored",value:function(t){return!!this.anchors.find((function(e){return 1==new T.ReactQuery(e).findFirst('[data-content="'.concat(t,'"]')).length}))}},{key:"_isIntersect",value:function(t,e){return new xt(t.x,t.y,t.width,t.height).intersects(new xt(e.x,e.y,e.width,e.height))}}]),e}(N(T.dom.Container));p()(Ot,"IMMEDIATE_STOP",Number.MAX_SAFE_INTEGER),p()(Ot,"propTypes",{balance:j.a.oneOfType([j.a.bool,j.a.func]),balanceThreshold:j.a.number,space:j.a.shape({left:j.a.number,right:j.a.number,blockOffset:j.a.number,height:j.a.number,wrappees:j.a.arrayOf(j.a.object)}),cols:j.a.arrayOf(j.a.shape({x:j.a.number,y:j.a.number,width:j.a.number,height:j.a.number})),inheritExclusives:j.a.bool,allowOverflow:j.a.bool});var kt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"appendComposed",value:function(t){var n=this,r=t.props,i=r.anchor,o=r.y,a=r.height,s=void 0===a?0:a;if(null!=o)return x()(b()(e.prototype),"appendComposed",this).call(this,t);var c=this.nextAvailableSpace({height:s});if(0==c)return!!this.computed.recomposing&&this.constructor.IMMEDIATE_STOP;var u=function(t,e){return 1==new T.ReactQuery(e).findFirst('[data-anchor="'.concat(t,"]")).length};if(!i)return this.computed.recomposing&&u(this.computed.recomposing,t)?(x()(b()(e.prototype),"appendComposed",this).apply(this,arguments),this.constructor.IMMEDIATE_STOP):x()(b()(e.prototype),"appendComposed",this).apply(this,arguments);var l,p,h,f=i(c.clone({edges:{paragraph:{top:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.lines.find((function(e){return e.props.pagination.id==t}));return n.lineXY(e).y}(t.props.pagination.id)},line:{top:c.blockOffset},character:{left:c.left+(l=new T.ReactQuery(t).findFirstAndParents("[data-anchor]"),p=l.first,h=l.parents,[].concat(h,[p.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0))}}})),d=f.props,y=d.wrap,m=d.geometry,g=d["data-content"];if(!y||!this.__isDirtyIn(m))return x()(b()(e.prototype),"appendComposed",this).call(this,f),1;var v=this.recompose((function(r,i){return n.anchors=i,x()(b()(e.prototype),"appendComposed",n).call(n,f),r.push(t),g}));return u(g,this.lines[this.lines.length-1])?(this.lines.pop(),1):(v(),!1)}},{key:"rollbackLines",value:function(){var t,n=this,r=x()(b()(e.prototype),"rollbackLines",this).apply(this,arguments),i=(t=r.map((function(t){return e=t,new T.ReactQuery(e).find("[data-anchor]").toArray().map((function(t){return t.props["data-anchor"]}));var e})).flat(),n.anchors.filter((function(e){return t.includes(function(t){return new T.ReactQuery(t).findFirst('[data-type="anchor"]').attr("data-content")}(e))})).map((function(t){return n.anchors.splice(n.anchors.indexOf(t),1)[0]}))),o=this.blockOffset,a=this.wrappees.filter((function(t){return i.includes(t)})).filter((function(t){var e=t.props.geometry,n=e.y,r=void 0===n?0:n,i=e.height;return r+(void 0===i?0:i)<o}));return a.length>0&&this.recompose(),Object.assign(r,{anchors:i})}},{key:"__isDirtyIn",value:function(t){var e=this,n=function(t,e){return new xt(t.x,t.y,t.width,t.height).intersects(new xt(e.x,e.y,e.width,e.height))};return!!this.wrappees.find((function(e){var r=e.props,i=r.x,o=r.y,a=r.width,s=r.height;return n(t,{x:i,y:o,width:a,height:s})}))||(!!n(t,{x:0,y:0,width:this.props.width,height:this.blockOffset})||!!this.cols&&!!this.columns.filter((function(t){return t!=e.currentColumn})).find((function(e){var r=e.x,i=void 0===r?0:r,o=e.y,a=void 0===o?0:o,s=e.width,c=e.blockOffset;return n(t,{x:i,y:a,width:s,height:c})})))}}]),e}(Ot);function Ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var Pt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{prev:{enumerable:!1,configurable:!0,get:function(){var t=this.context,e=t.parent,n=t.prevLayout;return(n=n||e&&e.context&&e.context.prevLayout||function(t){return null})(this)}}})}},{key:"orphanCount",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lastLine,e=Et(t,'[data-type="paragraph"]');if(!e)return 0;var n=this.lines,r=n.findLastIndex((function(t){return Et(t)!==e}));return-1==r?n.length:r+1}},{key:"appendComposed",value:function(t){if(this.isEmpty()&&this.prev){var n=t.props.pagination,r=void 0===n?{}:n,i=r.widow,o=r.orphan,a=r.keepLines,s=r.last;if(a){if(this.prev.shouldKeepLinesWith(t)){var c=this.prev.orphanCount();return this.prev.rollbackLines(c),c+1}}else{if(o&&1==this.prev.orphanCount(t)&&this.prev.lines.length>1)return this.prev.rollbackLines(1),2;if(i&&s){var u=this.prev.orphanCount(t);if(u>0&&this.prev.lines.length>u)return this.prev.rollbackLines(1),o&&2==u?(this.prev.rollbackLines(1),3):2}}if(this.prev.shouldKeepWithNext(t)){var l=this.prev.rollbackLines(this.prev.orphanCount()),p=Et(l[0]);return this.context.getComposer(p).recommit(),1}}return x()(b()(e.prototype),"appendComposed",this).apply(this,arguments)}},{key:"shouldKeepLinesWith",value:function(t){var e=Et(t);return Et(this.lastLine)==e&&Et(this.firstLine)!=e}},{key:"shouldKeepWithNext",value:function(t){return(this.lastLine.props.pagination||{}).keepWithNext&&0==this.orphanCount(t)&&Et(this.firstLine)!==Et(this.lastLine)}}]),e}(kt);p()(Pt,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ct(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ct(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},kt.contextTypes,{prevLayout:j.a.func})),p()(Pt,"Fixed",Pt);var Et=function(t){return new ReactQuery(t).findFirst('[data-type="paragraph"]').attr("data-content")};function jt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function St(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?jt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):jt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var At=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),this.props.cols&&(this.computed.columns=[],Object.defineProperties(this,{blockOffset:{enumerable:!1,configurable:!0,get:function(){return this.currentColumn.blockOffset}},availableBlockSize:{enumerable:!0,configurable:!0,get:function(){return this.currentColumn.availableBlockSize}},contentHeight:{enumerable:!1,configurable:!0,get:function(){return Math.max.apply(Math,this.columns.map((function(t){return t.height})))}},currentColumn:{enumerable:!0,configurable:!0,get:function(){var t=this.columns;return 0==t.length&&this.createColumn(),t[t.length-1]}},cols:{enumerable:!0,configurable:!0,get:function(){return this.props.cols}},columns:{enumerable:!0,configurable:!0,get:function(){return this.computed.columns},set:function(t){return this.computed.columns=t}}}))}},{key:"createColumn",value:function(){var t=St({},this.cols[this.columns.length],{lines:Tt.create.apply(Tt,[this].concat(Array.prototype.slice.call(arguments))),get isEmpty(){return 0==this.lines.length},get availableBlockSize(){var t=this.maxHeight,e=void 0===t?Number.MAX_SAFE_INTEGER:t,n=this.height,r=void 0===n?e:n,i=this.y,o=void 0===i?0:i;return r-(this.blockOffset-o)},get blockOffset(){var t=this.y;return(void 0===t?0:t)+this.contentHeight},get contentHeight(){return this.lines.reduce((function(t,e){var n=e.props.height;return(void 0===n?0:n)+t}),0)}});return this.columns.push(t),t}},{key:"getSpace",value:function(t){var n=x()(b()(e.prototype),"getSpace",this).apply(this,arguments);if(!this.cols)return n;n||(n=bt.create({}));var r=n,i=r.left,o=void 0===i?0:i,a=r.right,s=void 0===a?0:a,c=r.blockOffset,u=void 0===c?0:c,l=r.height,p=t||this.currentColumn,h=p.width,f=void 0===h?s-o:h,d=p.x,y=void 0===d?o:d,m=p.height,g=void 0===m?l:m,v=p.y,w=void 0===v?u:v;return n.clone({left:y,right:y+f,blockOffset:w,height:g,edges:{column:{left:y,top:w,right:y+f,bottom:w+g}}})}},{key:"nextAvailableSpace",value:function(){var t=x()(b()(e.prototype),"nextAvailableSpace",this).apply(this,arguments);if(0==t&&this.cols){if(this.currentColumn.isEmpty)return x()(b()(e.prototype),"nextAvailableSpace",this).call(this);var n=this.cols.length>this.columns.length;if(n)return this.createColumn(),x()(b()(e.prototype),"nextAvailableSpace",this).call(this)}return t}},{key:"positionLines",value:function(){var t=this;if(!this.cols)return x()(b()(e.prototype),"positionLines",this).apply(this,arguments);var n=Math.max.apply(Math,this.columns.map((function(t){var e=t.contentHeight,n=t.height;return void 0===n?e:n})));return P.a.createElement(ut,{height:n},this.columns.map((function(n,r){var i=n.x,o=n.y,a=n.width,s=n.contentHeight,c=n.height,u=void 0===c?s:c,l=n.lines;return P.a.cloneElement(x()(b()(e.prototype),"positionLines",t).call(t,l),{x:i,y:o,width:a,height:u,key:r})})))}},{key:"rollbackLines",value:function(){var t=x()(b()(e.prototype),"rollbackLines",this).apply(this,arguments);if(this.cols&&this.columns.length>1){var n=this.lines.length-1,r=this.columns.findIndex((function(t){return t.lines.startIndex>n}));-1!=r&&this.columns.splice(r)}return t}}]),e}(Pt),Tt=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.computed.composed.length;f()(this,t),this.frame=e,this.startIndex=n}return y()(t,[{key:"unsupport",value:function(t){console.error(t)}},{key:"push",value:function(){var t;(t=this.frame.lines).splice.apply(t,[this.endIndex,0].concat(Array.prototype.slice.call(arguments)))}},{key:"splice",value:function(t,e){throw new Error("not supported")}},{key:"endIndex",get:function(){var t=this,e=this.frame.columns,n=e.findIndex((function(e){return e.lines.target==t})),r=e[n+1];return r?r.lines.startIndex:this.frame.lines.length}},{key:"items",get:function(){return this.frame.lines.slice(this.startIndex,this.endIndex)}},{key:"length",get:function(){return this.endIndex-this.startIndex}}],[{key:"create",value:function(){return new Proxy(tt()(t,Array.prototype.slice.call(arguments)),{get:function(t,e){switch(e){case Symbol.isConcatSpreadable:return!0;case"target":return t;default:if(e in t)return t[e];var n=t.items;if(e in n){var r=n[e];return"function"==typeof r?r.bind(n):r}return function(){return t.unsupport("not supported ColumnChildren[".concat(e,"]"))}}}})}}]),t}(),It=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{balanceable:{get:function(){return this.cols&&this.cols.length>1&&this.props.balance&&this.lines.length>1}}})}},{key:"onAllChildrenComposed",value:function(){this.balanceable&&this.balance(),x()(b()(e.prototype),"onAllChildrenComposed",this).apply(this,arguments)}},{key:"balance",value:function(){var t=this.props.balance;if("function"==typeof t)return t.call(this);var e=this.props.balanceThreshold,n=void 0===e?1:e,r=this.cols[0].width;this.cols.find((function(t){return Math.abs(r-t.width)>n}))?this.anyBalance():this.equalBalance()}},{key:"equalBalance",value:function(){var t=this,e=this.lines.reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),0)/this.cols.length;return this.columns=[],this.lines.reduce((function(t,n,r){var i=n.props.height,o=void 0===i?0:i;return t.h<e?t.h+=o:(t.columns.push(r),t.h=o),t}),{columns:[0],h:0}).columns.slice(0,this.cols.length).forEach((function(e){return t.createColumn(e)}))}},{key:"anyBalance",value:function(){var t=this,e=this.createColumn;try{var n=this.cols.reduce((function(t,e){return t+e.width}),0);this.createColumn=function(){return Object.assign(e.call(t),{width:n,height:Number.MAX_SAFE_INTEGER})},this.recompose();var r=this.blockOffset;this.createColumn=function(){return Object.assign(e.call(t),{height:r})},this.recompose()}finally{delete this.createColumn}}}]),e}(At);function Dt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ft(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Dt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Dt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Mt=function(t){function e(){var t,n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{segments:[]}).segments,r=void 0===n?[]:n;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).segments=r,t}return k()(e,t),y()(e,null,[{key:"create",value:function(t){var n=t.segments,r=void 0===n?[]:n,i=s()(t,["segments"]);return new e(Ft({segments:r.map((function(t){return new Lt(t)}))},i))}}]),y()(e,[{key:"shouldRelayout",value:function(t){var e=t.segments,n=e&&this.segments.length==e.length&&!this.segments.find((function(t,n,r){var i=t.props,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e[n];return!(o&&i.x==o.x&&i.width==o.width)}));return e&&!n}},{key:"relayout",value:function(t){for(var e=this.constructor.create(Ft({},this.props,{},t)),n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];for(var o=[].concat(this.items,r),a=0,s=o.length,c=0,u=e.segments.length;c<u;c++)for(var l=e.segments[c];a<s;a++){var p=o[a];if(!1===l.push(p))break}return!(a<s)&&e}},{key:"push",value:function(){var t=arguments,e=this.segments.findLastIndex((function(t,e){return t.items.length>0||0==e}));return!!this.segments.slice(e).find((function(e){if(!1!==e.push.apply(e,t))return!0}))}},{key:"pushAtomic",value:function(){}},{key:"pushTab",value:function(){}},{key:"pushLinebreak",value:function(){}},{key:"pushHyphen",value:function(){}},{key:"render",value:function(){var t=this.props.left,e=void 0===t?0:t,n=this.segments.reduce((function(t,n,r){var i=t.X,o=t.flat,a=n.items,s=n.props,c=s.x,u=void 0===c?0:c,l=s.width,p=void 0===l?0:l;return a=a.map((function(t){return t.props.height&&!Rt(t)?P.a.cloneElement(t,{y:-t.props.height}):t})),o.splice.apply(o,[o.length,0].concat(i!=u?[P.a.createElement(ut,{x:i-e,width:u-i})].concat(a):a)),{X:u+p,flat:o}}),{flat:[],X:e}).flat;return P.a.createElement(ut,{x:e,children:n})}},{key:"items",get:function(){return this.segments.reduce((function(t,e){return[].concat(t,e.items)}),[])}},{key:"current",get:function(){return this.segments.findLast((function(t,e){return t.items.length>0||0==e}))}},{key:"currentX",get:function(){var t=this.current,e=t.x,n=void 0===e?0:e;return t.items.reduce((function(t,e){var n=e.props.width;return t+(void 0===n?0:n)}),n)}}]),e}(C.Component);p()(Mt,"propTypes",{left:j.a.number,segments:j.a.arrayOf(Lt)});var Lt=function(t){function e(t){var n;t.x,t.width;return f()(this,e),(n=g()(this,b()(e).apply(this,arguments))).items=[],n}return k()(e,t),y()(e,[{key:"push",value:function(t,e){if(e)this.items.push(t);else{var n=t.props,r=n.width,i=void 0===r?0:r,o=n.minWidth,a=void 0===o?i:o;if(!(0==a||this.availableWidth>=a))return!1;this.items.push(t)}}},{key:"render",value:function(){var t=this.props,e=t.x,n=void 0===e?0:e,r=t.width,i=n;return P.a.createElement(ut,{x:n,width:r},this.items.map((function(t){var e=P.a.cloneElement(t,{x:i});return i+=t.props.width||0,!Rt(t)&&t.props.height?P.a.cloneElement(e,{y:-t.props.height}):e})))}},{key:"contentWidth",get:function(){return this.items.reduce((function(t,e){return t+e.props.width}),0)}},{key:"availableWidth",get:function(){return this.props.width-this.contentWidth}}]),e}(C.Component);p()(Lt,"propTypes",{x:j.a.number,width:j.a.number});var Rt=function(t){return void 0!==t.props.descent},_t=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"getMerged",F()((function(t){return P.a.Children.toArray(t).reduce((function(t,e,n){var r=Nt(e);return r.bText?r.join(",")==t.trunkPath?t.trunk.push(e):(t.mergeTrunk(n),t.trunk.push(e),t.trunkPath=r.join(",")):(t.mergeTrunk(n),t.pieces.push(P.a.cloneElement(e,{x:t.x,key:n})),t.x+=e.props.width),t}),{pieces:[],x:0,trunk:[],trunkPath:null,mergeTrunk:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(1==this.trunk.length){var e=this.trunk[0];this.pieces.push(P.a.cloneElement(e,{x:this.x,key:t})),this.x+=e.props.width}else if(this.trunk.length>1){var n=function(t){return Nt(t,(function(t){return t})).pop()},r=this.trunk.map(n),i=r.reduce((function(t,e){return t.width+=e.props.width,t.children+=e.props.children,t}),{width:0,children:"","data-endat":r[r.length-1].props["data-endat"],className:void 0,minWidth:void 0}),o=Nt(this.trunk[0],(function(t){return t}),(function(t){return!0})).slice(0,-1),a=o.reduceRight((function(t,e){return P.a.cloneElement(e,{width:i.width},t)}),P.a.cloneElement(r[0],i));this.pieces.push(P.a.cloneElement(a,{x:this.x,key:t})),this.x+=i.width}return this.trunk=[],this.trunkPath=null,this}}).mergeTrunk().pieces}))),n}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=t.x,r=this.getMerged(e);return 1==r.length?P.a.cloneElement(r[0],{x:n}):P.a.createElement(ut,{x:n},this.getMerged(e))}}]),e}(C.Component);function Nt(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t){return t.props["data-content"]},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(t){return!!t.props["data-content"]},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return P.a.isValidElement(t)&&(n(t)&&(r.push(e(t)),r.bText="text"==t.props["data-type"]),P.a.isValidElement(t.props.children)&&Nt(P.a.Children.only(t.props.children),e,n,r)),r}var Wt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=t.align,r=void 0===n?"left":n,i=e.reduce((function(t,e){var n=e.props.descent,r=void 0===n?0:n;return Math.max(t,r)}),0),o=e.reduce((function(t,e){var n=e.props,r=n.height,i=void 0===r?0:r,o=n.descent,a=void 0===o?0:o;return Math.max(t,i-a)}),0),a=this[r]();return P.a.createElement(ut,{className:"story",y:o,lineDescent:i,children:a})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.props.children.reduce((function(e,n){return null!=n.props.x?t?e.push({located:n,words:[]}):(e[e.length-1].located=n,e.push({words:[]})):e[e.length-1].words.push(n),e}),[{words:[]}]).map((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e==n.length-1,i=t.words.length-Array.from(t.words).reverse().findIndex((function(t){return r?0!==t.props.minWidth:!zt(t)}));return t.endingWhitespaces=t.words.slice(i),t.words=t.words.slice(0,i),t}))}},{key:"left",value:function(){return this.group().reduce((function(t,e){var n=e.words,r=e.endingWhitespaces,i=e.located;return n.length+r.length&&t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:[].concat(n,r).map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length})),i&&(t.aligned.push(P.a.cloneElement(i,{key:t.aligned.length})),t.x=i.props.x+i.props.width),t}),{x:0,aligned:[]}).aligned}},{key:"right",value:function(){return this.group(!0).reduceRight((function(t,e){var n=e.located,r=e.words,i=e.endingWhitespaces;return i.length>0&&t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:i.map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length})),r.length&&(t.x=r.reduce((function(t,e){return t-e.props.width}),t.x),t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:r.map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length}))),n&&(t.aligned.push(P.a.cloneElement(n,{key:t.aligned.length})),t.x=n.props.x),t}),{x:this.props.width,aligned:[]}).aligned.reverse()}},{key:"center",value:function(){var t=this;return this.group().reduce((function(e,n){var r=n.words,i=n.endingWhitespaces,o=n.located;if(r.length+i.length){var a=(o?o.props.x:t.props.width)-e.x,s=r.reduce((function(t,e){return t+e.props.width}),0);e.aligned.push(P.a.cloneElement(new _t({x:e.x+(a-s)/2,children:[].concat(r,i).map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:e.aligned.length}))}return o&&(e.aligned.push(P.a.cloneElement(o,{key:e.aligned.length})),e.x=o.props.x+o.props.width),e}),{x:0,aligned:[]}).aligned}},{key:"justify",value:function(){var t=this;return this.group().reduce((function(e,n){var r=n.words,i=n.endingWhitespaces,o=n.located,a=e.justified.length,s=(o?o.props.x:t.props.width)-e.x,c=r.reduce((function(t,e,n){return zt(e)?t.whitespaces.push(n):t.contentWidth+=e.props.width,t}),{contentWidth:0,whitespaces:[]}),u=c.whitespaces,l=c.contentWidth,p=u.length>0?(s-l)/u.length:0;return[].concat(r,i).reduce((function(t,n,r){return e.justified.push(P.a.cloneElement(n,{x:t,key:a++})),t+(u.includes(r)?p:n.props.width)}),e.x),o&&(e.justified.push(P.a.cloneElement(o,{key:a++})),e.x=o.props.x+o.props.width),e}),{x:0,justified:[]}).justified}},{key:"both",value:function(){return this.justify()}}]),e}(C.Component);function zt(t){return new T.ReactQuery(t).findFirst(".whitespace").length>0}function Bt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ut(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Bt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Bt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Wt,"displayName","story");var qt={Block:It,Inline:function(t){function e(t){var n,r=t.space,i=r.left,o=r.right,a=r.findInlineSegments;f()(this,e),(n=g()(this,b()(e).apply(this,arguments))).findInlineSegments=a||function(){return{segments:[{x:i,width:n.width}]}};var s=n.findInlineSegments(n.topToBlockOffset,i,o);return n.inlineSegments=Mt.create(Ut({left:i},s)),n}return k()(e,t),y()(e,[{key:"isEmpty",value:function(){return!this.firstAtom}},{key:"appendAnchorAtom",value:function(t){var e=new T.ReactQuery(t),n=e.findFirst('[data-type="anchor"]'),r=n.attr("data-content"),i=P.a.cloneElement(e.replace(n.get(0),P.a.createElement(ut,null)).get(0),{atom:t,width:0,"data-anchor":r});if(this.inlineSegments.push(i),!this.space.isAnchored(r))return this.anchor=t.props.anchor,!1}},{key:"appendAtom",value:function(t){var e=this;if(t.props.anchor)return this.appendAnchorAtom(t);var n=function(n){if(n-e.height>1){var r=e.props,i=r.space,o=i.left,a=i.right,s=(r.top,e.findInlineSegments(e.topToBlockOffset+n,o,a));if(e.inlineSegments.shouldRelayout(s)){var c=e.inlineSegments.relayout(s,t);return!1!==c&&void(e.inlineSegments=c)}}return e.inlineSegments.push(t)}(this.getLineHeight(t.props.height));if(!1!==n||!this.isEmpty())return n;this.inlineSegments.push(t,!0)}},{key:"getLineHeight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.contentHeight,e=this.props.lineHeight;return"string"==typeof e?t+("string"==typeof e?this.textHeight*(parseInt(e)-100)/100:0):"number"==typeof e?e:t}},{key:"freeze",value:function(){var t=this.inlineSegments.render().props.children;return this.children=[].concat(this.props.positioned,t),this}},{key:"render",value:function(t){var e=this.props.align;return new Wt({children:this.children,width:this.width,align:t&&["justify","both"].includes(e)?void 0:e}).render()}},{key:"isFitTo",value:function(t){if(!t)return!1;if(this.space.width!=t.width)return!1;var e=t.findInlineSegments(this.topToBlockOffset+this.height,t.left,t.right).segments;return this.inlineSegments.segments.length==e.length&&!this.inlineSegments.segments.find((function(t,n,r,i){var o=t.props,a=o.x,s=o.width,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:e[n];return c.x!=a&&c.width!=s}))}},{key:"clone4Space",value:function(t){return Object.assign(new this.constructor(Ut({},this.props,{space:t})),{inlineSegments:this.inlineSegments,children:this.children})}},{key:"space",get:function(){return this.props.space}},{key:"height",get:function(){return this.getLineHeight()}},{key:"contentHeight",get:function(){return this.items.reduce((function(t,e){var n=e.props.height,r=void 0===n?0:n;return Math.max(t,r)}),0)}},{key:"textHeight",get:function(){return this.items.reduce((function(t,e){var n=e.props,r=n.height,i=void 0===r?0:r,o=n.descent;return Math.max(t,o?i:0)}),0)}},{key:"width",get:function(){var t=this.props.space,e=t.width,n=void 0===e?0:e,r=t.left,i=void 0===r?0:r,o=t.right;return(void 0===o?n:o)-i}},{key:"firstAtom",get:function(){var t=this.inlineSegments.items.find((function(t){return void 0===t.props.x}));return t&&t.props.atom?t.props.atom:t&&null==t.props.descent?t.props.children:t}},{key:"lastAtom",get:function(){var t=this.inlineSegments.items.findLast((function(t){return void 0===t.props.x}));return t&&t.props.atom?t.props.atom:t}},{key:"atoms",get:function(){return this.inlineSegments.items.map((function(t){return t&&t.props.atom||t}))}},{key:"items",get:function(){return[].concat(this.props.positioned,this.inlineSegments.items)}},{key:"topToBlockOffset",get:function(){var t=this.props.top,e=void 0===t?0:t,n=this.inlineSegments,r=(n=void 0===n?{props:{}}:n).props.top;return(void 0===r?0:r)+e}}]),e}(C.Component),ConstraintSpace:bt,IMMEDIATE_STOP:It.IMMEDIATE_STOP};function Gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ht(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Gt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Gt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Xt(t,e){var n=e.locatable,r=e.stoppable,i=e.continuable,o=e.recomposable;return n&&!t.already("locatable")&&(t=G(t,n)),o&&!t.already("recomposable")&&(t=z(t,o)),r&&!t.already("stoppable")&&(t=Y(t,r)),i&&!t.already("continuable")&&(t=Z(t,Z)),t}function Yt(t){return Xt(t,Ht({locatable:!0,recomposable:!0},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}))}var Qt=function(t){return function(e,n){return Object.keys(e).reduce((function(n,r){return n[r]||(n[r]=t(e[r])),n}),Ht({},n))}};function Vt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Kt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Vt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Vt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}[R,N,W,z,G,Y,Z,Yt].forEach((function(t){return t.enable=Qt(t)}));var Jt=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"__getSpace",F()((function(n){var r,i=x()(b()(e.prototype),"getSpace",u()(t)).call(u()(t)),o=t.props,a=o.width,s=o.height,c=void 0===s?Number.MAX_SAFE_INTEGER:s,l=o.margin,h=(l=void 0===l?{}:l).left,f=void 0===h?0:h,d=l.right,y=void 0===d?0:d,m=l.top,g=void 0===m?0:m,v=l.bottom,w=void 0===v?0:v,O=o.x,k=void 0===O?0:O,C=o.y,P=void 0===C?0:C,E=(r={},p()(r,t.getComposeType(),{left:k,top:P,right:k+a,bottom:P+c}),p()(r,"margin",{left:k+f,top:P+g,right:a+k-y,bottom:P+c-w}),r);return t.cols?qt.ConstraintSpace.create(i).clone({edges:E}):qt.ConstraintSpace.create(i).clone({left:k+f,right:k+a-y,blockOffset:P+g,height:c-g-w,edges:E})}))),Object.defineProperties(u()(t),{uuid:{get:function(){var t=this.props,e=t.i,n=t.id;return"".concat(n).concat(null!=e?"_"+e:"")}}}),t}return k()(e,t),y()(e,[{key:"getSpace",value:function(){return this.__getSpace(this.props)}},{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{composedHeight:{enumerable:!0,configurable:!0,get:function(){return this.cols?Math.max.apply(Math,this.columns.map((function(t){return t.blockOffset}))):this.blockOffset}}})}},{key:"createComposed2Parent",value:function(){var t=this,e=this.positionLines(this.lines),n=e.props.height;e=P.a.cloneElement(e,{y:function(e){var n=t.props,r=n.height,i=void 0===r?e:r,o=n.vertAlign;if(null!=e)switch(o){case"bottom":return i-e;case"center":case"middle":return(i-e)/2;default:return 0}}(n)});var r=this.props,i=r.width,o=r.height,a=void 0===o?n:o,s=r.margin,c=(s=void 0===s?{}:s).left,u=void 0===c?0:c,l=s.top,p=void 0===l?0:l,h=r.x,f=r.y,d=r.z,y=r.named;return this.cols||!u&&!p||(e=P.a.createElement(ut,{x:u,y:p},e)),P.a.createElement(ut,{width:i,height:a,x:h,y:f,z:d,named:y,className:"frame","data-frame":this.uuid},[P.a.cloneElement(e,{key:"content"})].concat(this.anchors.map((function(t,e){return P.a.cloneElement(t,{key:e})}))).filter((function(t){return!!t})).sort((function(t,e){var n=t.props.z,r=void 0===n?0:n,i=e.props.z;return r-(void 0===i?0:i)})))}},{key:"lineXY",value:function(t){if(!this.cols){var e=this.props.margin,n=(e=void 0===e?{}:e).top,r=void 0===n?0:n,i=e.left;return{x:void 0===i?0:i,y:this.lines.slice(0,this.lines.indexOf(t)).reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),r)}}var o=this.columns.find((function(e){return e.lines.includes(t)}))||this.currentColumn,a=o.y,s=void 0===a?0:a,c=o.x,u=void 0===c?0:c,l=o.lines;return{x:u,y:l.slice(0,l.indexOf(t)).reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),s)}}},{key:"columnIndexOf",value:function(t){return this.cols?this.columns.findIndex((function(e){return e.lines.startIndex>=t})):0}},{key:"layoutOf",value:function(){var t=this.props;return{width:t.width,height:t.height,margin:t.margin,cols:this.cols}}},{key:"clone",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.computed;return Object.assign(new this.constructor(Kt({},this.props,{},t),this.context),{computed:e})}},{key:"onAllChildrenComposed",value:function(){var t=this;if(this.props.isTop)try{this.createComposed2Parent=function(){return t},x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}finally{delete this.createComposed2Parent}else x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"isFrame",get:function(){return!0}}]),e}(qt.Block);p()(Jt,"displayName",N(T.dom.Frame).displayName);var Zt=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"___createComposed2Parent",F()((function(t){return x()(b()(e.prototype),"createComposed2Parent",u()(n)).call(u()(n))}))),n}return k()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){var t,e;return this.___createComposed2Parent(this.computed.composedUUID||(null===(t=this.context.parent)||void 0===t?void 0:null===(e=t.computed)||void 0===e?void 0:e.composedUUID))}},{key:"shouldContinueCompose",value:function(){var t;return!(!this.cols||this.columns.length==this.cols.length)||!!(t=this.context).shouldContinueCompose.apply(t,arguments)&&!(this.availableBlockSize<=0)}},{key:"cancelUnusableLastComposed",value:function(t){t.id;var n=s()(t,["id"]),r=new this.constructor(n,this.context).getSpace(),i=this.getSpace().isInlineSizeDifferent(r);if(i)return this.computed.anchors=[],x()(b()(e.prototype),"cancelUnusableLastComposed",this).apply(this,arguments);var o=n.hash!=this.props.hash;o&&this._cancelChangedPart.apply(this,arguments),this._cancelUntilLastAllChildrenComposed.apply(this,arguments)}},{key:"_cancelChangedPart",value:function(t){var e=this,n=this.childrenNeedRecompose(t,this.props),r=this.lines.findIndex((function(t){return n.includes(e.childIdOf(t))}));this.removeFrom(r)}},{key:"_cancelUntilLastAllChildrenComposed",value:function(){var t=this,e=this.lines.findLastIndex((function(e,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.childIdOf(e),a=t.context.getComposer(o);return a&&a.isAllChildrenComposed()}));this.removeFrom(e+1)}},{key:"appendLastComposed",value:function(){if(this.computed.lastComposed=[],!this.isAllChildrenComposed()){if(this.lastLine){var t=this.lastLine.props["data-content"];return this.childrenArray(this.props.children).findIndex((function(e){return e&&e.props.id==t}))}return!1}return this.onAllChildrenComposed(),!0}},{key:"removeFrom",value:function(t){var n=x()(b()(e.prototype),"rollbackLines",this).call(this,this.lines.length-t);return n.length>0&&delete this.computed.allComposed,n}}]),e}(Yt(Jt,{stoppable:!0,continuable:!0}));function $t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var te=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getChildContext",value:function(){return{editable:!1}}},{key:"render",value:function(){var t=(0,this.context.getComposedTemplate)(this.props.xhref);if(!t)return null;var n=t.props.master;return P.a.createElement(C.Fragment,null,n&&P.a.createElement(e,{xhref:n}),t.createComposed2Parent())}}]),e}(C.Component);p()(te,"displayName","template.use"),p()(te,"contextTypes",{getComposedTemplate:j.a.func.isRequired}),p()(te,"childContextTypes",{editable:j.a.any});var ee=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"isTemplate",value:function(){return!0}}],[{key:"isTemplate",value:function(t){var e;return null==t?void 0:null===(e=t.isTemplate)||void 0===e?void 0:e.call(t)}}]),e}(Zt);p()(ee,"Use",te),p()(ee,"defaultProps",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?$t(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$t(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Zt.defaultProps,{isTop:!0}));var ne=n(21),re=n.n(ne),ie=n(25);function oe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var ae=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return k()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t,e){return function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?oe(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):oe(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({x:t.x,y:t.y},e)}}]),y()(e,[{key:"render",value:function(){var t=this,e=this.state,n=e.x,r=void 0===n?0:n,i=e.y,o=void 0===i?0:i,a=e.svg;re()(this.props);var s=function(t){return t.stopPropagation()},c=P.a.createElement(ut,{innerRef:function(e){return t.el=e},x:r,y:o,onMouseDown:s,onMouseMove:s,onMouseUp:s},this.props.children);return a?Object(ie.createPortal)(c,a):c}},{key:"componentDidMount",value:function(){var t=this.state,e=t.x,n=t.y,r=t.useRelativePosition,i=void 0===r?null==e&&null==n:r,o=this.el,a=o.viewportElement;if(!i)return this.setState({svg:a});var s=o.viewportElement.createSVGPoint();s.x=0,s.y=0,s=s.matrixTransform(o.getCTM()),this.setState({svg:a,x:s.x,y:s.y})}}]),e}(C.Component),se=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=s()(t,["children"]);return P.a.createElement(C.Fragment,null,e,P.a.createElement(ae,{x:0,y:0},P.a.createElement("rect",it()({width:"100%",height:"100%",fill:"transparent"},n))))}}]),e}(C.Component);function ce(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var ue=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"state",{moving:!1}),n}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this,e=this.state,n=e.moving,r=e.x,i=e.y,o=this.props,a=o.children,s=o.isAnchor;return n?P.a.createElement(C.Fragment,null,a,P.a.createElement(se,{cursor:"default",onMouseUp:function(e){return t.onEndMove(e)},onMouseMove:function(e){return t.moving(e)}},!s&&P.a.createElement(he,{x:r,y:i}))):P.a.cloneElement(a,{onMouseDown:function(e){if(1&e.buttons){e.stopPropagation();var n=t.context.positioning.asCanvasPoint({left:e.clientX,top:e.clientY}),r=n.x,i=n.y;t.setState({moving:!0,x:r,y:i})}}})}},{key:"onEndMove",value:function(t){var e=this;if(this.state.moving){var n=t.clientX,r=t.clientY;this.setState({moving:!1},(function(){var t=e.props,i=t.isAnchor,o=t.onMove,a=e.state,s=a.x,c=a.y;if(i){var u=e.context.positioning.asCanvasPoint({left:n,top:r});o({dest:{dx:u.x-s,dy:u.y-c}})}else o({dest:e.context.positioning.around(n,r)})})),t.stopPropagation()}}},{key:"moving",value:function(t){var e=this.state,n=e.moving,r=e.x,i=e.y,o=this.props,a=o.onMove,s=o.isAnchor;if(n){var c=t.clientX,u=t.clientY;if(s){var l=this.context.positioning.asCanvasPoint({left:c,top:u});this.setState(function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ce(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ce(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},l),(function(){a({dest:{dx:l.x-r,dy:l.y-i}})}))}else{var h=this.context.positioning.around(c,u),f=h.id,d=h.at;if(f){var y=this.context.positioning.position(f,d),m=y.x,g=y.y;this.setState({x:m,y:g,id:f,at:d})}}}t.stopPropagation()}}]),e}(C.Component);p()(ue,"propTypes",{around:j.a.func,onMove:j.a.func,isAnchor:j.a.bool}),p()(ue,"contextTypes",{positioning:j.a.object});var le,pe,he=function(t){var e=t.x,n=void 0===e?0:e,r=t.y,i=void 0===r?0:r;return P.a.createElement(ae,null,P.a.createElement(ut,{x:n,y:i},P.a.createElement("rect",{x:5,y:20,width:10,height:5,fill:"transparent",stroke:"gray",strokeWidth:"1"}),P.a.createElement("rect",{width:2,height:20,fill:"black"})))},fe=Object(T.whenSelectionChange)((function(t){var e=t.selection;return e?{selection:e,rects:e.getRangeRects()}:{}}),void 0,void 0,{withRef:!0})((pe=le=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).area=P.a.createRef(),t.state={},t.onShrink=t.onShrink.bind(u()(t)),t.onMove=t.onMove.bind(u()(t)),t}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.state,e=t.rects,n=void 0===e?[]:e,r=t.selecting;re()(this.props);var i=this.context.editable,o=P.a.createElement(de,{rects:n,innerRef:this.area});return r?P.a.cloneElement(o,{onMouseMove:this.onShrink}):i?P.a.createElement(ue,{children:o,onMove:this.onMove}):o}},{key:"onShrink",value:function(t){var e=t.buttons,n=t.clientX,r=t.clientY;if(1&e){var i=this.props.selection,o=this.state.rects,a=i.positioning.asCanvasPoint({left:n,top:r}),s=a.x,c=a.y,u=o.findIndex((function(t){var e=t.left,n=(t.top,t.right),r=t.bottom;return c<=r&&e<=s&&s<=n})),l=o.slice(0,u+1);-1!=u&&(l[l.length-1].right=s-2),this.setState({rects:l})}}},{key:"onMove",value:function(t){this.props.dispatch(T.ACTION.Selection.MOVE(t))}},{key:"componentDidMount",value:function(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function(t){var e=this.props.selection;if(t.selection!=e&&e&&e.isRange&&e.isSelectionChanged(t.selection)){var n=this.area.current;n.scrollIntoViewIfNeeded?n.scrollIntoViewIfNeeded(!0):n.scrollIntoView()}}}],[{key:"getDerivedStateFromProps",value:function(t,e){var n=t.rects;return e.selecting?null:{rects:n}}}]),e}(C.Component),p()(le,"contextTypes",{editable:j.a.any}),pe)),de=function(t){var e=t.rects,n=t.innerRef,r=s()(t,["rects","innerRef"]);return P.a.createElement("path",it()({ref:n,fill:"#3297FD",className:"selectionShape",style:{fillOpacity:.5},d:(e||[]).map((function(t){var e=t.left,n=t.top,r=t.right,i=t.bottom;return"M".concat(e," ").concat(n," L").concat(r," ").concat(n," L").concat(r," ").concat(i," L").concat(e," ").concat(i," Z")})).join(" ")},r,{onClick:function(t){return console.log(1)}}))},ye=Object(T.whenSelectionChange)()(function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).shape=P.a.createRef(),t}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.selection,n=t.style,r=e||{position:{}},i=r.position,o=i.y,a=void 0===o?0:o,s=i.x,c=void 0===s?0:s,u=i.height,l=void 0===u?0:u,p=i.color,h=void 0===p?"black":p,f=r.isCursor,d=r.isFocusable;return P.a.createElement("path",{ref:this.shape,d:"M".concat(c," ").concat(a," v").concat(f&&!d?l:0),strokeWidth:1,stroke:h,style:n})}},{key:"componentDidMount",value:function(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function(t){var e=this.props.selection;if(t.selection!=e&&e&&e.isCursor&&e.isSelectionChanged(t.selection)){var n=this.shape.current;n.scrollIntoViewIfNeeded?n.scrollIntoViewIfNeeded(!0):n.scrollIntoView()}}}]),e}(C.Component)),me=n(15);function ge(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var ve=function(t){function e(t,n,r,i){var o;return f()(this,e),o=g()(this,b()(e).call(this,t,n,r)),p()(u()(o),"__getRangeRects",F()((function(t,n){return o.isRange?o.positioning.getRangeRects(t,n):x()(b()(e.prototype),"getRangeRects",u()(o)).call(u()(o))}))),p()(u()(o),"props",F()((function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("page"==t.toLowerCase())return o._pageProps();if("layout"==t.toLowerCase())return o._layoutProps();var r=x()(b()(e.prototype),"props",u()(o)).call(u()(o),t,n);if(!r)return r;r.hash,r.id,r.content,r.children;var i=s()(r,["hash","id","content","children"]);return i}))),p()(u()(o),"_layoutProps",F()((function(){if(!o.positioning.ready)return null;var t=o.positioning.pages.find((function(t){return t.props.I==o.position.page}));return t?t.layoutOf(o.position):null}))),p()(u()(o),"_pageProps",F()((function(){if(!o.positioning.ready)return null;var t=o.positioning.pages.find((function(t){return t.props.I==o.position.page}));if(!t)return null;var e=function(){return o.position.line},n=t.props,r=n.margin,i=n.width,a=n.height;return function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ge(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ge(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},o.position,{get pageY(){return o.positioning.pageXY(o.position.page).y},get line(){return e()},get column(){return t.columnIndexOf(e(),o.position)},get cols(){return[].concat(t.cols)},get size(){return{width:i,height:a}},get margin(){return r}})}))),o.positioning=i,n.id!=r.id&&0==o.getContent(n.id).forwardFirst("#".concat(r.id)).length&&(o.start=r,o.end=n),o.isFocusable=n.id==r.id&&i.getComposer(n.id).focusable,o.isRange=!o.isCursor&&!o.isFocusable,o}return k()(e,t),y()(e,[{key:"isSelectionChanged",value:function(t){return!t||!(t.start.id==this.start.id&&t.start.at==this.start.at&&t.end.id==this.end.id&&t.end.at==this.end.at)}},{key:"getComposer",value:function(){var t;return(t=this.positioning).getComposer.apply(t,arguments)}},{key:"getContent",value:function(){var t;return(t=this.positioning).getContent.apply(t,arguments)}},{key:"getRangeRects",value:function(){return this.__getRangeRects(this.start,this.end)}}]),e}(T.SelectionStyle),be=Object(me.compose)(Object(T.connect)((function(t){return{content:t.get("content"),selection:t.get("selection")}}),void 0,void 0,{withRef:!0}))(function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={composedContent:null},t}return k()(e,t),y()(e,[{key:"render",value:function(){return null}},{key:"shouldComponentUpdate",value:function(t,e){var n=t.content,r=t.selection,i=t.canvas,o=t.positioning,a=void 0===o?i.positioning:o,c=e.composedContent;if(!n.equals(c))return!1;if(n.equals(this.props.content)&&r.equals(this.props.selection)&&n.equals(this.last.content)&&r.equals(this.last.selection))return!1;this.style=null;var u=r.toJS(),l=u.cursorAt,p=s()(u,["cursorAt"]),h=p[l],f=h.id,d=h.at;return!f||(this.style=new ve(a.position(f,d,!0),p.start,p.end,a),!0)}},{key:"componentDidUpdate",value:function(){var t=this.props,e=t.dispatch,n=t.content,r=t.selection,i=this.style;e(T.ACTION.Selection.STYLE(i)),this.last={content:n,selection:r}}}]),e}(C.Component)),we=n(17),xe=n.n(we),Oe=n(22),ke=n.n(Oe),Ce=function(){function t(e){f()(this,t),this.responsible=e}return y()(t,[{key:"getComposer",value:function(){var t;return(t=this.responsible).getComposer.apply(t,arguments)}},{key:"getContent",value:function(){var t;return(t=this.responsible).getContent.apply(t,arguments)}},{key:"asCanvasPoint",value:function(t){var e;t.left,t.top;return(e=this.responsible).asCanvasPoint.apply(e,arguments)}},{key:"asViewportPoint",value:function(t){var e;t.x,t.y;return(e=this.responsible).asViewportPoint.apply(e,arguments)}},{key:"pageXY",value:function(){var t;arguments.length>0&&void 0!==arguments[0]&&arguments[0];return(t=this.responsible).pageXY.apply(t,arguments)}},{key:"position",value:function(t,e){return{page:0}}},{key:"around",value:function(t,e){return{}}},{key:"getRangeRects",value:function(t,e){return[]}},{key:"nextLine",value:function(t,e){return!this.position(t,e)&&nextFrame?this.around(left,nextFrame.firstLine.y+1):this.around(left,top+lineHeight+1)}},{key:"prevLine",value:function(t,e){return!this.position(t,e)&&prevFrame?this.around(left,prevFrame.lastLine.y-1):this.around(left,top-1)}},{key:"positionAtLineEnd",value:function(t,e){return{id:t,at:e}}},{key:"positionAtLineStart",value:function(t,e){return{id:t,at:e}}},{key:"extendWord",value:function(t,e){return{}}},{key:"extendLine",value:function(t,e){return{}}},{key:"pages",get:function(){return this.responsible.pages}},{key:"frames",get:function(){return this.pages}},{key:"ready",get:function(){return!!this.responsible.canvas}}]),t}();function Pe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ee(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Pe(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Pe(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Ce,"makeSafe",(function(t){return function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),"position,around,nextLine,prevLine,extendWord".split(",").forEach((function(t){n[t]=function(){try{for(var r,i=arguments.length,o=new Array(i),a=0;a<i;a++)o[a]=arguments[a];return(r=x()(b()(e.prototype),t,u()(n))).call.apply(r,[u()(n)].concat(o))}catch(t){return console.warn(t),{}}}})),n}return k()(e,t),y()(e,[{key:"getRangeRects",value:function(){try{for(var t,n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return(t=x()(b()(e.prototype),"getRangeRects",this)).call.apply(t,[this].concat(r))}catch(t){return console.warn(t),[]}}}]),e}(t)}));var je,Se,Ae=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"_targetFrameContainsFrame",(function(t){return function(e){var r=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t=t.context.parent;)e.push(t.props.id);return e}(n.getComposer(t.props.id));return 1==new T.ReactQuery(e.createComposed2Parent()).findFirst((function(e){if(e&&e.props){var n=e.props,i=n["data-content"],o=n["data-frame"];if(o)return o==t.uuid||!!r.includes(i)&&void 0}})).length}})),n}return k()(e,t),y()(e,[{key:"getTopFrameXY",value:function(t){var e=this.pageXY(t.props.I),n=e.x,r=e.y;return{x:n,y:r,top:r,bottom:r+t.props.height}}},{key:"getTopFrameByPosition",value:function(t,e){var n,r=this;return{topFrame:this.frames.find((function(i){var o=i.props,a=o.width,s=o.height,c=o.I;return n=r.pageXY(c),t>=n.x&&t<=n.x+a&&e>=n.y&&e<=n.y+s})),topFrameOffset:n}}},{key:"normalizeSelection",value:function(t,e){if(t.id==e.id)return{start:t,end:e};var n=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t;)(t.isSection||t.isFrame||["row","document"].includes(t.getComposeType()))&&e.push(t.props.id),t=t.context?t.context.parent:null;return e},r=n(this.getComposer(t.id)),i=n(this.getComposer(e.id)),o=r.findLastIndex((function(t,e){return t==i[e]}));return-1!=o&&(r.splice(0,o+1),i.splice(0,o+1)),r[0]&&(t={id:r[0],at:1}),i[0]&&(e={id:i[0],at:1}),{start:t,end:e}}},{key:"getOrderedPosition",value:function(t,e){var n=this.normalizeSelection(t,e);t=n.start,e=n.end;var r=this.position(t.id,t.at,!0),i=this.position(e.id,e.at,!0),o={p0:i,p1:r};if(r.topFrame.props.i>i.topFrame.props.i)return o;if(r.topFrame.props.i==i.topFrame.props.i)if(r.leafFrame==i.leafFrame){if(r.lineIndexInLeafFrame>i.lineIndexInLeafFrame)return o;if(r.lineIndexInLeafFrame==i.lineIndexInLeafFrame&&r.x>i.x)return o}else if(r.leafFrame.props.i>i.leafFrame.props.i)return o;return{p0:r,p1:i}}},{key:"getFrameOffsetGrandFrame",value:function(t,e){if(t==e)return{x:0,y:0};var n=t.createComposed2Parent(),r=new T.ReactQuery(n).findFirstAndParents("[data-frame=".concat(e.uuid,"]")),i=r.first,o=r.parents;return[].concat(o,[i.get(0)]).filter((function(t){return!!t})).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),{x:0,y:0})}},{key:"getCheckedGrandFrameByFrame",value:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"find";if(!e){var i=this._targetFrameContainsFrame(t);e=function(e){return e==t||i(e)}}for(var o=t,a=null;o;){if(o.isFrame&&e(o)?a=o:o.isSection&&(a=o.computed.composed[r](e)),n&&a)return a;o.context&&(o=o.context.frame||o.context.parent)}return a}},{key:"getBoundaryCheckedMostInnerNode",value:function(t,e){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(t){return t},r=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.filter((function(e){return e!=t})).reduce((function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.props,r=(n=void 0===n?{}:n).height,i=n.width,o=n.x,a=void 0===o?0:o,s=n.y,c=void 0===s?0:s,u=n["data-type"];return t.x+=a,"text"!==u&&(t.y+=c),"paragraph"==u&&(t.height=r),null!=i&&(t.width=i),t}),Ee({},n,{x:0,y:0}))},i=new T.ReactQuery(t),o=[];;){var a=i.findLastAndParents((function(t,n){return!(!t||!P.a.isValidElement(t))&&((!t.props||!t.props["data-nocontent"])&&(t!=i.get(0)?e((function(e){return r([].concat(o,n,[t]),e)}),t):void 0))}));if(1!=a.last.length)break;o=[].concat(o,a.parents),i=a.last}return o=o.filter((function(e){return e!=t})),[].concat(o,[i.get(0)]).filter((function(t){return!!t})).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),{x:0,y:0,node:n(i.get(0),o),parents:o})}},{key:"aroundInBlockLine",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.x,n=void 0===e?0:e,r=(t.y,arguments.length>1?arguments[1]:void 0),i=arguments.length>2?arguments[2]:void 0,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;if(!r||!i)return{};var a=o.lineXY(r),c=this.getTopFrameXY(i),u=this.getFrameOffsetGrandFrame(i,o);n=n-c.x-u.x-a.x;var l,p=function(t){return t.x<=n&&t.x+t.width>=n},h=this.getBoundaryCheckedMostInnerNode(r,(function(t,e){var n=e.props.width;if(null!=n){var r=t({width:n});return p(r)}})),f=h.node,d=h.parents,y=s()(h,["node","parents"]),m=new T.ReactQuery(f).findFirstAndParents("[data-type=paragraph]"),g=0==m.first.length;if(g){var v=d.findLastIndex((function(t){return t.props.pagination}));-1==v?(l=r,y={x:0,y:0}):(l=d[v],y=d.slice(0,v+1).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),{x:0,y:0}))}else y=[].concat(m.parents,[m.first.get(0)]).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),y),l=m.first.get(0);var b=l.props,w=b.pagination,x=w.id,O=w.i,k=b.paragraph,C=void 0===k?this.getComposer(x):k;return this.aroundInInline(C.computed.lastComposed[O-1],n-y.x)}},{key:"aroundInInline",value:function(t,e){var n=this.getBoundaryCheckedMostInnerNode(t,(function(t,n){var r=n.props.width;if(null!=r){var i=t().x;return i<=e&&i+r>=e}}),(function(e){return e==t?void 0:e})),r=n.node,i=n.parents,o=s()(n,["node","parents"]);if(r){var a=new T.ReactQuery(r);if("ender"==a.attr("className"))return{id:t.props["data-content"],at:1};var c=a.findFirst('[data-type="text"]').get(0);if(c){var u=c.props,l=u.children,p=u["data-content"],h=u["data-endat"],f=c.composer,d=(void 0===f?this.getComposer(p):f).measure.widthString(e-o.x,l);return{id:p,at:h-l.length+d}}var y=a.findFirst("[data-content]").attr("data-content");if(y)return{id:y};var m=i.findLast((function(t){return t.props["data-content"]}));if(m)return{id:m.props["data-content"]}}else{var g=new T.ReactQuery(t.props.children),v=g.findFirstAndParents("[data-content]"),b=v.first,w=v.parents;if(b.length>0){if(e<=[].concat(w,[b.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0))return{id:b.attr("data-content"),at:0};var x=g.findLastAndParents("[data-content]"),O=x.last,k=x.parents;if("text"==O.attr("data-type")){if(o.x=[].concat(k,[O.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0),e>=o.x+O.attr("width"))return{id:O.attr("data-content"),at:O.attr("data-endat")};var C=O.get(0),P=C.props,E=P.children,j=P["data-content"],S=P["data-endat"],A=C.composer,I=(void 0===A?this.getComposer(j):A).measure.widthString(e-o.x,E);return{id:j,at:S-E.length+I}}return{id:O.attr("data-content"),at:1}}}return{id:t.props["data-content"],at:0}}},{key:"__findFirstParagraphInTarget",value:function(t){var e=function(t){return new T.ReactQuery(t.createComposed2Parent()).findFirst('[data-type="paragraph"]').attr("data-content")},n=null;if("cell"==t.getComposeType())return t.computed.lastComposed.find((function(t){return n=e(t)})),n;var r=new T.ReactQuery(t.computed.lastComposed).findFirst((function(t){if(t&&t.props)return"paragraph"==t.props["data-type"]||(t.isFrame?n=e(t):void 0)}));return n||r.attr("data-content")}},{key:"positionToLeafFrameLine",value:function(t,e){var n,r,i,o,a=this,s=this.getComposer(t),c=s.closest("paragraph"),u=1==e?"findLast":"findFirst",l=1==e?"findLast":"find",p=0,h=s!=c&&this.__findFirstParagraphInTarget(s);if(c&&!h)p=c.props.id==t?1==e?c.lines.length-1:0:c.lines["".concat(l,"Index")]((function(n){return n.atoms.find((function(n){var r,i,s,c=new T.ReactQuery(n),l=c[u]('[data-content="'.concat(t,'"]'));if(0!=l.length)return r=l.get(0).props,i=r["data-endat"],s=r.children,null==i||e>=i-s.length&&e<i||e==i&&a.getComposer(t).text.length==i?(n.props.anchor&&(o=c.findFirst('[data-type="anchor"]').attr("data-content")),!0):void 0}))})),n=c.lines[p].space.frame,r=n.lines.find((function(t){var e=t.props.pagination,n=(e=void 0===e?{}:e).id,r=e.i;return n==c.props.id&&r==p+1})),i=function(){return a.positionInInline(t,e,c.computed.lastComposed[p])};else{var f=this.getComposer(h);n=this.getCheckedGrandFrameByFrame(f.lines[1==e?f.lines.length-1:0].space.frame,(function(e){return 1==new T.ReactQuery(e.createComposed2Parent()).findFirst("[data-content=".concat(t,"]")).length}),!0,l),r=n.lines[l]((function(e){return 1==new T.ReactQuery(e).findFirst("[data-content=".concat(t,"]")).length})),i=r?function(){var n=new T.ReactQuery(r)["".concat(u,"AndParents")]("[data-content=".concat(t,"]")),i=n.first,o=n.last,a=n.node,s=void 0===a?i||o:a,c=n.parents,l=[].concat(c,[s.get(0)]).reduce((function(t,e){var n=e.props.x;return(void 0===n?0:n)+t}),0);return{x:1==e?l+(s.attr("width")||0):l,y:0}}:function(){if(1==e){var t=n.createComposed2Parent().props;return{x:t.width,y:t.height}}return{x:0,y:0}}}return{leafFrame:n,line:new Proxy(r||{},{get:function(t,e){return["position","paragraph","i","inFrame","height"].includes(e)?{position:i,paragraph:c?c.props.id:void 0,i:c?p:void 0,inFrame:r,height:r&&r.props.height}[e]:t[e]}}),anchor:o&&{id:o,position:null,offset:function(e){var n=function(t){return t.filter((function(t){return!!t})).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),{x:0,y:0})},r=new T.ReactQuery(e.createComposed2Parent()).findFirstAndParents('[data-content="'.concat(o,'"]')),i=r.first,a=r.parents;return this.position=function(){var e=i.findFirstAndParents('[data-content="'.concat(t,"]"));return n([].concat(e.parents,[e.first.get(0)]))},n([].concat(a))}}}}},{key:"positionInInline",value:function(t,e,n){var r=this.getComposer(n.props["data-content"]),i=r.getDefaultMeasure().defaultStyle,o=new T.ReactQuery(n).findFirstAndParents(".story"),a=o.first,s=o.parents.reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),Ee({x:0,y:0},i)),c=a.attr("lineDescent"),u=t==r.props.id,l=a["".concat(1==e?"findLast":"findFirst","AndParents")](u?".ender".concat(0==e?",[data-content]":""):function(n){if(!P.a.isValidElement(n))return!1;var r=n.props,i=r["data-content"],o=r["data-endat"],a=r.children;return i==t&&(null==o||e<=o&&e>=o-a.length)||void 0}),p=l.first,h=l.last,f=l.target,d=void 0===f?p||h:f,y=l.parents;if([d.get(0)].concat(y).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),s),u)return s.y=0,s;var m=d.get(0).props,g=m.height,v=m.width,b=m.descent;null!=b?(s.y-=g-b,s.height=g):s.height=g+c;var w=this.getComposer(t);if("text"==w.getComposeType()){var x=d.attr("data-endat"),O=d.attr("children");if(x>=e){var k=e-(x-O.length),C=w.measure.stringWidth(O.substring(0,k));s.x+=C}}else 1==e&&v&&(s.x+=v);return s}},{key:"getFrameByLayoutedFrameNode",value:function(t){var e=t.props,n=e["data-content"],r=e["data-frame"],i=e.composer,o=void 0===i?this.getComposer(n):i;return r==n?o:o.computed.composed.find((function(t){return t.uuid==r}))}}]),e}(Ce),Te=Ce.makeSafe(function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"position",value:function(t,e,n){var r=this.positionToLeafFrameLine(t,e),i=r.leafFrame,o=r.line,a=r.anchor,s=this.getCheckedGrandFrameByFrame(i),c=this.getTopFrameXY(s),u=a?a.offset(s,i):this.getFrameOffsetGrandFrame(s,i),l=!a&&o.paragraph?i.lineXY(o.inFrame):{x:0,y:0},p=a?a.position(s,t,e):o.position(t,e),h=c.x+u.x+l.x+p.x,f=c.y+u.y+l.y+p.y,d=Ee({id:t,at:e},p,{x:h,y:f},this.asViewportPoint({x:h,y:f}),{page:s.props.I,paragraph:o.paragraph,lineIndexOfParagraph:o.i,lineHeight:o.height});return n?Object.assign(d,{topFrame:s,leafFrame:i,get lineIndexInLeafFrame(){return o.inFrame||a?i.lines.indexOf(o.inFrame):0==e?0:i.lines.length-1},get line(){return s==i?this.lineIndexInLeafFrame:s.lines.findIndex((function(t){return 1==new T.ReactQuery(t).findFirst('[data-frame="'.concat(i.uuid,'"]')).length}))},get layer(){var e=new T.ReactQuery(s.createComposed2Parent()).findFirstAndParents('[data-content="'.concat(t,"]")).parents.find((function(t){return t&&"layer"==t.type.displayName}));if(e)return e.props.z}}):d}},{key:"positionToLineEnd",value:function(t,e){var n=this.position(t,e,!0),r=n.paragraph,i=n.lineIndexOfParagraph;if(-1!=i){var o=this.getComposer(r),a=o.lines[i].lastAtom;if(a==o.atoms[o.atoms.length-1])return{id:r,at:1};var s=new T.ReactQuery(a).findLast((function(t){if(!P.a.isValidElement(t))return!1;var e=t.props,n=e["data-content"],r=e["data-type"],i=e.children;return!(!n||"text"!=r&&i)||void 0}));if(s.length)return"text"==s.attr("data-type")?{id:s.attr("data-content"),at:Math.max(0,s.attr("data-endat")-1)}:{id:s.attr("data-content"),at:1}}return{id:t,at:e}}},{key:"positionToLineStart",value:function(t,e){var n=this.position(t,e,!0),r=n.paragraph,i=n.lineIndexOfParagraph;if(-1!=i){var o=this.getComposer(r),a=o.lines[i].firstAtom;if(a==o.atoms[0])return{id:r,at:0};var s=new T.ReactQuery(a).findFirst((function(t){if(!P.a.isValidElement(t))return!1;var e=t.props,n=e["data-content"],r=e["data-type"],i=e.children;return!(!n||"text"!=r&&i)||void 0}));if(s.length)return"text"==s.attr("data-type")?{id:s.attr("data-content"),at:s.attr("data-endat")-s.attr("children").length}:{id:s.attr("data-content"),at:0}}return{id:t,at:e}}},{key:"around",value:function(t,e){var n=this,r=this.asCanvasPoint({left:t,top:e}),i=r.x,o=r.y,a=this.getTopFrameByPosition(i,o),s=a.topFrame,c=a.topFrameOffset;if(!s)return{};var u=function(t){for(var e=t.x,n=void 0===e?0:e,r=t.y,a=void 0===r?0:r,s=t.width,c=t.height,u=arguments.length,l=new Array(u>1?u-1:0),p=1;p<u;p++)l[p-1]=arguments[p];var h=l.reduce((function(t,e){var n=e.x,r=e.y;return t.x-=n,t.y-=r,t}),{x:i,y:o});return n<=h.x&&a<=h.y&&n+s>=h.x&&a+c>=h.y},l=s.anchors.find((function(t){var e=t.props,n=e.geometry||e,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o,s=n.width,l=void 0===s?0:s,p=n.height;return u({x:i,y:a,width:l,height:void 0===p?0:p},c)}));if(l&&0==new T.ReactQuery(l).findFirst("[data-frame]").length)return{id:this.getBoundaryCheckedMostInnerNode(l,(function(t,e){var n=e.props,r=n.width,i=n.height;return!n["data-nocontent"]&&(r&&i?u(t({width:r,height:i}),c,l.props.geometry):void 0)}),(function(t,e){return[t].concat(e).find((function(t){return t&&t.props&&"data-content"in t.props}))})).node.props["data-content"]};var p=this.getBoundaryCheckedMostInnerNode(s.createComposed2Parent(),(function(t,e){var n=e.props,r=n["data-frame"],i=n.width,o=n.height;if(r)return u(t({width:i,height:o}),c)}),(function(t){return n.getFrameByLayoutedFrameNode(t)})).node,h=this.getFrameOffsetGrandFrame(s,p),f=p.lines.find((function(t){var e=t.props,n=e.width,r=void 0===n?0:n,i=e.height,o=void 0===i?0:i;return u(Ee({},p.lineXY(t),{width:r,height:o}),h,c)}));if(!f)return{id:p.props.id,at:1};var d=p.lineXY(f),y=f.props,m=y.pagination,g=m.id,v=m.i,b=y.paragraph,w=void 0===b?this.getComposer(g):b;return this.aroundInInline(w.computed.lastComposed[v-1],i-c.x-h.x-d.x)}},{key:"getRangeRects",value:function(t,e){var n=[],r=this.getOrderedPosition(t,e),i=r.p0,o=r.p1,a=ke.a.mark((function t(e,n){var r,a,s,c=this;return ke.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.lines.length-1,r=c.getCheckedGrandFrameByFrame(t),i=c.getTopFrameXY(r),o=c.getFrameOffsetGrandFrame(r,t),a=o.x,s=o.y;return t.lines.slice(e,n+1).map((function(e,n,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e,o=i.props,a=o.width,s=o.height,c=o.pagination,u=(c=void 0===c?{}:c).id,l=t.lineXY(e);if(u){var p=new T.ReactQuery(e).findFirstAndParents(".story"),h=[].concat(p.parents,[p.first.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0),f=p.first.findFirstAndParents("[data-content],.ender"),d=[].concat(f.parents,[f.first.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),h),y=p.first.findLastAndParents("[data-content],.ender"),m=[].concat(y.parents,[y.last.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),h+y.last.attr("width"));return Ee({},l,{x:l.x+d,width:m-d,height:s})}return Ee({},l,{width:a,height:s})})).map((function(t){return t.x+=a+i.x,t.y+=s+i.y,t})).map((function(t){var e=t.x,n=t.y;return{left:e,top:n,right:e+t.width,bottom:n+t.height}}))},e!=n){t.next=5;break}return t.next=4,r(e,i.lineIndexInLeafFrame,o.lineIndexInLeafFrame);case 4:return t.abrupt("return");case 5:return t.next=7,r(e,i.lineIndexInLeafFrame);case 7:a=e.context.parent.computed.composed,s=e.props.i+1;case 8:if(!(s<n.props.i)){t.next=14;break}return t.next=11,r(a[s]);case 11:s++,t.next=8;break;case 14:return t.next=16,r(n,0,i.lineIndexInLeafFrame);case 16:case"end":return t.stop()}}),t)})).call(this,i.leafFrame,o.leafFrame),s=!0,c=!1,u=void 0;try{for(var l,p=a[Symbol.iterator]();!(s=(l=p.next()).done);s=!0){var h=l.value;n.splice.apply(n,[n.length,0].concat(h))}}catch(t){c=!0,u=t}finally{try{s||null==p.return||p.return()}finally{if(c)throw u}}return 0==n.length?n:(Object.assign(n[0],{left:i.x}),Object.assign(n[n.length-1],{right:o.x}),n.filter((function(t){return t.left-t.right!=0})))}},{key:"nextLine",value:function(t,e){var n,r,i=this,o=function(t,e,n){var r=function(){if(t.lastLine!=e){if(t.cols&&t.cols.length>1)if(t.columns.reduce((function(t,n){return t||n.lines.length>0&&n.lines.length-1==n.lines.indexOf(e)}),!1))return;return t.lines[t.lines.indexOf(e)+1]}}();if(r)return r;var o=[i.getTopFrameXY(h)].reduce((function(t,e){return{x:t.x-e.x,y:t.y-e.y}}),n),s=i.getBoundaryCheckedMostInnerNode(h.createComposed2Parent(),(function(e,n){var r=n.props,a=r["data-frame"],s=r.width,c=r.height;if(a)return i.getFrameByLayoutedFrameNode(n)!=t&&function(t){var e=t.x,n=t.y,r=t.width;return o.x>=e&&o.x<=e+r&&n>o.y}(e({width:s,height:c}))}),(function(t,e){var n=nt()(e,1)[0];return t&&n?i.getFrameByLayoutedFrameNode(t):null}));return s.node?a(l=s.node,o.x-s.x):void 0},a=function(t,e){if(!(t.cols&&t.cols.length>1))return t.firstLine;var n=t.columns.find((function(t){var n=t.x,r=t.width;return e>=n&&e<=n+r}));return n?n.lines[0]:void 0},s=this.position(t,e,!0),c=s.x,u=s.y,l=s.leafFrame,p=s.lineIndexInLeafFrame,h=s.topFrame,f=l.lines[p],d=function(){if(n=o(l,f,{x:c,y:u}))return{v:i.aroundInBlockLine({x:c,y:u},n,h,l)};var t=i._targetFrameContainsFrame(l),e=i.getCheckedGrandFrameByFrame(l,(function(e){return e!=l&&t(e)}),!0);if(!e)return"break";f=e.lines.find((function(t){return 1==new T.ReactQuery(t).findFirst("[data-frame=".concat(l.uuid,"]")).length})),l=e};t:for(;l&&f;){var y=d();switch(y){case"break":break t;default:if("object"===xe()(y))return y.v}}for(;h&&!n&&(r=h,h=i.frames[i.frames.indexOf(r)+1]);)if(n=a(h,c))return this.aroundInBlockLine({x:c,y:u},n,h)}},{key:"prevLine",value:function(t,e){var n,r,i=this,o=function(t,e,n){var r=function(){if(t.firstLine!=e){if(t.cols&&t.cols.length>1)if(t.columns.reduce((function(t,n){return t||0==n.lines.indexOf(e)}),!1))return;return t.lines[t.lines.indexOf(e)-1]}}();if(r)return r;var o=[i.getTopFrameXY(h)].reduce((function(t,e){return{x:t.x-e.x,y:t.y-e.y}}),n),s=i.getBoundaryCheckedMostInnerNode(h.createComposed2Parent(),(function(e,n){var r=n.props,a=r["data-frame"],s=r.width,c=r.height;if(a)return i.getFrameByLayoutedFrameNode(n)!=t&&function(t){var e=t.x,n=t.y,r=t.width,i=t.height;return o.x>=e&&o.x<=e+r&&o.y-n-i>=0}(e({width:s,height:c}))}),(function(t,e){var n=nt()(e,1)[0];return t&&n?i.getFrameByLayoutedFrameNode(t):null}),!0);return s.node?a(l=s.node,o.x-s.x):void 0},a=function(t,e){if(!(t.cols&&t.cols.length>1))return t.lastLine;var n=t.columns.find((function(t){var n=t.x,r=t.width;return e>=n&&e<=n+r}));return n?n.lines[n.lines.length-1]:void 0},s=this.position(t,e,!0),c=s.x,u=s.y,l=s.leafFrame,p=s.lineIndexInLeafFrame,h=s.topFrame,f=l.lines[p],d=function(){if(n=o(l,f,{x:c,y:u}))return{v:i.aroundInBlockLine({x:c,y:u},n,h,l)};var t=i._targetFrameContainsFrame(l),e=i.getCheckedGrandFrameByFrame(l,(function(e){return e!=l&&t(e)}),!0);if(!e)return"break";f=e.lines.find((function(t){return 1==new T.ReactQuery(t).findFirst("[data-frame=".concat(l.uuid,"]")).length})),l=e};t:for(;l&&f;){var y=d();switch(y){case"break":break t;default:if("object"===xe()(y))return y.v}}for(;h&&!n&&(r=h,h=i.frames[i.frames.indexOf(r)-1]);)if(n=a(h,c))return this.aroundInBlockLine({x:c,y:u},n,h)}},{key:"extendWord",value:function(t,e){var n=this.getComposer(t).closest("paragraph");if(!n)return{};var r=n.atoms.find((function(n){return new T.ReactQuery(n).findFirst((function(n){var r=n.props,i=r["data-content"],o=r["data-endat"];return i==t&&(void 0===o?0:o)>=e||void 0})).length>0}));if(r){var i=new T.ReactQuery(r),o=i.findFirst('[data-type="text"]');if(o.length){var a=i.findLast('[data-type="text"]');if(a.length)return{start:{id:o.attr("data-content"),at:parseInt(o.attr("data-endat"))-o.attr("children").length},end:{id:a.attr("data-content"),at:parseInt(a.attr("data-endat"))}}}}return{}}}]),e}(Ae)),Ie=Object(me.compose)(Object(me.setDisplayName)("ComposeMoreTrigger"),Object(T.connect)((function(t){return{selection:Object(T.getSelection)(t)}})))((Se=je=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"shouldComponentUpdate",value:function(t){var e=t.selection,n=t.isSelectionComposed,r=t.compose4Selection;return!!n(e)||(r(),!1)}},{key:"render",value:function(){var t=this.props,e=t.compose4Scroll,n=t.getComposedY,r=t.debug,i=n();return P.a.createElement(at.a,{onEnter:function(){return e(i)}},P.a.createElement(ut,{y:i-100},P.a.createElement("line",{className:"composeTrigger",x1:"0",y1:"0",x2:"2",y2:"0",strokeWidth:"2",stroke:r?"red":"transparent"})))}}]),e}(C.Component),p()(je,"propTypes",{selection:j.a.object,getComposedY:j.a.func,isSelectionComposed:j.a.func,compose4Scroll:j.a.func,compose4Selection:j.a.func}),p()(je,"contextTypes",{debug:j.a.bool}),Se)),De=function(){return P.a.createElement(C.Fragment,null,P.a.createElement("defs",null,P.a.createElement(Fe,null),P.a.createElement(Me,null)))},Fe=function(){return P.a.createElement("path",{id:"table.adder",width:14,height:20,strokeWidth:1,fill:"transparent",d:"M8,9h8M12,5v8 M12,2C8.13,2,5,5.13,5,9c0,5.25,7,13,7,13s7-7.75,7-13C19,5.13,15.87,2,12,2z"})},Me=function(){return P.a.createElement("svg",{id:"rotator",viewBox:"0 0 24 24",width:24,height:24},P.a.createElement("circle",{cx:12,cy:12,r:15,stroke:"transparent",fillOpacity:.01,cursor:"pointer"}),P.a.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}))};function Le(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Re(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Le(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Le(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var _e=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t.getComposer=t.getComposer.bind(u()(t)),t.getContent=t.getContent.bind(u()(t)),t.positioning=new Te(u()(t)),t}return k()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t){var e=t.document,n=s()(t,["document"]),r=e.props,i=r.editable,o=r.canvasId,a=r.content,c=r.viewport,u=void 0===c?n.viewport:c,l=r.screenBuffer,p=void 0===l?n.screenBuffer:l,h=e.state.y,f=void 0===h?0:h;return Re({},ht.getDerivedStateFromProps.apply(ht,arguments),{editable:i,canvasId:o,content:a,viewport:u,screenBuffer:p,composed4Y:f})}}]),y()(e,[{key:"getChildContext",value:function(){return{positioning:this.positioning}}},{key:"getComposer",value:function(t){return this.props.document.getComposer(t)}},{key:"getContent",value:function(t){return T.ContentQuery.fromContent(this.state.content,t?"#".concat(t):void 0)}},{key:"asCanvasPoint",value:function(t){var e=t.left,n=t.top,r=this.canvas.createSVGPoint();r.x=e,r.y=n;var i=r.matrixTransform(this.canvas.getScreenCTM().inverse());return{x:i.x,y:i.y}}},{key:"asViewportPoint",value:function(t){var e=t.x,n=t.y,r=this.canvas.createSVGPoint();r.x=e,r.y=n;var i=r.matrixTransform(this.canvas.getScreenCTM());return{left:i.x,top:i.y}}},{key:"pageXY",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=this.constructor.Canvas.pageRect(t,this.canvas);return e?this.asCanvasPoint(e):{x:0,y:0}}},{key:"__composedY",value:function(){var t=this.state,e=t.pages,n=t.pageGap;return this.constructor.Canvas.composedY(e,n)}},{key:"availableBlockSize",value:function(){var t=this.state,e=t.scale,n=t.composed4Y,r=void 0===n?0:n,i=t.screenBuffer,o=t.viewport,a=o.height,s=o.node.scrollTop,c=this.__composedY()*e;return Math.max(0,Math.max(s,r)+a+i*a-c)}},{key:"render",value:function(){var t=this,e=this.props,n=e.children,r=e.document,i=this.state,o=i.editable,a=void 0===o||o,s=i.scale,c=i.pageGap,u=i.pages,l=i.precision,p=a&&!1===a.cursor?{}:this.eventHandlers,h=function(e){t.selectionChangeNotifier?t.selectionChangeNotifier.setState({composedContent:null},e):e()},f=this.constructor,d=f.Canvas,y=f.ComposeMoreTrigger;return P.a.createElement(d,it()({scale:s,pageGap:c,pages:u,precision:l,document:r,paper:!0},{innerRef:function(e){t.canvas=e}},p),P.a.createElement(y,{getComposedY:function(){return t.__composedY()},isSelectionComposed:function(t){return r.isSelectionComposed(t)},compose4Selection:function(t){r.isAllChildrenComposed()||h((function(t){return r.compose4Selection(t)}))},compose4Scroll:function(t){r.isAllChildrenComposed()||h((function(){return r.compose4Scroll(t)}))}}),P.a.createElement(De,null),P.a.createElement(C.Fragment,null,n,P.a.createElement(T.Cursor,{keys:{37:function(e){return t.onKeyArrowLeft(e)},39:function(e){return t.onKeyArrowRight(e)},38:function(e){return t.onKeyArrowUp(e)},40:function(e){return t.onKeyArrowDown(e)}}},P.a.createElement(ye,{scrollNodeIntoView:function(e){return t.scrollNodeIntoView(e)}})),P.a.createElement(T.Selection,null,P.a.createElement(fe,{ref:"selecting"})),P.a.createElement(be,{canvas:this,ref:"selectionChangeNotifier"})))}},{key:"__statistics",value:function(){var t=this.props.document;this.dispatch(T.ACTION.Statistics({pages:this.pages.length,allComposed:t.isAllChildrenComposed(),words:Array.from(t.composers.values()).filter((function(t){return!!t})).reduce((function(t,e){return t+(e.atoms?e.atoms.length:0)}),0)}))}},{key:"componentDidUpdate",value:function(){this.__statistics(),this.selectionChangeNotifier&&this.selectionChangeNotifier.setState({composedContent:this.state.content})}},{key:"componentDidMount",value:function(){this.active(),this.componentDidUpdate()}},{key:"active",value:function(){this.dispatch(T.ACTION.Cursor.ACTIVE(this.state.canvasId))}},{key:"pages",get:function(){return this.state.pages}},{key:"dispatch",get:function(){return this.context.activeDocStore.dispatch}},{key:"selectionChangeNotifier",get:function(){if(this.refs.selectionChangeNotifier)return this.refs.selectionChangeNotifier.getWrappedInstance()}},{key:"selecting",get:function(){if(this.refs.selecting)return this.refs.selecting.getWrappedInstance()}},{key:"selection",get:function(){return Object(T.getSelection)(this.context.activeDocStore.getState())}},{key:"cursor",get:function(){var t=this.selection,e=t.cursorAt;return Re({},s()(t,["cursorAt"])[e])}}]),e}(C.Component);p()(_e,"displayName","responsible-composed-document-default-canvas"),p()(_e,"Canvas",ht),p()(_e,"ComposeMoreTrigger",Ie),p()(_e,"propTypes",{pageGap:j.a.number,screenBuffer:j.a.number,scale:j.a.number,viewport:j.a.shape({height:j.a.number,width:j.a.number,node:j.a.instanceOf(Element)}),document:j.a.object}),p()(_e,"defaultProps",{pageGap:12,screenBuffer:1,scale:1}),p()(_e,"contextTypes",{onContextMenu:j.a.func,activeDocStore:j.a.any}),p()(_e,"childContextTypes",{positioning:j.a.object});var Ne=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).eventHandlers="onClick,onDoubleClick,onContextMenu,onMouseDown,onMouseMove,onMouseUp".split(",").reduce((function(e,n){return n in u()(t)?e[n]=t[n]=t[n].bind(u()(t)):console.warn("responsible canvas doesn't implemented ".concat(n," event")),e}),{}),t.__mouseDownFlag={},t}return k()(e,t),y()(e,[{key:"__onClick",value:function(t){var e=t.shiftKey,n=t.clientX,r=t.clientY,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.positioning.around(n,r),a=o.id,s=o.at;if(a)if(null==s)this.dispatch(T.ACTION.Selection.SELECT(a,0,a,1));else if(e){var c=this.selection.end,u=this.positioning.position(a,s),l=u.left,p=u.top,h=this.positioning.position(c.id,c.at),f=h.left,d=h.top;if(p<d||p==d&&l<=f)this.dispatch(T.ACTION.Selection.START_AT(a,s));else{var y=this.positioning.normalizeSelection(y.end,{id:a,at:s});this.dispatch(T.ACTION.Selection.SELECT(y.start.id,y.start.at,y.end.id,y.end.at))}}else if(i){var m=this.positioning.extendWord(a,s),g=m.start,v=m.end;g&&v?this.dispatch(T.ACTION.Selection.SELECT(g.id,g.at,v.id,v.at)):this.dispatch(T.ACTION.Cursor.AT(a,s))}else this.dispatch(T.ACTION.Cursor.AT(a,s));this.active()}},{key:"__onKeyArrow",value:function(t,e,n){if(n){var r=this.selection,i=r.cursorAt,o=s()(r,["cursorAt"]);o[i]={id:t,at:e};var a=this.positioning.normalizeSelection(o.start,o.end),c=a.start,u=a.end;this.dispatch(T.ACTION.Selection.SELECT(c.id,c.at,u.id,u.at))}else this.dispatch(T.ACTION.Cursor.AT(t,e))}},{key:"__shouldIgnoreMouseDownEvent",value:function(t){var e=t.clientX,n=t.clientY;return e==this.__mouseDownFlag.clientX&&n==this.__mouseDownFlag.clientY}},{key:"onClick",value:function(t){this.__mouseDownFlag.selected||(this.__mouseDownFlag.selected=!1,this.__onClick(t))}},{key:"onContextMenu",value:function(t){var e=this.context.onContextMenu;this.__onClick(t),e&&e(t)}},{key:"onDoubleClick",value:function(t){this.__mouseDownFlag.selected||(this.__mouseDownFlag.selected=!1,this.__onClick(t,!0))}},{key:"onMouseDown",value:function(t){var e=t.clientX,n=t.clientY;console.log("svg mouse down"),this.__mouseDownFlag={clientX:e,clientY:n}}},{key:"onMouseMove",value:function(t){if(1&t.buttons&&!this.__shouldIgnoreMouseDownEvent(t)){var e=this.positioning.around(t.clientX,t.clientY),n=e.id,r=e.at;if(n){var i={id:n,at:r},o=this.selecting.state.start,a=void 0===o?i:o,s=a==i?[]:this.positioning.getRangeRects(a,i);this.selecting.setState({start:a||i,end:i,rects:s,selecting:!0})}}}},{key:"onMouseUp",value:function(t){if(!this.__shouldIgnoreMouseDownEvent(t)){var e=this.selecting.state,n=e.start,r=e.end;if(n&&r){this.selecting.setState({start:void 0,end:void 0,rects:void 0,selecting:!1});var i=this.positioning.normalizeSelection(n,r);n=i.start,r=i.end,this.dispatch(T.ACTION.Selection.SELECT(n.id,n.at,r.id,r.at)),this.__mouseDownFlag.selected=!0}}}},{key:"onKeyArrowUp",value:function(t){var e=t.shiftKey,n=this.cursor,r=this.positioning.prevLine(n.id,n.at),i=r.id,o=r.at;i&&this.__onKeyArrow(i,o,e)}},{key:"onKeyArrowDown",value:function(t){var e=t.shiftKey,n=this.cursor,r=this.positioning.nextLine(n.id,n.at),i=r.id,o=r.at;i&&this.__onKeyArrow(i,o,e)}},{key:"onKeyArrowLeft",value:function(t){var e=t.metaKey,n=t.ctrlKey,r=t.shiftKey;if(e||n){var i=this.cursor,o=this.positioning.positionToLineStart(i.id,i.at);if(i.id!=o.id||i.at!=o.at)return void this.__onKeyArrow(o.id,o.at,r)}this.dispatch(T.ACTION.Cursor.BACKWARD(t))}},{key:"onKeyArrowRight",value:function(t){var e=t.metaKey,n=t.ctrlKey,r=t.shiftKey;if(e||n){var i=this.cursor,o=this.positioning.positionToLineEnd(i.id,i.at);if(i.id!=o.id||i.at!=o.at)return void this.__onKeyArrow(o.id,o.at,r)}this.dispatch(T.ACTION.Cursor.FORWARD(t))}}]),e}(_e);function We(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function ze(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?We(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):We(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Be=G.Locatorize(R(T.dom.Document)),Ue=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getMeasure",F()((function(){var e=t.props.precision,n=void 0===e?1:e;return 1==n?t.context.Measure:function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"lineHeight",value:function(){for(var t,r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];var a=(t=x()(b()(e.prototype),"lineHeight",this)).call.apply(t,[this].concat(i)),s=a.height,c=a.descent;return{height:s*n,descent:c*n}}},{key:"stringWidth",value:function(){for(var t,r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n*(t=x()(b()(e.prototype),"stringWidth",this)).call.apply(t,[this].concat(i))}}]),e}(t.context.Measure)}))),t.computed.templates=[],t}return k()(e,t),y()(e,[{key:"getComposed",value:function(){return P.a.createElement(ht,{document:this})}},{key:"getChildContext",value:function(){var t=this;return ze({},x()(b()(e.prototype),"getChildContext",this).call(this),{Measure:this.getMeasure(),getComposedTemplate:function(e){return t.computed.templates.find((function(t){return t.props.xhref===e}))},prevLayout:function(e){var n=t.computed.composed,r=n.indexOf(e);return n[r-1]},editable:this.state&&this.state.editable})}},{key:"render",value:function(){var t=this.props.canvas;if(!t)return x()(b()(e.prototype),"render",this).call(this);var n=t.props.__sequentialCompose;return void 0===n||n?P.a.createElement(C.Fragment,null,x()(b()(e.prototype),"render",this).call(this),t&&P.a.cloneElement(t,{document:this})):P.a.cloneElement(t,{document:this})}},{key:"appendComposed",value:function(t){ee.isTemplate(t)?this.computed.templates.push(t):-1==this.computed.composed.indexOf(t)&&this.computed.composed.push(t)}},{key:"pages",get:function(){return this.computed.composed}}]),e}(Be);p()(Ue,"propTypes",ze({},Be.prototype,{canvas:j.a.node})),p()(Ue,"defaultProps",ze({},Be.defaultProps,{canvas:P.a.createElement(ht,null)})),p()(Ue,"contextTypes",ze({},Be.contextTypes,{Measure:j.a.func})),p()(Ue,"childContextTypes",ze({},Be.childContextTypes,{Measure:j.a.func,getComposedTemplate:j.a.func,prevLayout:j.a.func,editable:j.a.any}));var qe,Ge,He=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state=ze({mode:"content"},t.state),t.computed.shouldContinueCompose=!0,t}return k()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t,e){var n=t.hash,r=t.viewport,i=t.editable;return ze({viewport:r,hash:n,editable:void 0===i||i},n!=e.hash&&{mode:"content",y:0})}}]),y()(e,[{key:"shouldContinueCompose",value:function(t){if(!1===this.computed.shouldContinueCompose)return t&&this.notifyNotAllComposed(t),!1;if(!this.state.editable)return!0;var e=Object(T.getSelection)(this.context.activeDocStore.getState()),n=this.canvas.availableBlockSize()||!this.isSelectionComposed(e);return n||(this.computed.shouldContinueCompose=!1,t&&this.notifyNotAllComposed(t)),n}},{key:"isAtomCollector",value:function(){return!1}},{key:"cancelUnusableLastComposed",value:function(){this.computed.templates=[],this.computed.shouldContinueCompose=!0,x()(b()(e.prototype),"cancelUnusableLastComposed",this).apply(this,arguments)}},{key:"isSelectionComposed",value:function(t){var e=this,n=t.start,r=t.end,i=function(t){return!t||e.composers.has(t)&&e.getComposer(t).isAllChildrenComposed()};return i(n.id)&&i(r.id)}},{key:"compose4Scroll",value:function(t){this.setState({mode:"scroll",y:t})}},{key:"compose4Selection",value:function(t){this.setState({mode:"selection",selection:t})}},{key:"canvas",get:function(){var t=this.props.canvas,e=t.type,n=new e(ze({},t.props,{document:this}));return n.state=e.getDerivedStateFromProps(n.props,n.state),n}}]),e}(Yt(Ue,{continuable:!0}));function Xe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Ye(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Xe(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Xe(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(He,"defaultProps",ze({},Ue.defaultProps,{canvas:P.a.createElement(Ne,null)})),p()(He,"contextTypes",ze({},Ue.contextTypes,{activeDocStore:j.a.any}));var Qe=N(T.dom.Section),Ve=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).computed.named={},t}return k()(e,t),y()(e,[{key:"getChildContext",value:function(){var t=this;return Ye({},x()(b()(e.prototype),"getChildContext",this).call(this),{prevLayout:function(e){var n=t.computed.composed;return n[n.indexOf(e)-1]}})}},{key:"named",value:function(t){return this.computed.named[t]}},{key:"createLayout",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=(arguments.length>2&&arguments[2],Ye({},e,{id:this.props.id,i:this.computed.composed.length})),i=this.topIndex;return"number"==typeof i&&(r.I=i),this.props.createLayout.bind(this)(r,Ye({},n,{parent:this,getComposer:function(e){return t.context.getComposer(e)}}))}},{key:"createComposed2Parent",value:function(t){return t}},{key:"nextAvailableSpace",value:function(t){var e,n=(e=this.current).nextAvailableSpace.apply(e,arguments);if(!n){var r=this.createLayout(void 0,{frame:n.frame},t);if(r)return this.computed.composed.push(r),this.context.parent.appendComposed(this.createComposed2Parent(r)),this.nextAvailableSpace.apply(this,arguments)}return n}},{key:"appendComposed",value:function(t){var e=t.props,n=e.named,r=e.height;if(!n){var i,o=(i=this.current).appendComposed.apply(i,arguments);return!1===o?this.nextAvailableSpace({height:r})?1:Zt.IMMEDIATE_STOP:Number.isInteger(o)?o:void 0}this.computed.named[n]=arguments[0]}},{key:"onAllChildrenComposed",value:function(){var t=this.computed.composed[this.computed.composed.length-1];t.balanceable&&t.balance(),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"isSection",get:function(){return!0}},{key:"current",get:function(){if(0==this.computed.composed.length){var t=this.createLayout();t&&(this.computed.composed.push(t),this.context.parent.appendComposed(this.createComposed2Parent(t)))}return this.computed.composed[this.computed.composed.length-1]}},{key:"topIndex",get:function(){for(var t=this.context.parent;t;){if(t.isFrame||t.isSection)return;if(!t.context||!t.context.parent)return t.computed.composed.length;t=t.context.parent}}}]),e}(Qe);p()(Ve,"defaultProps",Ye({},Qe.defaultProps,{createLayout:function(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return tt()(this.constructor.Layout,[Ye({},this.props.layout,{},t)].concat(n))}})),p()(Ve,"childContextTypes",Ye({},Qe.childContextTypes,{prevLayout:j.a.func})),p()(Ve,"Layout",(Ge=qe=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){var t=this.props,n=t.i,r=t.I,i={margin:t.margin,i:n,key:n};return null!=r&&(i.I=r),P.a.cloneElement(x()(b()(e.prototype),"createComposed2Parent",this).call(this),i)}},{key:"clone4Space",value:function(t){if(t.context.frame==this.context.frame)return this;var e=this.clone({space:t.props.space});return e.context.frame=t.context.frame,e}}]),e}(Zt),p()(qe,"displayName","frame-section"),Ge));var Ke=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"cancelUnusableLastComposed",value:function(t){var e=t.hash!=this.props.hash;e&&this._cancelChangedPart.apply(this,arguments),this._cancelUntilLastAllChildrenComposed.apply(this,arguments)}},{key:"appendLastComposed",value:function(){var t=this,n=this.computed.lastComposed;this.computed.composed=[],this.computed.lastComposed=[];var r=n.findIndex((function(e,r,i,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r==n.length-1;if(a&&e.isEmpty())return!0;var s=t.createLayout();return!e.getSpace().equals(s.getSpace())||(e=e.clone4Space(s),t.computed.composed.splice(r,1,e),t.context.parent.appendComposed(t.createComposed2Parent(e)),!1)}));if(0==r)return this.anchors=[],x()(b()(e.prototype),"cancelUnusableLastComposed",this).call(this,{changed:!0}),!1;if(-1==r){if(this.isAllChildrenComposed())return!0}else delete this.computed.allComposed;var i=this.current.lastLine.props["data-content"];return this.childrenArray(this.props.children).findIndex((function(t){return t&&t.props.id==i}))}},{key:"_cancelChangedPart",value:function(t){var e=this,n=-1,r=this.childrenNeedRecompose(t,this.props),i=this.computed.lastComposed.findIndex((function(t){var i=t.lines;return-1!=(n=i.findIndex((function(t){return r.includes(e.childIdOf(t))})))}));this._keepLastComposedUntil(i,n)}},{key:"_cancelUntilLastAllChildrenComposed",value:function(){var t=this,e=-1,n=this.computed.lastComposed.findLastIndex((function(n){var r=n.lines;return-1!=(e=r.findLastIndex((function(e,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.childIdOf(e),a=t.context.getComposer(o);return a&&a.isAllChildrenComposed()})))}));this._keepLastComposedUntil(n,e+1)}},{key:"_keepLastComposedUntil",value:function(t,e){var n=this.computed.lastComposed;-1==t||t==n.length-1&&e>=n[t].lines.length||(delete this.computed.allComposed,this.computed.lastComposed=n.slice(0,t+1),this.computed.lastComposed[t].removeFrom(e))}}]),e}(Yt(Ve,{stoppable:!0})),Je=n(23),Ze=n.n(Je);function $e(t){for(var e,n=new Ze.a(t),r=0,i=[];e=n.nextBreak();)i.push(t.slice(r,e.position)),e.required,r=e.position;return i}function tn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function en(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?tn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):tn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var nn=N(T.dom.Paragraph),rn=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getDefaultMeasure",F()((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.props.defaultStyle;return new t.context.Measure(e)}))),t.computed.atoms=[],Object.defineProperties(u()(t),{lines:{get:function(){return this.computed.composed},set:function(t){this.computed.composed=t}},atoms:{get:function(){return this.computed.atoms},set:function(t){return this.computed.atoms=t}}}),t}return k()(e,t),y()(e,[{key:"appendComposed",value:function(t){var e=this.atoms[this.atoms.length-1];if(e&&e.props.mergeOpportunity&&t.props.mergeOpportunity){var n=e.props.mergeOpportunity,r=t.props.mergeOpportunity,i=$e("".concat(n).concat(r));switch(i.length){case 1:var o=Math.max(e.props.height,t.props.height),a=Math.max(e.props.descent,t.props.descent),s=e.props.width+t.props.width,c=e.props,u=c["data-content"],l=c.children,p=c.mergeOpportunity;return void this.atoms.splice(-1,1,P.a.createElement(ut,{width:s,height:o,descent:a,mergeOpportunity:"".concat(p).concat(t.props.mergeOpportunity)},u?[P.a.cloneElement(e,{key:0}),P.a.cloneElement(t,{x:e.props.width,key:1})]:[].concat(l,[P.a.cloneElement(t,{x:e.props.width,key:l.length-1})])));case 2:if(n===i[0])break;default:console.warn('error: "'.concat(n).concat(r,'" break opportunities: [').concat(i.join(","),"]"))}}this.atoms.push(t)}},{key:"onAllChildrenComposed",value:function(){var t=this.props.End,n=void 0===t?"":t,r=this.getDefaultMeasure();this.atoms.push(P.a.createElement(st,it()({},r.defaultStyle,{width:r.stringWidth(n),minWidth:0,children:n,className:"ender"}))),this.commit(),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"rollbackLines",value:function(t){this.lines.splice(-t)}},{key:"commit",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_SAFE_INTEGER,r=this.context.parent,i=this.computed.atoms,o=function(e){var n=t.lines,r=t.atoms,i=n.findIndex((function(t){return r.indexOf(t.firstAtom)==e}));t.rollbackLines(n.length-i)},a=function(e){return t.currentLine.freeze(),r.appendComposed(t.createComposed2Parent(t.currentLine,e))},s=function(e){var n=t.lines,r=n[n.length-e];return i.indexOf(r.firstAtom)},c=function(){var e=t.createLine.apply(t,arguments);return!!e&&(t.lines.push(e),e)},u=i.length,l=5,p=0;if(c()){var h=function e(){for(var r,h,f=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,d=0,y=0,m=f;m<u;){if(m>n)return;if(m==d){if(++y>l)throw Error("it may be dead loop on ".concat(m,"th atoms"))}else d=m,y=0;if("number"!=typeof(r=t.currentLine.appendAtom(i[m],m))){if(!1===r){if(h=a(!1),Number.isInteger(h)){if(h==qt.IMMEDIATE_STOP)return qt.IMMEDIATE_STOP;if(r=s(h),Number.isInteger(r)){if(o(r),!c())return;m=r}else;}else if(!c())return}else if(++m>n&&a(m==i.length)==qt.IMMEDIATE_STOP)return qt.IMMEDIATE_STOP}else if(t.rollbackLines(1),!c({height:r}))return}if(++p>l)console.error("it may be dead loop on since commit nested ".concat(p,", ignore and continue"));else if((1==t.lines.length||!t.currentLine.isEmpty())&&(h=a(!0),Number.isInteger(h))){if(h==Zt.IMMEDIATE_STOP)return Zt.IMMEDIATE_STOP;if(r=s(h),o(r),!c())return;e(r)}};return h(e)}}},{key:"recommit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lines,e=this.atoms,n=this.lines;t=n.slice(-t.length),this.rollbackLines(t.length);var r=e.findIndex((function(e){return e==t[0].firstAtom})),i=e.slice(r+1).findIndex((function(e){return e==t[t.length-1].lastAtom}))+r+1;return this.commit(r,i==e.length-1?void 0:i)}},{key:"getNumberingAtom",value:function(){var t=this.props,e=t.numbering.style,n=t.indent.firstLine,r=void 0===n?0:n,i=t.id,o=this.context,a=o.Measure,s=o.numbering,c=new a(e).defaultStyle;return P.a.createElement(st.Dynamic,it()({},c,{key:"numbering",className:"numbering",x:r,width:-r,children:function(){return s(i)}}))}},{key:"nextAvailableSpace",value:function(t){var n=x()(b()(e.prototype),"nextAvailableSpace",this).call(this,t);if(!n)return n;var r=n.width,i=n.left,o=void 0===i?0:i,a=n.right,s=void 0===a?r:a,c=this.props,u=c.indent,l=u.left,p=void 0===l?0:l,h=u.right,f=void 0===h?0:h,d=u.firstLine,y=void 0===d?0:d,m=c.numbering,g=0==this.lines.length;return n.clone({left:o+p+(g&&!m&&y||0),right:s-f})}},{key:"createLine",value:function(t){var e=this.nextAvailableSpace(t);if(!e)return e;var n=this.props,r=n.numbering,i=n.align,o=n.spacing,a=o.lineHeight,s=o.top,c=0==this.lines.length;return new this.constructor.Line({space:e,positioned:c&&r?[this.getNumberingAtom()]:[],top:c?s:void 0,lineHeight:a,align:i},{parent:this})}},{key:"createComposed2Parent",value:function(t,e){var n=t.height,r=t.width,i=t.anchor,o=t.topToBlockOffset,a=this.props,s=a.numbering,c=a.indent,u=c.left,l=void 0===u?0:u,p=c.right,h=void 0===p?0:p,f=c.firstLine,d=void 0===f?0:f,y=a.spacing.bottom,m=void 0===y?0:y,g=a.orphan,v=a.widow,b=a.keepWithNext,w=a.keepLines,x=1==this.lines.length;return P.a.createElement(ut,{className:"line",height:o+n+(e&&m||0),width:l+(x&&!s&&d||0)+r+h,pagination:{id:this.props.id,orphan:g,widow:v,keepWithNext:b,keepLines:w,i:this.lines.length,last:e},anchor:i},P.a.createElement(ut,{x:l+(x&&!s&&d||0),y:o,width:r,height:n},t.render(e)))}},{key:"enderWidth",get:function(){return this.atoms[this.atoms.length-1].props.width}},{key:"currentLine",get:function(){return 0==this.lines.length&&this.lines.push(this.createLine()),this.lines[this.lines.length-1]}}]),e}(nn);p()(rn,"contextTypes",en({},nn.contextTypes,{Measure:j.a.func,numbering:j.a.func})),p()(rn,"propTypes",en({},nn.propTypes,{defaultStyle:j.a.object.isRequired})),p()(rn,"Line",function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"currentX",get:function(){return this.inlineSegments.currentX}}]),e}(qt.Inline));var on=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"rollbackLines",value:function(t){x()(b()(e.prototype),"rollbackLines",this).call(this,t),this.computed.lastComposed.splice(-t)}},{key:"cancelUnusableLastComposed",value:function(t){var n=t.hash,r=t.changed,i=void 0===r?n!=this.props.hash:r;i&&(this.atoms=[],x()(b()(e.prototype),"cancelUnusableLastComposed",this).apply(this,arguments))}},{key:"appendLastComposed",value:function(){var t=this,e=this.lines;this.lines=[];var n=this.computed.lastComposed.findIndex((function(n,r){var i=e[r],o=t.createLine({height:n.props.height});if(!o)return!0;var a=o.props.space;return i.isFitTo(a)?(i=i.clone4Space(a),t.lines.push(i),t.context.parent.appendComposed(n),!1):(t.computed.lastComposed.splice(r),!0)}));return 0==n?(this.cancelUnusableLastComposed({changed:!0}),!1):(n>0&&this.commit(this.atoms.indexOf(e[n].firstAtom)),!0)}}]),e}(Yt(rn,{stoppable:!0}));function an(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function sn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?an(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):an(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var cn=W(T.dom.Text),un=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"createMeasure",F()((function(t,e,r,i){var o=new(0,n.context.Measure)({fonts:t,size:e,bold:r,italic:i}),a=o.stringWidth.bind(o),s=new Map;return o.stringWidth=function(t){if(s.has(t))return s.get(t);var e=a(t);return s.set(t,e),e},o}))),n}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this;try{if(this.props.vanish)return null;var e=this.defaultStyle,n=this.measure,r=n.stringWidth(" "),i=0;return $e(this.text).forEach((function(o,a,s,c){var u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:s.length-1==a;o.split(/(\s)/).filter((function(t){return!!t})).forEach((function(o,s,c,l){var p=arguments.length>4&&void 0!==arguments[4]?arguments[4]:c.length-1==s,h=" "==o,f=!!o.endsWith(",")&&o.substring(0,o.length-1);t.appendComposed(sn({},e,{className:h?"whitespace":void 0,width:h?r:n.stringWidth(o),minWidth:h?0:f?n.stringWidth(f):void 0,"data-endat":i+=o.length,children:o,mergeOpportunity:(s+a==0||u&&p)&&!h&&o}))}))})),null}finally{this.onAllChildrenComposed()}}},{key:"createComposed2Parent",value:function(t){return P.a.createElement(st,t)}},{key:"text",get:function(){var t=this.props.children,e=void 0===t?"":t;return Array.isArray(e)?e.join(""):e}},{key:"measure",get:function(){var t=this.props,e=t.fonts,n=t.size,r=t.bold,i=t.italic;return this.createMeasure(e,n,r,i)}},{key:"defaultStyle",get:function(){var t=this.props,e=t.color,n=t.highlight,r=(t.vanish,t.border),i=t.underline,o=t.strike;return sn({},this.measure.defaultStyle,{color:e,highlight:n,border:r,underline:i,strike:o})}}]),e}(cn);p()(un,"contextTypes",sn({},cn.contextTypes,{Measure:j.a.func}));var ln=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"isAtomChanged",value:function(t){return!!x()(b()(e.prototype),"isAtomChanged",this).apply(this,arguments)||!Object(me.shallowEqual)(t,this.props)}},{key:"render",value:function(){return 0==this.text.length?(this.appendComposed(sn({},this.defaultStyle,{width:0,minWidth:0,"data-endat":0,children:""})),this.onAllChildrenComposed(),null):x()(b()(e.prototype),"render",this).call(this)}}]),e}(Yt(un)),pn=n(26),hn=n.n(pn),fn=n(27),dn=n.n(fn),yn=n(28),mn=n.n(yn),gn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"toString",value:function(){var t=this;return this.__evaluateStack(),F()((function(n){return x()(b()(e.prototype),"toString",t).call(t)}))(this.segments.map((function(t){return t.join("")})).join(""))}},{key:"bounds",value:function(){return this.contour().reduce((function(t,e){var n=t.left,r=t.top,i=t.right,o=t.bottom,a=nt()(e,2),s=a[0],c=a[1];return{left:Math.min(n,s),top:Math.min(r,c),right:Math.max(i,s),bottom:Math.max(o,c)}}),{left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER})}},{key:"contour",value:function(){var t=this;arguments.length>0&&void 0!==arguments[0]&&arguments[0],arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.toString();return F()((function(e,n){return mn()(t.segments).map((function(t){return t.map((function(t){var e=nt()(t,2),n=e[0],r=e[1];return[Math.ceil(n),Math.ceil(r)]}))})).map((function(t){return dn()(t,e)})).reduce((function(t,e){return[].concat(t,e)}),[])}))()}},{key:"intersects",value:function(t,e){var n=this.contour(e);return n.slice(1).map((function(t,e){var r=nt()(t,2),i=r[0],o=r[1],a=nt()(n[e],2);return{x1:a[0],y1:a[1],x2:i,y2:o}})).map((function(e){return function(t,e){var n=t.x1,r=t.x2,i=e.x1,o=e.x2,a=t.y1,s=t.y2,c=e.y1,u=e.y2,l=(n-r)*(c-u)-(a-s)*(i-o),p=(n*s-a*r)*(i-o)-(n-r)*(i*u-c*o),h=(n*s-a*r)*(c-u)-(a-s)*(i*u-c*o);if(0==l);else{var f={x:p/l,y:h/l};if(vn(f.x,n,r)&&vn(f.y,a,s)&&vn(f.x,i,o)&&vn(f.y,c,u))return f}}(e,t)})).filter((function(t){return!!t}))}},{key:"center",value:function(){var t=this.bounds(),e=t.left,n=t.right,r=t.top,i=t.bottom,o=t.x,a=void 0===o?(e+n)/2:o,s=t.y;return{x:a,y:void 0===s?(r+i)/2:s}}},{key:"clone",value:function(){return new this.constructor(this.toString())}},{key:"size",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=this.bounds(),n=e.left,r=e.right,i=e.top,o=e.bottom,a=e.width,s=void 0===a?r-n:a,c=e.height,u=void 0===c?o-i:c;return{width:s+t,height:u+t}}}],[{key:"fromRect",value:function(t){var e=t.x,n=t.y,r=t.width,i=t.height;return new this("M".concat(e," ").concat(n," h").concat(r," v").concat(i," h").concat(-r,"z"))}}]),e}(hn.a),vn=function(t,e,n){return t>=e&&t<=n||t>=n&&t<=e};function bn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function wn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?bn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):bn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var xn=j.a.oneOf("ew,ns,nwse,nesw".split(",").reduce((function(t,e){return t.splice(0,0,e,"-"+e),t}),[])),On=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this,e=this.state,n=e.resizing,r=e.cursor,i=this.props,o=i.children,a=i.spots,s=void 0===a?[]:a,c=i.onEnd,u=i.direction;return n?P.a.createElement(se,{onMouseUp:function(e){e.stopPropagation(),t.setState({resizing:!1}),c&&c()},onMouseMove:function(e){e.stopPropagation(),t.resize(e)},style:{cursor:r}},o,s.map((function(t){return P.a.createElement(Pn,it()({key:t.direction},t))}))):P.a.createElement(C.Fragment,null,u?P.a.cloneElement(P.a.Children.only(o),{onMouseDown:function(e){return t.startResize(u,e)}}):o,s.map((function(e){return P.a.createElement(Pn,it()({key:e.direction},e,{onMouseDown:function(n){return t.startResize(e.direction,n)}}))})),"}")}},{key:"startResize",value:function(t,e){e.stopPropagation();var n=e.clientX,r=e.clientY,i=e.target.style.cursor,o=this.props.onStart;this.setState({resizing:t,cursor:i}),o&&o(),this.left=n,this.top=r}},{key:"resize",value:function(t){var e=t.clientX,n=t.clientY,r=this.props.onResize,i=this.state.resizing,o=e-this.left,a=n-this.top;switch(i){case"-ns":a*=-1;case"ns":if(a&&!1===r({y:-a}))return;break;case"-ew":o*=-1;case"ew":if(o&&!1===r({x:o}))return;break;case"-nwse":o*=-1;case"nwse":if(o&&a&&!1===r({x:-o,y:a}))return;break;case"-nesw":o*=-1;case"nesw":if(o&&a&&!1===r({x:o,y:a}))return}this.left=e,this.top=n}}]),e}(C.Component);p()(On,"propTypes",{direction:xn,onResize:j.a.func.isRequired,spots:j.a.arrayOf(j.a.shape({x:j.a.number.isRequired,y:j.a.number.isRequired,direction:xn,width:j.a.number,height:j.a.number}))});var kn,Cn,Pn=function(t){var e=t.width,n=void 0===e?5:e,r=t.height,i=void 0===r?5:r,o=t.x,a=t.y,c=t.direction,u=t.style,l=void 0===u?{}:u,p=s()(t,["width","height","x","y","direction","style"]);return P.a.createElement("rect",wn({},p,{width:n,height:i,x:o-n/2,y:a-i/2,style:wn({fill:"white",stroke:"lightgray",strokeWidth:1,cursor:"".concat(c.replace("-",""),"-resize")},l)}))},En=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"state",{rotating:!1}),n}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this,e=this.props,n=e.r,r=void 0===n?12:n,i=e.x,o=(e.y,e.onEnd),a=e.degree,s=void 0===a?0:a,c=e.onRotate,u={width:2*r,height:2*r,x:i-r,y:-2*r,style:{fill:"white",stroke:"lightgray",strokeWidth:1}};return this.state.rotating?P.a.createElement(C.Fragment,null,P.a.createElement("g",{ref:"locator"},P.a.createElement("text",{x:i+r,y:-20},s),P.a.createElement("use",it()({xlinkHref:"#rotator"},u))),P.a.createElement(se,{cursor:"crosshair",onMouseUp:function(e){t.setState({rotating:void 0}),o&&o(),e.stopPropagation()},onMouseMove:function(t){c(t),t.stopPropagation()}})):P.a.createElement("use",it()({xlinkHref:"#rotator"},u,{onMouseDown:function(e){return t.setState({rotating:!0})}}))}}]),e}(C.Component);function jn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Sn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?jn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):jn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(En,"propTypes",{x:j.a.number.isRequired,r:j.a.number,degree:j.a.number});var An=Object(me.compose)(Object(T.whenSelectionChange)(),Object(me.shouldUpdate)((function(t,e){var n,r,i=(null===(n=t.selection)||void 0===n?void 0:n.position.id)!=(null===(r=e.selection)||void 0===r?void 0:r.position.id),o=function(t){var e,n;return!!(null===(e=t.selection)||void 0===e?void 0:e.getComposer(null===(n=t.selection)||void 0===n?void 0:n.position.id).closest((function(e){return e.props.id==t.id})))},a=t.composedUUID!=e.composedUUID,s=o(t),c=o(e);return(a||i)&&(s||c)})))((Cn=kn=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return k()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t){var e=t.id,n=t.selection;if(!n)return{};var r,i,o=function(t){return n.positioning.getComposer(t)},a=n.position.id,s=o(e);return{type:s.getComposeType(),showFocus:!!o(a).closest((function(t){return t.props.id==e})),isAnchor:"anchor"==s.closest((function(t){return t!=s&&(t.isFrame||t.isSection)||"anchor"==t.getComposeType()})).getComposeType(),isEditableCursor:(r=function(t){return"paragraph"==t.getComposeType()},i=o(a).closest((function(t){return r(t)||t.props.id==e})),i&&r(i))}}}]),y()(e,[{key:"render",value:function(){var t=this.props,e=t.selection,n=t.children,r=t.rotate,i=t.scale,o=t.translate,a=this.context.editable,s=this.state.showFocus;if(!e||!a||!s)return P.a.createElement(ut,Sn({rotate:r,scale:i},o),n);var c=n.props,u=c.width,l=c.height,p=new T.ReactQuery(n),h=p.findFirst(".content").get(0),f=this.props,d=f.id,y=f.degree,m=f.dispatch,g=f.positioning,v=void 0===g?e.positioning:g,b=f.path,w=void 0===b?"M0 0 h".concat(u," v").concat(l," h").concat(-u," Z"):b,x=f.resizable,O=void 0===x?[{x:0,y:0,direction:"nwse"},{x:u/2,y:0,direction:"ns"},{x:u,y:0,direction:"nesw"},{x:u,y:l/2,direction:"ew"},{x:u,y:l,direction:"-nwse"},{x:u/2,y:l,direction:"-ns"},{x:0,y:l,direction:"-nesw"},{x:0,y:l/2,direction:"-ew"}]:x,k=f.rotatable,E=void 0===k?{x:u/2,y:l/2,degree:Math.ceil(100*y)/100}:k,j=f.focusableContent,S=void 0===j||j,A=f.movable,I=void 0===A||A,D=this.state,F=D.type,M=D.isAnchor,L=D.isEditableCursor,R=P.a.createElement(C.Fragment,null,P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement("path",{d:w,fill:"none",stroke:"lightgray"})),I?P.a.createElement(C.Fragment,null,!S&&h,P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement(ue,{isAnchor:M,onMove:function(t){return m(T.ACTION.Selection.MOVE(Sn({},t,{id:d,type:F})))}},P.a.createElement("path",{d:w,fill:"white",fillOpacity:.01,cursor:"move"}))),S&&h):h,P.a.createElement(ut,{"data-nocontent":!0},E&&P.a.createElement(En,it()({},E,{onRotate:function(t){var e=t.clientX,n=t.clientY,r=v.asCanvasPoint({left:e,top:n}),i=v.position(d,0),o=E.x+i.x,a=E.y+i.y,s=parseInt(180*Math.atan2(r.x-o,-r.y+a)/Math.PI);m(T.ACTION.Entity.UPDATE({id:d,type:F,rotate:s<0?s+360:s}))}})),O&&P.a.createElement(On,{spots:O,onResize:function(t){var e=t.x,n=t.y,r=null;if(void 0===n)r={width:u+e};else if(void 0===e)r={height:l+n};else{var i=1+Math.max(Math.abs(e)/u,Math.abs(n)/l)*e/Math.abs(e);r={width:u*i,height:l*i}}m(T.ACTION.Entity.UPDATE({id:d,type:F,size:r}))}})));return P.a.createElement(ut,L?{}:Sn({scale:i,rotate:r},o),p.replace(h,R).get(0))}}]),e}(C.Component),p()(kn,"propTypes",{width:j.a.number,height:j.a.number,path:j.a.string,resizable:j.a.arrayOf(j.a.object),rotatable:j.a.shape({x:j.a.number.isRequired,y:j.a.number.isRequired,r:j.a.number,degree:j.a.number}),movable:j.a.bool,id:j.a.string}),p()(kn,"contextTypes",{editable:j.a.any}),Cn));function Tn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function In(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Tn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Tn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Dn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"availableSpace",value:function(){return this.contentBox}},{key:"createComposedShape",value:function(t,e){var n=this.props,r=n.margin,i=r.left,o=void 0===i?0:i,a=r.top,s=void 0===a?0:a,c=n.solidFill,u=void 0===c?"transparent":c,l=n.blipFill,p=(l=void 0===l?{}:l).url,h=n.outline,f=void 0===h?{width:0}:h,d=n.fill,y=void 0===d?{fill:u}:d,m=n.rotate,g=n.scale,v=n.id,b=(n.hash,this.transform(this.getPath().clone())),w=b.width,x=b.height,O=b.rotate,k=b.translate,C=b.geometry;return P.a.createElement(ut,{width:w,height:x,geometry:C},P.a.createElement(An,In({width:w,height:x,scale:g,rotate:O,translate:k,degree:m,id:v},e),P.a.createElement(ut,this.outlineBox,P.a.createElement(ut,{x:this.strokeWidth/2,y:this.strokeWidth/2},P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement("path",it()({d:this.getPath().toString(),strokeWidth:this.strokeWidth,stroke:f.solidFill},y)),p&&P.a.createElement("image",In({},this.contentBox,{x:o,y:s,xlinkHref:p,preserveAspectRatio:"none"}))),P.a.createElement(ut,{x:this.strokeWidth/2+o,y:this.strokeWidth/2+s,className:"content"},t)))))}},{key:"getPath",value:function(){return F()((function(t){return new gn(t)}))(this.props.geometry)}},{key:"transform",value:function(t){var e=this.props,n=e.rotate,r=e.scale,i={};if(n){var o=t.bounds(),a=t.center(),s=a.x,c=a.y;t.rotate(n,s,c);var u=t.bounds();n="".concat(n," ").concat(s," ").concat(c),i.x=parseInt(o.left-u.left),i.y=parseInt(o.top-u.top),t.translate(i.x,i.y),t.origin={x:i.x,y:i.y}}r&&t.scale(r);var l=t.size(t.strokeWidth=this.strokeWidth);return{width:l.width,height:l.height,geometry:t,rotate:n,translate:i}}},{key:"strokeWidth",get:function(){var t=this.props.outline,e=(t=void 0===t?{}:t).width;return(void 0===e?0:e)||0}},{key:"contentBox",get:function(){var t=this.props.margin,e=t.right,n=void 0===e?0:e,r=t.left,i=void 0===r?0:r,o=t.top,a=void 0===o?0:o,s=t.bottom,c=void 0===s?0:s,u=this.getPath().size(),l=u.width,p=u.height,h=this.strokeWidth;return{width:l-h/2-n-i,height:p-h/2-a-c}}},{key:"outlineBox",get:function(){return this.getPath().size(this.strokeWidth)}}]),e}(C.Component),Fn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getPath",value:function(){var t=this.props,e=t.width,n=t.height;return new gn("M0 0h".concat(e,"v").concat(n,"h").concat(-e,"z"))}}]),e}(Dn),Mn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getPath",value:function(){var t=this.props,e=t.width,n=t.height,r=t.cx,i=void 0===r?e/2:r,o=t.cy,a=void 0===o?n/2:o,s=t.rx,c=void 0===s?i:s,u=t.ry,l=void 0===u?a:u;return new gn("M".concat(i-c,",").concat(a,"a").concat(c,",").concat(l," 0 1,0 ").concat(2*c,",0a").concat(c,",").concat(l," 0 1,0 -").concat(2*c,",0"))}}]),e}(Dn),Ln=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),e}(Mn);function Rn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var _n=Yt(N(T.dom.Shape)),Nn=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"focusable",!0),p()(u()(n),"__getGeometry",F()((function(t){var e=n.props.geometry,r=void 0===e?"rect":e;return new(n.constructor[r]||n.constructor.custom)(n.props,n.context)}))),p()(u()(n),"__getSpace",F()((function(t){var e=t.availableSpace(),r=e.width,i=e.height;return qt.ConstraintSpace.create({width:r,height:i}).clone({edges:p()({page:{left:0,right:r,top:0,bottom:i}},n.getComposeType(),{left:0,right:r,top:0,bottom:i})})}))),n}return k()(e,t),y()(e,[{key:"getSpace",value:function(){return this.__getSpace(this.geometry)}},{key:"recomposable_createComposed2Parent",value:function(){var t=this.props,e=t.x,n=t.y,r=t.z,i=P.a.createElement(C.Fragment,null,[P.a.cloneElement(this.positionLines(this.lines),{key:"content"})].concat(this.anchors.map((function(t,e){return P.a.cloneElement(t,{key:e})}))).filter((function(t){return!!t})).sort((function(t,e){var n=t.props.z,r=void 0===n?0:n,i=e.props.z;return r-(void 0===i?0:i)})));return P.a.cloneElement(this.geometry.createComposedShape(i,{composedUUID:this.computed.composedUUID}),{className:"frame","data-frame":this.uuid,x:e,y:n,z:r})}},{key:"geometry",get:function(){return this.__getGeometry(this.computed.composedUUID)}}]),e}(Zt);function Wn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function zn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Wn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Wn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Nn,"displayName",_n.displayName),p()(Nn,"propTypes",_n.propTypes),p()(Nn,"defaultProps",_n.defaultProps),p()(Nn,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Rn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Rn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Zt.contextTypes,{editable:j.a.any})),p()(Nn,"custom",Dn),p()(Nn,"rect",Fn),p()(Nn,"ellipse",Mn),p()(Nn,"circle",Ln);var Bn=Yt(W(T.dom.Image)),Un=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"focusable",!0),n}return k()(e,t),y()(e,[{key:"getShape",value:function(){var t=this.props,e=t.width,n=t.height,r=t.id;return new Nn(zn({width:e,height:n,id:r},this.props.outline,{margin:{},children:null}),{context:this.context})}},{key:"createComposed2Parent",value:function(){var t=this.getShape().geometry,e=t.contentBox,n=e.width,r=e.height,i=this.props.src,o=P.a.createElement(yt,{width:n,height:r,xlinkHref:i,preserveAspectRatio:"none"});return t.createComposedShape(o,{focusableContent:!1,composedUUID:this.computed.composedUUID})}}]),e}(Bn);p()(Un,"contextTypes",zn({},Bn.contextTypes,{editable:j.a.any}));var qn,Gn,Hn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"createComposed2Parent",value:function(t){var e=this.props,n=e.width,r=e.indent;return P.a.createElement(ut,{width:n,height:t.props.height},P.a.cloneElement(t,{x:r}))}}]),e}(N(T.dom.Table));function Xn(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Yn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Xn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Xn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Qn=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getColumns",F()((function(e){var n=u()(t);return new Proxy(e.map((function(t){return new Proxy(t,{get:function(t,r){switch(r){case"currentRank":var i=n.ranks,o=e.indexOf(t);return i[i.findLastIndex((function(t){return!!t.slots[o]}))+1];case"firstSlot":var a=n.ranks,s=e.indexOf(t);return a.find((function(t){return!!t.slots[s]})).slots[s]}return t[r]}})})),{get:function(t,e){return e in t?t[e]:"string"==typeof e?t.find((function(t){return t.id?t.id==e:t.id=e})):void 0}})}))),Object.defineProperties(u()(t),{ranks:{get:function(){return this.computed.composed},set:function(t){this.computed.composed=t}}}),t}return k()(e,t),y()(e,[{key:"findOrCreateRankForColumn",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=n.height,i=void 0===r?0:r,o=t.currentRank;for(o&&(o=this.ranks.slice(this.ranks.indexOf(o)).find((function(t){return t.space.height>=i})));!o;){var a=x()(b()(e.prototype),"nextAvailableSpace",this).call(this);if(!a)return;this.ranks.push(o=new this.constructor.Rank({space:a,children:new Array(this.getColumns(this.props.cols).length).fill(null)})),this.context.parent.appendComposed(this.createComposed2Parent(o))}return o}},{key:"nextAvailableSpace",value:function(t){var e=t.id,n=s()(t,["id"]),r=this.props.keepLines,i=this.getColumns(this.props.cols)[e],o=this.findOrCreateRankForColumn(i,n);if(!o)return!1;var a=o.space,c=a.left,u=a.height,l=i.x,p=void 0===l?0:l,h=i.width,f=c+p;return a.clone({left:f,right:f+h,height:r?Number.MAX_SAFE_INTEGER:u})}},{key:"appendComposed",value:function(t){var e=this.getColumns(this.props.cols),n=e[t&&t.props.id],r=this.findOrCreateRankForColumn(n,{height:this.getHeight([t])});r&&r.insertAt(t,e.indexOf(n))}},{key:"onAllChildrenComposed",value:function(){var t=this;this.ranks=this.ranks.filter((function(t){if(!t.isEmpty())return!0;t.delayout()}));var n=this.getColumns(this.props.cols);this.ranks.forEach((function(e,r,i){var o=t.getHeight(e.slots);e.slots.forEach((function(t,e,r){return!t&&(r[e]=n[e].firstSlot.cloneAsEmpty())})),e.relayout(o,i.length-1==r)})),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"createComposed2Parent",value:function(t){var e=t.props,n=e.space.height,r=e.children,i=this.props,o=i.cols,a=i.id,s=this.width;return P.a.createElement(this.constructor.Rank,{height:n,width:s,row:a,children:r,cols:o})}},{key:"getHeight",value:function(t){return Math.max.apply(Math,[this.props.height||0].concat(t.filter((function(t){return!!t})).map((function(t){return t.slotHeight}))))}},{key:"width",get:function(){return this.closest("table").props.width}}]),e}(N(T.dom.Row));p()(Qn,"Rank",(Gn=qn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"delayout",value:function(){this.layouted.detach()}},{key:"isEmpty",value:function(){return!this.props.children.find((function(t){return!!t}))}},{key:"relayout",value:function(t,e){var n=this.constructor;var r=new T.ReactQuery(this.layouted).findFirstAndParents("rank"),i=r.first,o=r.parents,a=r.rank,s=void 0===a?i.get(0):a;try{var c=function(t,e,r){var i=t-(e.props.height||0);return r.reduceRight((function(t,e){var n=e.props,r=n.height,o=n.children;if(1==P.a.Children.count(o)){if("number"==typeof r)return P.a.cloneElement(e,{height:r+i},t)}else console.warn("row's offspring should only has one child");return e}),new n(Yn({},e.props,{height:t})).render())}(t,P.a.cloneElement(s,{isLastRankOfRow:e,isFirstRowInPage:this.layouted.isFirstRowInPage,table:o.findLast((function(t){return"table"==t.props["data-type"]})).props["data-content"]}),o);this.layouted.replaceWith(c)}catch(t){}}},{key:"insertAt",value:function(t,e){this.slots[e]=t}},{key:"render",value:function(){var t=this.props,e=t.children,n=void 0===e?[]:e,r=t.cols,i=t.height,o=t.isLastRankOfRow,a=t.isFirstRowInPage,c=t.table,u=t.row,l=(t.space,s()(t,["children","cols","height","isLastRankOfRow","isFirstRowInPage","table","row","space"]));return P.a.createElement(ut,it()({height:i},l),n.map((function(t,e){return P.a.cloneElement(t.clone({height:i,colIndex:e,table:c,row:u,isLastRankOfRow:o,isFirstRowInPage:a}).createComposed2Parent(),Yn({},r[e],{height:i,key:e}))})))}},{key:"space",get:function(){return this.props.space}},{key:"slots",get:function(){return this.props.children}},{key:"layouted",get:function(){var t=this.space.frame;return new Proxy(t.lastLine,{get:function(e,n){if("replaceWith"==n)return function(e){return t.lines.splice(-1,1,e)};if("detach"==n)return function(){return t.lines.splice(-1,1)};if("isFirstRowInPage"==n){var r=t.lines[t.lines.length-2],i=function(t){return new T.ReactQuery(t).findFirst("[data-type=table]").attr("data-content")};return!r||i(e)!=i(r)}return e[n]}})}}]),e}(C.PureComponent),p()(qn,"displayName","rank"),Gn));var Vn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"shouldContinueCompose",value:function(){return!0}}]),e}(Yt(Qn,{stoppable:!0,continuable:!0})),Kn=function(t){var e=t.sz,n=t.color,r=(t.d,t.val,t.space,s()(t,["sz","color","d","val","space"]));return P.a.createElement("line",it()({strokeWidth:e,stroke:n},r))},Jn=function(t){var e=t.top,n=t.left,r=t.right,i=t.bottom,o=t.width,a=t.height,c=s()(t,["top","left","right","bottom","width","height"]);return P.a.createElement(ut,c,P.a.createElement(Kn,it()({},e,{y1:0,y2:0,x1:0,x2:o})),P.a.createElement(Kn,it()({},i,{y1:a,y2:a,x1:0,x2:o})),P.a.createElement(Kn,it()({},r,{x1:o,x2:o,y1:0,y2:a})),P.a.createElement(Kn,it()({},n,{x1:0,x2:0,y1:0,y2:a})))},Zn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.onSelect,n=t.cursor,r=t.size,i=void 0===r?5:r,o=s()(t,["onSelect","cursor","size"]);return P.a.createElement("line",it()({},o,{stroke:"transparent",strokeWidth:i,style:{cursor:n},onClick:e}))}}]),e}(C.Component),$n=function(t){return P.a.createElement(Zn,it()({},t,{cursor:"e-resize"}))},tr=function(t){return P.a.createElement(Zn,it()({},t,{cursor:"s-resize"}))};function er(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var nr,rr,ir,or,ar=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={resizing:!1},t}return k()(e,t),y()(e,[{key:"render",value:function(){var t,e=this,n=this.state.resizing,r=this.props,i=r.onResize,o=r.direction,a=r.d,c=void 0===a?"ew"==o?"y":"x":a,u=r.cursor,l=(r.children,s()(r,["onResize","direction","d","cursor","children"]));return P.a.createElement(C.Fragment,null,P.a.createElement(On,{direction:o,onStart:function(t){return e.setState({resizing:!0})},onEnd:function(t){return e.setState({resizing:!1})},onResize:i},P.a.createElement("line",it()({},l,{stroke:"transparent",strokeWidth:5,style:{cursor:u}}))),n&&P.a.createElement(ae,null,P.a.createElement("line",it()({},function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?er(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):er(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},l,(t={},p()(t,c+"1","-100%"),p()(t,c+"2","100%"),t)),{stroke:"lightgray",strokeWidth:1,strokeDasharray:"5,5"}))))}}]),e}(C.Component),sr=function(t){return P.a.createElement(ar,it()({},t,{direction:"ew",cursor:"col-resize"}))},cr=function(t){return P.a.createElement(ar,it()({},t,{direction:"-ns",cursor:"row-resize"}))},ur=Object(T.connect)()((rr=nr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.isFirstRowInPage,n=t.isLastRankOfRow,r=t.table,i=t.row,o=t.cell,a=t.i,s=t.width,c=t.height,u=t.dispatch;return this.context.editable?P.a.createElement(C.Fragment,null,P.a.createElement(Jn,this.props),e&&P.a.createElement(tr,null),n&&P.a.createElement(cr,{x1:0,x2:s,y1:c,y2:c,onResize:function(t){var e=t.y;u(T.ACTION.Entity.UPDATE({id:r,type:"table",height:{value:c+e,row:i,cell:o,i:a}}))}})||null,0==a&&P.a.createElement($n,{x1:0,x2:0,y1:0,y2:c,onSelect:function(){return u(T.ACTION.Selection.SELECT(i))}}),P.a.createElement(sr,{x1:s,y1:0,x2:s,y2:c,onResize:function(t){var e=t.x;u(T.ACTION.Entity.UPDATE({id:r,type:"table",width:{value:s+e,row:i,cell:o,i:a}}))}})):P.a.createElement(Jn,this.props)}}]),e}(C.Component),p()(nr,"contextTypes",{editable:j.a.any}),rr));function lr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function pr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?lr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):lr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var hr,fr=N(T.dom.Cell),dr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"createLayout",value:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this.context.parent.nextAvailableSpace(pr({},r,{id:this.props.id}));if(!i)return null;var o=i.width,a=i.height,s=i.frame,c=this.props,u=c.margin,l=(u=void 0===u?{}:u).right,p=void 0===l?0:l,h=u.left,f=void 0===h?0:h,d=u.top,y=void 0===d?0:d,m=u.bottom,g=void 0===m?0:m,v=c.vertAlign,w=c.border;return x()(b()(e.prototype),"createLayout",this).call(this,{margin:{left:f+w.left.sz,right:p+w.left.sz,top:y+w.top.sz,bottom:g+w.bottom.sz},width:o,height:a,vertAlign:v,borders:P.a.createElement(this.constructor.Edges,pr({},w,{width:o,height:a,"data-nocontent":!0}))},{frame:s})}},{key:"onAllChildrenComposed",value:function(){if(0==this.computed.composed.length){var t=this.createLayout();this.computed.composed.push(t),this.context.parent.appendComposed(this.createComposed2Parent(t))}x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}}]),e}(Ke);function yr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function mr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?yr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):yr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(dr,"displayName",((hr=Ke.displayName.split("-")).splice(-1,1,fr.displayName.split("-").pop()),hr.join("-"))),p()(dr,"defaultProps",pr({},fr.defaultProps,{createLayout:Ke.defaultProps.createLayout})),p()(dr,"Layout",(or=ir=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"nextAvailableSpace",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.height,r=void 0===n?0:n,i=x()(b()(e.prototype),"nextAvailableSpace",this).apply(this,arguments);return!(i&&this.isEmpty()&&r>this.availableBlockSize)&&i}},{key:"createComposed2Parent",value:function(){var t=this.props,n=t.borders,r=t.width,i=t.height,o=this.props,a=o.table,s=o.row,c=o.id,u=o.colIndex,l=o.isFirstRowInPage,p=o.isLastRankOfRow,h=x()(b()(e.prototype),"createComposed2Parent",this).apply(this,arguments);return P.a.cloneElement(h,{width:r,height:i},h.props.children,P.a.cloneElement(n,{height:i,width:r,table:a,row:s,cell:c,i:u,isFirstRowInPage:l,isLastRankOfRow:p}))}},{key:"cloneAsEmpty",value:function(){return Object.assign(this.clone.apply(this,arguments),{computed:{composed:[],anchors:[],lastComposed:[]}})}},{key:"slotHeight",get:function(){var t=this.props.margin.bottom,e=void 0===t?0:t;return this.blockOffset+e}}]),e}(Ke.Layout),p()(ir,"displayName","frame-cell"),or)),p()(dr,"Edges",ur);var gr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"createComposed2Parent",value:function(t){var e=this,n=t.props,r=n.width,i=n.height,o=n.geometry,a=this.props,s=a.margin,c=(s=void 0===s?{}:s).left,u=void 0===c?0:c,l=s.right,p=void 0===l?0:l,h=s.top,f=void 0===h?0:h,d=s.bottom,y=void 0===d?0:d,m=a.wrap,g=a.x,v=a.y;return this.width=r+=u+p,this.height=i+=f+y,P.a.createElement(ut,{children:t,anchor:function(n){var a={width:e.width,height:e.height},s=n.anchor(mr({align:"left"},g),a,n),c=n.anchor(mr({align:"top"},v),a,n);s-=u,c-=f,o&&o.origin&&(s-=o.origin.x,c-=o.origin.y);var l=function(t){if(t)return"Square"==m.mode||"TopAndBottom"==m.mode?function(n){return t.call(e,n,{bounds:function(){return{left:s,top:c,right:s+r,bottom:c+i}}})}:function(n){return t.call(e,n,o.clone().translate(s,c))}}(m&&("function"==typeof m?m:e["wrap".concat(m.mode)]));return P.a.createElement(ut,{x:s,y:c,wrap:l,geometry:{x:s,y:c,width:r,height:i},"data-content":e.props.id,"data-type":e.getComposeType()},P.a.createElement(ut,{x:u,y:f},t))}})}},{key:"applyWrapText",value:function(t,e,n,r){return function i(o){switch(o){case"left":return{x:n,width:e-n};case"right":return{x:t,width:r-t};case"largest":return i(n-t>=e-r?"left":"right");default:return{x:n,width:r-n}}}(this.props.wrap.wrapText)}},{key:"wrapSquare",value:function(t,e){var n=t.x1,r=t.x2,i=t.y2,o=t.y1,a=void 0===o?i:o,s=this.props,c=s.wrap,u=(c.mode,c.wrapText,s.margin),l=(u=void 0===u?{}:u).right,p=void 0===l?0:l,h=u.left,f=void 0===h?0:h,d=e.bounds(),y=d.left,m=d.top,g=d.right,v=d.bottom;if(i>=m&&i<=v&&!(r<=y||n>=g)&&a!==v)return Object.assign(this.applyWrapText(n,r,y-f,g+p),{y:v})}},{key:"wrapTight",value:function(t,e){var n=this.props.margin,r=n.left,i=void 0===r?0:r,o=n.right,a=void 0===o?0:o,s=t.x1,c=t.x2,u=t.y2,l=e.intersects({x1:s,x2:c,y2:u,y1:u}).sort((function(t,e){return t.x-e.x}));if(l.length>2&&l.splice(1,l.length-1-1),l.length>0)return this.applyWrapText(s,c,l[0].x-i,l.pop().x+a)}},{key:"wrapThrough",value:function(t,e){return this.wrapTight.apply(this,arguments)}},{key:"wrapClear",value:function(t,e){var n=t.x1,r=t.x2,i=t.y2,o=t.y1,a=void 0===o?i:o,s=e.bounds(),c=(s.left,s.top),u=(s.right,s.bottom);if(i>=c&&i<=u&&a!==u)return{x:n,width:r-n,y:u,type:"clear"}}},{key:"wrapTopAndBottom",value:function(){return this.wrapClear.apply(this,arguments)}}]),e}(N(T.dom.Anchor)),vr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getComposeType",value:function(){return this.props.type||x()(b()(e.prototype),"getComposeType",this).call(this)}},{key:"appendComposed",value:function(t){var n=t.props,r=n.width,i=n.height,o=n.minWidth,a=n.x,c=n.y,u=n.blockOffset,l=n.wrap,p=n.anchor,h=n.descent,f=n.pagination,d=n.mergeOpportunity;s()(n,["width","height","minWidth","x","y","blockOffset","wrap","anchor","descent","pagination","mergeOpportunity"]);return x()(b()(e.prototype),"appendComposed",this).call(this,P.a.createElement(ut,{width:r,height:i,minWidth:o,wrap:l,anchor:p,descent:h,pagination:f,x:a,y:c,blockOffset:u,mergeOpportunity:d,children:P.a.cloneElement(t,{x:void 0,y:void 0,wrap:void 0,anchor:void 0,blockOffset:void 0,mergeOpportunity:void 0})}))}}]),e}(Y(N(T.dom.Container),!1)),br=G.enable(N.enable(T.dom,{Document:He,Section:Ke,Paragraph:on,Text:ln,Image:Un,Table:Hn,Row:Vn,Cell:dr,Frame:Zt,Shape:Nn,Anchor:gr,Container:vr,Template:ee}),{Group:ut}),wr=Yt.enable(br,{Group:ut}),xr=n(18),Or=n.n(xr);function kr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var Cr=new(function(){function t(){f()(this,t),this.families={}}return y()(t,[{key:"get",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.bold,r=e.italic,i=this.family(t);if(i){if(1==i.length)return i[0];i.sort((function(t,e){return t.bold||0+t.italic||0-e.bold||0-e.italic||0}));var o=i.filter((function(t){return t.bold})),a=i.filter((function(t){return t.italic}));if(n&&r){var s=o.find((function(t){return a.includes(t)}));if(s)return s}return n&&(r||(o=o.filter((function(t){return!a.includes(t)}))),o.length)?o[0]:r&&(n||(a=a.filter((function(t){return!o.includes(t)}))),a.length)?a[0]:i[0]}}},{key:"put",value:function(t,e){if(t.familyName){var n=t.familyName.toLowerCase(),r=this.families[n]=this.families[n]||[];if(!r.find((function(e){return e.fullName==t.fullName}))){var i=t=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.assign(t,function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?kr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):kr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({lineHeight:function(t){return 1/this.unitsPerEm*t*(this.ascent-this.descent+this.lineGap)},lineDescent:function(t){var e=1/this.unitsPerEm*t;return-this.descent*e},stringWidth:function(t,e){return this.layout(t).advanceWidth/this.unitsPerEm*e}},e))}(t,e),o=i.fullName,a=void 0===o?"":o,s=i.familyName,c=void 0===s?"":s,u=i.subfamilyName,l=void 0===u?"":u,h="".concat(a,",").concat(c,",").concat(l);/bold/i.test(h)&&(t.bold=1),/italic/i.test(h)&&(t.italic=1);t.familyName.toLowerCase();return console.log("font[".concat(t.familyName,"] loaded")),r.push(t),t}}}},{key:"names",value:function(){var t=this;return Object.keys(this.families).map((function(e){return t.families[e][0].familyName})).filter((function(t){return!!t}))}},{key:"family",value:function(t){return this.families[t.toLowerCase()]}}]),t}()),Pr={get:function(){return Cr.get.apply(Cr,arguments)},get names(){return Cr.names().sort()},release:function(){return this.iterateLocal((function(t){return URL.releaseObjectURL(t.src)})),Cr.families={},this},iterateLocal:function(t){Cr.names().forEach((function(e){Cr.family(e).forEach((function(e){e.src&&e.src.startsWith("blob:")&&t(e)}))}))},fromBrowser:function(t){return Promise.all(Array.from(t.files).map((function(t){return new Promise((function(e){var n=URL.createObjectURL(t);Object.assign(new FileReader,{onload:function(t){var r=t.target.result;try{var i=Or.a.create(Buffer.from(r));i?i.fonts?e(Array.from(i.fonts).map((function(t){return Cr.put(t,{src:n})}))):e(Cr.put(i,{src:n})):e()}catch(t){e()}},onerror:function(t){return e()}}).readAsArrayBuffer(t)}))}))).then((function(e){return t.value="",jr(e)})).finally(Ar)},fromPath:function(t){var e=function(t){return new Promise((function(e){Or.a.open(t,(function(n,r){n?e():r.fonts?e(Array.from(r.fonts).map((function(e){return Cr.put(e,{src:t})}))):e(Cr.put(r,{src:t}))}))}))};return new Promise((function(r,i){t?n(24).readdir(t,(function(n,o){n?i(n):Promise.all(o.map((function(n){return e("".concat(t,"/").concat(n))}))).then((function(t){return r(jr(t))}),i)})):n(30)().then((function(t){return Promise.all(t.map(e).filter((function(t){return!!t})))})).then((function(t){return r(jr(t))}),i)}))},fromRemote:function(t){return fetch(t).then((function(t){return t.text()})).then((function(t){var e;try{e=JSON.parse(t)}catch(n){e=t.split(",")}return e.filter((function(t){return!!t})).map((function(t){return t.trim()}))})).then((function(e){return Promise.all(e.map((function(e){var n="".concat(t,"/").concat(e);return fetch(n).then((function(t){if(t.ok)return t.arrayBuffer().then((function(t){return Cr.put(Or.a.create(Buffer.from(t)),{src:n})}))}))})))})).finally(Ar)},load:function(t,e){try{var n=this.get(e);if(void 0!==n)return Promise.resolve(n)}catch(t){}var r={};return("string"==typeof t?fetch(r.src="".concat(t,"/").concat(e)).then((function(t){if(!t.ok)throw new Error(t.statusText);return t.arrayBuffer()})):t(e)).then((function(t){return Cr.put(Or.a.create(Buffer.from(t)),r)})).catch()},asService:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/font-service.js",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("undefined"!=typeof navigator&&"serviceWorker"in navigator){var n,r=Pr.fromBrowser;Pr.fromBrowser=function(){return r.call.apply(r,[Pr].concat(Array.prototype.slice.call(arguments))).finally((function(){return Pr.iterateLocal((function(t){var r=t.familyName,i=t.src;try{n.active.postMessage({familyName:r,src:i,scope:e})}catch(t){console.error(t)}}))}))},navigator.serviceWorker.register("".concat(t),{scope:"".concat(e,"/")}).then((function(e){n=e,e.active&&console.log("Font Service[".concat(t,"] worker active"))})).catch((function(e){console.log("Font Service[".concat(t,"] failed with ")+e)}))}}},Er=Pr;function jr(t){return t.reduce((function(t,e){return Array.isArray(e)?t.splice.apply(t,[t.length,0].concat(e)):e&&t.push(e),t}),[])}var Sr=null;function Ar(){Sr||((Sr=document.createElement("style")).id="we_edit_web_fonts",document.body.appendChild(Sr));var t=Array.from(Sr.sheet.rules).map((function(t){return t.style.fontFamily}));Cr.names().filter((function(e){return!t.includes(e)})).forEach((function(t){var e=Cr.get(t),n=e.familyName,r=e.src;r&&n&&Sr.sheet.addRule("@font-face",'font-family:"'.concat(n,'";src: local("').concat(n,'"), url("').concat(r,'");'))}))}var Tr=function(){function t(e){f()(this,t);var n=e.fonts,r=e.size;this.style=e,this.fontFamilys=n.split(",").map((function(t){return t.trim()})).filter((function(t){return!!t})),this.fontFamily=this.fontFamilys[0],this.size=r,this.defaultStyle={whiteSpace:"pre",fontSize:"".concat(r,"pt"),fontWeight:e.bold?700:400,fontStyle:e.italic?"italic":"normal",fontFamily:this.fontFamily};var i=this.lineHeight(),o=i.height,a=i.descent;this.defaultStyle.height=this.height=o,this.defaultStyle.descent=this.descent=a}return y()(t,[{key:"lineHeight",value:function(){return{height:25,descent:2}}},{key:"stringWidth",value:function(t){return 200}},{key:"widthString",value:function(t,e){var n=this;return Array.prototype.reduce.call(e,(function(e,r){if(e.done)return e;var i=n.stringWidth(r);return e.width+i>t?(e.done=!0,t-e.width>e.width+i-t&&(e.width+=i,e.text+=r)):(e.width+=i,e.text+=r),e}),{width:0,text:"",done:!1}).text.length}}]),t}(),Ir=null,Dr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"lineHeight",value:function(){if(!Ir){var t=document.createElement("div");t.style="position:absolute;top:-1000px",document.body.appendChild(t),t.innerHTML='<svg viewBox="0 0 '.concat(100," ",100,'" xmlns="http://www.w3.org/2000/svg"><text>Ä</text></svg>'),(Ir=t.querySelector("text")).setStyle=F()((function(t){return Ir.style=t}))}Ir.setStyle(this.cssStyle()),Ir.firstChild.data="Ä";var e=Ir.getBBox(),n=e.height,r=e.y,i=e.baseline;return{height:n,descent:n-(void 0===i?-r:i)}}},{key:"cssStyle",value:function(){return"white-space:pre;\n font-family:".concat(this.fontFamily,";\n font-size:").concat(this.size,"pt;\n font-weight:").concat(this.style.bold?"700":"400",";\n font-style:").concat(this.style.italic?"italic":"normal",";\n ")}},{key:"stringWidth",value:function(t){return Ir.setStyle(this.cssStyle()),Ir.firstChild.data=t,Ir.getBBox().width}}]),e}(Tr),Fr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"getFont",value:function(){return Er.get(this.fontFamily,this.style)}},{key:"lineHeight",value:function(){return this.font=this.getFont(),{height:96*this.font.lineHeight(this.size)/72,descent:96*this.font.lineDescent(this.size)/72}}},{key:"stringWidth",value:function(t){return 96*this.font.stringWidth(t,this.size)/72}}],[{key:"requireFonts",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=function(){var t=e.filter((function(t){return!Er.get(t)}));if(t.length>0)return Promise.reject(new Error("font["+t.join(",")+"] can't be loaded!"))};if(e.reduce((function(t,e){return t&&!!Er.get(e)}),!0))return Promise.resolve(r());if(A.a&&"string"==typeof t&&n(24).existsSync(t))return Er.fromPath(t).finally(r);switch(xe()(t)){case"string":return Er.fromRemote(t).finally(r);case"function":return Promise.all(e.map((function(e){return Er.load(t,e)}))).finally(r);default:return Promise.resolve(r())}}}]),e}(Tr),Mr=n(29),Lr=n.n(Mr);function Rr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var _r=/translate\((.*)\s+(.*)\)/,Nr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"output",value:function(t){t.pipe(new Lr.a.WritableStream(this,{xmlMode:!0}))}},{key:"onopentag",value:function(t,e){switch(t){case"svg":this.onreset(),this.onDocument(e);break;case"g":if("page"==e.class){var n=parseInt(e.id.substring(4)),r=this.props.document.pages[n].props,i=r.width,o=r.height;this.onPage({width:i,height:o})}else this.onGroup(e);break;case"text":this._currentText=e;break;default:var a="on".concat(t[0].toUpperCase()).concat(t.substr(1));this[a]&&this[a](e)}}},{key:"onclosetag",value:function(t){switch(t){case"g":this.onGroupEnd();break;case"text":this.onText(this._currentText)}}},{key:"onattribute",value:function(t,e){}},{key:"ontext",value:function(t){this._currentText.text=t}},{key:"onprocessinginstruction",value:function(t,e){}},{key:"oncomment",value:function(t){}},{key:"oncommentend",value:function(){}},{key:"oncdatastart",value:function(){}},{key:"oncdataend",value:function(){}},{key:"onerror",value:function(t){}},{key:"onreset",value:function(){this._offsets=[{x:0,y:0}],this._currentText=null,this._asyncJobs=[]}},{key:"onend",value:function(){var t=this;Promise.all(this._asyncJobs).then((function(){t.onDocumentEnd()})).catch((function(e){t.onDocumentEnd(e)}))}},{key:"addAsyncJob",value:function(t){this._asyncJobs.push(t.catch((function(t){return console.error(t),t})))}},{key:"onDocument",value:function(){}},{key:"onDocumentEnd",value:function(){}},{key:"onPage",value:function(t){this.onGroup(t)}},{key:"onImage",value:function(){}},{key:"onText",value:function(t){t.text}},{key:"onGroup",value:function(t){var e=t.transform,n=(void 0===e?"translate(0 0)":e).match(_r),r=nt()(n,3),i=r[1],o=void 0===i?0:i,a=r[2],s=void 0===a?0:a;this._offsets.push({x:parseInt(o),y:parseInt(s)})}},{key:"onGroupEnd",value:function(){this._offsets.pop()}},{key:"offset",get:function(){return this._offsets.reduce((function(t,e){var n=e.x,r=e.y;return t.x+=n,t.y+=r,t}),{x:0,y:0})}}]),e}(T.Emitter.Format.Base);function Wr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}p()(Nr,"defaultProps",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Rr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Rr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},T.Emitter.Format.Base.defaultProps,{representation:"pagination"}));var zr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),y()(e,[{key:"onreset",value:function(){x()(b()(e.prototype),"onreset",this).apply(this,arguments),this.y=0,this.depth=-1,this.defs=new Set}},{key:"spread",value:function(t){return Object.keys(t).map((function(e){return"".concat(e,'="').concat(t[e],'"')})).join(" ")}},{key:"onDocument",value:function(t){var e=t.viewBox,n=this.props.pageGap,r=e.trim().split(/\s+/g),i=nt()(r,4),o=i[2],a=i[3];this.width=n+parseInt(o)+n,this.height=parseInt(a),this.stream.write('<svg\n\tstyle="background:lightgray"\n\twidth="'.concat(this.width,'" height="').concat(this.height,'"\n\txmlns="http://www.w3.org/2000/svg"\n\txmlns:xlink="http://www.w3.org/1999/xlink">\n\t\t')),this.stream.write('<g transform="translate('.concat(n,',0)">'))}},{key:"onDocumentEnd",value:function(t){this.stream.end("</g></svg>")}},{key:"onPage",value:function(t){var e=t.width,n=t.height;e=parseInt(e),n=parseInt(n),this.y+=this.props.pageGap;var r=this.props,i=(r.pageGap,r.pgColor);this.stream.write('<g transform="translate('.concat((this.width-e)/2," ").concat(this.y,')">')),i&&this.stream.write('<rect width="'.concat(e,'" height="').concat(n,'" fill="').concat(i,'"/>')),this.y+=n}},{key:"onImage",value:function(t){var e=this,n=t["xlink:href"];delete t["xlink:href"];var r=btoa(n);if(this.stream.write('<use xlink:href="#'.concat(r,'"/>')),!this.defs.has(n)){this.defs.add(n);var i=fetch(n).then((function(t){if(!t.ok)throw new Error(t.statusText);return t.arrayBuffer()})).then((function(n){var i,o=e.stream;o.write("<defs>"),o.write('<image id="'.concat(r,'" ').concat(e.spread(t)," ")),o.write('xlink:href="data:image/*;base64,'),o.write(btoa((i=new Uint8Array(n)).reduce((function(t,e,n){return t[n]=String.fromCharCode(e),t}),new Array(i.byteLength)).join(""))),o.write('"'),o.write("/>"),o.write("</defs>")}));this.addAsyncJob(i)}}},{key:"onText",value:function(t){var e=t.text,n=s()(t,["text"]);this.stream.write("<text ".concat(this.spread(n),">").concat(e,"</text>"))}},{key:"onGroup",value:function(t){x()(b()(e.prototype),"onGroup",this).apply(this,arguments),this.stream.write("<g ".concat(this.spread(t),">"))}},{key:"onGroupEnd",value:function(){x()(b()(e.prototype),"onGroupEnd",this).call(this),this.stream.write("</g>")}},{key:"onopentag",value:function(){x()(b()(e.prototype),"onopentag",this).apply(this,arguments),this.stream.write("\r\n"),this.depth++,this.stream.write(new Array(this.depth).fill("\t").join(""))}},{key:"onclosetag",value:function(){x()(b()(e.prototype),"onclosetag",this).apply(this,arguments),this.stream.write("\r\n"),this.stream.write(new Array(this.depth).fill("\t").join("")),this.depth--}}]),e}(Nr);function Br(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}p()(zr,"displayName","SVG"),p()(zr,"propTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Wr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Wr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Nr.propTypes,{pageGap:j.a.number,pgColor:j.a.string})),p()(zr,"defaultProps",{type:"svg",name:"SVG Document",ext:"svg",representation:"pagination",pageGap:24,pgColor:"white"}),n.d(e,"default",(function(){return Hr})),n.d(e,"Viewers",(function(){return br})),n.d(e,"Editors",(function(){return wr})),n.d(e,"FontManager",(function(){return Er})),n.d(e,"Measure",(function(){return o})),n.d(e,"Composed",(function(){return r})),n.d(e,"composable",(function(){return i})),n.d(e,"editable",(function(){return Yt})),n.d(e,"Resizable",(function(){return On})),n.d(e,"Movable",(function(){return ue})),n.d(e,"Rotatable",(function(){return En})),n.d(e,"Top",(function(){return ae}));var Ur=Fr,qr=Dr,Gr=function(t){return function(e){function n(){return f()(this,n),g()(this,b()(n).apply(this,arguments))}return k()(n,e),y()(n,[{key:"getFont",value:function(){return x()(b()(n.prototype),"getFont",this).call(this)||Er.get(t)}}]),n}(Ur)},Hr=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"state",{fontsLoaded:!1}),n}return k()(e,t),y()(e,[{key:"componentDidMount",value:function(){var t=this,e=this.props,n=e.defaultFont,r=e.measure,i=e.fonts;switch(this.Measure=r||(i||A.a?Ur:qr),this.Measure){case Ur:this.Measure=Gr(n);var o=this.context.doc.getFontList(),a=function(e){var r=Er.names;r&&r.length&&(Er.get(n)||(console.warn("default font[".concat(n,"] can't be loaded, set ").concat(r[0]," as default")),t.Measure=Gr(r[0]))),e&&console.error(e.message),t.setState({fontsLoaded:!0})};Ur.requireFonts(i,[n].concat(o)).then(a,a);break;default:this.setState({fontsLoaded:!0})}}},{key:"getChildContext",value:function(){return{Measure:this.Measure}}},{key:"render",value:function(){if(!this.state.fontsLoaded)return P.a.createElement("div",null,"loading fonts...");var t=this.props,e=(t.defaultFont,t.measure,t.fonts,t.type,t.ViewerTypes),n=void 0===e?br:e,r=t.EditorTypes,i=void 0===r?wr:r,o=s()(t,["defaultFont","measure","fonts","type","ViewerTypes","EditorTypes"]);return P.a.createElement(T.Representation,function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Br(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Br(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({ViewerTypes:n,EditorTypes:i},o,{type:void 0}))}}]),e}(T.Representation.Base);p()(Hr,"displayName","pagination"),p()(Hr,"propTypes",{type:j.a.string.isRequired,measure:j.a.func,fonts:j.a.oneOfType([j.a.string,j.a.func]),defaultFont:j.a.string}),p()(Hr,"defaultProps",{type:"pagination",defaultFont:"Arial"}),p()(Hr,"childContextTypes",{Measure:j.a.func}),p()(Hr,"contextTypes",{doc:j.a.object}),p()(Hr,"Output",Nr),function(t){var e=t.install.bind(t);t.install=function(){e.apply(void 0,arguments),zr.install()};var n=t.uninstall.bind(t);t.uninstall=function(){n.apply(void 0,arguments),zr.uninstall()}}(Hr),Hr.install()}]);
2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInByb3AtdHlwZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3ZS1lZGl0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJtZW1vaXplLW9uZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlY29tcG9zZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY29uc3RydWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJmb250a2l0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaXMtbm9kZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LXdheXBvaW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcImxpbmVicmVha1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic3ZncGF0aFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInNpbXBsaWZ5LXBhdGhcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJzdmctcGF0aC1jb250b3Vyc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImh0bWxwYXJzZXIyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZ2V0LXN5c3RlbS1mb250c1wiIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb21wb3NlZC1hbGwtdHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvaGFzQ2hpbGQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2hhc1BhcmVudEFuZENoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9ub0NoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9yZWNvbXBvc2FibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xvY2F0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvc3RvcHBhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb250aW51YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9sYXllci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL2dyb3VwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvY2FudmFzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2NvbnN0cmFpbnQtc3BhY2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy90b29sL2dlb21ldHJ5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2Jsb2NrL2FuY2hvcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9vcnBoYW4tY29udHJvbGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9jb2x1bW5hYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svYmFsYW5jZWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvbG5saW5lLXNwYWNlLXNlZ21lbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL21lcmdlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL3N0b3J5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2ZyYW1lLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9vdmVybGF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvc2VsZWN0aW9uLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL2N1cnNvci1zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9zZWxlY3Rpb24tc3R5bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvd2hlbi1zZWxlY3Rpb24tY2hhbmdlLW5vdGlmaWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Bvc2l0aW9uaW5nL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvcmVhY3QtcG9zaXRpb25pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvY29tcG9zZS1tb3JlLXRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvZGVmaW5lLXNoYXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9kb2N1bWVudC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvd29yZHdyYXAvbGluZS1icmVhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9wYXJhZ3JhcGguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL3Rvb2wvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL2ZvY3VzLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL3NoYXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zaGFwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9pbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vY2VsbC9lZGdlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9jZWxsL3NlbGVjdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NlbGwvcmVzaXplci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9jZWxsL2VkaXRhYmxlLWVkZ2VzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NlbGwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vYW5jaG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NvbnRhaW5lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9lZGl0L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZm9udHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9tZWFzdXJlL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9tZWFzdXJlL3N2Zy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL21lYXN1cmUvZm9udC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL291dHB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL291dHB1dC9zdmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJob3N0Iiwib25BbGxDaGlsZHJlbkNvbXBvc2VkIiwiQSIsImFscmVhZHkiLCJhcmd1bWVudHMiLCJtZW1vaXplIiwiY2hpbGRyZW4iLCJwcm9wcyIsIkNoaWxkcmVuIiwidG9BcnJheSIsImNvbXB1dGVkIiwiY29tcG9zZWQiLCJhbGxDb21wb3NlZCIsInVuZGVmaW5lZCIsImRlYnVnIiwic3RhdGUiLCJwYXJlbnQiLCJ0aGlzIiwiY2hpbGRyZW5BcnJheSIsImxpbmUiLCJjdXJyZW50IiwiY29udGV4dCIsImNvbnRlbnQiLCJ0eXBlIiwiZm4iLCJhIiwiZ2V0Q29tcG9zZVR5cGUiLCJkaXNwbGF5TmFtZSIsImNhcGFibGUiLCJzcGxpdCIsImluY2x1ZGVzIiwiY29udGV4dFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsIk1vZGVsVHlwZXMiLCJjaGlsZENvbnRleHRUeXBlcyIsIlN1cGVyIiwiSGFzQ2hpbGQiLCJuZXh0QXZhaWxhYmxlU3BhY2UiLCJhcHBlbmRDb21wb3NlZCIsImNyZWF0ZUNvbXBvc2VkMlBhcmVudCIsImhhc2giLCJjaGFuZ2VkIiwiSGFzUGFyZW50QW5kQ2hpbGQiLCJSZWNvbXBvc2FibGUiLCJiIiwibmV4dCIsImNoYW5nZWRJbmRleCIsImZpbmRJbmRleCIsIl8iLCIkIiwiaWQiLCJzbGljZSIsIm1hcCIsImxhc3RDb21wb3NlZCIsInJlY29tcG9zYWJsZV9jcmVhdGVDb21wb3NlZDJQYXJlbnQiLCJwdXNoIiwiY29tcG9zZWRVVUlEIiwiRGF0ZSIsIm5vdyIsImlzQWxsQ2hpbGRyZW5Db21wb3NlZCIsInNob3VsZENvbnRpbnVlQ29tcG9zZSIsImNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkIiwiaXNBdG9tQ29sbGVjdG9yIiwiaXNBdG9tQ2hhbmdlZCIsImZvckVhY2giLCJsZW5ndGgiLCJhcHBlbmRlZCIsImFwcGVuZExhc3RDb21wb3NlZCIsImNvbnNvbGUiLCJleHRyYWN0IiwiaXNBdG9tIiwiaXNJbmxpbmVDb250YWluZXIiLCJMb2NhdGFibGUiLCJtb3VudCIsImVsZW1lbnQiLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiY2xvbmVFbGVtZW50IiwicHJvcFR5cGVzIiwib25lT2ZUeXBlIiwic3RyaW5nIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJ1bm1vdW50IiwiZ2V0Q29tcG9zZXIiLCJMb2NhdG9yaXplIiwiY29tcG9zZXJzIiwiTWFwIiwic2V0IiwiYWx3YXlzIiwic3RvcHBhYmxlIiwiRXJyb3IiLCJUZXh0IiwiZmlsbCIsIndoaXRlU3BhY2UiLCJjb2xvciIsImhpZ2hsaWdodCIsImJvcmRlciIsInVuZGVybGluZSIsInN0cmlrZSIsImRlc2NlbnQiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIndpZHRoIiwieSIsImJsb2NrT2Zmc2V0IiwibWVyZ2VPcHBvcnR1bml0eSIsIm90aGVycyIsImJhY2tncm91bmQiLCJNYXRoIiwiY2VpbCIsIngiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsImRlY29yYXRpb24iLCJ5MSIsIngyIiwieTIiLCJzdHJpa2VsaW5lIiwic3R5bGUiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwiQ29tcG9uZW50IiwiTGF5ZXIiLCJhY3RpdmUiLCJvcGFjaXR5Iiwib25Eb3VibGVDbGljayIsImUiLCJ6Iiwid2hlblNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdGlvbiIsImxheWVyIiwiZWRpdGFibGUiLCJmaWx0ZXIiLCJzb3J0IiwiZmluZCIsImFueSIsIkdyb3VwIiwiaW5uZXJSZWYiLCJyb3RhdGUiLCJtYXJnaW4iLCJpbmRleCIsImNoaWxkSW5kZXgiLCJnZW9tZXRyeSIsImJhc2VsaW5lIiwibGluZURlc2NlbnQiLCJpc0xhc3RSYW5rT2ZSb3ciLCJpc0ZpcnN0Um93SW5QYWdlIiwiY29udGVudFdpZHRoIiwid3JhcCIsInBhZ2luYXRpb24iLCJhbmNob3IiLCJuYW1lZCIsInNwYWNlSGVpZ2h0IiwiZGlzcGF0Y2giLCJJIiwicmVmIiwidHJhbnNmb3JtIiwicGFyc2VJbnQiLCJrZXlzIiwieDEiLCJjb25zdHJ1Y3RvciIsIkNvbnRhaW5lciIsIkNvbXBvc2VkRG9jdW1lbnRDYW52YXMiLCJwYWdlcyIsInBhZ2VHYXAiLCJwYWdlIiwicmVkdWNlIiwic2l6ZSIsImFzc2lnbiIsIm1heCIsImRvY3VtZW50IiwibWUiLCJzY2FsZSIsInByZWNpc2lvbiIsInBhcGVyIiwiX19zZXF1ZW50aWFsQ29tcG9zZSIsImdldENvbXBvc2VkIiwicHJlc2VydmVBc3BlY3RSYXRpbyIsInZpZXdCb3giLCJwb3NpdGlvblBhZ2VzIiwiY2FudmFzV2lkdGgiLCJtZWRpYSIsInBvc2l0aW9uZWQiLCJjbGFzc05hbWUiLCJsYXN0IiwiaGVpZ2h0T2ZMYXN0IiwiY29tcG9zZWRIZWlnaHQiLCJ3Iiwic3ZnIiwicXVlcnlTZWxlY3RvciIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImFycmF5T2YiLCJTbWFydFNob3ciLCJkaXNwbGF5IiwiZmlyZU9uUmFwaWRTY3JvbGwiLCJvbkVudGVyIiwic2V0U3RhdGUiLCJvbkxlYXZlIiwiUGFwZXIiLCJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJtYXJnaW5XaWR0aCIsIm1pbiIsIkltYWdlIiwiU2hhcGUiLCJTcGFjZSIsInNvdXJjZSIsIm1vZGlmaWVyIiwiZWRnZXMiLCJiYXNlIiwib2Zmc2V0IiwiYWxpZ24iLCJ2IiwidGhhdCIsImNvbHMiLCJpc0lubGluZVNpemVEaWZmZXJlbnQiLCJQb2ludCIsIlJlY3QiLCJoIiwiY2xvbmUiLCJlcXVhbHMiLCJ0b1N0cmluZyIsImYiLCJhZGQiLCJzdWJ0cmFjdCIsImlzWmVybyIsInRha2VQb2ludE9yQXJncyIsImFyZzEiLCJhcmcyIiwiZnJvbVJlY3QiLCJkaWZmIiwiaXNFbXB0eSIsInNldFJlY3QiLCJzZXRCb3VuZHMiLCJvdGhlciIsImNlbnRlciIsImNvcHlGcm9tIiwidHJhbnNsYXRlIiwidW5pb24iLCJleHBhbmRUb0NvbnRhaW4iLCJjb250YWlucyIsImludGVyc2VjdCIsInJlc3RyaWN0VG8iLCJpbnRlcnNlY3RzIiwiZXhwYW5kVG9JbnRlZ2VycyIsImZsb29yIiwieHNjbCIsInlzY2wiLCJ0cmFuc2xhdGVJbnNpZGUiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc3VsdCIsImJsZW5kIiwicmVjdCIsInNjYWxhciIsImluZmxhdGUiLCJ4QWRqIiwieUFkaiIsImluZmxhdGVGaXhlZCIsImZpeGVkIiwiRmxvdyIsImFuY2hvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZmlyc3RMaW5lIiwiY29uZmlndXJhYmxlIiwibGluZXMiLCJsYXN0TGluZSIsInZhbHVlcyIsInRvdGFsTGluZXMiLCJnZXRTcGFjZSIsImNvbnRlbnRIZWlnaHQiLCJhdmFpbGFibGVCbG9ja1NpemUiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwid3JhcHBlZXMiLCJIIiwic3BhY2UiLCJjdHgiLCJyZXF1aXJlZEJsb2NrU2l6ZSIsImFsbG93T3ZlcmZsb3ciLCJDb25zdHJhaW50U3BhY2UiLCJmcmFtZSIsImZpbmRJbmxpbmVTZWdtZW50cyIsImV4Y2x1c2l2ZSIsInNlZ21lbnRzIiwib3BzIiwic3BsaWNlIiwiaXNBbmNob3JlZCIsImV4Y2x1ZGVzIiwiY29sbGVjdGVkIiwiYmxvY2tzIiwiQXJyYXkiLCJpc0FycmF5IiwiY2xlYXJzIiwid3JhcGVlcyIsImluaXQiLCJyZWNvbXBvc2UiLCJkZWFkTG9vcCIsImxhc3RMaW5lcyIsImxhc3RBbmNob3JzIiwibGFzdENvbHVtbnMiLCJjb2x1bW5zIiwicm9sbGJhY2siLCJyZWNvbXBvc2luZyIsImdldFBhcmFncmFwaElkIiwiUmVhY3RRdWVyeSIsImZpbmRGaXJzdCIsImF0dHIiLCJjdXJyZW50UGFyYWdyYXBoIiwiY3VycmVudFBhcmFncmFwaExpbmVzIiwicGFyYWdyYXBoT2ZMaW5lIiwicmVjb21taXQiLCJlcnJvciIsIkIiLCJkb20iLCJiYWxhbmNlIiwiYmFsYW5jZVRocmVzaG9sZCIsInNoYXBlIiwiaW5oZXJpdEV4Y2x1c2l2ZXMiLCJBbmNob3JhYmxlIiwiSU1NRURJQVRFX1NUT1AiLCJhbmNob3JQbGFjZWQiLCJhbmNob3JJZCIsImZpcnN0IiwicGFyZW50cyIsImFuY2hvcmVkIiwicGFyYWdyYXBoIiwibGluZVhZIiwiY2hhcmFjdGVyIiwiZmluZEZpcnN0QW5kUGFyZW50cyIsIlgiLCJfX2lzRGlydHlJbiIsInJlY29tcG9zaW5nTGluZXMiLCJwb3AiLCJyZW1vdmluZ0FuY2hvcklkcyIsInJlbW92ZWRMaW5lcyIsInJlbW92ZWRBbmNob3JzIiwiZmxhdCIsImluZGV4T2YiLCJyZW1vdmVkV3JhcHBlZXNBZmZlY3RlZExheW91dGVkU3BhY2UiLCJpc0ludGVyc2VjdCIsImN1cnJlbnRDb2x1bW4iLCJPcnBoYW5Db250cm9sYWJsZSIsInByZXYiLCJwcmV2TGF5b3V0IiwicGlkIiwiZ2V0TGluZVBhcmFncmFwaElkIiwiZmluZExhc3RJbmRleCIsIndpZG93Iiwib3JwaGFuIiwia2VlcExpbmVzIiwic2hvdWxkS2VlcExpbmVzV2l0aCIsImxpbmVDb3VudCIsIm9ycGhhbkNvdW50Iiwicm9sbGJhY2tMaW5lcyIsInNob3VsZEtlZXBXaXRoTmV4dCIsImtlZXBXaXRoTmV4dCIsIkNvbHVtbmFibGUiLCJjcmVhdGVDb2x1bW4iLCJjb2x1bW4iLCJDb2x1bW5DaGlsZHJlbiIsIm1heEhlaWdodCIsIkNvbnRyYWludFNwYWNlIiwiaGFzTW9yZUNvbHVtbiIsInN0YXJ0SW5kZXgiLCJtc2ciLCJlbmRJbmRleCIsImoiLCJ0YXJnZXQiLCJuZXh0Q29sdW1uIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiaXRlbXMiLCJ1bnN1cHBvcnQiLCJCYWxhbmNlYWJsZSIsImJhbGFuY2VhYmxlIiwiYWJzIiwiYW55QmFsYW5jZSIsImVxdWFsQmFsYW5jZSIsImNvbEhlaWdodCIsInRvdGFsV2lkdGgiLCJ0b3RhbEhlaWdodCIsIklubGluZVNlZ21lbnRzIiwiSW5saW5lU2VnbWVudCIsImJTYW1lIiwicmVsYXlvdXQiLCJhdG9tcyIsImxlbiIsInNlZ21lbnQiLCJpdGVtIiwiaXNUZXh0IiwiYWxsIiwiZmluZExhc3QiLCJhdG9tIiwibXVzdCIsImF2YWlsYWJsZVdpZHRoIiwibG9jYXRlZCIsIk1lcmdlIiwicGllY2UiLCJwaWVjZVBhdGgiLCJwYXRoIiwiYlRleHQiLCJqb2luIiwidHJ1bmtQYXRoIiwidHJ1bmsiLCJtZXJnZVRydW5rIiwicGllY2VzIiwidGV4dHMiLCJtZXJnZWQiLCJyZWR1Y2VSaWdodCIsImNoaWxkIiwiZ2V0TWVyZ2VkIiwiaW5mbyIsInRlc3QiLCJpZHMiLCJvbmx5IiwiU3RvcnkiLCJhbGlnbmVkIiwiZ3JvdXBzIiwid29yZHMiLCJncm91cCIsIl9pIiwiX2EiLCJpc0xhc3QiLCJmcm9tIiwicmV2ZXJzZSIsImlzV2hpdGVzcGFjZSIsImVuZGluZ1doaXRlc3BhY2VzIiwicmVuZGVyIiwid29yZHNXaWR0aCIsImp1c3RpZmllZCIsInN0YXR1cyIsIndoaXRlc3BhY2VzIiwid2hpdGVzcGFjZVdpZHRoIiwid29yZCIsImp1c3RpZnkiLCJCbG9jayIsIklubGluZSIsInRvcFRvQmxvY2tPZmZzZXQiLCJpbmxpbmVTZWdtZW50cyIsImZpcnN0QXRvbSIsIiRhdG9tIiwiJGFuY2hvciIsInBsYWNlaG9sZGVyIiwicmVwbGFjZSIsImFwcGVuZEFuY2hvckF0b20iLCJuZXdIZWlnaHQiLCJzaG91bGRSZWxheW91dCIsInJlbGF5b3V0ZWQiLCJnZXRMaW5lSGVpZ2h0IiwibGluZUhlaWdodCIsInRleHRIZWlnaHQiLCJiTGFzdExpbmUiLCJsaW5lVG9wIiwiY29tcG9zYWJsZSIsImxvY2F0YWJsZSIsImNvbnRpbnVhYmxlIiwicmVjb21wb3NhYmxlIiwiU3RvcHBhYmxlIiwiQ29udGludWFibGUiLCJlbmFibGlmeSIsInRhcmdldHMiLCJlbmFibGVkIiwiayIsIk5vQ2hpbGQiLCJlbmFibGUiLCJGcmFtZSIsIkxheW91dCIsInV1aWQiLCJfX2dldFNwYWNlIiwicG9zaXRpb25MaW5lcyIsInZlcnRBbGlnbiIsImFsaWduWSIsInoxIiwiWSIsInkwIiwibGluZUluZGV4IiwiaXNUb3AiLCJFZGl0YWJsZUZyYW1lIiwiX19fY3JlYXRlQ29tcG9zZWQyUGFyZW50IiwibmV4dFByb3BzIiwiaXNJbmxpbmVTaXplQ2hhbmdlZCIsIl9jYW5jZWxDaGFuZ2VkUGFydCIsIl9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkIiwiY2hpbGRyZW5OZWVkUmVjb21wb3NlIiwiZmlyc3RMaW5lTmVlZFJlY29tcG9zZSIsImNoaWxkSWRPZiIsInJlbW92ZUZyb20iLCJsYXN0TGluZU9mQWxsQ2hpbGRyZW5Db21wb3NlZCIsImNvbXBvc2VyIiwibGFzdElkIiwicmVtb3ZlZCIsIlVzZSIsInRlbXBsYXRlIiwiZ2V0Q29tcG9zZWRUZW1wbGF0ZSIsInhocmVmIiwibWFzdGVyIiwiVGVtcGxhdGUiLCJpc1RlbXBsYXRlIiwiZGVmYXVsdFByb3BzIiwiVG9wIiwiaWdub3JlRXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJlbCIsIm9uTW91c2VEb3duIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlVXAiLCJjcmVhdGVQb3J0YWwiLCJ1c2VSZWxhdGl2ZVBvc2l0aW9uIiwidmlld3BvcnRFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJtYXRyaXhUcmFuc2Zvcm0iLCJnZXRDVE0iLCJPdmVybGF5IiwiTW92YWJsZSIsIm1vdmluZyIsImlzQW5jaG9yIiwib25FbmRNb3ZlIiwiYnV0dG9ucyIsInBvc2l0aW9uaW5nIiwiYXNDYW52YXNQb2ludCIsImNsaWVudFgiLCJjbGllbnRZIiwib25Nb3ZlIiwiZGVzdCIsImR4IiwiZHkiLCJhcm91bmQiLCJhdCIsInBvc2l0aW9uIiwiTW92aW5nUGxhY2Vob2xkZXIiLCJyZWN0cyIsImdldFJhbmdlUmVjdHMiLCJ3aXRoUmVmIiwiYXJlYSIsImNyZWF0ZVJlZiIsIm9uU2hyaW5rIiwic2VsZWN0aW5nIiwicmFuZ2UiLCJuZXdSZWN0cyIsIkFDVElPTiIsIlNlbGVjdGlvbiIsIk1PVkUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJpc1JhbmdlIiwiaXNTZWxlY3Rpb25DaGFuZ2VkIiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInNjcm9sbEludG9WaWV3IiwiQXJlYSIsImZpbGxPcGFjaXR5Iiwib25DbGljayIsImxvZyIsImlzQ3Vyc29yIiwiaXNGb2N1c2FibGUiLCJQYWdpbmF0aW9uU2VsZWN0aW9uU3R5bGUiLCJzdGFydCIsImVuZCIsImdldEZyb21Db250ZW50IiwidG9Mb3dlckNhc2UiLCJfcGFnZVByb3BzIiwiX2xheW91dFByb3BzIiwicmVhZHkiLCJsYXlvdXRPZiIsInBhZ2VYWSIsImNvbHVtbkluZGV4T2YiLCJnZXRDb250ZW50IiwiZm9yd2FyZEZpcnN0IiwiZm9jdXNhYmxlIiwiX19nZXRSYW5nZVJlY3RzIiwiU2VsZWN0aW9uU3R5bGUiLCJjb21wb3NlIiwiY29ubmVjdCIsImNvbXBvc2VkQ29udGVudCIsImNhbnZhcyIsInRvSlMiLCJjdXJzb3JBdCIsIlNUWUxFIiwiUG9zaXRpb25pbmciLCJyZXNwb25zaWJsZSIsImFzVmlld3BvcnRQb2ludCIsIm5leHRGcmFtZSIsInByZXZGcmFtZSIsImFyZ3MiLCJ3YXJuIiwiUG9zaXRpb25pbmdIZWxwZXIiLCJ0YXJnZXRGcmFtZSIsImZvdW5kIiwibm9kZSIsImlzRnJhbWUiLCJ0b3BGcmFtZSIsInh5IiwiZnJhbWVzIiwidG9wRnJhbWVPZmZzZXQiLCJnZXRHcmFuZEJsb2NrQ29udGVudHMiLCJpc1NlY3Rpb24iLCJibG9ja3NBIiwiYmxvY2tzQiIsIm5vcm1hbGl6ZVNlbGVjdGlvbiIsInAwIiwicDEiLCJyZXZlcnRlZCIsImxlYWZGcmFtZSIsImxpbmVJbmRleEluTGVhZkZyYW1lIiwiZ3JhbmRGcmFtZSIsImdyYW5kRnJhbWVMYXlvdXRlZCIsImNoZWNrIiwiZnJhbWVDb250YWluZWRCeSIsIl90YXJnZXRGcmFtZUNvbnRhaW5zRnJhbWUiLCJncmFuZE1heWJlIiwiZm9ybWF0Tm9kZSIsIm5vZGVzIiwiYm91bmQiLCJhbGxQYXJlbnRzIiwiZmluZExhc3RBbmRQYXJlbnRzIiwiYmxvY2tGcmFtZSIsImxpbmVPZmZzZXQiLCJnZXRUb3BGcmFtZVhZIiwiYmxvY2tGcmFtZU9mZnNldCIsImdldEZyYW1lT2Zmc2V0R3JhbmRGcmFtZSIsIiRwYXJhZ3JhcGgiLCJpc0luY2x1ZGVYIiwiZ2V0Qm91bmRhcnlDaGVja2VkTW9zdElubmVyTm9kZSIsImJvdW5hcnkiLCJpbmxpbmVPZmZzZXQiLCJwb3NzaWJsZVBhcmFncmFwaCIsImlzSW5saW5lTm9kZSIsImFyb3VuZEluSW5saW5lIiwiY29tcG9zZWRMaW5lIiwiJG5vZGUiLCJ0ZXh0Tm9kZSIsInRleHQiLCJlbmRhdCIsIm1lYXN1cmUiLCJ3aWR0aFN0cmluZyIsIndyYXBwZXIiLCIkbGluZSIsIngwIiwiZ2V0UGFyYWdyYXBoSW5DZWxsIiwicGFyYWdyYXBoSW5DZWxsIiwicGFyYWdyYXBoRGlyZWN0IiwibGluZUluRnJhbWUiLCJjbG9zZXN0IiwiJGZpbmQiLCJ0YXJnZXRIYXNQYXJhZ3JhcGgiLCJfX2ZpbmRGaXJzdFBhcmFncmFwaEluVGFyZ2V0IiwicG9zaXRpb25JbklubGluZSIsImZpcnN0UGFyYWdyYXBoIiwiZ2V0Q2hlY2tlZEdyYW5kRnJhbWVCeUZyYW1lIiwiaW5GcmFtZSIsImRlZmF1bHRTdHlsZSIsImdldERlZmF1bHRNZWFzdXJlIiwic3RvcnkiLCJwb3MiLCJpc1BhcmFncmFwaFNlbGYiLCJzdHJpbmdXaWR0aCIsInN1YnN0cmluZyIsImZyYW1lSWQiLCJSZWFjdFBvc2l0aW9uaW5nIiwibWFrZVNhZmUiLCJfX3JldHVybkV2ZXJ5dGhpbmciLCJwb3NpdGlvblRvTGVhZkZyYW1lTGluZSIsImxlYWZGcmFtZU9mZnNldCIsImlubGluZSIsImxpbmVJbmRleE9mUGFyYWdyYXBoIiwiJHAiLCJsYXN0QXRvbSIsImlzQ29udGVudCIsImdldFRvcEZyYW1lQnlQb3NpdGlvbiIsInBvaW50SXNJbnNpZGUiLCJvZmZzZXRzIiwibGF5b3V0ZWRGcmFtZU5vZGUiLCJnZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUiLCJnZXRPcmRlcmVkUG9zaXRpb24iLCJzY29wZSIsImZyYW1lMCIsImZyYW1lMSIsIm1ha2VSZWN0cyIsInRvIiwiXzEiLCJpc1BhcmFncmFwaExpbmUiLCJib3VuZHMiLCJuZXh0TGluZSIsIm5leHRMaW5lQmVsb3ciLCJwb2ludCIsImZyYW1lSXNCZWxvd1BvaW50QW5kQ29udGFpblBvaW50WCIsImxheW91dGVkVG9wRnJhbWUiLCJmaXJzdExpbmVJbmNsdWRlWCIsImxpbmVJbkxlYWZGcmFtZSIsImFyb3VuZEluQmxvY2tMaW5lIiwibGVhZkZyYW1lQ29udGFpbmVkQnkiLCJwYXJlbnRGcmFtZSIsInByZXZMaW5lIiwicHJldkxpbmVBYm92ZSIsImlzRmlyc3QiLCJmcmFtZUlzQWJvdmVQb2ludEFuZENvbnRhaW5Qb2ludFgiLCJsYXN0TGluZUluY2x1ZGVYIiwieGlkIiwic2V0RGlzcGxheU5hbWUiLCJnZXRTZWxlY3Rpb24iLCJpc1NlbGVjdGlvbkNvbXBvc2VkIiwiY29tcG9zZTRTZWxlY3Rpb24iLCJjb21wb3NlNFNjcm9sbCIsImdldENvbXBvc2VkWSIsIlRhYmxlQWRkZXIiLCJSb3RhdG9yIiwiY3giLCJjeSIsIlJlc3BvbnNpYmxlIiwiY2FudmFzSWQiLCJ2aWV3cG9ydCIsInNjcmVlbkJ1ZmZlciIsIkNhbnZhcyIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsImNvbXBvc2VkNFkiLCJDb250ZW50UXVlcnkiLCJmcm9tQ29udGVudCIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJsb2NhdGlvbiIsInBhZ2VSZWN0IiwiY29tcG9zZWRZIiwic2Nyb2xsVG9wIiwiX19jb21wb3NlZFkiLCJldmVudEhhbmRsZXJzIiwibm90aWZ5U2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIiLCJjYWxsYmFjayIsInNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIiwiQ29tcG9zZU1vcmVUcmlnZ2VyIiwiMzciLCJvbktleUFycm93TGVmdCIsIjM5Iiwib25LZXlBcnJvd1JpZ2h0IiwiMzgiLCJvbktleUFycm93VXAiLCI0MCIsIm9uS2V5QXJyb3dEb3duIiwic2Nyb2xsTm9kZUludG9WaWV3IiwiU3RhdGlzdGljcyIsIl9fc3RhdGlzdGljcyIsIkN1cnNvciIsIkFDVElWRSIsImFjdGl2ZURvY1N0b3JlIiwicmVmcyIsImdldFdyYXBwZWRJbnN0YW5jZSIsImdldFN0YXRlIiwiaW5zdGFuY2VPZiIsIkVsZW1lbnQiLCJvbkNvbnRleHRNZW51IiwiRXZlbnRSZXNwb25zaWJsZSIsImhhbmRsZXJzIiwiX19tb3VzZURvd25GbGFnIiwic2hpZnRLZXkiLCJkb3VibGVDbGlja2VkIiwiU0VMRUNUIiwibGVmdDEiLCJ0b3AxIiwiU1RBUlRfQVQiLCJleHRlbmRXb3JkIiwiQVQiLCJzZWxlY3RlZCIsIl9fb25DbGljayIsIl9fc2hvdWxkSWdub3JlTW91c2VEb3duRXZlbnQiLCJfX29uS2V5QXJyb3ciLCJtZXRhS2V5IiwiY3RybEtleSIsInBvc2l0aW9uVG9MaW5lU3RhcnQiLCJCQUNLV0FSRCIsInBvc2l0aW9uVG9MaW5lRW5kIiwiRk9SV0FSRCIsIkRvY3VtZW50IiwiTWVhc3VyZSIsInRlbXBsYXRlcyIsInNlbGYiLCJnZXRNZWFzdXJlIiwibm90aWZ5Tm90QWxsQ29tcG9zZWQiLCJzaG91bGQiLCJoYXMiLCJUeXBlIiwiU2VjdGlvbiIsImFsbFByb3BzIiwidG9wSW5kZXgiLCJjcmVhdGVMYXlvdXQiLCJyZXF1aXJlZCIsImxheW91dCIsImlzSW50ZWdlciIsImNsb25lZCIsIkVkaXRhYmxlU2VjdGlvbiIsInNwYWNlQ2hhbmdlZEF0IiwiZmlzc2lvbiIsImNsb25lNFNwYWNlIiwiZmlzc2lvbkluZGV4IiwiX2tlZXBMYXN0Q29tcG9zZWRVbnRpbCIsIm9wcG9ydHVuaXRpZXMiLCJzdHIiLCJiayIsImJyZWFrZXIiLCJMaW5lQnJlYWtlciIsIm9wIiwibmV4dEJyZWFrIiwiUGFyYWdyYXBoIiwibGFzdFRleHQiLCJicmVha09wcG9ydHVuaXRpZXMiLCJpc1Jhd0F0b20iLCJFbmQiLCJjb21taXQiLCJyb2xsYmFja1RvTGluZVdpdGhGaXJzdEF0b21JbmRleCIsImFwcGVuZENvbXBvc2VkTGluZSIsImN1cnJlbnRMaW5lIiwiZnJlZXplIiwiYXRvbUluZGV4T2ZMYXN0TnRoTGluZSIsImxhc3ROdGhMaW5lIiwiY3JlYXRlQW5kQXBwZW5kTGluZSIsImNyZWF0ZUxpbmUiLCJERUFEIiwibmVzdGVkIiwiY29tbWl0RnJvbSIsInRpbWVzIiwiYXBwZW5kQXRvbSIsIm51bWJlcmluZyIsImluZGVudCIsIkR5bmFtaWMiLCJpbmRlbnRMZWZ0IiwiaW5kZW50UmlnaHQiLCJiRmlyc3RMaW5lIiwic3BhY2luZyIsIkxpbmUiLCJnZXROdW1iZXJpbmdBdG9tIiwiY3VycmVudFgiLCJFZGl0YWJsZVBhcmFncmFwaCIsIm5ld0xpbmUiLCJpc0ZpdFRvIiwiZm9udHMiLCJib2xkIiwiaXRhbGljIiwiX3N0cmluZ1dpZHRoIiwiY2FjaGUiLCJ2YW5pc2giLCJfMiIsImpMYXN0IiwiJDEiLCIkMiIsImlMYXN0IiwiZW5kaW5nIiwiZW5kc1dpdGgiLCJjcmVhdGVNZWFzdXJlIiwiRWRpdGFibGVUZXh0Iiwic2hhbGxvd0VxdWFsIiwiX18kMSIsIl9fZXZhbHVhdGVTdGFjayIsImNvbnRvdXIiLCJNSU5fU0FGRV9JTlRFR0VSIiwidG9sZXJhbmNlIiwiY29udG91cnMiLCJzaW1wbGlmeSIsInBvaW50cyIsImxpbmUxIiwibGluZTIiLCJ4MyIsIng0IiwieTMiLCJ5NCIsInB0X2Rlbm9tIiwicHRfeF9udW0iLCJwdF95X251bSIsInB0IiwiYmV0d2VlbiIsImxpbmVfbGluZV9pbnRlcnNlY3QiLCJQYXRoIiwiYjEiLCJiMiIsImRpcmVjdGlvbiIsIm9uZU9mIiwiUmVzaXphYmxlIiwicmVzaXppbmciLCJzcG90cyIsIm9uRW5kIiwicmVzaXplIiwic3RhcnRSZXNpemUiLCJvblN0YXJ0Iiwib25SZXNpemUiLCJTcG90IiwiUm90YXRhYmxlIiwicm90YXRpbmciLCJkZWdyZWUiLCJvblJvdGF0ZSIsInJvdGF0b3IiLCJ4bGlua0hyZWYiLCJzaG91bGRVcGRhdGUiLCJ0YXJnZXRDaGFuZ2VkIiwiaXNTZWxmT3JHcmFuZCIsInNoYXBlUmVjb21wb3NlZCIsImlzQUdyYW5kIiwiaXNCR3JhbmQiLCJpc1BhcmFncmFwaCIsImdyYW5kIiwic2hvd0ZvY3VzIiwiaXNFZGl0YWJsZUN1cnNvciIsIm91dGxpbmUiLCIkb3V0bGluZSIsInJlc2l6YWJsZSIsInJvdGF0YWJsZSIsImZvY3VzYWJsZUNvbnRlbnQiLCJtb3ZhYmxlIiwiZWR0YWJsZUNvbnRlbnQiLCJhdGFuMiIsIlBJIiwiRW50aXR5IiwiVVBEQVRFIiwiY3VzdG9tIiwiY29udGVudEJveCIsInNvbGlkRmlsbCIsImJsaXBGaWxsIiwidXJsIiwiZ2V0UGF0aCIsIm91dGxpbmVCb3giLCJvcmlnaW4iLCJlbGxpcHNlIiwicngiLCJyeSIsImNpcmNsZSIsImF2YWlsYWJsZVNwYWNlIiwiY3JlYXRlQ29tcG9zZWRTaGFwZSIsIl9fZ2V0R2VvbWV0cnkiLCJnZXRTaGFwZSIsInNyYyIsImltYWdlIiwiVGFibGUiLCJyb3ciLCJSb3ciLCJjb2wiLCJyYW5rcyIsInNsb3RzIiwibWluSGVpZ2h0IiwicmFuayIsImN1cnJlbnRSYW5rIiwiUmFuayIsImdldENvbHVtbnMiLCJjZWxsSWQiLCJmaW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uIiwic2xvdEZyYW1lIiwiZ2V0SGVpZ2h0IiwiaW5zZXJ0QXQiLCJkZWxheW91dCIsImZpcnN0U2xvdCIsImNsb25lQXNFbXB0eSIsInNsb3RIZWlnaHQiLCJsYXlvdXRlZCIsImRldGFjaCIsImRlbHRhIiwiY291bnQiLCJjaGFuZ2VIZWlnaHRVcCIsInRhYmxlIiwicmVwbGFjZVdpdGgiLCJzbG90IiwiY29sSW5kZXgiLCJyZXBsYWNlbWVudCIsIkVkaXRhYmxlUm93IiwiRWRnZSIsInN6IiwidmFsIiwiU2VsZWN0b3IiLCJvblNlbGVjdCIsIlJvd1NlbGVjdG9yIiwiQ29sU2VsZWN0b3IiLCJSZXNpemVyIiwic3Ryb2tlRGFzaGFycmF5IiwiQ29sUmVzaXplciIsIlJvd1Jlc2l6ZXIiLCJjZWxsIiwicGFydHMiLCJDZWxsIiwiYm9yZGVycyIsIkVkZ2VzIiwiRWRpdGFibGVFZGdlcyIsIkFuY2hvciIsIndyYXBGdW5jIiwid3JhcFRleHQiLCJtciIsIm1sIiwiYXBwbHlXcmFwVGV4dCIsIndyYXBUaWdodCIsIndyYXBDbGVhciIsImNyZWF0ZUVsZW1lbnQiLCJmYW1pbGllcyIsImZhbWlseSIsImJvbGRzIiwiaXRhbGljcyIsImJpIiwiZm9udCIsImZhbWlseU5hbWUiLCJmdWxsTmFtZSIsImZvbnRTaXplIiwidW5pdHNQZXJFbSIsImFzY2VudCIsImxpbmVHYXAiLCJhZHZhbmNlV2lkdGgiLCJleHRlbmQiLCJzdWJmYW1pbHlOYW1lIiwiRm9udE1hbmFnZXIiLCJuYW1lcyIsInJlbGVhc2UiLCJpdGVyYXRlTG9jYWwiLCJVUkwiLCJyZWxlYXNlT2JqZWN0VVJMIiwic3RhcnRzV2l0aCIsImZyb21Ccm93c2VyIiwibG9hZGVyIiwiUHJvbWlzZSIsImZpbGVzIiwiZmlsZSIsInJlc29sdmUiLCJjcmVhdGVPYmplY3RVUkwiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZGF0YSIsIkZvbnRLaXQiLCJCdWZmZXIiLCJwdXQiLCJvbmVycm9yIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJ0aGVuIiwibWFrZVdlYkZvbnQiLCJmcm9tUGF0aCIsImxvYWQxIiwib3BlbiIsImVyciIsInJlamVjdCIsInJlYWRkaXIiLCJmcm9tUmVtb3RlIiwic2VydmljZSIsImZldGNoIiwicmVzIiwibGlzdCIsIkpTT04iLCJwYXJzZSIsInRyaW0iLCJvayIsImFycmF5QnVmZmVyIiwiYnVmZmVyIiwibG9hZCIsInN0YXR1c1RleHQiLCJhc1NlcnZpY2UiLCJzdyIsIm5hdmlnYXRvciIsIl9mcm9tQnJvd3NlciIsInBvc3RNZXNzYWdlIiwic2VydmljZVdvcmtlciIsInJlZ2lzdGVyIiwicmVnIiwiY2x0Iiwid2ViRm9udHMiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJsb2FkZWQiLCJzaGVldCIsInJ1bGVzIiwiZm9udEZhbWlseSIsImFkZFJ1bGUiLCJmb250RmFtaWx5cyIsImZvbnRXZWlnaHQiLCJmb250U3R5bGUiLCJkb25lIiwiYVdpZHRoIiwidGVzdGVyIiwiU1ZHTWVhc3VyZSIsImNvbnRhaW5lciIsImlubmVySFRNTCIsInNldFN0eWxlIiwiY3NzU3R5bGUiLCJmaXJzdENoaWxkIiwiZ2V0QkJveCIsIkZvbnRNZWFzdXJlIiwiZ2V0Rm9udCIsImlucHV0IiwidW5sb2FkZWQiLCJpc05vZGUiLCJleGlzdHNTeW5jIiwiUkVfVFJBTlNMQVRFIiwiT3V0cHV0IiwicGlwZSIsIlBhcnNlciIsIldyaXRhYmxlU3RyZWFtIiwieG1sTW9kZSIsImF0dHJzIiwib25yZXNldCIsIm9uRG9jdW1lbnQiLCJvblBhZ2UiLCJvbkdyb3VwIiwiX2N1cnJlbnRUZXh0Iiwib25Db250ZW50IiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJvbkdyb3VwRW5kIiwib25UZXh0IiwiX29mZnNldHMiLCJfYXN5bmNKb2JzIiwib25Eb2N1bWVudEVuZCIsIm1hdGNoIiwiRW1pdHRlciIsIkZvcm1hdCIsIkJhc2UiLCJyZXByZXNlbnRhdGlvbiIsIlNWRyIsImRlcHRoIiwiZGVmcyIsIlNldCIsInN0cmVhbSIsIndyaXRlIiwicGdDb2xvciIsImhyZWYiLCJidG9hIiwiam9iIiwidmlldyIsInNwcmVhZCIsIlVpbnQ4QXJyYXkiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJieXRlTGVuZ3RoIiwiYWRkQXN5bmNKb2IiLCJleHQiLCJjcmVhdGVGb250TWVhc3VyZVdpdGhEZWZhdWx0IiwiZGVmYXVsdEZvbnQiLCJQYWdpbmF0aW9uIiwiZm9udHNMb2FkZWQiLCJyZXF1aXJlZEZvbnRzIiwiZG9jIiwiZ2V0Rm9udExpc3QiLCJtZXNzYWdlIiwicmVxdWlyZUZvbnRzIiwiVmlld2VyVHlwZXMiLCJWaWV3ZXJzIiwiRWRpdG9yVHlwZXMiLCJFZGl0b3JzIiwiUmVwcmVzZW50YXRpb24iLCJpbnN0YWxsIiwidW5pbnN0YWxsIl0sIm1hcHBpbmdzIjoiMkJBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIs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R0wsSUFBTUMsRUFBVXBuQyxFQUFFb25DLFVBQVUvbkMsS0FBS1csR0FDakNBLEVBQUVvbkMsVUFBVSxXQUNYQSxFQUFTLFdBQVQsRUFBYWxuQyxXQUNiaWxDLEdBQUlpQyxhQVZOLENBWUdiLElBRUhBLEdBQVdZIiwiZmlsZSI6InJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMzEpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIndlLWVkaXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWVtb2l6ZS1vbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zbGljZWRUb0FycmF5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlY29tcG9zZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NvbnN0cnVjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmb250a2l0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImlzLW5vZGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3Qtd2F5cG9pbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3JcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibGluZWJyZWFrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdmdwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInNpbXBsaWZ5LXBhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3ZnLXBhdGgtY29udG91cnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHRtbHBhcnNlcjJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZ2V0LXN5c3RlbS1mb250c1wiKTsiLCJcbi8qKlxuICogaXQncyB0byBtYWtlIHNlcXVlbnRpYWwgcmVuZGVyLCBjaGVjayBoYXNDaGlsZHJlbi5yZW5kZXJcbiAqIEl0J3MgYSBLRVkgZm9yIHdob2xlIGNvbXBvc2FibGUgXG4gKiAqKioqZXZlcnkgY3VzdG9taXplZCByZW5kZXIgc2hvdWxkIHVzZSB0aGlzIGNvbXBvbmVudCBhcyBsYXN0IG9uZSoqKlxuICovXG5leHBvcnQgZGVmYXVsdCAoe2hvc3R9KT0+KGhvc3Qub25BbGxDaGlsZHJlbkNvbXBvc2VkKCksbnVsbClcbiIsIlxuaW1wb3J0IFJlYWN0LCB7Q2hpbGRyZW4sRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBDb21wb3NlZEFsbFRyaWdnZXIgZnJvbSBcIi4vY29tcG9zZWQtYWxsLXRyaWdnZXJcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcbmV4cG9ydCBkZWZhdWx0IEE9PntcbiAgICBpZihBLmFscmVhZHkpXG4gICAgICAgIHJldHVybiBBXG4gICAgcmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuICAgICAgICBzdGF0aWMgZGlzcGxheU5hbWU9YGNvbXBvc2FibGUtJHtBLmRpc3BsYXlOYW1lfWBcbiAgICAgICAgc3RhdGljIGFscmVhZHk9ZnVuY3Rpb24oY2FwYWJsZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5TmFtZS5zcGxpdChcIi1cIikuaW5jbHVkZXMoY2FwYWJsZSlcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgICAgIC4uLkEuY29udGV4dFR5cGVzLFxuICAgICAgICAgICAgZGVidWc6IFByb3BUeXBlcy5ib29sLFxuICAgICAgICAgICAgTW9kZWxUeXBlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcyA9IHtcbiAgICAgICAgICAgIC4uLihBLmNoaWxkQ29udGV4dFR5cGVzfHx7fSksXG4gICAgICAgICAgICBwYXJlbnQ6IFByb3BUeXBlcy5vYmplY3RcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkID0ge2NvbXBvc2VkOiBbXSAsIGFsbENvbXBvc2VkOnVuZGVmaW5lZH1cbiAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGU9e2NvbXB1dGVkOnRoaXMuY29tcHV0ZWR9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xuICAgICAgICAgICAgbGV0IHN1cGVyQ2hpbGRDb250ZXh0PXN1cGVyLmdldENoaWxkQ29udGV4dCA/IHN1cGVyLmdldENoaWxkQ29udGV4dCgpIDoge31cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uc3VwZXJDaGlsZENvbnRleHQsXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogdXN1YWxseSBOb0NoaWxkIGNvbnRlbnQgc2hvdWxkIGJlIGNvbXBvc2VkIGFjY29yZGluZyB0byBuZXh0QXZhaWxhYmxlU3BhY2UsXG4gICAgICAgICAqIGFuZCB0aGVuIGFwcGVuZCB0byBpdHNlbGYuY29tcG9zZWRbXSBhbmQgcGFyZW50LmFwcGVuZENvbXBvc2VkXG4gICAgICAgICAqL1xuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLyoqKipNVVNUIHVzZSB0b0FycmF5KGNoaWxkcmVuKSwgc2luY2UgcmVjb21wb3NlIHVzZSB0aGlzIHdheSB0byBjb21wb3NlIHBhcnQgb2YgY2hpbGRyZW4qL31cbiAgICAgICAgICAgICAgICAgICAgPENvbXBvc2VkQWxsVHJpZ2dlciBob3N0PXt0aGlzfS8+XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGlsZHJlbiBzaG91bGQgY2FsbCBhZnRlciBhIGxpbmUgY29tcG9zZWQgb3V0XG4gICAgICAgICAqIGEgY2hhbmNlIHRvIGFkZCB0byBzZWxmJ3MgY29tcG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIGFwcGVuZENvbXBvc2VkKGxpbmUpIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoaWxkcmVuIHNob3VsZCBjYWxsIGJlZm9yZSBjb21wb3NpbmcgbGluZSxcbiAgICAgICAgICogcmV0dXJuIG5leHQgbGluZSByZWN0IHsqd2lkdGgsIFtoZWlnaHRdfVxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dEF2YWlsYWJsZVNwYWNlKHJlcXVpcmVkID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pIHtcblxuICAgICAgICB9XG5cbiAgICAgICAgaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWRcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBhbGxDb21wb3NlZCBpcyB2ZXJ5IGltcG9ydGFudFxuICAgICAgICAgKiBpZiBjb250ZW50IGlzIHNraXBwZWQgY29tcG9zZWQsIGl0c2VsZiBhbmQgZ3JhbmQgY29udGVudCBzaG91bGQgYmUgc2V0IGFzIGZhbHNlLCBcbiAgICAgICAgICogdGhlbiB0aGlzIGV2ZW50IG9mIGdyYW5kIGNvbnRlbnQgc2hvdWxkIGJlIGRpc2FibGVkXG4gICAgICAgICAqIEBjaGVjayB0aGlzLm5vdGlmeU5vdEFsbENvbXBvc2VkXG4gICAgICAgICAqIFxuICAgICAgICAgKiBAY2hlY2sgUmVjb21wb3NhYmxlLnNob3VsZENvbXBvbmVudFVwZGF0ZTogcmVzZXQgYWxsQ29tcG9zZWQgd2hlbiBub3QgaXNBbGxDaGlsZHJlbkNvbXBvc2VkLFxuICAgICAgICAgKiBzbyB0aGlzIGV2ZW50IGNhbiB3b3JrcyBhZ2FpbiBcbiAgICAgICAgICovXG4gICAgICAgIG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQhPT1mYWxzZSlcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkPXRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIG5vdGlmeU5vdEFsbENvbXBvc2VkKGN1cnJlbnQpe1xuICAgICAgICAgICAgY3VycmVudC5jb21wdXRlZC5hbGxDb21wb3NlZD1mYWxzZVxuICAgICAgICAgICAgd2hpbGUoY3VycmVudD1jdXJyZW50LmNvbnRleHQucGFyZW50KXtcbiAgICAgICAgICAgICAgICBjdXJyZW50LmNvbXB1dGVkLmFsbENvbXBvc2VkPWZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjcmVhdGVDb21wb3NlZDJQYXJlbnQoY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgICAgfVxuXG4gICAgICAgIGdldCBkZWJ1Zygpe1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5jb250ZXh0LmRlYnVnfHx0aGlzLnByb3BzLmRlYnVnXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNsb3Nlc3QodHlwZSl7XG4gICAgICAgICAgICB2YXIgZm49dHlwZVxuICAgICAgICAgICAgaWYodHlwZW9mKHR5cGUpPT1cInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIGZuPWE9PmEuZ2V0Q29tcG9zZVR5cGUoKT09dHlwZVxuXG4gICAgICAgICAgICB2YXIgY3VycmVudD10aGlzXG4gICAgICAgICAgICB3aGlsZShjdXJyZW50KXtcbiAgICAgICAgICAgICAgICBpZighIWZuKGN1cnJlbnQpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFxuICAgICAgICAgICAgICAgIGlmKGN1cnJlbnQuY29udGV4dClcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudD1jdXJyZW50LmNvbnRleHQucGFyZW50XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNoaWxkcmVuQXJyYXk9bWVtb2l6ZSgoY2hpbGRyZW49dGhpcy5wcm9wcy5jaGlsZHJlbik9PkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pKVxuICAgIH1cbn1cbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IEhhc0NoaWxkIGZyb20gXCIuL2hhc0NoaWxkXCJcblxuZXhwb3J0IGRlZmF1bHQgQT0+e1xuXHRjb25zdCBTdXBlcj1IYXNDaGlsZChBKVxuICAgIHJldHVybiBjbGFzcyBfXyQxIGV4dGVuZHMgU3VwZXJ7XG4gICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZXMgPSB7XG4gICAgICAgICAgICAuLi5TdXBlci5jb250ZXh0VHlwZXMsXG4gICAgICAgICAgICBwYXJlbnQ6IFByb3BUeXBlcy5vYmplY3RcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogY2hpbGRyZW4gc2hvdWxkIGNhbGwgYmVmb3JlIGNvbXBvc2luZyBsaW5lLFxuICAgICAgICAgKiByZXR1cm4gbmV4dCBsaW5lIHJlY3Qgeyp3aWR0aCwgW2hlaWdodF0sIFtncmVlZHkodGV4dCk9dHJ1ZV0sIFt3b3JkeSh0ZXh0KT10cnVlXX1cbiAgICAgICAgICovXG4gICAgICAgIG5leHRBdmFpbGFibGVTcGFjZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50Lm5leHRBdmFpbGFibGVTcGFjZSguLi5hcmd1bWVudHMpXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hpbGRyZW4gc2hvdWxkIGNhbGwgYWZ0ZXIgYSBsaW5lIGNvbXBvc2VkIG91dFxuICAgICAgICAgKiBhIGNoYW5jZSB0byBhZGQgdG8gc2VsZidzIGNvbXBvc2VkXG4gICAgICAgICAqL1xuICAgICAgICBhcHBlbmRDb21wb3NlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cykpXG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCBIYXNQYXJlbnRBbmRDaGlsZCBmcm9tIFwiLi9oYXNQYXJlbnRBbmRDaGlsZFwiXG5leHBvcnQgZGVmYXVsdCBBPT57XG4gICAgY29uc3QgU3VwZXI9SGFzUGFyZW50QW5kQ2hpbGQoQSlcbiAgICByZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIFN1cGVye1xuICAgICAgICBnZXQgaXNBdG9tKCl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaXNBdG9tQ2hhbmdlZCh7aGFzaCxjaGFuZ2VkPWhhc2g9PXRoaXMucHJvcHMuaGFzaH0pe1xuICAgICAgICAgICAgcmV0dXJuIGNoYW5nZWRcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDb21wb3NlZCgpXG4gICAgICAgICAgICB0aGlzLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LHtGcmFnbWVudCxDaGlsZHJlbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5pbXBvcnQgQ29tcG9zZWRBbGxUcmlnZ2VyIGZyb20gXCIuL2NvbXBvc2VkLWFsbC10cmlnZ2VyXCJcbi8qKlxuICogbWFrZSBjb21wb25lbnQgYWx3YXlzIHVwZGF0ZSAoYnkgY2FsbGluZyAucmVuZGVyKSwgc28gQWxsQ29tcG9zZWRUcmlnZ2VyIHdvdWxkIGJlIHRyaWdnZXJlZCB0byBjb3JyZWN0bHkgc2V0IGFsbENvbXBvc2VkXG4gKiBidXQgYXQgZmlyc3QgY2xlYXIgbGFzdCBjb21wb3NlZCBcbiAqIFxuICogUmVjb21wb3NlOlxuICogMS4gY2FuY2VsIGFuZCBrZWVwIGxhc3QgY29tcG9zZWQgYWNjb3JkaW5nIHRvIHByb3BzL3N0YXRlL2NvbXB1dGVkL2NvbnRleHRcbiAqIGluIHJlbmRlcjpcbiAqIDIuIGFwcGVuZCBsYXN0IGNvbXBvc2VkXG4gKiAzLiBjb21wb3NlIG5vdCBjb21wb3NlZFxuXG4gKiBUbyBtYWtlIGV2ZXJ5dGhpbmcgY2FjaGVhYmxlLCBjb21wb25lbnQgY2FuIGN1c3RvbWl6ZSBhcHBlbmRMYXN0Q29tcG9zZWQgdG8gZGVmaW5lIGl0c2VsZiBjYWNoZSBwb2xpY3lcbiAqIHNob3VsIGxhc3RDb21wb3NlZCBiZSBjbGVhcmVkXG4gKiBcbiAqIEF0b21Db2xsZWN0b3I6IGlzIGlubGluZSBjb25haW5lciBhbmQgTm9DaGlsZCBpbiBQYXJhZ3JhcGgsIFBhcmFncmFwaC5uZXh0QXZhaWxhYmxlU3BhY2Ugd291bGQgZ2l2ZSBudWxsIGZvciBBdG9tQ29sbGVjdG9yIHRlc3QuXG4gKiBBdG9tQ29sbGVjdG9yIGlzIGp1c3QgdG8gY29sbGVjdCBhdG9tIHdpdGhvdXQgZWl0aGVyIGJsb2NrIG9yIGlubGluZSBsYXlvdXQsIHNvIHRoZSBjYWNoZSBwb2xpY3kgaXMgc3VyZSBhc1xuICogKiogaWYgbm90IGNoYW5nZSwgY2FjaGUgY2FuIGFsd2F5cyBiZSBhcHBsaWNhYmxlXG4gKiAqKiBBdG9tQ29sbGVjdG9yIHNob3VsZCBiZSBlaXRoZXIgYWxsIGNvbXBvc2VkLCBvciBub3RoaW5nIGNvbXBvc2VkXG4gKiAqKiBOb0NoaWxkIGFsc28gd29ya3MgbGlrZSBBdG9tQ29sbGVjdG9yIGZyb20gY2FjaGUgcGVyc3BlY3RpdmVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgQT0+e1xuICAgIGNsYXNzIFJlY29tcG9zYWJsZSBleHRlbmRzIEF7XG4gICAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gcmVjb21wb3NhYmxlLSR7QS5kaXNwbGF5TmFtZX1gXG5cbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkPVtdXG4gICAgICAgIH1cblxuICAgICAgICByZWNvbXBvc2FibGVfY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2FjaGUgbGFzdCBjb21wb3NlZCBmb3IgbmV4dCB0aW1lXG4gICAgICAgIGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZWQ9dGhpcy5yZWNvbXBvc2FibGVfY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLnB1c2goY29tcG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gY29tcG9zZWRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vYWx3YXlzIGNhbGwgcmVuZGVyIHRvIGNvbXBvc2UgdG8gc3luYyBvbkFsbENoaWxkcmVuQ29tcG9zZWRcbiAgICAgICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHQpe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBjb21wb3NlZFVVSUQgdG8gaWRlbnRpZnkgZWFjaCBjb21wb3NlLCBzbyBjcmVhdGVDb21wb3NlZDJQYXJlbnQgY2FuIGJlIGNhY2hlZC5cbiAgICAgICAgICAgICAqLyAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkVVVJRD1EYXRlLm5vdygpXG4gICAgICAgICAgICBpZighdGhpcy5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSl7XG4gICAgICAgICAgICAgICAgLy9jbGVhciBsYXN0IGFsbENvbXBvc2VkLCBzbyBpdCBjYW4gYmUgcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkPXVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0LnNob3VsZENvbnRpbnVlQ29tcG9zZSAmJiAhdGhpcy5jb250ZXh0LnNob3VsZENvbnRpbnVlQ29tcG9zZSh0aGlzKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogdG8gcmVtb3ZlIHVudXNhYmxlIGNvbXBvc2VkLCBhbmQga2VlcCB1c2FibGUsIHRoZW4gYXBwZW5kIHVzYWJsZSB0byBwYXJlbnQgaW4gcmVuZGVyIFxuICAgICAgICAgKiBhbGwgY29tcHV0ZWQgc2hvdWxkIGJlIHN5bmNlZCBoZXJlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbmV4dFByb3BzIFxuICAgICAgICAgKiBAcGFyYW0geyp9IG5leHRTdGF0ZSBcbiAgICAgICAgICovXG4gICAgICAgIGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKHByb3BzKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNBdG9tQ29sbGVjdG9yKCkgJiYgIXRoaXMuaXNBdG9tQ2hhbmdlZCguLi5hcmd1bWVudHMpKXtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5jb21wb3NlZD1bXVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9dW5kZWZpbmVkXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogKiBhbGwgY29tcHV0ZWQgc2hvdWxkIGJlIHN5bmNlZCBoZXJlIGFnYWluIGJhc2VkIG9uIGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkXG4gICAgICAgICAqIEByZXR1cm5cbiAgICAgICAgICogbnVtYmVyOiBuZWVkIHJlbmRlciBmcm9tIHRoZSBpbmRleFxuICAgICAgICAgKiB0cnVlOiBzdWNjZXNzLCByZW5kZXIgbm90aGluZyxcbiAgICAgICAgICogb3RoZXJzOiBmYWlsLCByZW5kZXIgYWxsXG4gICAgICAgICAqL1xuICAgICAgICBhcHBlbmRMYXN0Q29tcG9zZWQoKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNBdG9tQ29sbGVjdG9yKCkpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmZvckVhY2goYT0+dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZChhKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9sYXN0IGNvbXBvc2VkICsgbGVmdFxuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIGlmKHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICBjb25zdCBhcHBlbmRlZD10aGlzLmFwcGVuZExhc3RDb21wb3NlZCgpXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGFwcGVuZGVkKT09XCJudW1iZXJcIiAmJiBhcHBlbmRlZD4tMSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkICR7YXBwZW5kZWQrMX0gY2hpbGRyZW4gY2FjaGVzYClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLnNsaWNlKGFwcGVuZGVkKzEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb21wb3NlZEFsbFRyaWdnZXIgaG9zdD17dGhpc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGFwcGVuZGVkPT09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkIGFsbCBjaGlsZHJlbiBjYWNoZXNgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkIDAgY2hpbGRyZW4gY2FjaGVzYClcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZW5kZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRJZE9mKGNvbXBvc2VkLGlkKXtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3Q9KHtwcm9wczp7XCJkYXRhLWNvbnRlbnRcIjphLGNoaWxkcmVufX0pPT4oaWQ9YSkhPXVuZGVmaW5lZCA/IFxuICAgICAgICAgICAgICAgIHRydWUgOiAgQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmluZEluZGV4KGV4dHJhY3QpIT0tMTtcbiAgICAgICAgICAgIGV4dHJhY3QoY29tcG9zZWQpXG4gICAgICAgICAgICBpZih0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikuZmluZEluZGV4KGE9PmEgJiYgYS5wcm9wcy5pZD09aWQpIT0tMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkcmVuTmVlZFJlY29tcG9zZT1tZW1vaXplKChiLGEpPT57XG4gICAgICAgICAgICBjb25zdCBuZXh0PUNoaWxkcmVuLnRvQXJyYXkoYi5jaGlsZHJlbilcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQ9dGhpcy5jaGlsZHJlbkFycmF5KGEuY2hpbGRyZW4pXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkSW5kZXg9Y3VycmVudC5maW5kSW5kZXgoKHtwcm9wczp7aWQsaGFzaH19LGksXywkLGI9bmV4dFtpXSk9PiEoYiAmJiBiLnByb3BzLmlkPT1pZCAmJiBiLnByb3BzLmhhc2g9PWhhc2gpKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQuc2xpY2UoY2hhbmdlZEluZGV4KS5tYXAoYT0+YSAmJiBhLnByb3BzLmlkKVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBiYXNlZCBvbiBQYXJhZ3JhcGgncyBuZXh0QXZhaWxhYmxlU3BhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzQXRvbUNvbGxlY3Rvcigpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBdG9tIHx8IHRoaXMucHJvcHMuaXNJbmxpbmVDb250YWluZXJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWNvbXBvc2FibGVcbn1cbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuLyoqSXQgdG8gbWFrZSBjb21wb3NlZCByZXN1bHQgbG9jYXRhYmxlIHRocm91Z2ggaWQgYW5kIHR5cGUgKi9cbmZ1bmN0aW9uIExvY2F0YWJsZShBKXtcblx0cmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuXHRcdHN0YXRpYyBkaXNwbGF5TmFtZT1gbG9jYXRhYmxlLSR7QS5kaXNwbGF5TmFtZX1gXG5cdFx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0XHQuLi5BLnByb3BUeXBlcyxcblx0XHRcdGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcblx0XHR9XG5cbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgICAgICAuLi5BLmNvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIG1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgICAgIHVubW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRcdFx0Z2V0Q29tcG9zZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb3VudCAmJiB0aGlzLnByb3BzLmlkICYmIHRoaXMuY29udGV4dC5tb3VudCh0aGlzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgICAgIC8vdGhpcy5jb250ZXh0LnVubW91bnQgJiYgdGhpcy5jb250ZXh0LnVubW91bnQodGhpcylcbiAgICAgICAgfVxuXG5cdFx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0XHRjb25zdCBlbGVtZW50PXN1cGVyLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCguLi5hcmd1bWVudHMpXG5cdFx0XHRpZihSZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiB0aGlzLnByb3BzLmlkKXtcblx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LHtcblx0XHRcdFx0XHRcdFwiZGF0YS1jb250ZW50XCI6dGhpcy5wcm9wcy5pZCxcblx0XHRcdFx0XHRcdFwiZGF0YS10eXBlXCI6dGhpcy5nZXRDb21wb3NlVHlwZSgpXG5cdFx0XHRcdFx0fSlcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm4gZWxlbWVudFxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBMb2NhdG9yaXplKEEpe1xuXHRyZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEF7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPWBsb2NhdG9yLSR7QS5kaXNwbGF5TmFtZX1gXG5cdFx0c3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcblx0XHRcdC4uLkEuY2hpbGRDb250ZXh0VHlwZXMsXG5cdFx0XHRtb3VudDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0XHR1bm1vdW50OiBQcm9wVHlwZXMuZnVuYyxcblx0XHRcdGdldENvbXBvc2VyOiBQcm9wVHlwZXMuZnVuYyxcblx0XHR9XG5cblx0XHRjb25zdHJ1Y3Rvcigpe1xuXHRcdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdFx0Y29uc3QgY29tcG9zZXJzPXRoaXMuY29tcG9zZXJzPW5ldyBNYXAoW1t0aGlzLnByb3BzLmlkLHRoaXNdXSlcblx0XHRcdHRoaXMubW91bnQ9YT0+Y29tcG9zZXJzLnNldChhLnByb3BzLmlkLGEpXG5cdFx0XHR0aGlzLnVubW91bnQ9YT0+e1xuXHRcdFx0XHRpZihjb21wb3NlcnMuZ2V0KGEucHJvcHMuaWQpPT1hKXtcblx0XHRcdFx0XHRjb21wb3NlcnMuZGVsZXRlKGEucHJvcHMuaWQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0Q29tcG9zZXI9aWQ9PmNvbXBvc2Vycy5nZXQoaWQpXG5cdFx0fVxuXG5cdFx0Z2V0Q2hpbGRDb250ZXh0KCl7XG5cdFx0XHRjb25zdCB7bW91bnQsdW5tb3VudCxnZXRDb21wb3Nlcn09dGhpc1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Li4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG5cdFx0XHRcdG1vdW50LHVubW91bnQsZ2V0Q29tcG9zZXJcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuTG9jYXRhYmxlLkxvY2F0b3JpemU9TG9jYXRvcml6ZVxuXG5leHBvcnQgZGVmYXVsdCBMb2NhdGFibGVcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuZXhwb3J0IGRlZmF1bHQgKEEsYWx3YXlzPXRydWUpPT5jbGFzcyBfXyQxIGV4dGVuZHMgQXtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWU9YHN0b3BwYWJsZS0ke0EuZGlzcGxheU5hbWV9YFxuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAuLi5BLmNvbnRleHRUeXBlcyxcbiAgICAgICAgc2hvdWxkQ29udGludWVDb21wb3NlOiBQcm9wVHlwZXMuZnVuY1xuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZih0aGlzLmNvbnRleHQuc2hvdWxkQ29udGludWVDb21wb3NlKXtcbiAgICAgICAgICAgIGlmKGFsd2F5cyB8fCB0aGlzLnByb3BzLnN0b3BwYWJsZSl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2UodGhpcykpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuZ2V0Q29tcG9zZVR5cGUoKX1bJHt0aGlzLnByb3BzLmlkfV0gc2tpcCBjb21wb3NlZGApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpXG4gICAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5cbmV4cG9ydCBkZWZhdWx0IEE9PmNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gY29udGludWFibGUtJHtBLmRpc3BsYXlOYW1lfWBcblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG5cdFx0Li4uQS5jaGlsZENvbnRleHRUeXBlcyxcblx0XHRzaG91bGRDb250aW51ZUNvbXBvc2U6IFByb3BUeXBlcy5mdW5jXG5cdH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG4gICAgICAgICAgICBzaG91bGRDb250aW51ZUNvbXBvc2U6dGhpcy5zaG91bGRDb250aW51ZUNvbXBvc2UuYmluZCh0aGlzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdWxkQ29udGludWVDb21wb3NlKGN1cnJlbnQpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaG91bGRDb250aW51ZUNvbXBvc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCwgYW5kIG5vdGlmeU5vdEFsbENvbXBvc2VkIHdoZW4gZmFsc2VcIilcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtGcmFnbWVudCwgUHVyZUNvbXBvbmVudCBhcyBDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0IGV4dGVuZHMgQ29tcG9uZW50e1xuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7XG5cdFx0XHRjaGlsZHJlbiwgd2hpdGVTcGFjZSwgY29sb3I6ZmlsbCwgaGlnaGxpZ2h0LGJvcmRlcix1bmRlcmxpbmUsc3RyaWtlLFxuXHRcdFx0ZGVzY2VudCxtaW5XaWR0aCwgaGVpZ2h0LCB3aWR0aCwgYmxvY2tPZmZzZXQsbWVyZ2VPcHBvcnR1bml0eSwvL2lnbm9yZVxuXHRcdFx0eSxcblx0XHRcdC4uLm90aGVyc309dGhpcy5wcm9wc1xuXG5cdFx0bGV0IGJhY2tncm91bmQ9bnVsbFxuXHRcdGlmKGhpZ2hsaWdodCB8fCBib3JkZXIpe1xuXHRcdFx0bGV0IHByb3BzPXtcblx0XHRcdFx0XHR3aWR0aDpNYXRoLmNlaWwod2lkdGgpLFxuXHRcdFx0XHRcdGhlaWdodDpNYXRoLmNlaWwoaGVpZ2h0KSxcblx0XHRcdFx0XHRmaWxsOmhpZ2hsaWdodHx8XCJub25lXCIsXG5cdFx0XHRcdFx0eDowLHk6eS1oZWlnaHQrZGVzY2VudFxuXHRcdFx0XHR9XG5cdFx0XHRpZihib3JkZXIpe1xuXHRcdFx0XHRwcm9wcy5zdHJva2U9XCJibGFja1wiXG5cdFx0XHRcdHByb3BzLnN0cm9rZVdpZHRoPTAuNVxuXHRcdFx0fVxuXHRcdFx0YmFja2dyb3VuZD0oPHJlY3Qgey4uLnByb3BzfS8+KVxuXHRcdH1cblx0XHRsZXQgZGVjb3JhdGlvbj1udWxsXG5cdFx0aWYodW5kZXJsaW5lKXtcblx0XHRcdGxldCB5PU1hdGguY2VpbChkZXNjZW50LzIpXG5cdFx0XHRsZXQgc3Ryb2tlV2lkdGg9KGE9Pntcblx0XHRcdFx0XHRzd2l0Y2godW5kZXJsaW5lKXtcblx0XHRcdFx0XHRcdGNhc2UgXCJkb3VibGVcIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGEqMjtcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSgwLjUpXG5cdFx0XHRkZWNvcmF0aW9uPSg8bGluZSB5MT17eX0geDI9e3dpZHRofSB5Mj17eX0gc3Ryb2tlPVwiYmxhY2tcIiBzdHJva2VXaWR0aD17c3Ryb2tlV2lkdGh9Lz4pXG5cdFx0fVxuXG5cdFx0bGV0IHN0cmlrZWxpbmU9bnVsbFxuXHRcdGlmKHN0cmlrZSl7XG5cdFx0XHRsZXQgeT0tZGVzY2VudFxuXHRcdFx0c3RyaWtlbGluZT0oPGxpbmUgeTE9e3l9IHgyPXt3aWR0aH0geTI9e3l9IHN0cm9rZT1cImJsYWNrXCIgc3Ryb2tlV2lkdGg9ezAuNX0vPilcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0e2JhY2tncm91bmR9XG5cdFx0XHRcdHtzdHJpa2VsaW5lfVxuXHRcdFx0XHR7ZGVjb3JhdGlvbn1cblx0XHRcdFx0PHRleHQgc3R5bGU9e3t1c2VyU2VsZWN0Olwibm9uZVwiLHdoaXRlU3BhY2U6XCJwcmVcIixjdXJzb3I6XCJ0ZXh0XCJ9fVxuXHRcdFx0XHRcdHk9e3l8fDB9XG5cdFx0XHRcdFx0ey4uLm90aGVyc31cblx0XHRcdFx0XHRmaWxsPXtmaWxsfT5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvdGV4dD5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIER5bmFtaWM9KHtjaGlsZHJlbiwgLi4ucHJvcHN9KT0+PFRleHQgey4uLnByb3BzfSBjaGlsZHJlbj17Y2hpbGRyZW4oKX0vPlxufSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnQsIENoaWxkcmVufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge3doZW5TZWxlY3Rpb25DaGFuZ2V9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheWVyIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1cImxheWVyXCJcbiAgICBzdGF0aWMgcHJvcFR5cGVzPXtcbiAgICAgICAgejpQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7YWN0aXZlPXRydWUsY2hpbGRyZW59PXRoaXMucHJvcHNcbiAgICAgICAgaWYoIWFjdGl2ZSl7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxHcm91cCBzdHlsZT17e29wYWNpdHk6MC40fX0gb25Eb3VibGVDbGljaz17ZT0+ZX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICg8R3JvdXA+e2NoaWxkcmVufTwvR3JvdXA+KVxuICAgIH1cblxuICAgIHN0YXRpYyBDb250YWluZXI9d2hlblNlbGVjdGlvbkNoYW5nZSgoe3NlbGVjdGlvbn0pPT57XG4gICAgICAgIGlmKCFzZWxlY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgY29uc3QgcHJvcHM9c2VsZWN0aW9uLnByb3BzKFwicGFnZVwiKVxuICAgICAgICBjb25zdCBhY3RpdmU9cHJvcHMgPyBwcm9wcy5sYXllciA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge2FjdGl2ZX1cbiAgICB9KShjbGFzcyBMYXllckNvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudHtcbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgICAgICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dC5lZGl0YWJsZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57dGhpcy5wcm9wcy5jaGlsZHJlbn08L0ZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qge2FjdGl2ZX09dGhpcy5wcm9wc1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW49Q2hpbGRyZW4udG9BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6YX0se3Byb3BzOmJ9KT0+YS56LWIueilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGRyZW4uZmlsdGVyKGE9PmEucHJvcHMueiE9YWN0aXZlKS5tYXAoYT0+UmVhY3QuY2xvbmVFbGVtZW50KGEsIHthY3RpdmU6ZmFsc2V9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5maW5kKGE9PmEucHJvcHMuej09YWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihhPT4hIWEpfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxufSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgQ2hpbGRyZW4sIEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi90ZXh0XCJcbmltcG9ydCBMYXllciBmcm9tIFwiLi9sYXllclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0eDpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHk6UHJvcFR5cGVzLm51bWJlcixcblx0XHR6OlByb3BUeXBlcy5udW1iZXIsXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRkZWJ1ZzogUHJvcFR5cGVzLmJvb2xcblx0fVxuXG5cdHN0YXRpYyBMYXllcj1MYXllclxuXHRzdGF0aWMgTGF5ZXJzPUxheWVyLkNvbnRhaW5lclxuXG4gICAgcmVuZGVyKCl7XG5cdFx0bGV0IHtcblx0XHRcdGlubmVyUmVmLCAvL2ZvciB3YXlwb2ludFxuXHRcdFx0cm90YXRlLFxuXHRcdFx0eD0wLHk9MCxcblx0XHRcdGNoaWxkcmVuLFxuXHRcdFx0YmFja2dyb3VuZCxcblx0XHRcdG1hcmdpbixtaW5XaWR0aCwgd2lkdGgsIGhlaWdodCwgaW5kZXgsIGNoaWxkSW5kZXgsZ2VvbWV0cnksYmFzZWxpbmUsbGluZURlc2NlbnQsaXNMYXN0UmFua09mUm93LGlzRmlyc3RSb3dJblBhZ2UsXG5cdFx0XHRjb250ZW50V2lkdGgsd3JhcCxwYWdpbmF0aW9uLGFuY2hvcixibG9ja09mZnNldCxuYW1lZCxkZXNjZW50LG1lcmdlT3Bwb3J0dW5pdHksIHNwYWNlSGVpZ2h0LGVkaXRhYmxlLGRpc3BhdGNoLFxuXHRcdFx0Ly9jbGFzc05hbWUsaWQsXG5cdFx0XHRJLFxuXHRcdFx0Li4ub3RoZXJzfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgcHJvcHM9e31cblxuXHRcdGlmKGlubmVyUmVmKXtcblx0XHRcdHByb3BzLnJlZj1pbm5lclJlZlxuXHRcdH1cblxuXHRcdGxldCB0cmFuc2Zvcm09XCJcIlxuXG5cdFx0aWYoeHx8eSl7XG5cdFx0XHR0cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3BhcnNlSW50KHh8fDApfSAke3BhcnNlSW50KHl8fDApfSlgXG5cdFx0fVxuXG5cdFx0aWYocm90YXRlKXtcblx0XHRcdHRyYW5zZm9ybT1gJHt0cmFuc2Zvcm19IHJvdGF0ZSgke3JvdGF0ZX0pYFxuXHRcdH1cblxuXHRcdGlmKHRyYW5zZm9ybS5sZW5ndGg+MCl7XG5cdFx0XHRwcm9wcy50cmFuc2Zvcm09dHJhbnNmb3JtXG5cdFx0fVxuXG5cdFx0Y29uc3QgY29udGVudD1bXG5cdFx0XHRiYWNrZ3JvdW5kJiZiYWNrZ3JvdW5kIT1cInRyYW5zcGFyZW50XCImJiAoPHJlY3Qgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gZmlsbD17YmFja2dyb3VuZH0ga2V5PVwiYmFja2dyb3VuZFwiLz4pLFxuXHRcdFx0Li4uQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikubWFwKChhLGkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5Oml9KSlcblx0XHRdLmZpbHRlcihhPT5hKVxuXG5cdFx0aWYodGhpcy5jb250ZXh0LmRlYnVnKXtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxnIHsuLi5vdGhlcnN9IHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0e2NvbnRlbnR9XG5cdFx0XHRcdDwvZz5cblx0XHRcdClcblx0XHR9XG5cblx0XHRjb25zdCBrZXlzPU9iamVjdC5rZXlzKHByb3BzKVxuXHRcdGlmKGtleXMubGVuZ3RoPT0wKXtcblx0XHRcdHJldHVybiA8RnJhZ21lbnQ+e2NvbnRlbnR9PC9GcmFnbWVudD5cblx0XHR9ZWxzZSBpZihjb250ZW50Lmxlbmd0aD09MSAmJiBrZXlzLmxlbmd0aD09MSAmJiBrZXlzWzBdPT1cInRyYW5zZm9ybVwiICYmICFyb3RhdGUpe1xuXHRcdFx0Y29uc3Qge3Byb3BzOnt4OngxPTAseTp5MT0wfSx0eXBlfT1jb250ZW50WzBdXHRcblx0XHRcdHN3aXRjaCh0eXBlKXtcblx0XHRcdFx0Y2FzZSBUZXh0OlxuXHRcdFx0XHRjYXNlIHRoaXMuY29uc3RydWN0b3I6XG5cdFx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjb250ZW50WzBdLHt4OngxK3gseTp5MSt5fSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGcgey4uLnByb3BzfT5cblx0XHRcdFx0e2NvbnRlbnR9XG5cdFx0XHQ8L2c+XG5cdFx0KVxuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IFdheXBvaW50IGZyb20gXCJyZWFjdC13YXlwb2ludFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4vZ3JvdXBcIlxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvc2VkRG9jdW1lbnRDYW52YXMgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cImNvbXBvc2VkLWRvY3VtZW50LWRlZmF1bHQtY2FudmFzXCJcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0bWVkaWE6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH1cblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0cGFnZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLFxuXHRcdHBhZ2VHYXA6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0c2NhbGU6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0ZG9jdW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHRwYWdlR2FwOjI0LFxuXHRcdHNjYWxlOjEsXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtkb2N1bWVudCwuLi5tZX0pe1xuICAgICAgICBjb25zdCB7cGFnZXMscHJvcHM6e3NjYWxlPW1lLnNjYWxlLHBhZ2VHYXA9bWUucGFnZUdhcCxwcmVjaXNpb249bWUucHJlY2lzaW9ufX09ZG9jdW1lbnRcbiAgICAgICAgcmV0dXJuIHtwYWdlcyxwcmVjaXNpb24sc2NhbGUscGFnZUdhcH1cblx0fVxuXHRcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHR9XG5cblx0Z2V0Q29tcG9zZWQ9bWVtb2l6ZSgocGFnZXMscGFnZUdhcCk9Pntcblx0XHRjb25zdCBjb250ZW50PXBhZ2VzLm1hcChwYWdlPT5wYWdlLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKVxuXHRcdHJldHVybiBjb250ZW50LnJlZHVjZSgoc2l6ZSx7cHJvcHM6e3dpZHRoLGhlaWdodH19KT0+e1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihzaXplLHtcblx0XHRcdFx0XHR3aWR0aDpNYXRoLm1heChzaXplLndpZHRoLHdpZHRoKSxcblx0XHRcdFx0XHRoZWlnaHQ6c2l6ZS5oZWlnaHQraGVpZ2h0K3BhZ2VHYXAsXG5cdFx0XHRcdH0pXG5cdFx0XHR9LHt3aWR0aDowLGhlaWdodDpwYWdlR2FwLGNvbXBvc2VkOmNvbnRlbnR9KVxuXHR9KVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtcblx0XHRcdHN0YXRlOntwYWdlcywgcGFnZUdhcCwgc2NhbGUscHJlY2lzaW9uPTF9LCBcblx0XHRcdHByb3BzOntzdHlsZSxjaGlsZHJlbixpbm5lclJlZixkb2N1bWVudCxwYWdlczpfMSxwYWdlR2FwOl8yLHNjYWxlOl8zLHByZWNpc2lvbjpfNCxwYXBlcixfX3NlcXVlbnRpYWxDb21wb3NlLCAuLi5wcm9wc31cblx0XHR9PXRoaXNcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LGNvbXBvc2VkfT10aGlzLmdldENvbXBvc2VkKHBhZ2VzLCBwYWdlR2FwKVxuXHRcdHJldHVybiAgIChcblx0XHRcdDxzdmdcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRyZWY9e2lubmVyUmVmfVxuXHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaW5cIlxuXHRcdFx0XHR2aWV3Qm94PXtgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWB9XG5cdFx0XHRcdHN0eWxlPXt7YmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsIHdpZHRoOndpZHRoKnNjYWxlKnByZWNpc2lvbiwgaGVpZ2h0OmhlaWdodCpzY2FsZSpwcmVjaXNpb24sIC4uLnN0eWxlfX1cblx0XHRcdFx0PlxuXHRcdFx0XHR7dGhpcy5wb3NpdGlvblBhZ2VzKGNvbXBvc2VkLCB3aWR0aCl9XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvc3ZnPlxuXHRcdClcblx0fVxuXG5cdHBvc2l0aW9uUGFnZXMocGFnZXMsY2FudmFzV2lkdGgpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7cGFnZUdhcCwgcHJlY2lzaW9ufSwgcHJvcHM6e3BhcGVyfSxjb250ZXh0OnttZWRpYX19PXRoaXNcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIHk9e3BhZ2VHYXB9IHg9ezB9PlxuXHRcdFx0XHR7cGFnZXMucmVkdWNlKChwb3NpdGlvbmVkLCBwYWdlKT0+e1xuXHRcdFx0XHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsbWFyZ2luLEl9PXBhZ2UucHJvcHNcblx0XHRcdFx0XHRwb3NpdGlvbmVkLnB1c2goLy91c2UgZyB0byBtYWtlIEdyb3VwIGlnbm9yZSBjbGFzc05hbWUgYW5kIGlkIGZvciBiZXR0ZXIgbWVyZ2Vcblx0XHRcdFx0XHRcdDxnIGtleT17SX0gY2xhc3NOYW1lPXtcInBhZ2VcIn0gaWQ9e2BwYWdlJHtJfWB9PlxuXHRcdFx0XHRcdFx0XHQ8R3JvdXAgey4uLnt5OnBvc2l0aW9uZWQueSx4OihjYW52YXNXaWR0aC13aWR0aCkvMn19PlxuXHRcdFx0XHRcdFx0XHRcdHttZWRpYT09XCJmaWxlXCIgPyBwYWdlIDpcblx0XHRcdFx0XHRcdFx0XHQ8U21hcnRTaG93IHsuLi57XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpwYWdlLFxuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGgsaGVpZ2h0LG1hcmdpbixcblx0XHRcdFx0XHRcdFx0XHRcdHByZWNpc2lvbixwYXBlcixcblx0XHRcdFx0XHRcdFx0XHR9fS8+fVxuXHRcdFx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRwb3NpdGlvbmVkLnkrPShoZWlnaHQrcGFnZUdhcClcblx0XHRcdFx0XHRyZXR1cm4gcG9zaXRpb25lZFxuXHRcdFx0XHR9LE9iamVjdC5hc3NpZ24oW10se3k6MH0pKX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG5cdC8vZm9sbG93IHNhbWUgbGF5b3V0IG9mIHBvc2l0aW9uUGFnZXNcblx0c3RhdGljIGNvbXBvc2VkWShwYWdlcywgcGFnZUdhcCl7XG4gICAgICAgIGNvbnN0IGxhc3Q9cGFnZXNbcGFnZXMubGVuZ3RoLTFdXG4gICAgICAgIGlmKCFsYXN0KVxuICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgY29uc3QgaGVpZ2h0T2ZMYXN0PWxhc3QuY29udGV4dC5wYXJlbnQuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCkgPyBsYXN0LnByb3BzLmhlaWdodCA6IGxhc3QuY29tcG9zZWRIZWlnaHRcbiAgICAgICAgcmV0dXJuIHBhZ2VzLnNsaWNlKDAscGFnZXMubGVuZ3RoLTEpLnJlZHVjZSgodyxwYWdlKT0+dytwYWdlLnByb3BzLmhlaWdodCtwYWdlR2FwLGhlaWdodE9mTGFzdClcblx0fVxuXG5cdHN0YXRpYyBwYWdlUmVjdChJLCBzdmcpe1xuXHRcdGNvbnN0IHBhZ2U9c3ZnLnF1ZXJ5U2VsZWN0b3IoXCIjcGFnZVwiK0kpXG4gICAgICAgIHJldHVybiBwYWdlICYmIHBhZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblx0fVxufVxuXG5cbmNsYXNzIFNtYXJ0U2hvdyBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGU9e2Rpc3BsYXk6ZmFsc2V9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtkaXNwbGF5fT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge2NoaWxkcmVuLHdpZHRoLGhlaWdodCxtYXJnaW4scHJlY2lzaW9uLHBhcGVyfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcblx0XHRcdDxXYXlwb2ludCBmaXJlT25SYXBpZFNjcm9sbD17ZmFsc2V9XG5cdFx0XHRcdG9uRW50ZXI9e2U9Pnt0aGlzLnNldFN0YXRlKHtkaXNwbGF5OnRydWV9KX19XG5cdFx0XHRcdG9uTGVhdmU9e2U9PnRoaXMuc2V0U3RhdGUoe2Rpc3BsYXk6ZmFsc2V9KX0+XG5cdFx0XHRcdDxnPlxuXHRcdFx0XHRcdHtwYXBlciAmJiA8UGFwZXIgey4uLnt3aWR0aCxoZWlnaHQsbWFyZ2luLGZpbGw6XCJ3aGl0ZVwiLCBwcmVjaXNpb24sLi4ucGFwZXJ9fS8+fVxuXHRcdFx0XHRcdHtkaXNwbGF5ID8gY2hpbGRyZW4gOiBudWxsfVxuXHRcdFx0XHQ8L2c+XG5cdFx0XHQ8L1dheXBvaW50PlxuXHRcdClcblx0fVxufVxuXG5jb25zdCBQYXBlcj0oe3dpZHRoLGhlaWdodCwgbWFyZ2luOntsZWZ0PTAscmlnaHQ9MCx0b3A9MCxib3R0b209MH09e30sIHByZWNpc2lvbiwgYm9yZGVyPXRydWUsXG5cdHN0cm9rZVdpZHRoPTEqcHJlY2lzaW9uLCBtYXJnaW5XaWR0aD0yMCpwcmVjaXNpb24sIC4uLnByb3BzfSk9PihcbiAgIDxnIGNsYXNzTmFtZT1cInBhcGVyXCI+XG5cdCAgIDxyZWN0IHsuLi5wcm9wc30gey4uLnt3aWR0aCxoZWlnaHR9fS8+XG5cdCAgIHtib3JkZXIgJiYgPHBhdGggc3Ryb2tlV2lkdGg9e3N0cm9rZVdpZHRofSBzdHJva2U9XCJsaWdodGdyYXlcIiBmaWxsPVwibm9uZVwiIGQ9e2Bcblx0XHQgICBcdFx0TTAgMCBoJHt3aWR0aH0gdiR7aGVpZ2h0fSBoJHstd2lkdGh9elxuXHRcdFx0XHRNJHtsZWZ0LU1hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSAke3RvcH0gaCR7TWF0aC5taW4obGVmdCxtYXJnaW5XaWR0aCl9IHYkey1NYXRoLm1pbih0b3AsbWFyZ2luV2lkdGgpfVxuXHRcdFx0XHRNJHtsZWZ0LU1hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSAke2hlaWdodC1ib3R0b219IGgke01hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSB2JHtNYXRoLm1pbihib3R0b20sbWFyZ2luV2lkdGgpfVxuXHRcdFx0XHRNJHt3aWR0aC1yaWdodCtNYXRoLm1pbihyaWdodCxtYXJnaW5XaWR0aCl9ICR7aGVpZ2h0LWJvdHRvbX0gaCR7LU1hdGgubWluKHJpZ2h0LG1hcmdpbldpZHRoKX0gdiR7TWF0aC5taW4oYm90dG9tLG1hcmdpbldpZHRoKX1cblx0XHRcdFx0TSR7d2lkdGgtcmlnaHQrTWF0aC5taW4ocmlnaHQsbWFyZ2luV2lkdGgpfSAke3RvcH0gaCR7LU1hdGgubWluKHJpZ2h0LG1hcmdpbldpZHRoKX0gdiR7LU1hdGgubWluKHRvcCxtYXJnaW5XaWR0aCl9XG5cdFx0XHRgfS8+XG5cdFx0fVxuICAgPC9nPlxuKVxuIiwiaW1wb3J0IFJlYWN0LHtQdXJlQ29tcG9uZW50IGFzIENvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5cbmV4cG9ydCBjbGFzcyBJbWFnZSBleHRlbmRzIENvbXBvbmVudHtcblx0cmVuZGVyKCl7XG5cdFx0cmV0dXJuIDxpbWFnZSB7Li4udGhpcy5wcm9wc30gLz5cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFwZSBleHRlbmRzIENvbXBvbmVudHtcbiAgICByZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG59XG4iLCIvKipcbiAqIGl0J3MgdG8gZGVzY3JpYmUgc3BhY2UgdGhhdCBsYXlvdXQgZW5naW5lIHVzZVxuICogbGVmdCA8LS0+IHJpZ2h0OiBpbmxpbmUgc2l6ZVxuICogYmxvY2tPZmZzZXQ6IGN1cnJlbnQgYmxvY2sgb2Zmc2V0XG4gKiBoZWlnaHQ6IGF2YWlsYWJsZSBibG9jayBzaXplLCBibG9ja09mZnNldCA8LS0tPmxhc3QgYmxvY2sgbGF5b3V0IG9wcG9ydHVuaXRpZXNcbiAqIHdyYXBwZWVzOiBleGNsdWRlZCBhcmVhcyBpbiBhIHNwYWNlXG4gKi9cblxuLyoqXG4gKiBzcGFjZSBjYW4gYmUgY29uc3RyYWluZWQgYnkgaW5saW5lIHNpemUsIGJsb2NrIHNpemUsIG9yIGJvdGgsIFxuICogYW5kIGV4Y2x1c2l2ZSB3cmFwcGVlc1xuICovXG4gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BhY2V7XG4gICAgc3RhdGljIGNyZWF0ZShzb3VyY2Upe1xuICAgICAgICBpZihzb3VyY2UgaW5zdGFuY2VvZiBTcGFjZSlcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VcbiAgICAgICAgcmV0dXJuIG5ldyBTcGFjZSguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgIGNvbnN0cnVjdG9yKHt3aWR0aCxsZWZ0PTAscmlnaHQsLi4ucHJvcHN9PXt9KXtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLHByb3BzKVxuICAgICAgICB0aGlzLnByb3BzPWFyZ3VtZW50c1swXXx8e31cbiAgICAgfVxuXG4gICAgIGdldCB3aWR0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5yaWdodC10aGlzLmxlZnRcbiAgICAgfVxuXG4gICAgIGdldCBsZWZ0KCl7XG4gICAgICAgICBjb25zdCB7bGVmdD0wfT10aGlzLnByb3BzXG4gICAgICAgICByZXR1cm4gbGVmdFxuICAgICB9XG5cbiAgICAgZ2V0IHJpZ2h0KCl7XG4gICAgICAgICBjb25zdCB7d2lkdGgscmlnaHQ9d2lkdGh9PXRoaXMucHJvcHNcbiAgICAgICAgIHJldHVybiByaWdodFxuICAgICB9XG5cbiAgICAgY2xvbmUobW9kaWZpZXIpe1xuICAgICAgICAgaWYobW9kaWZpZXIgaW5zdGFuY2VvZiBTcGFjZSl7XG4gICAgICAgICAgICBtb2RpZmllcj1tb2RpZmllci5wcm9wc1xuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIG5ldyBTcGFjZSh7Li4udGhpcy5wcm9wcywgLi4ubW9kaWZpZXIsZWRnZXM6ey4uLnRoaXMucHJvcHMuZWRnZXMsIC4uLm1vZGlmaWVyLmVkZ2VzLH19KVxuICAgICB9XG5cbiAgICAgYW5jaG9yKHtiYXNlLCBvZmZzZXQ9MCwgYWxpZ259LHt3aWR0aD0wLGhlaWdodD0wfT17fSl7XG4gICAgICAgIGNvbnN0IHtlZGdlc309dGhpcy5wcm9wc1xuICAgICAgICBpZighZWRnZXMgfHwgIWVkZ2VzW2Jhc2VdIHx8ICEoYWxpZ24gaW4gZWRnZXNbYmFzZV0pKVxuICAgICAgICAgICAgcmV0dXJuIG9mZnNldFxuICAgICAgICBcbiAgICAgICAgY29uc3Qge1tiYXNlXTp7W2FsaWduXTp2PTB9PXt9fT1lZGdlc1xuICAgICAgICBzd2l0Y2goYWxpZ24pe1xuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6IFxuICAgICAgICAgICAgICAgIHJldHVybiB2LW9mZnNldC13aWR0aFxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOiBcbiAgICAgICAgICAgICAgICByZXR1cm4gdi1vZmZzZXQtaGVpZ2h0XG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm4gditvZmZzZXQgXG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIGlzSW5saW5lU2l6ZURpZmZlcmVudCh0aGF0KXtcbiAgICAgICAgaWYoISF0aGlzLmNvbHMhPT0hIXRoYXQuY29scylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIGNvbnN0IHt3aWR0aCxjb2xzfT10aGF0XG4gICAgICAgIGlmKCFjb2xzKVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoIT10aGlzLndpZHRoXG4gICAgICAgIGlmKGNvbHMubGVuZ3RoIT10aGlzLmNvbHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgaWYodGhpcy5jb2xzLmZpbmQoKGEsaSxfLCQsYj1jb2xzW2ldKT0+YS53aWR0aCE9Yi53aWR0aCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICB9XG5cbiAgICAgZXF1YWxzKHRoYXQpe1xuICAgICAgICAgaWYoIXRoaXMuaXNJbmxpbmVTaXplRGlmZmVyZW50KHRoYXQpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodD09dGhhdC5oZWlnaHRcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICB9XG4gfVxuIFxuIiwiLyoqXG4gKiBTaW1wbGUgUG9pbnQgY2xhc3MuXG4gKlxuICogQW55IG1ldGhvZCB0aGF0IHRha2VzIGFuIHggYW5kIHkgbWF5IGFsc28gdGFrZSBhIHBvaW50LlxuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KSB7XG4gIHRoaXMuc2V0KHgsIHkpO1xufVxuXG5Qb2ludC5wcm90b3R5cGUgPSB7XG4gIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbiAgfSxcblxuICBzZXQ6IGZ1bmN0aW9uIHNldCh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKHgsIHkpIHtcbiAgICByZXR1cm4gdGhpcy54ID09IHggJiYgdGhpcy55ID09IHk7XG4gIH0sXG5cbiAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBcIihcIiArIHRoaXMueCArIFwiLFwiICsgdGhpcy55ICsgXCIpXCI7XG4gIH0sXG5cbiAgbWFwOiBmdW5jdGlvbiBtYXAoZikge1xuICAgIHRoaXMueCA9IGYuY2FsbCh0aGlzLCB0aGlzLngpO1xuICAgIHRoaXMueSA9IGYuY2FsbCh0aGlzLCB0aGlzLnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIGFkZDogZnVuY3Rpb24gYWRkKHgsIHkpIHtcbiAgICB0aGlzLnggKz0geDtcbiAgICB0aGlzLnkgKz0geTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3QoeCwgeSkge1xuICAgIHRoaXMueCAtPSB4O1xuICAgIHRoaXMueSAtPSB5O1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHNjYWxlOiBmdW5jdGlvbiBzY2FsZShzKSB7XG4gICAgdGhpcy54ICo9IHM7XG4gICAgdGhpcy55ICo9IHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgaXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLnggPT0gMCAmJiB0aGlzLnkgPT0gMDtcbiAgfSxcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdGFrZVBvaW50T3JBcmdzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnMSwgYXJnMikge1xuICAgICAgaWYgKGFyZzIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGYuY2FsbCh0aGlzLCBhcmcxLngsIGFyZzEueSk7XG4gICAgICByZXR1cm4gZi5jYWxsKHRoaXMsIGFyZzEsIGFyZzIpO1xuICAgIH07XG4gIH1cblxuICBmb3IgKGxldCBmIG9mIFtcImFkZFwiLCBcInN1YnRyYWN0XCIsIFwiZXF1YWxzXCIsIFwic2V0XCJdKVxuICAgIFBvaW50LnByb3RvdHlwZVtmXSA9IHRha2VQb2ludE9yQXJncyhQb2ludC5wcm90b3R5cGVbZl0pO1xufSkoKTtcblxuXG4vKipcbiAqIFJlY3QgaXMgYSBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVjdGFuZ2xlIHN1cHBvcnRpbmdcbiAqIG1hbnkgYmFzaWMgZ2VvbWV0cmljIG9wZXJhdGlvbnMuXG4gKlxuICogTk9URTogU2luY2UgaXRzIG9wZXJhdGlvbnMgYXJlIGNsb3NlZCwgcmVjdGFuZ2xlcyBtYXkgYmUgZW1wdHkgYW5kIHdpbGwgcmVwb3J0XG4gKiBub24tcG9zaXRpdmUgd2lkdGhzIGFuZCBoZWlnaHRzIGluIHRoYXQgY2FzZS5cbiAqL1xuXG5mdW5jdGlvbiBSZWN0KHgsIHksIHcsIGgpIHtcbiAgdGhpcy5sZWZ0ID0geDtcbiAgdGhpcy50b3AgPSB5O1xuICB0aGlzLnJpZ2h0ID0geCArIHc7XG4gIHRoaXMuYm90dG9tID0geSArIGg7XG59XG5cblJlY3QuZnJvbVJlY3QgPSBmdW5jdGlvbiBmcm9tUmVjdChyKSB7XG4gIHJldHVybiBuZXcgUmVjdChyLmxlZnQsIHIudG9wLCByLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTtcbn07XG5cblJlY3QucHJvdG90eXBlID0ge1xuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMubGVmdDsgfSxcbiAgZ2V0IHkoKSB7IHJldHVybiB0aGlzLnRvcDsgfSxcbiAgZ2V0IHdpZHRoKCkgeyByZXR1cm4gdGhpcy5yaWdodCAtIHRoaXMubGVmdDsgfSxcbiAgZ2V0IGhlaWdodCgpIHsgcmV0dXJuIHRoaXMuYm90dG9tIC0gdGhpcy50b3A7IH0sXG4gIHNldCB4KHYpIHtcbiAgICBsZXQgZGlmZiA9IHRoaXMubGVmdCAtIHY7XG4gICAgdGhpcy5sZWZ0ID0gdjtcbiAgICB0aGlzLnJpZ2h0IC09IGRpZmY7XG4gIH0sXG4gIHNldCB5KHYpIHtcbiAgICBsZXQgZGlmZiA9IHRoaXMudG9wIC0gdjtcbiAgICB0aGlzLnRvcCA9IHY7XG4gICAgdGhpcy5ib3R0b20gLT0gZGlmZjtcbiAgfSxcbiAgc2V0IHdpZHRoKHYpIHsgdGhpcy5yaWdodCA9IHRoaXMubGVmdCArIHY7IH0sXG4gIHNldCBoZWlnaHQodikgeyB0aGlzLmJvdHRvbSA9IHRoaXMudG9wICsgdjsgfSxcblxuICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQgPj0gdGhpcy5yaWdodCB8fCB0aGlzLnRvcCA+PSB0aGlzLmJvdHRvbTtcbiAgfSxcblxuICBzZXRSZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLmxlZnQgPSB4O1xuICAgIHRoaXMudG9wID0geTtcbiAgICB0aGlzLnJpZ2h0ID0geCArIHc7XG4gICAgdGhpcy5ib3R0b20gPSB5ICsgaDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHNldEJvdW5kcyhsLCB0LCByLCBiKSB7XG4gICAgdGhpcy50b3AgPSB0O1xuICAgIHRoaXMubGVmdCA9IGw7XG4gICAgdGhpcy5ib3R0b20gPSBiO1xuICAgIHRoaXMucmlnaHQgPSByO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gb3RoZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgKHRoaXMuaXNFbXB0eSgpICYmIG90aGVyLmlzRW1wdHkoKSB8fFxuICAgICAgICAgICAgdGhpcy50b3AgPT0gb3RoZXIudG9wICYmXG4gICAgICAgICAgICB0aGlzLmxlZnQgPT0gb3RoZXIubGVmdCAmJlxuICAgICAgICAgICAgdGhpcy5ib3R0b20gPT0gb3RoZXIuYm90dG9tICYmXG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID09IG90aGVyLnJpZ2h0KTtcbiAgfSxcblxuICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWN0KHRoaXMubGVmdCwgdGhpcy50b3AsIHRoaXMucmlnaHQgLSB0aGlzLmxlZnQsIHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuICB9LFxuXG4gIGNlbnRlcjogZnVuY3Rpb24gY2VudGVyKCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgIHRocm93IFwiRW1wdHkgcmVjdGFuZ2xlcyBkbyBub3QgaGF2ZSBjZW50ZXJzXCI7XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmxlZnQgKyAodGhpcy5yaWdodCAtIHRoaXMubGVmdCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcCArICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKSAvIDIpO1xuICB9LFxuXG4gIGNvcHlGcm9tKG90aGVyKSB7XG4gICAgdGhpcy50b3AgPSBvdGhlci50b3A7XG4gICAgdGhpcy5sZWZ0ID0gb3RoZXIubGVmdDtcbiAgICB0aGlzLmJvdHRvbSA9IG90aGVyLmJvdHRvbTtcbiAgICB0aGlzLnJpZ2h0ID0gb3RoZXIucmlnaHQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICB0cmFuc2xhdGUoeCwgeSkge1xuICAgIHRoaXMubGVmdCArPSB4O1xuICAgIHRoaXMucmlnaHQgKz0geDtcbiAgICB0aGlzLnRvcCArPSB5O1xuICAgIHRoaXMuYm90dG9tICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJbXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiLFwiICsgdGhpcy53aWR0aCArIFwiLFwiICsgdGhpcy5oZWlnaHQgKyBcIl1cIjtcbiAgfSxcblxuICAvKiogcmV0dXJuIGEgbmV3IHJlY3QgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhhdCBvbmUgYW5kIHRoaXMgb25lICovXG4gIHVuaW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5leHBhbmRUb0NvbnRhaW4ob3RoZXIpO1xuICB9LFxuXG4gIGNvbnRhaW5zKG90aGVyKSB7XG4gICAgaWYgKG90aGVyLmlzRW1wdHkoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gKG90aGVyLmxlZnQgPj0gdGhpcy5sZWZ0ICYmXG4gICAgICAgICAgICBvdGhlci5yaWdodCA8PSB0aGlzLnJpZ2h0ICYmXG4gICAgICAgICAgICBvdGhlci50b3AgPj0gdGhpcy50b3AgJiZcbiAgICAgICAgICAgIG90aGVyLmJvdHRvbSA8PSB0aGlzLmJvdHRvbSk7XG4gIH0sXG5cbiAgaW50ZXJzZWN0KG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5yZXN0cmljdFRvKG90aGVyKTtcbiAgfSxcblxuICBpbnRlcnNlY3RzKG90aGVyKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpIHx8IG90aGVyLmlzRW1wdHkoKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGxldCB4MSA9IE1hdGgubWF4KHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHgyID0gTWF0aC5taW4odGhpcy5yaWdodCwgb3RoZXIucmlnaHQpO1xuICAgIGxldCB5MSA9IE1hdGgubWF4KHRoaXMudG9wLCBvdGhlci50b3ApO1xuICAgIGxldCB5MiA9IE1hdGgubWluKHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIHJldHVybiB4MSA8IHgyICYmIHkxIDwgeTI7XG4gIH0sXG5cbiAgLyoqIFJlc3RyaWN0IGFyZWEgb2YgdGhpcyByZWN0YW5nbGUgdG8gdGhlIGludGVyc2VjdGlvbiBvZiBib3RoIHJlY3RhbmdsZXMuICovXG4gIHJlc3RyaWN0VG86IGZ1bmN0aW9uIHJlc3RyaWN0VG8ob3RoZXIpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkgfHwgb3RoZXIuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIHRoaXMuc2V0UmVjdCgwLCAwLCAwLCAwKTtcblxuICAgIGxldCB4MSA9IE1hdGgubWF4KHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHgyID0gTWF0aC5taW4odGhpcy5yaWdodCwgb3RoZXIucmlnaHQpO1xuICAgIGxldCB5MSA9IE1hdGgubWF4KHRoaXMudG9wLCBvdGhlci50b3ApO1xuICAgIGxldCB5MiA9IE1hdGgubWluKHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCBpcyAwLCB0aGUgaW50ZXJzZWN0aW9uIHdhcyBlbXB0eS5cbiAgICByZXR1cm4gdGhpcy5zZXRSZWN0KHgxLCB5MSwgTWF0aC5tYXgoMCwgeDIgLSB4MSksIE1hdGgubWF4KDAsIHkyIC0geTEpKTtcbiAgfSxcblxuICAvKiogRXhwYW5kIHRoaXMgcmVjdGFuZ2xlIHRvIHRoZSB1bmlvbiBvZiBib3RoIHJlY3RhbmdsZXMuICovXG4gIGV4cGFuZFRvQ29udGFpbjogZnVuY3Rpb24gZXhwYW5kVG9Db250YWluKG90aGVyKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gdGhpcy5jb3B5RnJvbShvdGhlcik7XG4gICAgaWYgKG90aGVyLmlzRW1wdHkoKSkgcmV0dXJuIHRoaXM7XG5cbiAgICBsZXQgbCA9IE1hdGgubWluKHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHIgPSBNYXRoLm1heCh0aGlzLnJpZ2h0LCBvdGhlci5yaWdodCk7XG4gICAgbGV0IHQgPSBNYXRoLm1pbih0aGlzLnRvcCwgb3RoZXIudG9wKTtcbiAgICBsZXQgYiA9IE1hdGgubWF4KHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIHJldHVybiB0aGlzLnNldFJlY3QobCwgdCwgciAtIGwsIGIgLSB0KTtcbiAgfSxcblxuICAvKipcbiAgICogRXhwYW5kcyB0byB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgb3JpZ2luYWwgcmVjdGFuZ2xlIGFuZCBpcyBib3VuZGVkXG4gICAqIGJ5IGxpbmVzIHdpdGggaW50ZWdlciBjb2VmZmljaWVudHMuXG4gICAqL1xuICBleHBhbmRUb0ludGVnZXJzOiBmdW5jdGlvbiByb3VuZCgpIHtcbiAgICB0aGlzLmxlZnQgPSBNYXRoLmZsb29yKHRoaXMubGVmdCk7XG4gICAgdGhpcy50b3AgPSBNYXRoLmZsb29yKHRoaXMudG9wKTtcbiAgICB0aGlzLnJpZ2h0ID0gTWF0aC5jZWlsKHRoaXMucmlnaHQpO1xuICAgIHRoaXMuYm90dG9tID0gTWF0aC5jZWlsKHRoaXMuYm90dG9tKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBzY2FsZTogZnVuY3Rpb24gc2NhbGUoeHNjbCwgeXNjbCkge1xuICAgIHRoaXMubGVmdCAqPSB4c2NsO1xuICAgIHRoaXMucmlnaHQgKj0geHNjbDtcbiAgICB0aGlzLnRvcCAqPSB5c2NsO1xuICAgIHRoaXMuYm90dG9tICo9IHlzY2w7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgbWFwOiBmdW5jdGlvbiBtYXAoZikge1xuICAgIHRoaXMubGVmdCA9IGYuY2FsbCh0aGlzLCB0aGlzLmxlZnQpO1xuICAgIHRoaXMudG9wID0gZi5jYWxsKHRoaXMsIHRoaXMudG9wKTtcbiAgICB0aGlzLnJpZ2h0ID0gZi5jYWxsKHRoaXMsIHRoaXMucmlnaHQpO1xuICAgIHRoaXMuYm90dG9tID0gZi5jYWxsKHRoaXMsIHRoaXMuYm90dG9tKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICAvKiogRW5zdXJlIHRoaXMgcmVjdGFuZ2xlIGlzIGluc2lkZSB0aGUgb3RoZXIsIGlmIHBvc3NpYmxlLiBQcmVzZXJ2ZXMgdywgaC4gKi9cbiAgdHJhbnNsYXRlSW5zaWRlOiBmdW5jdGlvbiB0cmFuc2xhdGVJbnNpZGUob3RoZXIpIHtcbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgaWYgKHRoaXMubGVmdCA8PSBvdGhlci5sZWZ0KVxuICAgICAgb2Zmc2V0WCA9IG90aGVyLmxlZnQgLSB0aGlzLmxlZnQ7XG4gICAgZWxzZSBpZiAodGhpcy5yaWdodCA+IG90aGVyLnJpZ2h0KVxuICAgICAgb2Zmc2V0WCA9IG90aGVyLnJpZ2h0IC0gdGhpcy5yaWdodDtcblxuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBpZiAodGhpcy50b3AgPD0gb3RoZXIudG9wKVxuICAgICAgb2Zmc2V0WSA9IG90aGVyLnRvcCAtIHRoaXMudG9wO1xuICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tID4gb3RoZXIuYm90dG9tKVxuICAgICAgb2Zmc2V0WSA9IG90aGVyLmJvdHRvbSAtIHRoaXMuYm90dG9tO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpO1xuICB9LFxuXG4gIC8qKiBTdWJ0cmFjdCBvdGhlciBhcmVhIGZyb20gdGhpcy4gUmV0dXJucyBhcnJheSBvZiByZWN0cyB3aG9zZSB1bmlvbiBpcyB0aGlzLW90aGVyLiAqL1xuICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3Qob3RoZXIpIHtcbiAgICBsZXQgciA9IG5ldyBSZWN0KDAsIDAsIDAsIDApO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBvdGhlciA9IG90aGVyLmludGVyc2VjdCh0aGlzKTtcbiAgICBpZiAob3RoZXIuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIFt0aGlzLmNsb25lKCldO1xuXG4gICAgLy8gbGVmdCBzdHJpcFxuICAgIHIuc2V0Qm91bmRzKHRoaXMubGVmdCwgdGhpcy50b3AsIG90aGVyLmxlZnQsIHRoaXMuYm90dG9tKTtcbiAgICBpZiAoIXIuaXNFbXB0eSgpKVxuICAgICAgcmVzdWx0LnB1c2goci5jbG9uZSgpKTtcbiAgICAvLyBpbnNpZGUgc3RyaXBcbiAgICByLnNldEJvdW5kcyhvdGhlci5sZWZ0LCB0aGlzLnRvcCwgb3RoZXIucmlnaHQsIG90aGVyLnRvcCk7XG4gICAgaWYgKCFyLmlzRW1wdHkoKSlcbiAgICAgIHJlc3VsdC5wdXNoKHIuY2xvbmUoKSk7XG4gICAgci5zZXRCb3VuZHMob3RoZXIubGVmdCwgb3RoZXIuYm90dG9tLCBvdGhlci5yaWdodCwgdGhpcy5ib3R0b20pO1xuICAgIGlmICghci5pc0VtcHR5KCkpXG4gICAgICByZXN1bHQucHVzaChyLmNsb25lKCkpO1xuICAgIC8vIHJpZ2h0IHN0cmlwXG4gICAgci5zZXRCb3VuZHMob3RoZXIucmlnaHQsIHRoaXMudG9wLCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSk7XG4gICAgaWYgKCFyLmlzRW1wdHkoKSlcbiAgICAgIHJlc3VsdC5wdXNoKHIuY2xvbmUoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBCbGVuZHMgdHdvIHJlY3RhbmdsZXMgdG9nZXRoZXIuXG4gICAqIEBwYXJhbSByZWN0IFJlY3RhbmdsZSB0byBibGVuZCB0aGlzIG9uZSB3aXRoXG4gICAqIEBwYXJhbSBzY2FsYXIgUmF0aW8gZnJvbSAwIChyZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyByZWN0KSB0byAxIChjbG9uZSBvZiByZWN0KS5cbiAgICogQHJldHVybiBOZXcgYmxlbmRlZCByZWN0YW5nbGUuXG4gICAqL1xuICBibGVuZDogZnVuY3Rpb24gYmxlbmQocmVjdCwgc2NhbGFyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWN0KFxuICAgICAgdGhpcy5sZWZ0ICsgKHJlY3QubGVmdCAtIHRoaXMubGVmdCApICogc2NhbGFyLFxuICAgICAgdGhpcy50b3AgKyAocmVjdC50b3AgLSB0aGlzLnRvcCApICogc2NhbGFyLFxuICAgICAgdGhpcy53aWR0aCArIChyZWN0LndpZHRoIC0gdGhpcy53aWR0aCApICogc2NhbGFyLFxuICAgICAgdGhpcy5oZWlnaHQgKyAocmVjdC5oZWlnaHQgLSB0aGlzLmhlaWdodCkgKiBzY2FsYXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHcm93cyBvciBzaHJpbmtzIHRoZSByZWN0YW5nbGUgd2hpbGUga2VlcGluZyB0aGUgY2VudGVyIHBvaW50LlxuICAgKiBBY2NlcHRzIHNpbmdsZSBtdWx0aXBsZXIsIG9yIHNlcGFyYXRlIGZvciBib3RoIGF4ZXMuXG4gICAqL1xuICBpbmZsYXRlOiBmdW5jdGlvbiBpbmZsYXRlKHhzY2wsIHlzY2wpIHtcbiAgICBsZXQgeEFkaiA9ICh0aGlzLndpZHRoICogeHNjbCAtIHRoaXMud2lkdGgpIC8gMjtcbiAgICBsZXQgcyA9IChhcmd1bWVudHMubGVuZ3RoID4gMSkgPyB5c2NsIDogeHNjbDtcbiAgICBsZXQgeUFkaiA9ICh0aGlzLmhlaWdodCAqIHMgLSB0aGlzLmhlaWdodCkgLyAyO1xuICAgIHRoaXMubGVmdCAtPSB4QWRqO1xuICAgIHRoaXMucmlnaHQgKz0geEFkajtcbiAgICB0aGlzLnRvcCAtPSB5QWRqO1xuICAgIHRoaXMuYm90dG9tICs9IHlBZGo7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdyb3dzIG9yIHNocmlua3MgdGhlIHJlY3RhbmdsZSBieSBmaXhlZCBhbW91bnQgd2hpbGUga2VlcGluZyB0aGUgY2VudGVyIHBvaW50LlxuICAgKiBBY2NlcHRzIHNpbmdsZSBmaXhlZCBhbW91bnRcbiAgICovXG4gIGluZmxhdGVGaXhlZDogZnVuY3Rpb24gaW5mbGF0ZUZpeGVkKGZpeGVkKSB7XG4gICAgdGhpcy5sZWZ0IC09IGZpeGVkO1xuICAgIHRoaXMucmlnaHQgKz0gZml4ZWQ7XG4gICAgdGhpcy50b3AgLT0gZml4ZWQ7XG4gICAgdGhpcy5ib3R0b20gKz0gZml4ZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG59O1xuXG5leHBvcnQgIHtQb2ludCxSZWN0fVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7IGRvbSwgUmVhY3RRdWVyeSB9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCB7IEhhc1BhcmVudEFuZENoaWxkIH0gZnJvbSBcIi4uLy4uXCJcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkXCJcbmltcG9ydCBDb25zdHJhaW50U3BhY2UgZnJvbSBcIi4uL2NvbnN0cmFpbnQtc3BhY2VcIlxuaW1wb3J0IHtSZWN0fSBmcm9tIFwiLi4vLi4vLi4vdG9vbC9nZW9tZXRyeVwiXG4vKipcbiAqIExheW91dCBlbmdpbmUgaXMgaG93IHRvIGxheW91dCBjb250ZW50IGluIGEgY29uc3RyYWludCBzcGFjZVxuICogc28gaXQgaW5jbHVkZXM6IGEgY29uc3RyYWludCBzcGFjZSArIGxheW91dCBhbGdvcml0aG0gKyBjb250ZW50XG4gKiBMYXlvdXQgYWxnb3JpdGhtIGluY2x1ZGVzIEJsb2NrIGFsZ29yaXRobSBhbmQgSW5saW5lIGFsZ29yaXRobVxuICogQmxvY2sgYWxnb3JpdGhtIGlzIHRvIGxheW91dCBpbiBibG9jayBkaXJlY3Rpb24sIG1vdmUgYnkgYmxvY2sgc2l6ZSxcbiAqIFx0XHRcdGVhY2ggYmxvY2sgZWxlbWVudCBzaG91bGQgYXQgZmlyc3QgZGVjaWRlIGJsb2NrIG9mZnNldCBpbiBzcGFjZSwgdGhlbiBsYXlvdXQgY29udGVudFxuICogSW5saW5lIGFsZ29yaXRobSBpcyB0byBsYXlvdXQgY29udGVudCBpbiBpbmxpbmUgZGlyZWN0aW9uLCBtb3ZlIGJ5IGlubGluZSBzaXplLFxuICogXHRcdFx0ZWFjaCBsYXlvdXQgZWxlbWVudCBzaG91bGQgaGF2ZSBhbiBpbmxpbmUgb2Zmc2V0XG4gKi9cbi8qKlxuICogc3BhY2UgaXMgaW1tdXRhYmxlLCBhbmQgc2hvdWxkIE5PVCBwcm92aWRlIGFueSBsYXlvdXQgZnVuY3Rpb24sXG4gKiBidXQgY2FuIGhlbHAgZGVjaWRlIG9uIGdlb21ldHJ5IGZ1bmN0aW9ucywgc3VjaCBhcyBpbnRlcnNlY3Rpb25cbiAqL1xuLyoqXG4gKiBsYXlvdXQgY29udGVudCBpbiBhIHNwYWNlIHdpdGggZXhjbHVkYWJsZSBhcmVhc1xuICogaW5saW5lIGV4Y2x1ZGFibGUgJiBibG9jayBleGNsdWRhYmxlXG4gKiBleGNsdWRhYmxlIGFyZWFzIGlzIGNoYW5naW5nIGFsb25nIHdpdGggY29udGVudCBhcHBlbmRlZCwgdGhlblxuICogaW5saW5lIHJlLWxheW91dCBhbmQvb3IgYmxvY2sgcmUtbGF5b3V0XG4gKiBleGNsdWRhYmxlIHNwYWNlIGNhbiBhbnN3ZXIgaWYgY29udGVudCBjYW4gbGF5b3V0IHdpdGhvdXQvd2l0aCBzcGFjZSBjaGFuZ2VcbiAqIGxheW91dCBhbGdvcml0aG0gaXRzZWxmKHN1Y2ggYXMgbGluZSwgcGFnZSwgYW5kIGV0YykgZGVjaWRlIGhvdyB0byByZS1sYXlvdXRcbiAqIGNvbnN0cmFpbnQgc3BhY2U6e2xlZnQscmlnaHQsIGhlaWdodCwgYmxvY2tPZmZzZXR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3cgZXh0ZW5kcyBIYXNQYXJlbnRBbmRDaGlsZChkb20uQ29udGFpbmVyKSB7XG5cdHN0YXRpYyBJTU1FRElBVEVfU1RPUCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGJhbGFuY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuY10pLFxuXHRcdGJhbGFuY2VUaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0c3BhY2U6IFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHRsZWZ0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0cmlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRibG9ja09mZnNldDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdGhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdHdyYXBwZWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KVxuXHRcdH0pLFxuXHRcdGNvbHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHR4OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0eTogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdH0pKSxcblx0XHRpbmhlcml0RXhjbHVzaXZlczogUHJvcFR5cGVzLmJvb2wsXG5cdFx0YWxsb3dPdmVyZmxvdzogUHJvcFR5cGVzLmJvb2wsXG5cdH07XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cdFx0dGhpcy5jb21wdXRlZC5hbmNob3JzID0gW107XG5cdFx0dGhpcy5kZWZpbmVQcm9wZXJ0aWVzKCk7XG5cdH1cblx0ZGVmaW5lUHJvcGVydGllcygpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRmaXJzdExpbmU6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXNbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvKippdCBwcm92aWRlcyByZXBsYWNlV2l0aCBhbmQgZGV0YWNoICovXG5cdFx0XHRsYXN0TGluZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCBsaW5lcyA9IHRoaXMubGluZXM7XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRsaW5lczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZDtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHZhbHVlcykge1xuXHRcdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQgPSB2YWx1ZXM7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0b3RhbExpbmVzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGJsb2NrT2Zmc2V0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCB7IGJsb2NrT2Zmc2V0ID0gMCB9ID0gdGhpcy5nZXRTcGFjZSgpO1xuXHRcdFx0XHRcdHJldHVybiBibG9ja09mZnNldCArIHRoaXMuY29udGVudEhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGF2YWlsYWJsZUJsb2NrU2l6ZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCB7IGhlaWdodD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB9ID0gdGhpcy5nZXRTcGFjZSgpO1xuXHRcdFx0XHRcdHJldHVybiBoZWlnaHQgLSB0aGlzLmNvbnRlbnRIZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbmNob3JzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5hbmNob3JzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodmFsdWVzKSB7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5hbmNob3JzID0gdmFsdWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0d3JhcHBlZXM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYW5jaG9ycy5maWx0ZXIoKHsgcHJvcHM6IHsgd3JhcCB9IH0pID0+ICEhd3JhcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb250ZW50SGVpZ2h0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLnJlZHVjZSgoSCwgeyBwcm9wczogeyBoZWlnaHQ6IGggPSAwIH0gfSkgPT4gaCArIEgsIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpO1xuXHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQoY29udGVudCk7XG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKCk7XG5cdH1cblx0YXBwZW5kQ29tcG9zZWQobGluZSkge1xuXHRcdGNvbnN0IHsgcHJvcHM6IHsgeTogcG9zaXRpb25lZCB9IH0gPSBsaW5lO1xuXHRcdGlmIChwb3NpdGlvbmVkICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5hbmNob3JzLnB1c2gobGluZSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuXHRcdH1cblx0fVxuXHQvL2RlZmF1bHQgdXNlIHByb3BzLnNwYWNlXG5cdGdldFNwYWNlKCkge1xuXHRcdHJldHVybiB0aGlzLnByb3BzLnNwYWNlXG5cdH1cblxuXHRwb3NpdGlvbkxpbmVzKGxpbmVzKSB7XG5cdFx0dmFyIHkgPSAwO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBsaW5lcy5tYXAoKGEsIGksIG1lLCBjdHgsIHsgcHJvcHM6IHsgaGVpZ2h0ID0gMCB9IH0gPSBhKSA9PiB7XG5cdFx0XHRjb25zdCBiID0gUmVhY3QuY2xvbmVFbGVtZW50KGEsIHsga2V5OiBpLCB5IH0pO1xuXHRcdFx0eSArPSBoZWlnaHQ7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9KTtcblx0XHRyZXR1cm4gKDxHcm91cCBoZWlnaHQ9e3l9Pntjb250ZW50fTwvR3JvdXA+KTtcblx0fVxuICAgIC8qKlxuICAgICAqIG9ubHkgd2hlbiB0aGVyZSBhcmUgYXZhaWFsYWJsZSBibG9ja1xuICAgICAqIE5vdCBhbGxvdyBlbXB0eSBmcmFtZVxuICAgICAqIEBwYXJhbSB7Kn0gcGFyYW0wXG4gICAgICovXG5cdG5leHRBdmFpbGFibGVTcGFjZSh7IGhlaWdodDogcmVxdWlyZWRCbG9ja1NpemUgPSAxIH0gPSB7fSkge1xuXHRcdGNvbnN0IHsgYWxsb3dPdmVyZmxvdyA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKVxuXHRcdFx0fHwgdGhpcy5hdmFpbGFibGVCbG9ja1NpemUgPj0gcmVxdWlyZWRCbG9ja1NpemUpIHtcblx0XHRcdGNvbnN0IHNwYWNlPXRoaXMuZ2V0U3BhY2UoKVxuXHRcdFx0cmV0dXJuIENvbnN0cmFpbnRTcGFjZS5jcmVhdGUoc3BhY2V8fHt9KS5jbG9uZSh7XG5cdFx0XHRcdGJsb2NrT2Zmc2V0OiB0aGlzLmJsb2NrT2Zmc2V0LFxuXHRcdFx0XHRoZWlnaHQ6ICFhbGxvd092ZXJmbG93ID8gdGhpcy5hdmFpbGFibGVCbG9ja1NpemUgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcblx0XHRcdFx0ZnJhbWU6IHRoaXMsXG5cdFx0XHRcdGZpbmRJbmxpbmVTZWdtZW50czogKHJlcXVpcmVkQmxvY2tTaXplLCBsZWZ0LCByaWdodCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGJsb2NrT2Zmc2V0ID0gdGhpcy5ibG9ja09mZnNldDtcblx0XHRcdFx0XHR2YXIgd3JhcHBlZXMgPSB0aGlzLmV4Y2x1c2l2ZShibG9ja09mZnNldCwgYmxvY2tPZmZzZXQgKyByZXF1aXJlZEJsb2NrU2l6ZSwgbGVmdCwgcmlnaHQpO1xuXHRcdFx0XHRcdHZhciB0b3AgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICh0eXBlb2YgKHdyYXBwZWVzKSA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHR0b3AgPSB3cmFwcGVlcztcblx0XHRcdFx0XHRcdHdyYXBwZWVzID0gdGhpcy5leGNsdXNpdmUodG9wLCB0b3AgKyByZXF1aXJlZEJsb2NrU2l6ZSwgbGVmdCwgcmlnaHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzcGFjZSA9IHRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKHsgaGVpZ2h0OiB0b3AgLSBibG9ja09mZnNldCArIHJlcXVpcmVkQmxvY2tTaXplIH0pO1xuXHRcdFx0XHRcdGlmIChzcGFjZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0dG9wLFxuXHRcdFx0XHRcdFx0XHRzZWdtZW50czogd3JhcHBlZXMucmVkdWNlKChvcHMsIHsgeCwgd2lkdGggfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFtsYXN0XSA9IG9wcy5zcGxpY2UoLTEpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBbLi4ub3BzLCB7IHg6IGxhc3QueCwgd2lkdGg6IHggLSBsYXN0LnggfSwgeyB4OiB4ICsgd2lkdGgsIHdpZHRoOiByaWdodCAtIHggLSB3aWR0aCB9XTtcblx0XHRcdFx0XHRcdFx0fSwgW3sgeDogbGVmdCwgd2lkdGg6IHJpZ2h0IC0gbGVmdCB9XSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzcGFjZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0aXNBbmNob3JlZDogaWQgPT4gdGhpcy5pc0FuY2hvcmVkKGlkKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuICAgIC8qKlxuICAgICAqIGV4Y2x1ZGUgYXJlYSBpbiByZWN0IHt4MSx5MSwgeDIseTJ9XG4gICAgICogQHBhcmFtIHsqfSB5MVxuICAgICAqIEBwYXJhbSB7Kn0geTJcbiAgICAgKiBAcGFyYW0geyp9IHgxXG4gICAgICogQHBhcmFtIHsqfSB4MlxuICAgICAqIEByZXR1cm5zXG4gICAgICogXHRbe3gsd2lkdGh9LC4uLl06IGV4Y2x1ZGUgYXJlYXNcbiAgICAgKiBcdG51bWJlcjogdGhlcmUncyBvcHBvcnR1bml0eSB1bnRpbCB0aGUgdmFsdWVcbiAgICAgKi9cblx0ZXhjbHVzaXZlKHkxLCB5MiwgeDEsIHgyKSB7XG5cdFx0Y29uc3QgbGluZSA9IHsgeDEsIHgyLCB5MSwgeTIgfTtcblx0XHR2YXIgZXhjbHVkZXMgPSB0aGlzLndyYXBwZWVzLnJlZHVjZSgoY29sbGVjdGVkLCB7IHByb3BzOiB7IHdyYXAgfSB9KSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSB3cmFwKGxpbmUpO1xuXHRcdFx0Y29sbGVjdGVkLnNwbGljZShjb2xsZWN0ZWQubGVuZ3RoLCAwLCAuLi4oQXJyYXkuaXNBcnJheShibG9ja3MpID8gYmxvY2tzIDogW2Jsb2Nrc10pKTtcblx0XHRcdHJldHVybiBjb2xsZWN0ZWQ7XG5cdFx0fSwgW10pXG5cdFx0XHQuZmlsdGVyKGEgPT4gISFhKVxuXHRcdFx0LmZpbHRlcihhID0+IGEud2lkdGggPiAwKVxuXHRcdFx0LnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCk7XG5cdFx0Y29uc3QgY2xlYXJzID0gZXhjbHVkZXMuZmlsdGVyKGEgPT4gYS50eXBlID09IFwiY2xlYXJcIik7XG5cdFx0aWYgKGNsZWFycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5tYXgoLi4uY2xlYXJzLm1hcChhID0+IGEueSkpO1xuXHRcdH1cblx0XHRpZiAoZXhjbHVkZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly9tZXJnZSBzdWNoIGFzIFt7eDozLHdpZHRoOjV9LHt4OjQsd2lkdGg6Nn1dPT5be3g6Myx3aWR0aDo3fV1cblx0XHRcdGV4Y2x1ZGVzLmZvckVhY2goYSA9PiBhLngyID0gYS54ICsgYS53aWR0aCk7XG5cdFx0XHRleGNsdWRlcyA9IGV4Y2x1ZGVzLnJlZHVjZSgod3JhcGVlcywgYSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiID0gd3JhcGVlc1t3cmFwZWVzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRpZiAoYS54MiA+IGIueDIpIHtcblx0XHRcdFx0XHRpZiAoYS54ID4gYi54MikgeyAvL3NlcGVyYXRlZFxuXHRcdFx0XHRcdFx0d3JhcGVlcy5wdXNoKGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHsgLy9pbnRlcnNlY3Rcblx0XHRcdFx0XHRcdGIueDIgPSBhLngyO1xuXHRcdFx0XHRcdFx0Yi53aWR0aCA9IGIueDIgLSBiLng7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB3cmFwZWVzO1xuXHRcdFx0fSwgW2V4Y2x1ZGVzWzBdXSk7XG5cdFx0XHRleGNsdWRlcy5mb3JFYWNoKGEgPT4gZGVsZXRlIGEueDIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhjbHVkZXM7XG5cdH1cbiAgICAvKipcbiAgICAgKiByZWNvbXBvc2UgZm9yIHNwYWNlIHNpbmNlIGxheW91dGVkIHNwYWNlIHdpbGwgYmUgY2hhbmdlZCwgc3VjaCBhcyB3cmFwIGFuZCBiYWxhbmNlXG5cdCAqIGxheW91dCBhZnRlciBwcmUoKSBmb3Igb25seSBhbHJlYWR5IGxheW91dGVkIGxpbmVzXG4gICAgICogSXQncyBwcmVzdW1lZDogKioqIGFsbCBjb250ZW50IGFyZSBpbiBwYXJhZ3JhcGhzLCBvdGhlcndpc2UganVzdCBhcHBlbmQgaXQgZGlyZWN0bHkqKipcbiAgICAgKiBzbyBpdCBzaG91bGQgd29yayB0byByZWNvbW1pdCBhbHJlYXkgbGF5b3V0ZWQgcGFyYWdyYXBoc1xuICAgICAqIEByZXR1cm5zOiBmdW5jdGlvbiB0byByb2xsYmFjay9yZWNvdmVyIHRvIGxhc3Qgc3RhdGVcbiAgICAgKi9cblx0cmVjb21wb3NlKGluaXQgPSBhID0+IGEpIHtcblx0XHRpZighdGhpcy5yZWNvbXBvc2UuZGVhZExvb3ApXG5cdFx0XHR0aGlzLnJlY29tcG9zZS5kZWFkTG9vcD0xXG5cdFx0aWYoKyt0aGlzLnJlY29tcG9zZS5kZWFkTG9vcD4xMDAwMCl7XG5cdFx0XHRkZWJ1Z2dlclxuXHRcdH1cblx0XHQvKipcbiAgICAgICAgICogaWYgaXQncyBlbXB0eSBmcmFtZSwgcmVjb21wb3NlIHdvdWxkIG5vdCBoYXBwZW5cbiAgICAgICAgICovXG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRpbml0KFtdLFtdKTtcblx0XHRcdHJldHVybiBhID0+IGE7XG5cdFx0fVxuXHRcdGNvbnN0IGxhc3RMaW5lcyA9IFsuLi50aGlzLmxpbmVzXTtcblx0XHRjb25zdCBsYXN0QW5jaG9ycyA9IFsuLi50aGlzLmFuY2hvcnNdO1xuXHRcdGNvbnN0IGxhc3RDb2x1bW5zID0gdGhpcy5jb2xzID8gWy4uLnRoaXMuY29sdW1uc10gOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgcm9sbGJhY2sgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmxpbmVzID0gbGFzdExpbmVzO1xuXHRcdFx0dGhpcy5hbmNob3JzID0gbGFzdEFuY2hvcnM7XG5cdFx0XHRpZiAobGFzdENvbHVtbnMpXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IGxhc3RDb2x1bW5zO1xuXHRcdH07XG5cdFx0dHJ5IHtcblx0XHRcdC8vcmVzZXQgY29tcG9zZWRcblx0XHRcdHRoaXMubGluZXMgPSBbXTtcblx0XHRcdHRoaXMuYW5jaG9ycyA9IFtdO1xuXHRcdFx0dGhpcy5jb2x1bW5zPVtdXG5cblx0XHRcdC8vaW5pdGlhbGl6ZSBmb3IgcmVjb21wb3NlXG5cdFx0XHRjb25zdCBsaW5lcyA9IFsuLi5sYXN0TGluZXNdXG5cdFx0XHR0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nID0gaW5pdChsaW5lcywgWy4uLmxhc3RBbmNob3JzXSk7XG5cblx0XHRcdGNvbnN0IGdldFBhcmFncmFwaElkPWxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cInBhcmFncmFwaFwiXWApLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcblx0XHRcdC8qKlxuXHRcdFx0ICogVG8gcmVjb21taXQgZWFjaCBwYXJhZ3JhcGgncyBsaW5lcyBpbiB0aGlzIGJsb2NrIGZyb20gdG9wIHRvIGJvdHRvbVxuXHRcdFx0ICogRXZlcnkgdGltZSBsaW5lIHBhcmFncmFwaCBjaGFuZ2VkLCBsYXN0IHBhcmFncmFwaCB3b3VsZCByZWNvbW1pdCBcblx0XHRcdCAqL1xuXHRcdFx0dmFyIGN1cnJlbnRQYXJhZ3JhcGggPSBudWxsO1xuXHRcdFx0dmFyIGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxpbmU7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsaW5lID0gbGluZXNbaV07XG5cdFx0XHRcdGNvbnN0IHBhcmFncmFwaE9mTGluZSA9IGdldFBhcmFncmFwaElkKGxpbmUpXG5cdFx0XHRcdGlmICghcGFyYWdyYXBoT2ZMaW5lKSB7IC8vbm90IHBhcmFncmFwaCwgdGhlbiBhcHBlbmQgZGlyZWN0bHlcblx0XHRcdFx0XHRpZiAoY3VycmVudFBhcmFncmFwaCkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGN1cnJlbnRQYXJhZ3JhcGgpLnJlY29tbWl0KGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyk7XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYWdyYXBoID0gbnVsbDtcblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFwcGVuZENvbXBvc2VkKGxpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmICghY3VycmVudFBhcmFncmFwaCkge1xuXHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaCA9IHBhcmFncmFwaE9mTGluZTtcblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcy5wdXNoKGxpbmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChwYXJhZ3JhcGhPZkxpbmUgIT09IGN1cnJlbnRQYXJhZ3JhcGgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGN1cnJlbnRQYXJhZ3JhcGgpLnJlY29tbWl0KGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyk7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGggPSBwYXJhZ3JhcGhPZkxpbmU7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtsaW5lXTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaExpbmVzLnB1c2gobGluZSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9sYXN0IHBhcmFncmFwaCBcblx0XHRcdGlmIChjdXJyZW50UGFyYWdyYXBoKSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dC5nZXRDb21wb3NlcihjdXJyZW50UGFyYWdyYXBoKS5yZWNvbW1pdChjdXJyZW50UGFyYWdyYXBoTGluZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjYXRjaCAoZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHR9XG5cdFx0ZmluYWxseSB7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wdXRlZC5yZWNvbXBvc2luZztcblx0XHRcdHJldHVybiByb2xsYmFjaztcblx0XHR9XG5cdH1cbiAgICAvKipcbiAgICAgKiB0byByZS1sYXlvdXQgbGFzdCBuIGxpbmVzXG4gICAgICogYW5jaG9ycyBpbiBsaW5lIHNob3VsZCBiZSByZW1vdmVkIHRvb1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAgICogQHJldHVybnMgWy4uLnJlbW92ZWQgbGluZV0uYW5jaHJvcz1bLi4ucmVtb3ZlZCBhbmNob3IgaWRdXG4gICAgICovXG5cdHJvbGxiYWNrTGluZXMobikge1xuXHRcdHJldHVybiBuPT0wID8gW10gOiB0aGlzLmxpbmVzLnNwbGljZSgtbik7XG5cdH1cblxuXHRpc0VtcHR5KCl7XG5cdFx0cmV0dXJuICh0aGlzLmxpbmVzLmxlbmd0aCt0aGlzLmFuY2hvcnMubGVuZ3RoKT09MFxuXHR9XG5cdFxuXHRpc0FuY2hvcmVkKGlkKXtcblx0XHRyZXR1cm4gISF0aGlzLmFuY2hvcnMuZmluZChhPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLWNvbnRlbnQ9XCIke2lkfVwiXWApLmxlbmd0aD09MSlcblx0fVxuXG5cdF9pc0ludGVyc2VjdChBLEIpe1xuXHRcdHJldHVybiBuZXcgUmVjdChBLngsIEEueSwgQS53aWR0aCwgQS5oZWlnaHQpLmludGVyc2VjdHMobmV3IFJlY3QoQi54LCBCLnksIEIud2lkdGgsIEIuaGVpZ2h0KSlcblx0fVxufVxuIiwiaW1wb3J0IHsgUmVhY3RRdWVyeSB9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBGbG93IGZyb20gXCIuL2Zsb3dcIlxuaW1wb3J0IHtSZWN0fSBmcm9tIFwiLi4vLi4vLi4vdG9vbC9nZW9tZXRyeVwiXG5cbi8qKlxuICogYW5jaG9yYWJsZSBjYW4gbGF5b3V0IHBvc2l0aW9uZWQgY29udGVudCwgYW5kICoqKk1BWSBjaGFuZ2Ugc3BhY2UgaWYgc3VwcG9ydGluZyB3cmFwKioqXG4gKiBkYXRhLWFuY2hvcjogY2hlY2sgaW5saW5lLmFwcGVuZEFuY2hvckF0b20sIHRvIGlkZW50aWZ5IGFuY2hvciBwbGFjZWhvbGRlciBpbiBwYXJhZ3JhcGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5jaG9yYWJsZSBleHRlbmRzIEZsb3cge1xuXHQvKipcbiAgICAgKiBsaW5lIHdpdGgvd2l0aG91dCBhbmNob3JzXG4gICAgICogYW5jaG9ycyB3aXRoIHdyYXAgY2FuIGFmZmVjdCBleGNsdXNpdmVzLCBzbyBpdCBuZWVkIHJlLWxheW91dFxuICAgICAqIGFuY2hvciBuZWVkIGtub3cgYW5jaG9yIGhvc3QgdG8gcG9zaXRpb24gaXRzZWxmXG4gICAgICogYW5jaG9yIGhvc3RcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyp9IGxpbmVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGludDogcm9sbGJhY2sgbiB1bnBvc2l0aW9uZWQgbGluZXNcbiAgICAgKiBmYWxzZTogc3BhY2UgY2FuJ3QgZmxvdyBtb3JlIGNvbnRlbnRcbiAgICAgKiBOdW1iZXIuU0FGRV9NQVhfSU5URUdFUjogbGV0IGRlc2NlbmRhbnQgc3RvcCBsYXlvdXRcbiAgICAgKiBlbHNlOiBnb29kXG4gICAgICovXG5cdGFwcGVuZENvbXBvc2VkKGxpbmUpIHtcbiAgICAgICAgY29uc3QgeyBwcm9wczogeyBhbmNob3IsIHk6cG9zaXRpb25lZCwgaGVpZ2h0OiByZXF1aXJlZEJsb2NrU2l6ZSA9IDAgfSB9ID0gbGluZTtcbiAgICAgICAgaWYocG9zaXRpb25lZCE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5hcHBlbmRDb21wb3NlZChsaW5lKVxuICAgICAgICB9XG4gICAgICAgIFxuXHRcdGNvbnN0IHNwYWNlID0gdGhpcy5uZXh0QXZhaWxhYmxlU3BhY2UoeyBoZWlnaHQ6IHJlcXVpcmVkQmxvY2tTaXplIH0pO1xuXHRcdGlmIChzcGFjZSA9PSBmYWxzZSkge1xuXHRcdFx0aWYgKHRoaXMuY29tcHV0ZWQucmVjb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiB3aGVuIHNwYWNlIGluZmVhc2libGUgYW5kIHJlY29tcG9zaW5nXG4gICAgICAgICAgICAgICAgICogcGFyYWdyYXBoIG11c3QgaW1tZWRpYXRlIHN0b3AsIHNvIHRvIHJldHVybiBiYWNrIHRvIG91dGVyIGxheW91dFxuICAgICAgICAgICAgICAgICAqL1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5JTU1FRElBVEVfU1RPUDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBcblx0XHQvL2RhdGEtYW5jaG9yIGlzIHBsYWNlaG9sZGVyIHNwZWNpZmljYXRpb24gaW4gaW5saW5lIGxheW91dFxuICAgICAgICBjb25zdCBhbmNob3JQbGFjZWQgPSAoYW5jaG9ySWQsIGxpbmUpID0+IG5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtYW5jaG9yPVwiJHthbmNob3JJZH1dYCkubGVuZ3RoID09IDE7XG5cdFx0aWYgKCFhbmNob3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nKSB7XG5cdFx0XHRcdGlmIChhbmNob3JQbGFjZWQodGhpcy5jb21wdXRlZC5yZWNvbXBvc2luZywgbGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGFuY2hvciBhbmQgcGxhY2Vob2xkZXIgYmUgaW4gc2FtZSBmcmFtZSwgc28gc3RvcCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgKiAqKiB0aGUgcGxhY2Vob2xkZXIgbGluZSBzaG91bGQgYmUgYXBwZW5kZWQsIHNpbmNlIGxhdGVyIFxuICAgICAgICAgICAgICAgICAgICAgKiBieSBjaGVja2luZyB0aGlzIHBsYWNlaG9sZGVyIGV4aXN0ZW5jZSB0byBkZWNpZGUgaWYgcmVjb21wb3NlIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICogYnV0IHRoaXMgbGluZSB3aWxsIGJlIHJvbGxiYWNrZWRcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmFwcGVuZENvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5JTU1FRElBVEVfU1RPUDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN1cGVyLmFwcGVuZENvbXBvc2VkKC4uLmFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGl0J3Mgb25seSB0byBhcHBlbmQgYW5jaG9yZWQgY29udGVudCxcbiAgICAgICAgICogYW5jaG9yIHBsYWNlaG9sZGVyIGluIGxpbmUgd2lsbCBiZSByZWxheW91dGVkIGxhdGVyLFxuICAgICAgICAgKiBzbyBmcm9tIGhlcmVcbiAgICAgICAgICogcmV0dXJuIDEgdG8gaWdub3JlIGFuZCByZWxheW91dCBjdXJyZW50IGxpbmUgb3JcbiAgICAgICAgICogcmV0dXJuIGZhbHNlIHRvIG5vdGlmeSBpbmZlYXNpYmxlIHNwYWNlLCBhbmQgaWdub3JlIGFuZCByZS1sYXlvdXQgY3VycmVudCBsaW5lIGFuZCBhbmNob3JcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGFuY2hvcmVkID0gYW5jaG9yKHNwYWNlLmNsb25lKHtcbiAgICAgICAgICAgIGVkZ2VzOntcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGg6e1xuICAgICAgICAgICAgICAgICAgICB0b3A6KChpZCxsaW5lPXRoaXMubGluZXMuZmluZChhPT5hLnByb3BzLnBhZ2luYXRpb24uaWQ9PWlkKSk9PnRoaXMubGluZVhZKGxpbmUpLnkpKGxpbmUucHJvcHMucGFnaW5hdGlvbi5pZClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGxpbmU6e3RvcDpzcGFjZS5ibG9ja09mZnNldH0sXG4gICAgICAgICAgICAgICAgY2hhcmFjdGVyOntcbiAgICAgICAgICAgICAgICAgICAgbGVmdDpzcGFjZS5sZWZ0KygoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge2ZpcnN0LHBhcmVudHN9PW5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdEFuZFBhcmVudHMoYFtkYXRhLWFuY2hvcl1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wYXJlbnRzLGZpcnN0LmdldCgwKV0ucmVkdWNlKChYLHtwcm9wczp7eD0wfX0pPT5YK3gsMClcbiAgICAgICAgICAgICAgICAgICAgfSkoKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgICBjb25zdCB7IHdyYXAsIGdlb21ldHJ5LCBcImRhdGEtY29udGVudFwiOiBhbmNob3JJZCB9ID0gYW5jaG9yZWQucHJvcHM7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAVE9ETzogd3JhcCBlYWNoIG90aGVyIHdpdGggYWxyZWFkeSBhbmNob3JlZCB3cmFwcGVlcywgYW5kIHRoaXMgd3JhcHBlZXNcbiAgICAgICAgICovXG5cdFx0aWYgKCEod3JhcCAmJiB0aGlzLl9faXNEaXJ0eUluKGdlb21ldHJ5KSkpIHtcblx0XHRcdHN1cGVyLmFwcGVuZENvbXBvc2VkKGFuY2hvcmVkKTtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHRoZSBhcmVhIGFib3ZlIGN1cnJlbnQgYmxvY2sgb2Zmc2V0IGlzIGFmZmVjdGVkIGJ5IHRoaXMgd3JhcCBhcmVhXG4gICAgICAgICAqIHRlbXBvcmFyaWx5IGFuY2hvciBpdCB0byBleGNsdWRlIHRoZSB3cmFwIGFyZWEsIGFuZCByZWxheW91dCB3aG9sZSB0byBzZWU6XG4gICAgICAgICAqIGlmIHRoZSBhbmNob3IgY2FuIGJlIGxheW91dGVkIHdpdGhpbiB0aGUgc3BhY2UsIGtlZXAgcmVsYXlvdXRlZCwgcmVsYXlvdXQgbGFzdCBsaW5lXG4gICAgICAgICAqIGlmIG5vdCwgcm9sbGJhY2sgdG8gbGFzdCBsYXlvdXQgcmVzdWx0LCBhbmQgcmV0dXJuIGZhbHNlXG4gICAgICAgICAqL1xuXHRcdGNvbnN0IHJvbGxiYWNrID0gdGhpcy5yZWNvbXBvc2UoKHJlY29tcG9zaW5nTGluZXMsIGFuY2hvcnMpID0+IHtcbiAgICAgICAgICAgIC8va2VlcCBhbGwgYW5jaG9ycywgQFRPRE86IGl0J3Mgc3VwcG9zZWQ6IGxhdGVyIGFuY2hvciBjYW4ndCBhZmZlY3QgcHJldmlvdXMgYW5jaG9ycyBsYXlvdXQ/Pz8/XG4gICAgICAgICAgICB0aGlzLmFuY2hvcnM9YW5jaG9yc1xuICAgICAgICAgICAgc3VwZXIuYXBwZW5kQ29tcG9zZWQoYW5jaG9yZWQpXG4gICAgICAgICAgICAvL3JlY29tcG9zZSB1bnRpbCB0aGlzIGFuY2hvclxuICAgICAgICAgICAgcmVjb21wb3NpbmdMaW5lcy5wdXNoKGxpbmUpXG5cdFx0XHRyZXR1cm4gYW5jaG9ySWQ7XG5cdFx0fSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGVuIGNoZWNrIGlmIHRoaXMgYW5jaG9yIGlzIGluIHRoaXMgYmxvY2ssIHNwZWNpZmljYWxseSBpbiBsYXN0IGxpbmVcbiAgICAgICAgICogKi9cblx0XHRpZiAoYW5jaG9yUGxhY2VkKGFuY2hvcklkLCB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoLTFdKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBhbmNob3IgYW5kIHBsYWNlaG9sZGVyIGNhbiBiZSBvbiBzYW1lIGJsb2NrLCBcbiAgICAgICAgICAgICAqIHNvIGtlZXAgcmVjb21wb3NlZCBsaW5lcyBhbmQgYW5jaG9ycyAoaW5jbHVkaW5nIGFwcGVuZGluZyBhbmNob3IpLFxuICAgICAgICAgICAgICogYW5kIHJlLWxheW91dCBsYXN0IGxpbmUgdGhhdCBjb250YWlucyBhbmNob3IgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAqKiogdGhlIGxhc3QgbGluZSBpbiBwYXJhZ3JhcGggTUFZIG5vdCBlcXVhbCB0byBhcHBlbmRpbmcgbGluZSBzaW5jZSByZWNvbXBvc2UgY2hhbmdlcyBpdFxuICAgICAgICAgICAgICoqKiB3aGlsZSBwYXJhZ3JhcGggc2hvdWxkIGFscmVhZHkgYmUgc3luY2VkIHdpdGggcmVjb21wb3NlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCkvL3JvbGxiYWNrIGxhc3QgbGluZSBkZWZpbml0ZWx5IGluIHRoaXMgYmxvY2tcblx0XHRcdHJldHVybiAwICsgMTsvL3JvbGxiYWNrIGxhc3QgbGluZSBvZiBwYXJhZ3JwYWggYWNjb3JkaW5nbHlcblx0XHR9XG5cdFx0ZWxzZSB7XG4gICAgICAgICAgICAvL2FuY2hvciBhbmQgcGxhY2Vob2xkZXIgY2FuIE5PVCBiZSBvbiBzYW1lIGZyYW1lLCBzbyB0aHJvdyB0byBwYXJlbnRcblx0XHRcdHJvbGxiYWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuICAgIH1cbiAgICBcbiAgICByb2xsYmFja0xpbmVzKCl7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRMaW5lcz1zdXBlci5yb2xsYmFja0xpbmVzKC4uLmFyZ3VtZW50cylcbiAgICAgICAgY29uc3QgcmVtb3ZlZEFuY2hvcnMgPSAobGluZXMgPT4ge1xuXHRcdFx0Y29uc3QgcmVtb3ZlID0gYSA9PiB0aGlzLmFuY2hvcnMuc3BsaWNlKHRoaXMuYW5jaG9ycy5pbmRleE9mKGEpLCAxKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvcklkID0gYT0+bmV3IFJlYWN0UXVlcnkoYSkuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwiYW5jaG9yXCJdYCkuYXR0cignZGF0YS1jb250ZW50JylcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvcnNJbkxpbmU9bGluZT0+IG5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmQoJ1tkYXRhLWFuY2hvcl0nKS50b0FycmF5KCkubWFwKGE9PmEucHJvcHNbXCJkYXRhLWFuY2hvclwiXSlcblx0XHRcdGNvbnN0IHJlbW92aW5nQW5jaG9ySWRzID0gbGluZXMubWFwKGE9PmFuY2hvcnNJbkxpbmUoYSkpLmZsYXQoKVxuXHRcdFx0cmV0dXJuIHRoaXMuYW5jaG9ycy5maWx0ZXIoYSA9PiByZW1vdmluZ0FuY2hvcklkcy5pbmNsdWRlcyhhbmNob3JJZChhKSkpLm1hcChyZW1vdmUpO1xuICAgICAgICB9KShyZW1vdmVkTGluZXMpO1xuXG4gICAgICAgIC8vaWYgcmVtb3ZlZCBhbmNob3JzIGFmZmVjdCB3cmFwIGFyZWFzIGFib3ZlIHJlbW92ZWQgbGluZXMsXG4gICAgICAgIGNvbnN0IGJsb2NrT2Zmc2V0PXRoaXMuYmxvY2tPZmZzZXRcbiAgICAgICAgY29uc3QgcmVtb3ZlZFdyYXBwZWVzQWZmZWN0ZWRMYXlvdXRlZFNwYWNlPXRoaXMud3JhcHBlZXMuZmlsdGVyKGE9PnJlbW92ZWRBbmNob3JzLmluY2x1ZGVzKGEpKVxuICAgICAgICAgICAgLmZpbHRlcigoe3Byb3BzOntnZW9tZXRyeTp7eT0wLGhlaWdodD0wfX19KT0+eStoZWlnaHQ8YmxvY2tPZmZzZXQpXG4gICAgICAgIGlmKHJlbW92ZWRXcmFwcGVlc0FmZmVjdGVkTGF5b3V0ZWRTcGFjZS5sZW5ndGg+MCl7XG4gICAgICAgICAgICB0aGlzLnJlY29tcG9zZSgpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlbW92ZWRMaW5lcywge2FuY2hvcnM6cmVtb3ZlZEFuY2hvcnN9KVxuICAgIH1cblxuXG5cdF9faXNEaXJ0eUluKHJlY3Qpe1xuICAgICAgICBjb25zdCBpc0ludGVyc2VjdD0oQSxCKT0+bmV3IFJlY3QoQS54LCBBLnksIEEud2lkdGgsIEEuaGVpZ2h0KS5pbnRlcnNlY3RzKG5ldyBSZWN0KEIueCwgQi55LCBCLndpZHRoLCBCLmhlaWdodCkpXG5cdFx0Ly93cmFwcGVlIGFscmVhZHkgdGFrZSB1cFxuXHRcdGlmKHRoaXMud3JhcHBlZXMuZmluZCgoe3Byb3BzOnt4LHksd2lkdGgsaGVpZ2h0fX0pPT5pc0ludGVyc2VjdChyZWN0LHt4LHksd2lkdGgsaGVpZ2h0fSkpKXtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0Ly9jb250ZW50IGFscmVhZHkgdGFrZSB1cFxuXHRcdGlmKGlzSW50ZXJzZWN0KHJlY3Qse3g6MCx5OjAsd2lkdGg6dGhpcy5wcm9wcy53aWR0aCxoZWlnaHQ6dGhpcy5ibG9ja09mZnNldH0pKXtcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0aWYodGhpcy5jb2xzKXtcblx0XHRcdC8vaWYgYW55IG5vbi1jdXJyZW50IGNvbHVtbiBjb250ZW50IGFscmVhZHkgdGFrZSB1cFxuXHRcdFx0cmV0dXJuICEhdGhpcy5jb2x1bW5zXG5cdFx0XHRcdC5maWx0ZXIoYT0+YSE9dGhpcy5jdXJyZW50Q29sdW1uKS8vY3VycmVudCBibG9jayBoYXMgYWxyZWFkeSBjaGVja2VkIGluIHN1cGVyIGFzIG5vcm1hbCBzcGFjZVxuXHRcdFx0XHQuZmluZCgoe3g9MCx5PTAsd2lkdGgsYmxvY2tPZmZzZXQ6aGVpZ2h0fSk9PmlzSW50ZXJzZWN0KHJlY3Qse3gseSx3aWR0aCxoZWlnaHR9KSlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2VcbiAgICB9XG59XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBBbmNob3JhYmxlIGZyb20gXCIuL2FuY2hvcmFibGVcIlxuLyoqXG4gKiB3aWRvdyBhbmQgb3JwYWhuIGNvbnRyb2wgbGF5b3V0XG4gKiB0aGVyZSBtdXN0IGJlIHByZXZMYXlvdXQsIG90aGVyd2lzZSBpdCdzIG5vdCBzdXBwb3J0ZWRcbiAqIGl0IHN1cHBvcnQgbGluZS5wcm9wcy5wYWdpbmF0aW9uPXtcbiAqIHdpZG93LCBib29sZWFuLCBpZGVudGlmeSBpZiB3aWRvdyBpcyBzdXBwb3J0ZWRcbiAqIG9ycGhhbiwgYm9vbGVhbiwgaWRlbnRpZnkgaWYgb3JwaGFuIGlzIHN1cHBvcnRlZFxuICoga2VlcExpbmVzLCBib29sZWFuLCBpZGVudGlmeSBpZiBhbGwgbGluZXMgc2hvdWxkIGJlIGxheW91dGVkIHRvZ2V0aGVyXG4gKlxuICogLy90aGlzIGxheW91dCBhbHNvIGRlcGVuZHMgb24gZm9sbG93aW5nIGxpbmUgaW5kaWNhdG9yOlxuICogbGFzdCwgYm9vbGVhbiwgaWRlbnRpZnkgaWYgaXQncyBsYXN0IGxpbmUgb2YgcGFyYWdyYXBoXG4gKiBpOiBudW1iZXJbc3RhcnQgZnJvbSBpXSwgaWRlbnRpZnkgaWYgaXQncyBudGggbGluZSBvZiBwYXJhZ3JhcGhcbiAqIH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JwaGFuQ29udHJvbGFibGUgZXh0ZW5kcyBBbmNob3JhYmxlIHtcblx0c3RhdGljIGNvbnRleHRUeXBlcyA9IHtcblx0XHQuLi5BbmNob3JhYmxlLmNvbnRleHRUeXBlcyxcblx0XHRwcmV2TGF5b3V0OiBQcm9wVHlwZXMuZnVuYyxcblx0fTtcblx0ZGVmaW5lUHJvcGVydGllcygpIHtcblx0XHRzdXBlci5kZWZpbmVQcm9wZXJ0aWVzKCk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0cHJldjoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0dmFyIHsgcGFyZW50LCBwcmV2TGF5b3V0IH0gPSB0aGlzLmNvbnRleHQ7XG5cdFx0XHRcdFx0cHJldkxheW91dCA9IHByZXZMYXlvdXQgfHwgKHBhcmVudCAmJiBwYXJlbnQuY29udGV4dCAmJiBwYXJlbnQuY29udGV4dC5wcmV2TGF5b3V0KSB8fCAoYSA9PiBudWxsKTtcblx0XHRcdFx0XHRyZXR1cm4gcHJldkxheW91dCh0aGlzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cbiAgICAvKipcbiAgICAgKiBob3cgbWFueSBsYXN0IGxpbmVzIGZyb20gc2FtZSBwYXJhZ3JhcGggb2YgaW5wdXQgbGluZVxuICAgICAqIEBwYXJhbSB7Kn0gbGluZVxuICAgICAqL1xuXHRvcnBoYW5Db3VudChsaW5lID0gdGhpcy5sYXN0TGluZSkge1xuXHRcdGNvbnN0IHBpZCA9IGdldExpbmVQYXJhZ3JhcGhJZChsaW5lLCAnW2RhdGEtdHlwZT1cInBhcmFncmFwaFwiXScpO1xuXHRcdGlmICghcGlkKVxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0Y29uc3QgbGluZXMgPSB0aGlzLmxpbmVzO1xuXHRcdGNvbnN0IGkgPSBsaW5lcy5maW5kTGFzdEluZGV4KGEgPT4gZ2V0TGluZVBhcmFncmFwaElkKGEpICE9PSBwaWQpO1xuXHRcdHJldHVybiBpID09IC0xID8gbGluZXMubGVuZ3RoIDogaSArIDE7XG5cdH1cbiAgICAvKipcbiAgICAgKiBzdGFydCBmcm9tIG5ldyBsYXlvdXRcbiAgICAgKiBAcGFyYW0ge30gbGluZVxuICAgICAqL1xuXHRhcHBlbmRDb21wb3NlZChsaW5lKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpICYmIHRoaXMucHJldikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBjdXJyZW50IGxpbmUgbXVzdCBiZSByZWNvbXBvc2VkIGlmIGFueSByb2xsYmFjayBoYXBwZW5zXG4gICAgICAgICAgICAgKi9cblx0XHRcdGNvbnN0IHsgcGFnaW5hdGlvbiA9IHt9IH0gPSBsaW5lLnByb3BzO1xuXHRcdFx0Y29uc3QgeyB3aWRvdywgb3JwaGFuLCBrZWVwTGluZXMsIGxhc3QgfSA9IHBhZ2luYXRpb247XG5cdFx0XHRpZiAoa2VlcExpbmVzKSB7XG5cdFx0XHRcdGlmICh0aGlzLnByZXYuc2hvdWxkS2VlcExpbmVzV2l0aChsaW5lKSkgeyAvL2khPTFcblx0XHRcdFx0XHRsZXQgbGluZUNvdW50ID0gdGhpcy5wcmV2Lm9ycGhhbkNvdW50KCk7XG5cdFx0XHRcdFx0dGhpcy5wcmV2LnJvbGxiYWNrTGluZXMobGluZUNvdW50KTtcblx0XHRcdFx0XHRyZXR1cm4gbGluZUNvdW50ICsgMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChvcnBoYW4pIHtcblx0XHRcdFx0XHRpZiAodGhpcy5wcmV2Lm9ycGhhbkNvdW50KGxpbmUpID09IDEgJiYgdGhpcy5wcmV2LmxpbmVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJldi5yb2xsYmFja0xpbmVzKDEpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIDEgKyAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAod2lkb3cpIHtcblx0XHRcdFx0XHRpZiAobGFzdCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3JwaGFuQ291bnQgPSB0aGlzLnByZXYub3JwaGFuQ291bnQobGluZSk7XG5cdFx0XHRcdFx0XHRpZiAob3JwaGFuQ291bnQgPiAwICYmIHRoaXMucHJldi5saW5lcy5sZW5ndGggPiBvcnBoYW5Db3VudCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXYucm9sbGJhY2tMaW5lcygxKTtcblx0XHRcdFx0XHRcdFx0aWYgKG9ycGhhbikge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChvcnBoYW5Db3VudCA9PSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZXYucm9sbGJhY2tMaW5lcygxKTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAyICsgMTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIDEgKyAxO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucHJldi5zaG91bGRLZWVwV2l0aE5leHQobGluZSkpIHtcblx0XHRcdFx0bGV0IHJlbW92ZWRMaW5lcyA9IHRoaXMucHJldi5yb2xsYmFja0xpbmVzKHRoaXMucHJldi5vcnBoYW5Db3VudCgpKTtcblx0XHRcdFx0Ly9yZS1zdWJtaXQgbGFzdCBwYXJhZ3JhcGhcblx0XHRcdFx0Y29uc3QgcGlkID0gZ2V0TGluZVBhcmFncmFwaElkKHJlbW92ZWRMaW5lc1swXSk7XG5cdFx0XHRcdHRoaXMuY29udGV4dC5nZXRDb21wb3NlcihwaWQpLnJlY29tbWl0KCk7XG5cdFx0XHRcdHJldHVybiAwICsgMTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN1cGVyLmFwcGVuZENvbXBvc2VkKC4uLmFyZ3VtZW50cyk7XG5cdH1cblx0c2hvdWxkS2VlcExpbmVzV2l0aChsaW5lKSB7XG5cdFx0Y29uc3QgcGlkID0gZ2V0TGluZVBhcmFncmFwaElkKGxpbmUpO1xuXHRcdHJldHVybiBnZXRMaW5lUGFyYWdyYXBoSWQodGhpcy5sYXN0TGluZSkgPT0gcGlkICYmXG5cdFx0XHRnZXRMaW5lUGFyYWdyYXBoSWQodGhpcy5maXJzdExpbmUpICE9IHBpZDtcblx0fVxuXHRzaG91bGRLZWVwV2l0aE5leHQobGluZSkge1xuXHRcdGNvbnN0IHNob3VsZCA9ICh0aGlzLmxhc3RMaW5lLnByb3BzLnBhZ2luYXRpb24gfHwge30pLmtlZXBXaXRoTmV4dCAmJlxuXHRcdFx0dGhpcy5vcnBoYW5Db3VudChsaW5lKSA9PSAwICYmXG5cdFx0XHRnZXRMaW5lUGFyYWdyYXBoSWQodGhpcy5maXJzdExpbmUpICE9PSBnZXRMaW5lUGFyYWdyYXBoSWQodGhpcy5sYXN0TGluZSk7XG5cdFx0cmV0dXJuIHNob3VsZDtcblx0fVxuXHRzdGF0aWMgRml4ZWQgPSBPcnBoYW5Db250cm9sYWJsZTtcbn1cblxuY29uc3QgZ2V0TGluZVBhcmFncmFwaElkPWxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cInBhcmFncmFwaFwiXWApLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IE9ycGhhbkNvbnRyb2xhYmxlIGZyb20gXCIuL29ycGhhbi1jb250cm9sYWJsZVwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWRcIlxuaW1wb3J0IENvbnRyYWludFNwYWNlIGZyb20gXCIuLi9jb25zdHJhaW50LXNwYWNlXCJcbi8qKlxuICoge3Byb3BzOntzcGFjZSwgY29scz1be3gsd2lkdGgsW3ksaGVpZ2h0XX0sIC4uLl19fVxuICogc3BhY2UgaXMgc2hhcmVkIGJ5IGNvbHMsIGluY2x1ZGluZyB3cmFwcGVlcywgbGVmdCxyaWdodCwgYmxvY2tPZmZzZXQsIGFuZCBoZWlnaHRcbiAqIGVhY2ggY29sIGlzIGEgcmVjdCByZWxhdGl2ZSB0byBzcGFjZShsZWZ0LCB0aGlzLmJsb2NrT2Zmc2V0KSBpZiBzcGFjZSBleGlzdFxuICogb3RoZXJ3aXNlIGVhY2ggY29sIHNoYXBlIGEgc3BhY2Uge3ggYXMgbGVmdCwgcmlnaHQ6eCt3aWR0aCwgaGVpZ2h0LCB5IGFzIGJsb2NrT2Zmc2V0fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2x1bW5hYmxlIGV4dGVuZHMgT3JwaGFuQ29udHJvbGFibGUge1xuXHRkZWZpbmVQcm9wZXJ0aWVzKCkge1xuXHRcdHN1cGVyLmRlZmluZVByb3BlcnRpZXMoKTtcblx0XHRpZiAoIXRoaXMucHJvcHMuY29scylcblx0XHRcdHJldHVybjtcblx0XHR0aGlzLmNvbXB1dGVkLmNvbHVtbnMgPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRibG9ja09mZnNldDoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY3VycmVudENvbHVtbi5ibG9ja09mZnNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGF2YWlsYWJsZUJsb2NrU2l6ZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jdXJyZW50Q29sdW1uLmF2YWlsYWJsZUJsb2NrU2l6ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heCguLi50aGlzLmNvbHVtbnMubWFwKGEgPT4gYS5oZWlnaHQpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRDb2x1bW46IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblx0XHRcdFx0XHRpZiAoY29sdW1ucy5sZW5ndGggPT0gMClcblx0XHRcdFx0XHRcdHRoaXMuY3JlYXRlQ29sdW1uKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbHM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuY29scztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbHVtbnM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuY29sdW1ucztcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHZhbHVlcykge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbHVtbnMgPSB2YWx1ZXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRjcmVhdGVDb2x1bW4oKSB7XG5cdFx0Y29uc3QgY29sdW1uID0ge1xuXHRcdFx0Li4udGhpcy5jb2xzW3RoaXMuY29sdW1ucy5sZW5ndGhdLFxuXHRcdFx0bGluZXM6IENvbHVtbkNoaWxkcmVuLmNyZWF0ZSh0aGlzLCAuLi5hcmd1bWVudHMpLFxuXHRcdFx0Z2V0IGlzRW1wdHkoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aCA9PSAwO1xuXHRcdFx0fSxcblx0XHRcdGdldCBhdmFpbGFibGVCbG9ja1NpemUoKSB7XG5cdFx0XHRcdGNvbnN0IHttYXhIZWlnaHQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGhlaWdodCA9IG1heEhlaWdodCwgeSA9IDAgfSA9IHRoaXM7XG5cdFx0XHRcdHJldHVybiBoZWlnaHQgLSAodGhpcy5ibG9ja09mZnNldCAtIHkpO1xuXHRcdFx0fSxcblx0XHRcdGdldCBibG9ja09mZnNldCgpIHtcblx0XHRcdFx0Y29uc3QgeyB5ID0gMCB9ID0gdGhpcztcblx0XHRcdFx0cmV0dXJuIHkrdGhpcy5jb250ZW50SGVpZ2h0O1xuXHRcdFx0fSxcblx0XHRcdGdldCBjb250ZW50SGVpZ2h0KCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5saW5lcy5yZWR1Y2UoKEgsIHsgcHJvcHM6IHsgaGVpZ2h0OiBoID0gMCB9IH0pID0+IGggKyBILCAwKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG5cdFx0cmV0dXJuIGNvbHVtbjtcblx0fVxuXG5cdC8qKmNoZWNrIGNsYXNzIGV4cGxhaW5hdGlvbiAqL1xuXHRnZXRTcGFjZShjb2x1bW4pIHtcblx0XHR2YXIgc3BhY2UgPSBzdXBlci5nZXRTcGFjZSguLi5hcmd1bWVudHMpO1xuXHRcdGlmICghdGhpcy5jb2xzKVxuXHRcdFx0cmV0dXJuIHNwYWNlO1xuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHNwYWNlPUNvbnRyYWludFNwYWNlLmNyZWF0ZSh7fSlcblx0XHRjb25zdCB7IGxlZnQgPSAwLCByaWdodCA9IDAsIGJsb2NrT2Zmc2V0ID0gMCwgaGVpZ2h0OiBIIH0gPSBzcGFjZTtcblx0XHRjb25zdCB7IHdpZHRoID0gcmlnaHQgLSBsZWZ0LCB4ID0gbGVmdCwgaGVpZ2h0ID0gSCwgeSA9IGJsb2NrT2Zmc2V0IH0gPSBjb2x1bW58fHRoaXMuY3VycmVudENvbHVtbjtcblx0XHRyZXR1cm4gc3BhY2UuY2xvbmUoe1xuXHRcdFx0bGVmdDogeCxcblx0XHRcdHJpZ2h0OiB4ICsgd2lkdGgsXG5cdFx0XHRibG9ja09mZnNldDogeSxcblx0XHRcdGhlaWdodCxcblx0XHRcdGVkZ2VzOntcblx0XHRcdFx0Y29sdW1uOntsZWZ0OngsdG9wOnkscmlnaHQ6eCt3aWR0aCxib3R0b206eStoZWlnaHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXHRuZXh0QXZhaWxhYmxlU3BhY2UoKSB7XG5cdFx0Y29uc3Qgc3BhY2UgPSBzdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UoLi4uYXJndW1lbnRzKTtcblx0XHRpZiAoc3BhY2UgPT0gZmFsc2UgJiYgdGhpcy5jb2xzKSB7XG5cdFx0XHRpZiAodGhpcy5jdXJyZW50Q29sdW1uLmlzRW1wdHkpIHtcblx0XHRcdFx0LyoqIG5vdCBhbGxvdyBlbXB0eSBjb2x1bW4sIHNvIGlnbm9yZSByZXF1aXJlZCovXG5cdFx0XHRcdHJldHVybiBzdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGhhc01vcmVDb2x1bW4gPSB0aGlzLmNvbHMubGVuZ3RoID4gdGhpcy5jb2x1bW5zLmxlbmd0aDtcblx0XHRcdGlmIChoYXNNb3JlQ29sdW1uKSB7XG5cdFx0XHRcdHRoaXMuY3JlYXRlQ29sdW1uKCk7XG5cdFx0XHRcdC8qKiBpZ25vcmUgcmVxdWlyZWQgZm9yIGEgbmV3IGNvbHVtbiovXG5cdFx0XHRcdHJldHVybiBzdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNwYWNlO1xuXHR9XG5cblx0cG9zaXRpb25MaW5lcygpIHtcblx0XHRpZighdGhpcy5jb2xzKVxuXHRcdFx0cmV0dXJuIHN1cGVyLnBvc2l0aW9uTGluZXMoLi4uYXJndW1lbnRzKVxuXHRcdGNvbnN0IGhlaWdodD1NYXRoLm1heCguLi50aGlzLmNvbHVtbnMubWFwKCh7Y29udGVudEhlaWdodCwgaGVpZ2h0PWNvbnRlbnRIZWlnaHR9KT0+aGVpZ2h0KSlcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIGhlaWdodD17aGVpZ2h0fT5cblx0XHRcdFx0e3RoaXMuY29sdW1ucy5tYXAoKHt4LHksd2lkdGgsY29udGVudEhlaWdodCwgaGVpZ2h0PWNvbnRlbnRIZWlnaHQsbGluZXN9LGkpPT57XG5cdFx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChzdXBlci5wb3NpdGlvbkxpbmVzKGxpbmVzKSx7eCx5LHdpZHRoLGhlaWdodCxrZXk6aX0pXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblxuXHRyb2xsYmFja0xpbmVzKCl7XG5cdFx0Y29uc3QgcmVtb3ZlZExpbmVzPXN1cGVyLnJvbGxiYWNrTGluZXMoLi4uYXJndW1lbnRzKVxuXHRcdGlmKHRoaXMuY29scyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoPjEpe1xuXHRcdFx0Y29uc3QgbWF4PXRoaXMubGluZXMubGVuZ3RoLTFcblx0XHRcdGNvbnN0IGk9dGhpcy5jb2x1bW5zLmZpbmRJbmRleChhPT5hLmxpbmVzLnN0YXJ0SW5kZXg+bWF4KVxuXHRcdFx0aWYoaSE9LTEpe1xuXHRcdFx0XHR0aGlzLmNvbHVtbnMuc3BsaWNlKGkpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlbW92ZWRMaW5lc1xuXHR9XG59XG5cbmNsYXNzIENvbHVtbkNoaWxkcmVue1xuICAgIGNvbnN0cnVjdG9yKGZyYW1lLHN0YXJ0SW5kZXg9ZnJhbWUuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoKXtcblx0XHR0aGlzLmZyYW1lPWZyYW1lXG4gICAgICAgIHRoaXMuc3RhcnRJbmRleD1zdGFydEluZGV4XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBjcmVhdGUoKXtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShuZXcgQ29sdW1uQ2hpbGRyZW4oLi4uYXJndW1lbnRzKSx7XG4gICAgICAgICAgICBnZXQob2JqLCBwcm9wKXtcbiAgICAgICAgICAgICAgICBzd2l0Y2gocHJvcCl7XG4gICAgICAgICAgICAgICAgY2FzZSBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZSBcbiAgICAgICAgICAgICAgICBjYXNlIFwidGFyZ2V0XCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZihwcm9wIGluIG9iailcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXM9b2JqLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3AgaW4gaXRlbXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZj1pdGVtc1twcm9wXVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKGYpPT1cImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmLmJpbmQoaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKT0+b2JqLnVuc3VwcG9ydChgbm90IHN1cHBvcnRlZCBDb2x1bW5DaGlsZHJlblske3Byb3B9XWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuXHRnZXQgZW5kSW5kZXgoKXtcblx0XHRjb25zdCBjb2x1bW5zPXRoaXMuZnJhbWUuY29sdW1uc1xuXHRcdGNvbnN0IGk9Y29sdW1ucy5maW5kSW5kZXgoYT0+YS5saW5lcy50YXJnZXQ9PXRoaXMpXG5cdFx0Y29uc3QgbmV4dENvbHVtbj1jb2x1bW5zW2krMV1cblx0XHRyZXR1cm4gbmV4dENvbHVtbiA/IG5leHRDb2x1bW4ubGluZXMuc3RhcnRJbmRleCA6IHRoaXMuZnJhbWUubGluZXMubGVuZ3RoXG4gICAgfVxuICAgIFxuICAgIGdldCBpdGVtcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZS5saW5lcy5zbGljZSh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5lbmRJbmRleClcbiAgICB9XG5cbiAgICBnZXQgbGVuZ3RoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmVuZEluZGV4LXRoaXMuc3RhcnRJbmRleFxuICAgIH1cblxuICAgIHVuc3VwcG9ydChtc2cpe1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZylcbiAgICB9XG5cbiAgICBwdXNoKCl7XG5cdFx0dGhpcy5mcmFtZS5saW5lcy5zcGxpY2UodGhpcy5lbmRJbmRleCwwLC4uLmFyZ3VtZW50cylcbiAgICB9XG4gICAgXG4gICAgc3BsaWNlKGksaiwuLi5hcyl7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWRcIilcbiAgICB9XG59IiwiaW1wb3J0IENvbHVtbmFibGUgZnJvbSBcIi4vY29sdW1uYWJsZVwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWxhbmNlYWJsZSBleHRlbmRzIENvbHVtbmFibGUge1xuXHRkZWZpbmVQcm9wZXJ0aWVzKCkge1xuXHRcdHN1cGVyLmRlZmluZVByb3BlcnRpZXMoKVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse1xuXHRcdFx0YmFsYW5jZWFibGU6e1xuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xzICYmIHRoaXMuY29scy5sZW5ndGggPiAxICYmIHRoaXMucHJvcHMuYmFsYW5jZSAmJiB0aGlzLmxpbmVzLmxlbmd0aD4xXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuXHRcdGlmICh0aGlzLmJhbGFuY2VhYmxlKSB7XG5cdFx0XHR0aGlzLmJhbGFuY2UoKTtcblx0XHR9XG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKC4uLmFyZ3VtZW50cyk7XG5cdH1cblx0XG5cdGJhbGFuY2UoKSB7XG5cdFx0Y29uc3QgeyBiYWxhbmNlIH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICh0eXBlb2YgKGJhbGFuY2UpID09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuIGJhbGFuY2UuY2FsbCh0aGlzKTtcblx0XHR9XG5cdFx0Y29uc3QgeyBiYWxhbmNlVGhyZXNob2xkID0gMSB9ID0gdGhpcy5wcm9wcztcblx0XHRjb25zdCB3aWR0aCA9IHRoaXMuY29sc1swXS53aWR0aDtcblx0XHRpZiAoIXRoaXMuY29scy5maW5kKGEgPT4gTWF0aC5hYnMod2lkdGggLSBhLndpZHRoKSA+IGJhbGFuY2VUaHJlc2hvbGQpKSB7XG5cdFx0XHR0aGlzLmVxdWFsQmFsYW5jZSgpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHRoaXMuYW55QmFsYW5jZSgpO1xuXHRcdH1cblx0fVxuICAgIC8qKlxuICAgICpqdXN0IHJlbG9jYXRlIGxpbmVzIGJldHdlZW4gYWxsIGNvbHVtbnNcbiAgICAqL1xuXHRlcXVhbEJhbGFuY2UoKSB7XG5cdFx0Y29uc3QgdG90YWxIZWlnaHQgPSB0aGlzLmxpbmVzLnJlZHVjZSgoaCwgeyBwcm9wczp7aGVpZ2h0PTB9IH0pID0+IGggKyBoZWlnaHQsIDApO1xuXHRcdGNvbnN0IGNvbEhlaWdodCA9IHRvdGFsSGVpZ2h0IC8gdGhpcy5jb2xzLmxlbmd0aDtcblx0XHR0aGlzLmNvbHVtbnMgPSBbXTtcblx0XHRjb25zdCBzZWdtZW50cz10aGlzLmxpbmVzLnJlZHVjZSgoc3RhdGUsIHsgcHJvcHM6IHsgaGVpZ2h0ID0gMCB9IH0sIGkpID0+IHtcblx0XHRcdGlmIChzdGF0ZS5oIDwgY29sSGVpZ2h0KSB7XG5cdFx0XHRcdHN0YXRlLmggKz0gaGVpZ2h0O1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHN0YXRlLmNvbHVtbnMucHVzaChpKTtcblx0XHRcdFx0c3RhdGUuaCA9IGhlaWdodDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHR9LCB7IGNvbHVtbnM6IFswXSwgaDogMCB9KS5jb2x1bW5zLnNsaWNlKDAsdGhpcy5jb2xzLmxlbmd0aClcblx0XHRcblx0XHRyZXR1cm4gc2VnbWVudHMuZm9yRWFjaChzdGFydEluZGV4ID0+IHRoaXMuY3JlYXRlQ29sdW1uKHN0YXJ0SW5kZXgpKTtcblx0fVxuICAgIC8qKlxuICAgICAqIHJlLWxheW91dCBieSB0b3RhbCBjb2xzJyB3aWR0aCB0byBnZXQgbGF5b3V0IGhlaWdodFxuICAgICAqIHRoZW4gdXNlIGl0IGFzIGVhY2ggYmxvY2sgaGVpZ2h0IHRvIHJlLWxheW91dCBhZ2FpblxuICAgICAqL1xuXHRhbnlCYWxhbmNlKCkge1xuXHRcdGNvbnN0IGNyZWF0ZUNvbHVtbiA9IHRoaXMuY3JlYXRlQ29sdW1uO1xuXHRcdHRyeSB7XG5cdFx0XHQvL3JlY29tcG9zZSBpbnRvIGNvbCB3aXRoIHRvdGFsV2lkdGggdG8gZ2V0IHRvdGFsIGhlaWdodFxuXHRcdFx0Y29uc3QgdG90YWxXaWR0aCA9IHRoaXMuY29scy5yZWR1Y2UoKHcsIGEpID0+IHcgKyBhLndpZHRoLCAwKTtcblx0XHRcdHRoaXMuY3JlYXRlQ29sdW1uID0gKCkgPT4gT2JqZWN0LmFzc2lnbihjcmVhdGVDb2x1bW4uY2FsbCh0aGlzKSwgeyB3aWR0aDogdG90YWxXaWR0aCwgaGVpZ2h0OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB9KTtcblx0XHRcdHRoaXMucmVjb21wb3NlKCk7XG5cdFx0XHRjb25zdCB0b3RhbEhlaWdodCA9IHRoaXMuYmxvY2tPZmZzZXQ7XG5cdFx0XHR0aGlzLmNyZWF0ZUNvbHVtbiA9ICgpID0+IE9iamVjdC5hc3NpZ24oY3JlYXRlQ29sdW1uLmNhbGwodGhpcyksIHsgaGVpZ2h0OiB0b3RhbEhlaWdodCB9KTtcblx0XHRcdHRoaXMucmVjb21wb3NlKCk7XG5cdFx0fVxuXHRcdGZpbmFsbHkge1xuXHRcdFx0ZGVsZXRlIHRoaXMuY3JlYXRlQ29sdW1uO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWQvZ3JvdXBcIlxuaW1wb3J0IHsgUmVhY3RRdWVyeSB9IGZyb20gXCJ3ZS1lZGl0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZVNlZ21lbnRzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICBsZWZ0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBzZWdtZW50czogUHJvcFR5cGVzLmFycmF5T2YoSW5saW5lU2VnbWVudClcbiAgICB9O1xuICAgIHN0YXRpYyBjcmVhdGUoeyBzZWdtZW50cyA9IFtdLCAuLi5wcm9wcyB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5saW5lU2VnbWVudHMoeyBzZWdtZW50czogc2VnbWVudHMubWFwKGEgPT4gbmV3IElubGluZVNlZ21lbnQoYSkpLCAuLi5wcm9wcyB9KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoeyBzZWdtZW50cyA9IFtdIH0gPSB7IHNlZ21lbnRzOiBbXSB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBzZWdtZW50cztcbiAgICB9XG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5yZWR1Y2UoKGFsbCwgc2VnbWVudCkgPT4gWy4uLmFsbCwgLi4uc2VnbWVudC5pdGVtc10sIFtdKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLmZpbmRMYXN0KChhLCBpKSA9PiBhLml0ZW1zLmxlbmd0aCA+IDAgfHwgaSA9PSAwKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRYKCkge1xuICAgICAgICBjb25zdCB7IHggPSAwLCBpdGVtcyB9ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICByZXR1cm4gaXRlbXMucmVkdWNlKChYLCB7IHByb3BzOiB7IHdpZHRoID0gMCB9IH0pID0+IFggKyB3aWR0aCwgeCk7XG4gICAgfVxuICAgIHNob3VsZFJlbGF5b3V0KHsgc2VnbWVudHMgfSkge1xuICAgICAgICBjb25zdCBiU2FtZSA9IHNlZ21lbnRzXG4gICAgICAgICAgICAmJiB0aGlzLnNlZ21lbnRzLmxlbmd0aCA9PSBzZWdtZW50cy5sZW5ndGhcbiAgICAgICAgICAgICYmICF0aGlzLnNlZ21lbnRzLmZpbmQoKHsgcHJvcHM6IGEgfSwgaSwgYywgYiA9IHNlZ21lbnRzW2ldKSA9PiAhKGIgJiYgYS54ID09IGIueCAmJiBhLndpZHRoID09IGIud2lkdGgpKTtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnRzICYmICFiU2FtZTtcbiAgICB9XG4gICAgcmVsYXlvdXQocHJvcHMsIC4uLmF0b21zKSB7XG4gICAgICAgIGNvbnN0IHJlbGF5b3V0ID0gdGhpcy5jb25zdHJ1Y3Rvci5jcmVhdGUoeyAuLi50aGlzLnByb3BzLCAuLi5wcm9wcyB9KTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgLi4uYXRvbXNdO1xuICAgICAgICBsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGwgPSByZWxheW91dC5zZWdtZW50cy5sZW5ndGg7IGogPCBsOyBqKyspIHtcbiAgICAgICAgICAgIGxldCBzZWdtZW50ID0gcmVsYXlvdXQuc2VnbWVudHNbal07XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC5wdXNoKGl0ZW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA8IGxlbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWxheW91dDtcbiAgICB9XG4gICAgcHVzaCgpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMuc2VnbWVudHMuZmluZExhc3RJbmRleCgoYSwgaSkgPT4gYS5pdGVtcy5sZW5ndGggPiAwIHx8IGkgPT0gMCk7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VnbWVudHMuc2xpY2UoaSkuZmluZChhID0+IHtcbiAgICAgICAgICAgIGlmIChhLnB1c2goLi4uYXJndW1lbnRzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1c2hBdG9taWMoKSB7XG4gICAgfVxuICAgIHB1c2hUYWIoKSB7XG4gICAgfVxuICAgIHB1c2hMaW5lYnJlYWsoKSB7XG4gICAgfVxuICAgIHB1c2hIeXBoZW4oKSB7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBsZWZ0ID0gMCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeyBmbGF0IH0gPSB0aGlzLnNlZ21lbnRzXG4gICAgICAgICAgICAucmVkdWNlKCh7IFgsIGZsYXQgfSwgeyBpdGVtcywgcHJvcHM6IHsgeCA9IDAsIHdpZHRoID0gMCB9IH0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAvKipub24gdGV4dCBhdG9tIHNldCB5PS1oZWlnaHQsIHNvIGxpbmUgYmFzZWQgYmFzZWxpbmUgaW4gQHN0b3J5IGNhbiBiZSBpbXBsZW1lbnRlZCwgICAqL1xuICAgICAgICAgICAgICAgIGl0ZW1zPWl0ZW1zLm1hcChhPT5hLnByb3BzLmhlaWdodCAmJiAhaXNUZXh0KGEpID8gIFJlYWN0LmNsb25lRWxlbWVudChhLHt5Oi1hLnByb3BzLmhlaWdodH0pIDogYSlcbiAgICAgICAgICAgICAgICBmbGF0LnNwbGljZShmbGF0Lmxlbmd0aCwgMCwgLi4uKFggIT0geCA/IFs8R3JvdXAgeD17WCAtIGxlZnR9IHdpZHRoPXt4IC0gWH0gLz4sIC4uLml0ZW1zXSA6IGl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgWDogeCArIHdpZHRoLCBmbGF0IH07XG4gICAgICAgICAgICB9LCB7IGZsYXQ6IFtdLCBYOiBsZWZ0IH0pO1xuICAgICAgICByZXR1cm4gPEdyb3VwIHsuLi57IHg6IGxlZnQsIGNoaWxkcmVuOiBmbGF0IH19IC8+O1xuICAgIH1cbn1cblxuY2xhc3MgSW5saW5lU2VnbWVudCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgeDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfTtcbiAgICBjb25zdHJ1Y3Rvcih7IHgsIHdpZHRoIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xuICAgIH1cbiAgICBnZXQgY29udGVudFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKFgsIGEpID0+IFggKyBhLnByb3BzLndpZHRoLCAwKTtcbiAgICB9XG4gICAgZ2V0IGF2YWlsYWJsZVdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy53aWR0aCAtIHRoaXMuY29udGVudFdpZHRoO1xuICAgIH1cbiAgICBwdXNoKGF0b20sIG11c3QpIHtcbiAgICAgICAgaWYgKG11c3QpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChhdG9tKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpZHRoID0gMCwgbWluV2lkdGggPSB3aWR0aCB9ID0gYXRvbS5wcm9wcztcbiAgICAgICAgaWYgKG1pbldpZHRoID09IDAgfHwgdGhpcy5hdmFpbGFibGVXaWR0aCA+PSBtaW5XaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGF0b20pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vKioqKklubGluZVNlZ21lbnRzIGRvZXNuJ3QgdXNlIGl0XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IHggPSAwLCB3aWR0aCB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IFggPSB4O1xuICAgICAgICByZXR1cm4gKDxHcm91cCB4PXt4fSB3aWR0aD17d2lkdGh9PlxuICAgICAgICAgICAge3RoaXMuaXRlbXMubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2F0ZWQgPSBSZWFjdC5jbG9uZUVsZW1lbnQoYSwgeyB4OiBYIH0pO1xuICAgICAgICAgICAgICAgIFggKz0gKGEucHJvcHMud2lkdGggfHwgMCk7XG4gICAgICAgICAgICAgICAgaWYoIWlzVGV4dChhKSAmJiBhLnByb3BzLmhlaWdodCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQobG9jYXRlZCx7eTotYS5wcm9wcy5oZWlnaHR9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRlZDtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L0dyb3VwPik7XG4gICAgfVxufVxuXG5jb25zdCBpc1RleHQ9YT0+YS5wcm9wcy5kZXNjZW50IT09dW5kZWZpbmVkXG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWRcIlxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lcmdlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7Y2hpbGRyZW4seH09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IG1lcmdlZD10aGlzLmdldE1lcmdlZChjaGlsZHJlbilcblx0XHRpZihtZXJnZWQubGVuZ3RoPT0xKXtcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQobWVyZ2VkWzBdLHt4fSlcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB4PXt4fT5cblx0XHRcdFx0e3RoaXMuZ2V0TWVyZ2VkKGNoaWxkcmVuKX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG5cdGdldE1lcmdlZD1tZW1vaXplKChjaGlsZHJlbik9Pntcblx0XHRyZXR1cm4gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbilcblx0XHQucmVkdWNlKChzdGF0ZSxwaWVjZSxrZXkpPT57XG5cdFx0XHRjb25zdCBwaWVjZVBhdGg9cGF0aChwaWVjZSlcblx0XHRcdGlmKCFwaWVjZVBhdGguYlRleHQpe1xuXHRcdFx0XHRzdGF0ZS5tZXJnZVRydW5rKGtleSlcblx0XHRcdFx0c3RhdGUucGllY2VzLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KHBpZWNlLHt4OnN0YXRlLngsa2V5fSkpXG5cdFx0XHRcdHN0YXRlLngrPXBpZWNlLnByb3BzLndpZHRoXG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0aWYocGllY2VQYXRoLmpvaW4oXCIsXCIpPT1zdGF0ZS50cnVua1BhdGgpe1xuXHRcdFx0XHRcdHN0YXRlLnRydW5rLnB1c2gocGllY2UpXG5cdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRzdGF0ZS5tZXJnZVRydW5rKGtleSlcblx0XHRcdFx0XHRzdGF0ZS50cnVuay5wdXNoKHBpZWNlKVxuXHRcdFx0XHRcdHN0YXRlLnRydW5rUGF0aD1waWVjZVBhdGguam9pbihcIixcIilcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0YXRlXG5cdFx0fSx7XHRwaWVjZXM6W10sXG5cdFx0XHR4OjAsXG5cdFx0XHR0cnVuazpbXSxcblx0XHRcdHRydW5rUGF0aDpudWxsLFxuXHRcdFx0bWVyZ2VUcnVuayhrZXk9LTEpe1xuXHRcdFx0XHRpZih0aGlzLnRydW5rLmxlbmd0aD09MSl7XG5cdFx0XHRcdFx0Y29uc3QgcGllY2U9dGhpcy50cnVua1swXVxuXHRcdFx0XHRcdHRoaXMucGllY2VzLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KHBpZWNlLHt4OnRoaXMueCxrZXl9KSlcblx0XHRcdFx0XHR0aGlzLngrPXBpZWNlLnByb3BzLndpZHRoXG5cdFx0XHRcdH1lbHNlIGlmKHRoaXMudHJ1bmsubGVuZ3RoPjEpe1xuXHRcdFx0XHRcdGNvbnN0IGV4dHJhY3Q9YT0+cGF0aChhLGI9PmIpLnBvcCgpXG5cdFx0XHRcdFx0Y29uc3QgdGV4dHM9dGhpcy50cnVuay5tYXAoZXh0cmFjdClcblx0XHRcdFx0XHRjb25zdCBwcm9wcz10ZXh0cy5yZWR1Y2UoKHByb3BzLGEpPT57XG5cdFx0XHRcdFx0XHRcdHByb3BzLndpZHRoKz1hLnByb3BzLndpZHRoXG5cdFx0XHRcdFx0XHRcdHByb3BzLmNoaWxkcmVuKz1hLnByb3BzLmNoaWxkcmVuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBwcm9wc1xuXHRcdFx0XHRcdFx0fSx7XG5cdFx0XHRcdFx0XHRcdHdpZHRoOjAsXG5cdFx0XHRcdFx0XHRcdGNoaWxkcmVuOlwiXCIsXG5cdFx0XHRcdFx0XHRcdFwiZGF0YS1lbmRhdFwiOnRleHRzW3RleHRzLmxlbmd0aC0xXS5wcm9wc1tcImRhdGEtZW5kYXRcIl0sXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZTp1bmRlZmluZWQsbWluV2lkdGg6dW5kZWZpbmVkXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudHM9cGF0aCh0aGlzLnRydW5rWzBdLGE9PmEsYT0+dHJ1ZSkuc2xpY2UoMCwtMSlcblx0XHRcdFx0XHRjb25zdCBtZXJnZWQ9cGFyZW50cy5yZWR1Y2VSaWdodCgoY2hpbGQsYSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHt3aWR0aDpwcm9wcy53aWR0aH0sY2hpbGQpLFJlYWN0LmNsb25lRWxlbWVudCh0ZXh0c1swXSxwcm9wcykpXG5cdFx0XHRcdFx0dGhpcy5waWVjZXMucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQobWVyZ2VkLHt4OnRoaXMueCxrZXl9KSlcblx0XHRcdFx0XHR0aGlzLngrPXByb3BzLndpZHRoXG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy50cnVuaz1bXVxuXHRcdFx0XHR0aGlzLnRydW5rUGF0aD1udWxsXG5cdFx0XHRcdHJldHVybiB0aGlzXG5cdFx0XHR9XG5cdFx0fSlcblx0XHQubWVyZ2VUcnVuaygpXG5cdFx0LnBpZWNlc1xuXHR9KVxufVxuXG5cbmZ1bmN0aW9uIHBhdGgoYSxpbmZvPWE9PmEucHJvcHNbXCJkYXRhLWNvbnRlbnRcIl0sdGVzdD1hPT4hIWEucHJvcHNbXCJkYXRhLWNvbnRlbnRcIl0saWRzPVtdKXtcblx0aWYoUmVhY3QuaXNWYWxpZEVsZW1lbnQoYSkpe1xuXHRcdGlmKHRlc3QoYSkpe1xuXHRcdFx0aWRzLnB1c2goaW5mbyhhKSlcblx0XHRcdGlkcy5iVGV4dD1hLnByb3BzW1wiZGF0YS10eXBlXCJdPT1cInRleHRcIlxuXHRcdH1cblx0XHRpZihSZWFjdC5pc1ZhbGlkRWxlbWVudChhLnByb3BzLmNoaWxkcmVuKSl7XG5cdFx0XHRwYXRoKFJlYWN0LkNoaWxkcmVuLm9ubHkoYS5wcm9wcy5jaGlsZHJlbiksaW5mbyx0ZXN0LGlkcylcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlkc1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtSZWFjdFF1ZXJ5fSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCB7R3JvdXAsVGV4dH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkXCJcblxuaW1wb3J0IE1lcmdlIGZyb20gXCIuL21lcmdlXCJcblxuLyoqXG4gKiAxLiBhbGlnblxuICogMi4gc2V0IGJhc2VsaW5lOiBiYXNlbGluZSBzZXQgb24gc3RvcnkgaXMgaW1wb3J0YW50IGZvciByb3RhdGlvblxuICogMy4gbWVyZ2UgdG8gc2ltcGxpZnkgZG9tIHN0cnVjdHVyZSBmb3IgcGVyZm9ybWFuY2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RvcnkgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cInN0b3J5XCJcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2NoaWxkcmVuLCBhbGlnbj1cImxlZnRcIn09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IGRlc2NlbnQ9Y2hpbGRyZW4ucmVkdWNlKChoLHtwcm9wczp7ZGVzY2VudD0wfX0pPT5NYXRoLm1heChoLGRlc2NlbnQpLDApXG5cdFx0Y29uc3QgYmFzZWxpbmU9Y2hpbGRyZW4ucmVkdWNlKChoLHtwcm9wczp7aGVpZ2h0PTAsZGVzY2VudD0wfX0pPT5NYXRoLm1heChoLGhlaWdodC1kZXNjZW50KSwwKVxuXHRcdGNvbnN0IGFsaWduZWQ9dGhpc1thbGlnbl0oKVxuXHRcdHJldHVybiAoPEdyb3VwIGNsYXNzTmFtZT1cInN0b3J5XCIgeT17YmFzZWxpbmV9IGxpbmVEZXNjZW50PXtkZXNjZW50fSBjaGlsZHJlbj17YWxpZ25lZH0vPilcblx0fVxuXG5cdC8qKlxuXHQgKiBHcm91cCB1bnBvc2l0aW9uZWQgZm9yIGVhY2ggcG9zaXRpb25lZFxuXHQgKiAqKiogbGFzdCBncm91cCBzaG91bGQgaWdub3JlIG1pbldpZHRoPT0wIGVsZW1lbnQgZm9yIGFsaWdubWVudFxuXHQgKiBAcGFyYW0geyp9IHJpZ2h0IFxuXHQgKi9cblx0Z3JvdXAocmlnaHQ9ZmFsc2Upe1xuXHRcdHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG5cdFx0XHQucmVkdWNlKChncm91cHMsYSk9Pntcblx0XHRcdFx0aWYoYS5wcm9wcy54IT11bmRlZmluZWQpe1xuXHRcdFx0XHRcdGlmKHJpZ2h0KXtcblx0XHRcdFx0XHRcdGdyb3Vwcy5wdXNoKHtsb2NhdGVkOmEsd29yZHM6W119KVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Z3JvdXBzW2dyb3Vwcy5sZW5ndGgtMV0ubG9jYXRlZD1hXG5cdFx0XHRcdFx0XHRncm91cHMucHVzaCh7d29yZHM6W119KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Z3JvdXBzW2dyb3Vwcy5sZW5ndGgtMV0ud29yZHMucHVzaChhKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBncm91cHNcblx0XHRcdH0sW3t3b3JkczpbXX1dKVxuXHRcdFx0Lm1hcCgoZ3JvdXAsX2ksX2EsaXNMYXN0PV9pPT1fYS5sZW5ndGgtMSk9Pntcblx0XHRcdFx0bGV0IGk9Z3JvdXAud29yZHMubGVuZ3RoLVxuXHRcdFx0XHRcdFx0QXJyYXkuZnJvbShncm91cC53b3Jkcylcblx0XHRcdFx0XHRcdFx0LnJldmVyc2UoKVxuXHRcdFx0XHRcdFx0XHQuZmluZEluZGV4KGE9PmlzTGFzdCA/IGEucHJvcHMubWluV2lkdGghPT0wIDogIWlzV2hpdGVzcGFjZShhKSApXG5cblx0XHRcdFx0Z3JvdXAuZW5kaW5nV2hpdGVzcGFjZXM9Z3JvdXAud29yZHMuc2xpY2UoaSlcblx0XHRcdFx0Z3JvdXAud29yZHM9Z3JvdXAud29yZHMuc2xpY2UoMCxpKVxuXHRcdFx0XHRyZXR1cm4gZ3JvdXBcblx0XHRcdH0pXG5cdH1cblxuXHRsZWZ0KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXAoKVxuXHRcdFx0LnJlZHVjZSgoc3RhdGUsIHt3b3JkcywgZW5kaW5nV2hpdGVzcGFjZXMsbG9jYXRlZH0pPT57XG5cdFx0XHRcdGlmKHdvcmRzLmxlbmd0aCtlbmRpbmdXaGl0ZXNwYWNlcy5sZW5ndGgpe1xuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChcblx0XHRcdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0bmV3IE1lcmdlKHtcblx0XHRcdFx0XHRcdFx0XHR4OnN0YXRlLngsXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46Wy4uLndvcmRzLC4uLmVuZGluZ1doaXRlc3BhY2VzXS5tYXAoKGEsa2V5KT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleX0pKVxuXHRcdFx0XHRcdFx0XHR9KS5yZW5kZXIoKSxcblx0XHRcdFx0XHRcdFx0e2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYobG9jYXRlZCl7XG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChsb2NhdGVkLHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9KSlcblx0XHRcdFx0XHRzdGF0ZS54PWxvY2F0ZWQucHJvcHMueCtsb2NhdGVkLnByb3BzLndpZHRoXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHN0YXRlXG5cdFx0XHR9LHt4OjAsIGFsaWduZWQ6W119KVxuXHRcdFx0LmFsaWduZWRcblx0fVxuXHRyaWdodCgpe1xuXHRcdHJldHVybiB0aGlzLmdyb3VwKHRydWUpXG5cdFx0XHQucmVkdWNlUmlnaHQoKHN0YXRlLCB7bG9jYXRlZCx3b3JkcyxlbmRpbmdXaGl0ZXNwYWNlc30pPT57XG5cdFx0XHRcdGlmKGVuZGluZ1doaXRlc3BhY2VzLmxlbmd0aD4wKXtcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goXG5cdFx0XHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG5ldyBNZXJnZSh7XG5cdFx0XHRcdFx0XHRcdFx0eDpzdGF0ZS54LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOmVuZGluZ1doaXRlc3BhY2VzLm1hcCgoYSxrZXkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5fSkpXG5cdFx0XHRcdFx0XHRcdH0pLnJlbmRlcigpLFxuXHRcdFx0XHRcdFx0XHR7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHRpZih3b3Jkcy5sZW5ndGgpe1xuXHRcdFx0XHRcdHN0YXRlLng9d29yZHMucmVkdWNlKCh4LGEpPT54LWEucHJvcHMud2lkdGgsc3RhdGUueClcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goXG5cdFx0XHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG5ldyBNZXJnZSh7XG5cdFx0XHRcdFx0XHRcdFx0eDpzdGF0ZS54LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOndvcmRzLm1hcCgoYSxrZXkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5fSkpXG5cdFx0XHRcdFx0XHRcdH0pLnJlbmRlcigpLFxuXHRcdFx0XHRcdFx0XHR7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihsb2NhdGVkKXtcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KGxvY2F0ZWQse2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH0pKVxuXHRcdFx0XHRcdHN0YXRlLng9bG9jYXRlZC5wcm9wcy54XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHN0YXRlXG5cdFx0XHR9LHt4OnRoaXMucHJvcHMud2lkdGgsYWxpZ25lZDpbXX0pXG5cdFx0XHQuYWxpZ25lZFxuXHRcdFx0LnJldmVyc2UoKVxuXHR9XG5cblx0Y2VudGVyKCl7XG5cdFx0Y29uc3QgY29udGVudFdpZHRoPXBpZWNlcz0+cGllY2VzLnJlZHVjZSgodyxhKT0+dythLnByb3BzLndpZHRoLDApXG5cdFx0cmV0dXJuIHRoaXNcblx0XHRcdC5ncm91cCgpXG5cdFx0XHQucmVkdWNlKChzdGF0ZSwge3dvcmRzLCBlbmRpbmdXaGl0ZXNwYWNlcyxsb2NhdGVkfSk9Pntcblx0XHRcdFx0aWYod29yZHMubGVuZ3RoK2VuZGluZ1doaXRlc3BhY2VzLmxlbmd0aCl7XG5cdFx0XHRcdFx0Y29uc3Qgd2lkdGg9KGxvY2F0ZWQgPyBsb2NhdGVkLnByb3BzLnggOiB0aGlzLnByb3BzLndpZHRoKS1zdGF0ZS54XG5cdFx0XHRcdFx0Y29uc3Qgd29yZHNXaWR0aD1jb250ZW50V2lkdGgod29yZHMpXG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFxuXHRcdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRuZXcgTWVyZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdHg6c3RhdGUueCsod2lkdGgtd29yZHNXaWR0aCkvMixcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpbLi4ud29yZHMsLi4uZW5kaW5nV2hpdGVzcGFjZXNdLm1hcCgoYSxrZXkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5fSkpXG5cdFx0XHRcdFx0XHRcdH0pLnJlbmRlcigpLFxuXHRcdFx0XHRcdFx0XHR7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihsb2NhdGVkKXtcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KGxvY2F0ZWQse2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH0pKVxuXHRcdFx0XHRcdHN0YXRlLng9bG9jYXRlZC5wcm9wcy54K2xvY2F0ZWQucHJvcHMud2lkdGhcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblx0XHRcdH0se3g6MCwgYWxpZ25lZDpbXX0pLmFsaWduZWRcblx0fVxuXG5cdGp1c3RpZnkoKXtcblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lmdyb3VwKClcblx0XHRcdC5yZWR1Y2UoKHN0YXRlLHt3b3JkcyxlbmRpbmdXaGl0ZXNwYWNlcyxsb2NhdGVkfSk9Pntcblx0XHRcdFx0bGV0IGxlbj1zdGF0ZS5qdXN0aWZpZWQubGVuZ3RoXG5cdFx0XHRcdGNvbnN0IHdpZHRoPShsb2NhdGVkID8gbG9jYXRlZC5wcm9wcy54IDogdGhpcy5wcm9wcy53aWR0aCktc3RhdGUueFxuXHRcdFx0XHRjb25zdCB7d2hpdGVzcGFjZXMsY29udGVudFdpZHRofT13b3Jkcy5yZWR1Y2UoKHN0YXR1cyxhLGkpPT57XG5cdFx0XHRcdFx0aWYoaXNXaGl0ZXNwYWNlKGEpKXtcblx0XHRcdFx0XHRcdHN0YXR1cy53aGl0ZXNwYWNlcy5wdXNoKGkpXG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRzdGF0dXMuY29udGVudFdpZHRoKz1hLnByb3BzLndpZHRoXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzdGF0dXNcblx0XHRcdFx0fSx7Y29udGVudFdpZHRoOjAsd2hpdGVzcGFjZXM6W119KVxuXHRcdFx0XHRjb25zdCB3aGl0ZXNwYWNlV2lkdGg9d2hpdGVzcGFjZXMubGVuZ3RoPjAgPyAod2lkdGgtY29udGVudFdpZHRoKS93aGl0ZXNwYWNlcy5sZW5ndGggOiAwO1xuXHRcdFx0XHRbLi4ud29yZHMsLi4uZW5kaW5nV2hpdGVzcGFjZXNdLnJlZHVjZSgoeCx3b3JkLGkpPT57XG5cdFx0XHRcdFx0c3RhdGUuanVzdGlmaWVkLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KHdvcmQse3gsa2V5OmxlbisrfSkpXG5cdFx0XHRcdFx0cmV0dXJuIHgrKHdoaXRlc3BhY2VzLmluY2x1ZGVzKGkpID8gd2hpdGVzcGFjZVdpZHRoIDogd29yZC5wcm9wcy53aWR0aClcblx0XHRcdFx0fSxzdGF0ZS54KVxuXG5cdFx0XHRcdGlmKGxvY2F0ZWQpe1xuXHRcdFx0XHRcdHN0YXRlLmp1c3RpZmllZC5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChsb2NhdGVkLHtrZXk6bGVuKyt9KSlcblx0XHRcdFx0XHRzdGF0ZS54PWxvY2F0ZWQucHJvcHMueCtsb2NhdGVkLnByb3BzLndpZHRoXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHN0YXRlXG5cdFx0XHR9LHt4OjAsanVzdGlmaWVkOltdfSkuanVzdGlmaWVkXG5cdH1cblxuXHRib3RoKCl7XG5cdFx0cmV0dXJuIHRoaXMuanVzdGlmeSgpXG5cdH1cbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGEpe1xuXHRyZXR1cm4gbmV3IFJlYWN0UXVlcnkoYSkuZmluZEZpcnN0KGAud2hpdGVzcGFjZWApLmxlbmd0aD4wXG59XG4iLCJpbXBvcnQgQmxvY2sgZnJvbSBcIi4vYmxvY2svYmFsYW5jZWFibGVcIlxuaW1wb3J0IElubGluZSBmcm9tIFwiLi9pbmxpbmVcIlxuaW1wb3J0IENvbnN0cmFpbnRTcGFjZSBmcm9tIFwiLi9jb25zdHJhaW50LXNwYWNlXCJcblxuZXhwb3J0IGRlZmF1bHQge0Jsb2NrLCBJbmxpbmUsIENvbnN0cmFpbnRTcGFjZSwgSU1NRURJQVRFX1NUT1A6QmxvY2suSU1NRURJQVRFX1NUT1B9IiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtSZWFjdFF1ZXJ5fSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgSW5saW5lU2VnbWVudHMgZnJvbSBcIi4vbG5saW5lLXNwYWNlLXNlZ21lbnRzXCJcbmltcG9ydCBTdG9yeSBmcm9tIFwiLi9zdG9yeVwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkL2dyb3VwXCJcblxuLyoqXG4gKiBoZWlnaHQ6IGxpbmUgYm94IGhlaWdodFxuICogY29udGVudEhlaWdodDogbWF4IG9mIGFsbCBhdG9tcycgaGVpZ2h0XG4gKiB0ZXh0SGVpZ2h0OiBtYXggb2YgdGV4dCBhdG9tcycgaGVpZ2h0LCBwZXJjZW50YWdlIGxpbmUgYm94IGhlaWdodCBzaG91bGQgYmUgYmFzZWQgb24gdGV4dEhlaWdodFxuICogbGluZSBibG9jayBoZWlnaHQ6IHRvcFRvQmxvY2tPZmZzZXQgKyBoZWlnaHQgKGNvbnRlbnQgaGVpZ2h0KSwgcGFyZW50IGNhbiBhZGQgaXRzIG93biBsb2dpYyB0byBjaGFuZ2UgbGluZSBoZWlnaHRcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmUgZXh0ZW5kcyBDb21wb25lbnR7XG5cdGNvbnN0cnVjdG9yKHtzcGFjZTp7bGVmdCwgcmlnaHQsIGZpbmRJbmxpbmVTZWdtZW50c319KXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5maW5kSW5saW5lU2VnbWVudHM9ZmluZElubGluZVNlZ21lbnRzXG5cdFx0XHR8fCgoKT0+KHtzZWdtZW50czpbe3g6bGVmdCwgd2lkdGg6dGhpcy53aWR0aH1dfSkpOy8vQFRPRE86IHdoeSBpcyB0aGVyZSBubyBmaW5kSW5saW5lU2VnbWVudHMgc29tZSB0aW1lcz8gVEVTVCA/Pz9cblx0XHRjb25zdCBzZWdtZW50cz10aGlzLmZpbmRJbmxpbmVTZWdtZW50cyh0aGlzLnRvcFRvQmxvY2tPZmZzZXQsbGVmdCxyaWdodClcblx0XHR0aGlzLmlubGluZVNlZ21lbnRzPUlubGluZVNlZ21lbnRzLmNyZWF0ZSh7bGVmdCwuLi5zZWdtZW50c30pXG5cdH1cblxuXHRnZXQgc3BhY2UoKXtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zcGFjZVxuXHR9XG5cblx0LyoqIGlubGluZSBib3ggaGVpZ2h0LCBjb25zaWRlcmluZyBwcm9wcy5saW5lSGVpZ2h0LCBjb250ZW50L3RleHQgaGVpZ2h0ICovXG5cdGdldCBoZWlnaHQoKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRMaW5lSGVpZ2h0KClcblx0fVxuXHQvKiptYXggb2YgYWxsIGF0b21zJyBoZWlnaHQgKi9cblx0Z2V0IGNvbnRlbnRIZWlnaHQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChILCB7IHByb3BzOiB7IGhlaWdodCA9IDAgfSB9KSA9PiBNYXRoLm1heChILCBoZWlnaHQpLCAwKTtcbiAgICB9XG5cblx0LyoqbWF4IG9mIHRleHQgYXRvbXMnIGhlaWdodCwgcGVyY2VudGFnZSBsaW5lIGJveCBoZWlnaHQgc2hvdWxkIGJlIGJhc2VkIG9uIHRleHRIZWlnaHQgKi9cbiAgICBnZXQgdGV4dEhlaWdodCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKEgsIHsgcHJvcHM6IHsgaGVpZ2h0ID0gMCwgZGVzY2VudDppc1RleHQgfSB9KSA9PiBNYXRoLm1heChILCBpc1RleHQgPyBoZWlnaHQgOiAwKSwgMCk7XG5cdH1cdFxuXG5cdC8qKiBpbmxpbmUgbGF5b3V0IHdpZHRoICovXG5cdGdldCB3aWR0aCgpe1xuXHRcdGNvbnN0IHtzcGFjZTp7d2lkdGg9MCxsZWZ0PTAsIHJpZ2h0PXdpZHRofX09dGhpcy5wcm9wc1xuXHRcdHJldHVybiByaWdodC1sZWZ0XG5cdH1cblx0XHRcblx0Z2V0IGZpcnN0QXRvbSgpe1xuXHRcdGNvbnN0IGZpcnN0PXRoaXMuaW5saW5lU2VnbWVudHMuaXRlbXMuZmluZChhPT5hLnByb3BzLng9PT11bmRlZmluZWQpXG5cdFx0aWYoZmlyc3QgJiYgZmlyc3QucHJvcHMuYXRvbSlcblx0XHRcdHJldHVybiBmaXJzdC5wcm9wcy5hdG9tXG5cdFx0aWYoZmlyc3QgJiYgZmlyc3QucHJvcHMuZGVzY2VudD09dW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZpcnN0LnByb3BzLmNoaWxkcmVuXG5cdFx0cmV0dXJuIGZpcnN0XG5cdH1cblxuXHRnZXQgbGFzdEF0b20oKXtcblx0XHRjb25zdCBsYXN0PXRoaXMuaW5saW5lU2VnbWVudHMuaXRlbXMuZmluZExhc3QoYT0+YS5wcm9wcy54PT09dW5kZWZpbmVkKVxuXHRcdGlmKGxhc3QgJiYgbGFzdC5wcm9wcy5hdG9tKVxuXHRcdFx0cmV0dXJuIGxhc3QucHJvcHMuYXRvbVxuXHRcdHJldHVybiBsYXN0XG5cdH1cblxuXHRnZXQgYXRvbXMoKXtcblx0XHRyZXR1cm4gdGhpcy5pbmxpbmVTZWdtZW50cy5pdGVtcy5tYXAoYT0+YSAmJiBhLnByb3BzLmF0b20gfHxhKVxuXHR9XG5cblx0Z2V0IGl0ZW1zKCl7XG5cdFx0cmV0dXJuIFsuLi50aGlzLnByb3BzLnBvc2l0aW9uZWQsLi4udGhpcy5pbmxpbmVTZWdtZW50cy5pdGVtc11cblx0fVxuXG5cdC8qKiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBsaW5lIGJsb2NrT2Zmc2V0ICBhbmQgbGluZSBjb250ZW50IHRvcCovXG5cdGdldCB0b3BUb0Jsb2NrT2Zmc2V0KCl7XG5cdFx0Y29uc3Qge3Byb3BzOnt0b3A6bGluZVRvcD0wfSwgaW5saW5lU2VnbWVudHM6e3Byb3BzOnt0b3A6b3Bwb3J0dW5pdHlUb3A9MH19PXtwcm9wczp7fX19PXRoaXNcblx0XHRyZXR1cm4gb3Bwb3J0dW5pdHlUb3ArbGluZVRvcFxuXHR9XG5cblx0aXNFbXB0eSgpe1xuXHRcdHJldHVybiAhISF0aGlzLmZpcnN0QXRvbVxuXHR9XG5cblx0LyoqXG5cdCAqIGFuY2hvciBjb250ZW50IG1heSBhbHJlYXkgYW5jaG9yZWQsIG9yIG1heSBub3Rcblx0ICogaWYgYWxyZWFkeSBhbmNob3JlZCwgY29udGludWUgbmV4dCBhdG9tXG5cdCAqIGlmIG5vdCwgbGV0IHBhcmVudCBibG9jayBsYXlvdXQgaXQgc2luY2UgaXQgcG9zc2libHkgYWZmZWN0IGxheW91dCBzcGFjZSwgYmxvY2sgb2Zmc2V0XG5cdCAqL1xuXHRhcHBlbmRBbmNob3JBdG9tKGF0b20pe1xuXHRcdGNvbnN0ICRhdG9tPW5ldyBSZWFjdFF1ZXJ5KGF0b20pXG5cdFx0Y29uc3QgJGFuY2hvcj0kYXRvbS5maW5kRmlyc3QoJ1tkYXRhLXR5cGU9XCJhbmNob3JcIl0nKVxuXHRcdGNvbnN0IGFuY2hvcklkPSRhbmNob3IuYXR0cihcImRhdGEtY29udGVudFwiKVxuXHRcdGNvbnN0IHBsYWNlaG9sZGVyPVJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdCRhdG9tLnJlcGxhY2UoJGFuY2hvci5nZXQoMCksPEdyb3VwLz4pLmdldCgwKSxcblx0XHRcdHthdG9tLHdpZHRoOjAsXCJkYXRhLWFuY2hvclwiOmFuY2hvcklkfVxuXHRcdClcblx0XHQvL1JlYWN0LmNsb25lRWxlbWVudCgkYW5jaG9yLmdldCgwKSx7YXRvbSx3aWR0aDowLFwiZGF0YS1hbmNob3JcIjphbmNob3JJZH0pXG5cdFx0dGhpcy5pbmxpbmVTZWdtZW50cy5wdXNoKHBsYWNlaG9sZGVyKVxuXHRcdGlmKCF0aGlzLnNwYWNlLmlzQW5jaG9yZWQoYW5jaG9ySWQpKXsvL2xldCBmcmFtZSBhbmNob3IgdGhpcyBhdG9tIGZpcnN0XG5cdFx0XHQvKipcblx0XHRcdCAqIGFuY2hvciBwb3NpdGlvbiBNQVkgbm90IGRlY2lkZWQsIHNvIGl0J3MgTk9UIHN1cmUgaWYgc3BhY2UgY2FuIGhvbGQgYW5jaG9yXG5cdFx0XHQgKiB0byBMZXQgaXQgc2ltcGx5LCBsZXQgYmxvY2svcGFyZW50IGxheW91dCBlbmdpbmUgbGF5b3V0IGl0IGltbWVkaWF0bHkgXG5cdFx0XHQgKi9cblx0XHRcdHRoaXMuYW5jaG9yPWF0b20ucHJvcHMuYW5jaG9yXG5cdFx0XHQvL2NvbW1pdCBmb3IgYW5jaG9yLCB0aGlzIGxpbmUgc2hvdWxkIGJlIHJvbGxiYWNrXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9ZWxzZXtcblx0XHRcdC8vbm90IGZ1bGwsIGNvbnRpbnVlIG5leHQgYXRvbVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBpbmxpbmUgbGF5b3V0IGRvZXNuJ3QgY29uc2lkZXIgYmxvY2sgbGF5b3V0IGNhcGFjaXR5LFxuXHQgKiBsZWF2ZSBpdCB0byBibG9jayBsYXlvdXQgZW5naW5lIGRlY2lkZSBob3cgdG8gaGFuZGxlIG92ZXJmbG93IGJsb2NrIHNpemVcblx0ICovXG5cdGFwcGVuZEF0b20oYXRvbSl7XG5cdFx0aWYoYXRvbS5wcm9wcy5hbmNob3Ipe1xuXHRcdFx0cmV0dXJuIHRoaXMuYXBwZW5kQW5jaG9yQXRvbShhdG9tKVxuXHRcdH1cblx0XHRcblx0XHRjb25zdCBhcHBlbmRlZD0obmV3SGVpZ2h0PT57XG5cdFx0XHRpZigobmV3SGVpZ2h0LXRoaXMuaGVpZ2h0KT4xKXtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIGxpbmUgcmVjdCBjaGFuZ2UgbWF5IGxlYWQgdG8gZGlmZmVyZW50IGlubGluZSBvcHBvcnR1bml0aWVzIGFuZCB0b3Bcblx0XHRcdFx0ICogZ2V0IG9wcG9ydHVuaXRpZXMgYWdhaW5cblx0XHRcdFx0ICovXG5cdFx0XHRcdGNvbnN0IHtzcGFjZTp7bGVmdCxyaWdodH0sdG9wPTB9PXRoaXMucHJvcHNcblx0XHRcdFx0Y29uc3Qgc2VnbWVudHM9dGhpcy5maW5kSW5saW5lU2VnbWVudHModGhpcy50b3BUb0Jsb2NrT2Zmc2V0K25ld0hlaWdodCxsZWZ0LHJpZ2h0KVxuXHRcdFx0XHRpZih0aGlzLmlubGluZVNlZ21lbnRzLnNob3VsZFJlbGF5b3V0KHNlZ21lbnRzKSl7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXlvdXRlZD10aGlzLmlubGluZVNlZ21lbnRzLnJlbGF5b3V0KHNlZ21lbnRzLGF0b20pXG5cdFx0XHRcdFx0aWYocmVsYXlvdXRlZCE9PWZhbHNlKXtcblx0XHRcdFx0XHRcdHRoaXMuaW5saW5lU2VnbWVudHM9cmVsYXlvdXRlZFxuXHRcdFx0XHRcdFx0Ly9uZXcgaW5saW5lIG9wcG9ydHVuaXRpZXMgY2FuIGhvbGQgbGF5b3V0ZWQgYW5kIGF0b20sIHJlcGxhY2UgaW5saW5lU2VnbWVudHMsIGFuZCB0b3Bcblx0XHRcdFx0XHRcdC8vbm90IGZ1bGwsIGNvbnRpbnVlIG5leHQgYXRvbVxuXHRcdFx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9uZXcgaW5saW5lIG9wcG9ydHVuaXRpZXMgY2FuIE5PVCBob2xkIGF0b20sIGNvbW1pdCB0byBibG9jayBsYXlvdXRcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly9zYW1lIGlubGluZSBvcHBvcnR1bml0aWVzLCBjb250aW51ZSBub3JtYWwgaW5saW5lIGxheW91dCBsYXRlciBcblx0XHRcdFx0fVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdC8vbGluZSByZWN0IGRvZXNuJ3QgY2hhbmdlLCBjb250aW51ZSBub3JtYWwgaW5saW5lIGxheW91dCBsYXRlciBcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0cmV0dXJuIHRoaXMuaW5saW5lU2VnbWVudHMucHVzaChhdG9tKVxuXHRcdH0pKHRoaXMuZ2V0TGluZUhlaWdodChhdG9tLnByb3BzLmhlaWdodCkpO1xuXG5cdFx0aWYoYXBwZW5kZWQ9PT1mYWxzZSAmJiB0aGlzLmlzRW1wdHkoKSl7XG5cdFx0XHQvL2VtcHR5IGlubGluZSBsYXlvdXQgaXMgbm90IGFsbG93ZWRcblx0XHRcdHRoaXMuaW5saW5lU2VnbWVudHMucHVzaChhdG9tLHRydWUvKmFwcGVuZCBhdG9tIHdpdGhvdXQgY29uc2lkZXJpbmcgaW5saW5lIHNpemUqLylcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdHJldHVybiBhcHBlbmRlZFxuXHR9XG5cdFxuXHRnZXRMaW5lSGVpZ2h0KGNvbnRlbnRIZWlnaHQ9dGhpcy5jb250ZW50SGVpZ2h0KXtcblx0XHRjb25zdCB7bGluZUhlaWdodH09dGhpcy5wcm9wc1xuXHRcdGlmKHR5cGVvZihsaW5lSGVpZ2h0KT09J3N0cmluZycpe1xuXHRcdFx0cmV0dXJuIGNvbnRlbnRIZWlnaHQrKHR5cGVvZihsaW5lSGVpZ2h0KT09J3N0cmluZycgPyB0aGlzLnRleHRIZWlnaHQqKHBhcnNlSW50KGxpbmVIZWlnaHQpLTEwMCkvMTAwLjA6IDApXG5cdFx0fWVsc2UgaWYodHlwZW9mKGxpbmVIZWlnaHQpPT1cIm51bWJlclwiKXtcblx0XHRcdHJldHVybiBsaW5lSGVpZ2h0XG5cdFx0fVxuXHRcdHJldHVybiBjb250ZW50SGVpZ2h0XG4gICAgICAgIFxuXHR9XG5cblx0ZnJlZXplKCl7XG5cdFx0Y29uc3Qge3Byb3BzOntjaGlsZHJlbn19PXRoaXMuaW5saW5lU2VnbWVudHMucmVuZGVyKClcblx0XHR0aGlzLmNoaWxkcmVuPVsuLi50aGlzLnByb3BzLnBvc2l0aW9uZWQsLi4uY2hpbGRyZW5dXG5cdFx0cmV0dXJuIHRoaXNcblx0fVxuXG5cdHJlbmRlcihiTGFzdExpbmUpe1xuXHRcdGNvbnN0IHtwcm9wczp7YWxpZ259fT10aGlzXG5cdFx0Y29uc3Qgc3Rvcnk9bmV3IFN0b3J5KHtcblx0XHRcdGNoaWxkcmVuOnRoaXMuY2hpbGRyZW4sIFxuXHRcdFx0d2lkdGg6dGhpcy53aWR0aCxcblx0XHRcdGFsaWduOmJMYXN0TGluZSAmJiBbXCJqdXN0aWZ5XCIsXCJib3RoXCJdLmluY2x1ZGVzKGFsaWduKSA/IHVuZGVmaW5lZCA6IGFsaWduLFxuXHRcdH0pXG5cdFx0cmV0dXJuIHN0b3J5LnJlbmRlcigpXG5cdH1cblxuXHRpc0ZpdFRvKHNwYWNlKXtcblx0XHRpZighc3BhY2UpXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRpZih0aGlzLnNwYWNlLndpZHRoIT1zcGFjZS53aWR0aClcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGNvbnN0IHtzZWdtZW50c309c3BhY2UuZmluZElubGluZVNlZ21lbnRzKHRoaXMudG9wVG9CbG9ja09mZnNldCt0aGlzLmhlaWdodCxzcGFjZS5sZWZ0LHNwYWNlLnJpZ2h0KVxuXG5cdFx0cmV0dXJuIHRoaXMuaW5saW5lU2VnbWVudHMuc2VnbWVudHMubGVuZ3RoPT1zZWdtZW50cy5sZW5ndGggJiZcblx0XHRcdCEhIXRoaXMuaW5saW5lU2VnbWVudHMuc2VnbWVudHMuZmluZCgoe3Byb3BzOnt4LHdpZHRofX0saSxfLCQsYj1zZWdtZW50c1tpXSk9PmIueCE9eCAmJiBiLndpZHRoIT13aWR0aClcblx0fVxuXG5cdGNsb25lNFNwYWNlKHNwYWNlKXtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7Li4udGhpcy5wcm9wcyxzcGFjZX0pLHtpbmxpbmVTZWdtZW50czp0aGlzLmlubGluZVNlZ21lbnRzLGNoaWxkcmVuOnRoaXMuY2hpbGRyZW59KVxuXHR9XG59XG4iLCJpbXBvcnQgSGFzQ2hpbGQgZnJvbSBcIi4vaGFzQ2hpbGRcIlxuaW1wb3J0IEhhc1BhcmVudEFuZENoaWxkIGZyb20gXCIuL2hhc1BhcmVudEFuZENoaWxkXCJcbmltcG9ydCBOb0NoaWxkIGZyb20gXCIuL25vQ2hpbGRcIlxuXG5pbXBvcnQgUmVjb21wb3NhYmxlIGZyb20gXCIuL3JlY29tcG9zYWJsZVwiXG5pbXBvcnQgTG9jYXRhYmxlIGZyb20gXCIuL2xvY2F0YWJsZVwiXG5pbXBvcnQgU3RvcHBhYmxlIGZyb20gXCIuL3N0b3BwYWJsZVwiXG5pbXBvcnQgQ29udGludWFibGUgZnJvbSBcIi4vY29udGludWFibGVcIlxuaW1wb3J0IENvbXBvc2VkQWxsVHJpZ2dlciBmcm9tIFwiLi9jb21wb3NlZC1hbGwtdHJpZ2dlclwiXG5cbmltcG9ydCBMYXlvdXQgZnJvbSBcIi4vbGF5b3V0XCJcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcG9zYWJsZShBLHtsb2NhdGFibGUsc3RvcHBhYmxlLGNvbnRpbnVhYmxlLHJlY29tcG9zYWJsZX0pe1xuXHRpZihsb2NhdGFibGUgJiYgIUEuYWxyZWFkeShcImxvY2F0YWJsZVwiKSl7XG5cdFx0QT1Mb2NhdGFibGUoQSxsb2NhdGFibGUpXG5cdH1cblxuXHRpZihyZWNvbXBvc2FibGUgJiYgIUEuYWxyZWFkeShcInJlY29tcG9zYWJsZVwiKSl7XG5cdFx0QT1SZWNvbXBvc2FibGUoQSxyZWNvbXBvc2FibGUpXG5cdH1cblxuXHRpZihzdG9wcGFibGUgJiYgIUEuYWxyZWFkeShcInN0b3BwYWJsZVwiKSl7XG4gICAgICAgIEE9U3RvcHBhYmxlKEEsc3RvcHBhYmxlKVxuICAgIH1cblxuXHRpZihjb250aW51YWJsZSAmJiAhQS5hbHJlYWR5KFwiY29udGludWFibGVcIikpe1xuICAgICAgICBBPUNvbnRpbnVhYmxlKEEsQ29udGludWFibGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIEFcbn1cblxuXG4vKipcbiAqICBpdCdzIGEgdmVyeSBjb21wbGljYXRlZCBqb2IsIHNvIHdlIG5lZWQgYSB2ZXJ5IHNpbXBsZSBkZXNpZ24sIG9uZSBzZW50ZW5jZSBkZXNjcmliZWQgc29sdXRpb24uIG9wdGlvbnM6XG4gKiAgMS4gcmVtb3ZlIGFsbCBjb21wb3NlZCwgYW5kIHJlLWNvbXBvc2UgYWxsXG4gKiAgXHQtIG5lZWQgZmluZCBhIHRpbWUgdG8gcmVjb21wb3NlXG4gKiAgXHQtIGxvZ2ljIGlzIG1vc3Qgc2ltcGxlXG4gKiAgXHQtIHBlcmZvcm1hbmNlIGlzIG1vc3QgYmFkXG4gKlxuICogIDIuIHJlbW92ZSBhbGwgY29tcG9zZWQgZnJvbSB0aGlzIGNvbnRlbnQsIGFuZCByZS1jb21wb3NlIHJlbW92YWxzXG4gKiAgXHQtIE5lZWQgbG9jYXRlIGNvbXBvc2VkIG9mIHRoaXMgY29udGVudCBpbiBwYWdlXG4gKiAgXHQtIE5lZWQgZmluZCBhIHRpbWUgdG8gcmVjb21wb3NlXG4gKiAgXHRcdD4gY29tcG9uZW50RGlkVXBkYXRlXG4gKiAgXHRcdFx0LiBhbnkgc3RhdGUgdXBkYXRlLFxuICogIFx0XHRcdC4gYW5kIGNhcmVmdWxseSB0dW5lZCBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KVxuICogIFx0LSBwZXJmb3JtYW5jZSBpcyBiZXR0ZXIgdGhhbiAjMVxuICpcbiAqICAzLiByZWNvbXBvc2UgdGhpcyBjb250ZW50LCBhbmQgY2hlY2sgaWYgbmV3IGNvbXBvc2VkIGZpdHMgbGFzdCBjb21wb3NlZCBzcGFjZSAoaGl0IHJhdGlvIGlzIGxvdylcbiAqICBcdC0gWWVzOiBqdXN0IHJlcGxhY2VcbiAqICBcdC0gTm86ICMxLCBvciAjMlxuICogIFx0LSBhbmQgdGhlbiBsb29wIHdpdGggYWxsIGZvbGxvd2luZyBjb250ZW50IHdpdGggdGhlIHNhbWUgbG9naWNcbiAqXG4gKiAgXHQzLmE6IHJlY29tcG9zZSB0aGlzIGNvbnRlbnQgbGluZSBieSBsaW5lIC4uLiwgbXVjaCBsb2dpY3MgaGVyZVxuICovXG5cbmZ1bmN0aW9uIGVkaXRhYmxlKEEsIGVuYWJsZXM9e30pe1xuXHRyZXR1cm4gY29tcG9zYWJsZShBLHtsb2NhdGFibGU6dHJ1ZSxyZWNvbXBvc2FibGU6dHJ1ZSwuLi5lbmFibGVzfSlcbn1cblxuY29uc3QgZW5hYmxpZnk9ZnVuYz0+KHRhcmdldHMsIGV4Y2x1ZGVzKT0+T2JqZWN0LmtleXModGFyZ2V0cylcblx0LnJlZHVjZSgoZW5hYmxlZCwgayk9Pntcblx0XHRpZighZW5hYmxlZFtrXSl7XG5cdFx0XHRlbmFibGVkW2tdPWZ1bmModGFyZ2V0c1trXSlcblx0XHR9XG5cdFx0cmV0dXJuIGVuYWJsZWRcblx0fSx7Li4uZXhjbHVkZXN9KTtcblxuW0hhc0NoaWxkLCBIYXNQYXJlbnRBbmRDaGlsZCwgTm9DaGlsZCxSZWNvbXBvc2FibGUsIExvY2F0YWJsZSxTdG9wcGFibGUsQ29udGludWFibGUsZWRpdGFibGVdXG5cdC5mb3JFYWNoKGE9PmEuZW5hYmxlPWVuYWJsaWZ5KGEpKVxuXG5leHBvcnQge2VuYWJsaWZ5LCBlZGl0YWJsZSxcblx0TGF5b3V0LFxuXHRIYXNDaGlsZCwgSGFzUGFyZW50QW5kQ2hpbGQsIE5vQ2hpbGQsIENvbXBvc2VkQWxsVHJpZ2dlcixcblx0UmVjb21wb3NhYmxlLExvY2F0YWJsZSxTdG9wcGFibGUsQ29udGludWFibGVcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCB7TGF5b3V0LCBIYXNQYXJlbnRBbmRDaGlsZCwgZWRpdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmNsYXNzIEZyYW1lIGV4dGVuZHMgTGF5b3V0LkJsb2Nre1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9SGFzUGFyZW50QW5kQ2hpbGQoZG9tLkZyYW1lKS5kaXNwbGF5TmFtZVxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtcblx0XHRcdHV1aWQ6e1xuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRjb25zdCB7cHJvcHM6e2ksaWR9fT10aGlzXG5cdFx0XHRcdFx0cmV0dXJuIGAke2lkfSR7aSE9dW5kZWZpbmVkID8gXCJfXCIraSA6IFwiXCJ9YFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGdldCBpc0ZyYW1lKCl7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGdldFNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMuX19nZXRTcGFjZSh0aGlzLnByb3BzKVxuXHR9XG5cblx0X19nZXRTcGFjZT1tZW1vaXplKHByb3BzPT57XG5cdFx0Y29uc3Qgc3BhY2U9c3VwZXIuZ2V0U3BhY2UoKVxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbWFyZ2luOntsZWZ0PTAscmlnaHQ9MCx0b3A9MCxib3R0b209MH09e30seD0wLHk9MH09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IGVkZ2VzPXtcblx0XHRcdFt0aGlzLmdldENvbXBvc2VUeXBlKCldOntsZWZ0OngsdG9wOnkscmlnaHQ6eCt3aWR0aCxib3R0b206eStoZWlnaHR9LFxuXHRcdFx0bWFyZ2luOntsZWZ0OngrbGVmdCx0b3A6eSt0b3AscmlnaHQ6d2lkdGgreC1yaWdodCxib3R0b206eStoZWlnaHQtYm90dG9tfVxuXHRcdH1cblx0XHRpZih0aGlzLmNvbHMpXG5cdFx0XHRyZXR1cm4gTGF5b3V0LkNvbnN0cmFpbnRTcGFjZS5jcmVhdGUoc3BhY2UpLmNsb25lKHtlZGdlc30pXG5cblx0XHRyZXR1cm4gTGF5b3V0LkNvbnN0cmFpbnRTcGFjZS5jcmVhdGUoc3BhY2UpLmNsb25lKHtcblx0XHRcdGxlZnQ6eCtsZWZ0LFxuXHRcdFx0cmlnaHQ6eCt3aWR0aC1yaWdodCxcblx0XHRcdGJsb2NrT2Zmc2V0OnkrdG9wLFxuXHRcdFx0aGVpZ2h0OmhlaWdodC10b3AtYm90dG9tLFxuXHRcdFx0ZWRnZXNcblx0XHR9KVxuXHR9KVxuXG5cdGRlZmluZVByb3BlcnRpZXMoKXtcblx0XHRzdXBlci5kZWZpbmVQcm9wZXJ0aWVzKClcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtcblx0XHRcdGNvbXBvc2VkSGVpZ2h0Ontcblx0XHRcdFx0ZW51bWVyYWJsZTp0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6dHJ1ZSxcblx0XHRcdFx0Z2V0KCl7XG5cdFx0XHRcdFx0aWYodGhpcy5jb2xzKVxuXHRcdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuY29sdW1ucy5tYXAoYT0+YS5ibG9ja09mZnNldCkpXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYmxvY2tPZmZzZXRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblx0XG5cdC8qKlxuXHQgKiBhbHdheXMgdXNlIHNwYWNlIHRvIGxvY2F0ZSBzaW5jZSBsYXlvdXQgdXNpbmcgaXQgXG5cdCAqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcblx0XHRjb25zdCBhbGlnblk9Y29udGVudEhlaWdodD0+e1xuXHRcdFx0Y29uc3Qge2hlaWdodD1jb250ZW50SGVpZ2h0LCB2ZXJ0QWxpZ259PXRoaXMucHJvcHNcblx0XHRcdGlmKGNvbnRlbnRIZWlnaHQ9PXVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHRcdFx0c3dpdGNoKHZlcnRBbGlnbil7XG5cdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRyZXR1cm4gaGVpZ2h0LWNvbnRlbnRIZWlnaHRcblx0XHRcdFx0Y2FzZSBcImNlbnRlclwiOlxuXHRcdFx0XHRjYXNlIFwibWlkZGxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIChoZWlnaHQtY29udGVudEhlaWdodCkvMlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiAwXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBjb250ZW50PXRoaXMucG9zaXRpb25MaW5lcyh0aGlzLmxpbmVzKVxuXHRcdGNvbnN0IGNvbnRlbnRIZWlnaHQ9Y29udGVudC5wcm9wcy5oZWlnaHRcblx0XHRjb250ZW50PVJlYWN0LmNsb25lRWxlbWVudChjb250ZW50LHt5OmFsaWduWShjb250ZW50SGVpZ2h0KX0pXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodD1jb250ZW50SGVpZ2h0LG1hcmdpbjp7bGVmdD0wLHRvcD0wfT17fSwgeCx5LHosbmFtZWR9PXRoaXMucHJvcHNcblx0XHRpZighdGhpcy5jb2xzICYmIChsZWZ0fHx0b3ApKXtcblx0XHRcdGNvbnRlbnQ9KDxHcm91cCB4PXtsZWZ0fSB5PXt0b3B9Pntjb250ZW50fTwvR3JvdXA+KVxuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIHsuLi57d2lkdGgsaGVpZ2h0LHgseSx6LG5hbWVkLCBjbGFzc05hbWU6XCJmcmFtZVwiLCBcImRhdGEtZnJhbWVcIjp0aGlzLnV1aWR9fT5cblx0XHRcdFx0e1tcblx0XHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoY29udGVudCx7a2V5OlwiY29udGVudFwifSksXG5cdFx0XHRcdFx0Li4udGhpcy5hbmNob3JzLm1hcCgoYSxpKT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleTppfSkpLFxuXHRcdFx0XHRdLmZpbHRlcihhPT4hIWEpLnNvcnQoKHtwcm9wczp7ejp6MT0wfX0se3Byb3BzOnt6OnoyPTB9fSwpPT56MS16Mil9XG5cdFx0XHQ8L0dyb3VwPlxuXHRcdClcblx0fVxuXG5cdGxpbmVYWShsaW5lKXtcblx0XHRpZighdGhpcy5jb2xzKXtcblx0XHRcdGNvbnN0IHttYXJnaW46e3RvcD0wLGxlZnQ9MH09e319PXRoaXMucHJvcHNcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6bGVmdCxcblx0XHRcdFx0eTp0aGlzLmxpbmVzLnNsaWNlKDAsdGhpcy5saW5lcy5pbmRleE9mKGxpbmUpKS5yZWR1Y2UoKFkse3Byb3BzOntoZWlnaHQ9MH19KT0+WStoZWlnaHQsdG9wKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB7eTp5MD0wLHg9MCxsaW5lc309dGhpcy5jb2x1bW5zLmZpbmQoYT0+YS5saW5lcy5pbmNsdWRlcyhsaW5lKSl8fHRoaXMuY3VycmVudENvbHVtblxuXHRcdHJldHVybiB7XG5cdFx0XHR4LFxuXHRcdFx0eTpsaW5lcy5zbGljZSgwLGxpbmVzLmluZGV4T2YobGluZSkpLnJlZHVjZSgoWSx7cHJvcHM6e2hlaWdodD0wfX0pPT5ZK2hlaWdodCx5MClcblx0XHR9XG5cdH1cblxuXHRjb2x1bW5JbmRleE9mKGxpbmVJbmRleCl7XG5cdFx0aWYoIXRoaXMuY29scylcblx0XHRcdHJldHVybiAwXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucy5maW5kSW5kZXgoYT0+YS5saW5lcy5zdGFydEluZGV4Pj1saW5lSW5kZXgpXG5cdH1cblxuXHRsYXlvdXRPZigpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsbWFyZ2lufT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIHt3aWR0aCxoZWlnaHQsbWFyZ2luLGNvbHM6dGhpcy5jb2xzfVxuXHR9XG5cblx0Y2xvbmUocHJvcHM9e30pe1xuXHRcdGNvbnN0IHtjb21wdXRlZH09dGhpc1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHsuLi50aGlzLnByb3BzLCAuLi5wcm9wc30sdGhpcy5jb250ZXh0KSx7Y29tcHV0ZWR9KVxuXHR9XG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG5cdFx0Y29uc3Qge2lzVG9wfT10aGlzLnByb3BzXG5cdFx0aWYoIWlzVG9wKXtcblx0XHRcdHN1cGVyLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0XHRyZXR1cm4gXG5cdFx0fVxuXHRcdFxuICAgICAgICB0cnl7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudD0oKT0+dGhpc1xuICAgICAgICAgICAgc3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGZyYW1lIHdvdWxkIGZpbmFsbHkgYXBwZW5kIGNvbXBvc2VkIHRvIHBhcmVudCBvbmNlLCBcbiAqIHNvIGxhc3RDb21wb3NlZCBzaG91bGQgaGF2ZSBvbmx5IG9uZSBpdGVtXG4gKiBGcmFtZSBjYWNoZSBrZXkgc2hvdWxkIGJhc2VkIG9uIFxuICogMS4gc3BhY2Uge3dpZHRoLGhlaWdodCwgd3JhcHBlZXMsY29sc306IHdpZHRoIG9yIGNvbHNbKl0ud2lkdGggaXMgY2hhbmdlZCwgdGhlIGNhY2hlIHVzdXNhbGx5IGNhbiBOT1QgYmUgdXNlZFxuICogMi4gY29udGVudDogc3BhY2UgaXMgbm90IGNoYW5nZSwgY29udGVudCBjYW4gcmVsYXlvdXQgZnJvbSBjaGFuZ2VkIGNvbnRlbnRcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZUZyYW1lIGV4dGVuZHMgZWRpdGFibGUoRnJhbWUse3N0b3BwYWJsZTp0cnVlLCBjb250aW51YWJsZTp0cnVlfSl7XG5cdF9fX2NyZWF0ZUNvbXBvc2VkMlBhcmVudD1tZW1vaXplKGNvbXBvc2VkVVVJRD0+c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdHJldHVybiB0aGlzLl9fX2NyZWF0ZUNvbXBvc2VkMlBhcmVudCh0aGlzLmNvbXB1dGVkLmNvbXBvc2VkVVVJRHx8dGhpcy5jb250ZXh0LnBhcmVudD8uY29tcHV0ZWQ/LmNvbXBvc2VkVVVJRClcblx0fVxuXHRcblx0LyoqXG5cdCAqIEBjb250aW51YWJsZVxuXHQgKiBtdWx0aXBsZSBjb2xzIG1vZGVsIHNob3VsZCBjaGVjayBvbiBsYXN0IGNvbHVtblxuXHQgKiBAcGFyYW0geyp9IGEgXG5cdCAqL1xuXHRzaG91bGRDb250aW51ZUNvbXBvc2UoKXtcblx0XHRpZighdGhpcy5jb2xzIHx8IC8vbm9uLWNvbHVtbiBtb2RlbFxuXHRcdFx0dGhpcy5jb2x1bW5zLmxlbmd0aD09dGhpcy5jb2xzLmxlbmd0aCl7Ly9sYXN0IGNvbHVtblxuXHRcdFx0aWYoIXRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2UoLi4uYXJndW1lbnRzKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZih0aGlzLmF2YWlsYWJsZUJsb2NrU2l6ZTw9MClcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvL25vbi1sYXN0IGNvbHVtbiBhbHdheXMgY29udGludWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0LyoqXG5cdCAqIGxhc3RDb21wb3NlZCBpcyB1c2VsZXNzIGZvciBmcmFtZSwgc2luY2UgaXQgb25seSBjb21taXQgb25jZVxuXHQgKiB0byBzeW5jIGxpbmVzLCBhbmNob3JzLCBcblx0ICovXG4gICAgY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2lkLC4uLm5leHRQcm9wc30pe1xuXHRcdC8vKipyZW1vdmUgaWQgdG8gYXZvaWQgcmVwbGFjZSB0aGlzIHJlYWwgY29tcG9zZXIgKi9cblx0XHRjb25zdCBzcGFjZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihuZXh0UHJvcHMsdGhpcy5jb250ZXh0KS5nZXRTcGFjZSgpXG5cdFx0XG5cdFx0Y29uc3QgaXNJbmxpbmVTaXplQ2hhbmdlZD10aGlzLmdldFNwYWNlKCkuaXNJbmxpbmVTaXplRGlmZmVyZW50KHNwYWNlKVxuXHRcdGlmKGlzSW5saW5lU2l6ZUNoYW5nZWQpe1xuXHRcdFx0Ly9pZiBpbmxpbmUgc2l6ZSBjaGFuZ2UsIGFsbCBoYXZlIHRvIGJlIHJlY29tcG9zZWRcblx0XHRcdHRoaXMuY29tcHV0ZWQuYW5jaG9ycz1bXVxuXHRcdFx0cmV0dXJuIHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0XHR9XG5cblx0XHQvL2xhc3QgY29tcG9zZWQgaXMgc3RpbGwgdmFsaWQgaWYgYmxvY2sgc2l6ZSBjaGFuZ2UgXG5cdFx0Ly9AVE9ETzogd3JhcHBlZXMgY2hhbmdlLCBidXQgb3VyIHdyYXBwZWVzIGFyZSBmdW5jdGlvbnMsIGhvdyB0byBjb21wYXJlPz8/XG5cblx0XHRjb25zdCBjaGFuZ2VkPW5leHRQcm9wcy5oYXNoIT10aGlzLnByb3BzLmhhc2hcblx0XHRpZihjaGFuZ2VkKXtcblx0XHRcdHRoaXMuX2NhbmNlbENoYW5nZWRQYXJ0KC4uLmFyZ3VtZW50cylcblx0XHR9XG5cdFx0dGhpcy5fY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCguLi5hcmd1bWVudHMpXG5cdH1cblxuXHRfY2FuY2VsQ2hhbmdlZFBhcnQobmV4dCl7XG5cdFx0Y29uc3QgY2hpbGRyZW5OZWVkUmVjb21wb3NlPXRoaXMuY2hpbGRyZW5OZWVkUmVjb21wb3NlKG5leHQsdGhpcy5wcm9wcylcblx0XHRjb25zdCBmaXJzdExpbmVOZWVkUmVjb21wb3NlPXRoaXMubGluZXMuZmluZEluZGV4KGE9PmNoaWxkcmVuTmVlZFJlY29tcG9zZS5pbmNsdWRlcyh0aGlzLmNoaWxkSWRPZihhKSkpXG5cdFx0dGhpcy5yZW1vdmVGcm9tKGZpcnN0TGluZU5lZWRSZWNvbXBvc2UpXG5cdH1cblx0XG5cdF9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG4gICAgICAgY29uc3QgbGFzdExpbmVPZkFsbENoaWxkcmVuQ29tcG9zZWQ9dGhpcy5saW5lcy5maW5kTGFzdEluZGV4KChhLGksXywkLGlkPXRoaXMuY2hpbGRJZE9mKGEpKT0+e1xuXHRcdFx0Y29uc3QgY29tcG9zZXI9dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGlkKVxuXHRcdFx0cmV0dXJuIGNvbXBvc2VyICYmIGNvbXBvc2VyLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0fSlcblx0XHR0aGlzLnJlbW92ZUZyb20obGFzdExpbmVPZkFsbENoaWxkcmVuQ29tcG9zZWQrMSlcblx0fVxuXG4gICAgYXBwZW5kTGFzdENvbXBvc2VkKCl7XG5cdFx0Ly9sYXN0Q29tcG9zZWQgaXMgdGhlIGZyYW1lIG9yIHRoZSByZXN1bHQgb2YgY3JlYXRlQ29tcG9zZWQyUGFyZW50LCBzbyBpdCBhbHdheXMgc2hvdWxkIGJlIHJlbW92ZWRcblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZD1bXVxuXHRcdGlmKCF0aGlzLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcblx0XHRcdGlmKHRoaXMubGFzdExpbmUpe1xuXHRcdFx0XHRjb25zdCBsYXN0SWQ9dGhpcy5sYXN0TGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLmZpbmRJbmRleChhPT5hICYmIGEucHJvcHMuaWQ9PWxhc3RJZClcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHQvL3RoaXMgZXZlbnQgc2hvdWxkIGJlIGNhbGxlZCB0byBhcHBlbmQgdG8gcGFyZW50XG5cdFx0dGhpcy5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRyZW1vdmVGcm9tKGxpbmVJbmRleCl7XG5cdFx0Y29uc3QgcmVtb3ZlZD1zdXBlci5yb2xsYmFja0xpbmVzKHRoaXMubGluZXMubGVuZ3RoLWxpbmVJbmRleClcblx0XHRpZihyZW1vdmVkLmxlbmd0aD4wKXtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkXG5cdFx0fVxuXHRcdHJldHVybiByZW1vdmVkXG5cdH1cbn1cbiIsIlxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcblxuY2xhc3MgVXNlIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1cInRlbXBsYXRlLnVzZVwiXG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGdldENvbXBvc2VkVGVtcGxhdGU6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH1cbiAgICBzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuICAgICAgICBlZGl0YWJsZTpQcm9wVHlwZXMuYW55XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIHJldHVybiB7ZWRpdGFibGU6ZmFsc2V9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0OntnZXRDb21wb3NlZFRlbXBsYXRlfSxwcm9wczp7eGhyZWZ9fT10aGlzXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlPWdldENvbXBvc2VkVGVtcGxhdGUoeGhyZWYpXG4gICAgICAgIGlmKCF0ZW1wbGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIGNvbnN0IHtwcm9wczp7bWFzdGVyfX09dGVtcGxhdGVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7bWFzdGVyICYmIDxVc2UgeGhyZWY9e21hc3Rlcn0vPn1cbiAgICAgICAgICAgICAgICB7dGVtcGxhdGUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEZyYW1le1xuICAgIHN0YXRpYyBVc2U9VXNlXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG4gICAgICAgIC4uLkZyYW1lLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgaXNUb3A6dHJ1ZSxcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGlzVGVtcGxhdGUoYSl7XG4gICAgICAgIHJldHVybiBhPy5pc1RlbXBsYXRlPy4oKVxuICAgIH1cblxuICAgIGlzVGVtcGxhdGUoKXtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uL2dyb3VwXCJcblxuLyoqXG4gKiBkaXNwbGF5IGNoaWxkcmVuIHRvIG1vc3QgdG9wXG4gKiA+IHdoZW4geCwgeSBzcGVjaWZpZWQsIHRvcCBpcyBhdCBhYnNvbHV0ZSBwb3NpdGlvbiwgb3RoZXJ3aXNlIGl0IG5lZWQgZ2V0IHBvc2l0aW9uIGFzIGZvbGxvd2luZ1xuICogMS4gZ2V0IGl0c2VsZiBwb3NpdGlvbiB3aGVuIG1vdW50aW5nXG4gKiAyLiBjcmVhdGUgcG9ydGFsIGF0IHRoZSBwb3N0aW9pblxuICogXG4gKiBAVE9ETzogd2hhdCBpZiBwcm9wcy54L3kgY2hhbmdlZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3AgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe3gseX0sc3RhdGUpe1xuXHRcdHJldHVybiB7eCx5LC4uLnN0YXRlfVxuXHR9XG5cblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHR9XG5cbiAgICByZW5kZXIoKXtcblx0XHRjb25zdCB7c3RhdGU6e3g9MCwgeT0wLCBzdmd9LCBwcm9wczp7fX09dGhpc1xuXHRcdGNvbnN0IGlnbm9yZUV2ZW50PWU9PmUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRjb25zdCBjb250ZW50PShcblx0XHRcdDxHcm91cCBpbm5lclJlZj17YT0+dGhpcy5lbD1hfSB4PXt4fSB5PXt5fSBcblx0XHRcdFx0b25Nb3VzZURvd249e2lnbm9yZUV2ZW50fVxuXHRcdFx0XHRvbk1vdXNlTW92ZT17aWdub3JlRXZlbnR9XG5cdFx0XHRcdG9uTW91c2VVcD17aWdub3JlRXZlbnR9XG5cdFx0XHRcdD5cbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvR3JvdXA+XG5cdFx0KVxuXG5cdFx0cmV0dXJuIHN2ZyA/IGNyZWF0ZVBvcnRhbChjb250ZW50LCAgc3ZnKSA6IGNvbnRlbnRcbiAgICB9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKXtcblx0XHRjb25zdCB7c3RhdGU6e3gseSwgdXNlUmVsYXRpdmVQb3NpdGlvbj14PT11bmRlZmluZWQgJiYgeT09dW5kZWZpbmVkfSxlbH09dGhpc1xuXHRcdGNvbnN0IHN2Zz1lbC52aWV3cG9ydEVsZW1lbnRcblx0XHRpZighdXNlUmVsYXRpdmVQb3NpdGlvbilcblx0XHRcdHJldHVybiB0aGlzLnNldFN0YXRlKHtzdmd9KVxuXHRcdFxuXHRcdGxldCBvPWVsLnZpZXdwb3J0RWxlbWVudC5jcmVhdGVTVkdQb2ludCgpXG5cdFx0by54PTAsby55PTBcblx0XHRvPW8ubWF0cml4VHJhbnNmb3JtKGVsLmdldENUTSgpKVxuXHRcdHRoaXMuc2V0U3RhdGUoe3N2ZywgeDpvLngsIHk6by55fSlcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi90b3BcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGF5IGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7Y2hpbGRyZW4sLi4ucHJvcHN9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPFRvcCB4PXswfSB5PXswfT5cblx0XHRcdFx0XHQ8cmVjdCB7Li4ue3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIixmaWxsOlwidHJhbnNwYXJlbnRcIn19IHsuLi5wcm9wc30vPlxuXHRcdFx0XHQ8L1RvcD5cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgIClcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IFRvcCBmcm9tIFwiLi90b3BcIlxuaW1wb3J0IE92ZXJsYXkgZnJvbSBcIi4vb3ZlcmxheVwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uL2dyb3VwXCJcblxuLyoqXG4gKiAxLiBhbmNob3IgbW92ZTogbW92ZSB0byBhcmJpdGFyeSB4LHksIHdoaWNoIGNhbiBiZSBjb21wb3NpbmcgZHVyaW5nIG1vdmluZywgd2l0aG91dCBwbGFjZWhvbGRlclxuICogMi4gZmxvdyBtb3ZlOiBtb3ZlIHRvIGEgZmxvd2FibGUgcG9zaXRpb24sIHdoaWNoIGNhbiB1c2UgcGxhY2Vob2xkZXIgdG8gaWRlbnRpZnkgdGhlIGRlc3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW92YWJsZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0YXJvdW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRvbk1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGlzQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcblx0fVxuXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdHBvc2l0aW9uaW5nOiBQcm9wVHlwZXMub2JqZWN0XG5cdH1cblxuXHRzdGF0ZT17bW92aW5nOmZhbHNlfVxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7bW92aW5nLCB4LCB5fT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge2NoaWxkcmVuLCBpc0FuY2hvcn09dGhpcy5wcm9wc1xuXHRcdGlmKCFtb3Zpbmcpe1xuXHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbix7XG5cdFx0XHRcdG9uTW91c2VEb3duOmU9Pntcblx0XHRcdFx0XHRpZihlLmJ1dHRvbnMmMHgxKXtcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGNvbnN0IHt4LHl9PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0OmUuY2xpZW50WCx0b3A6ZS5jbGllbnRZfSlcblx0XHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe21vdmluZzp0cnVlLHgseX0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PE92ZXJsYXkgY3Vyc29yPVwiZGVmYXVsdFwiXG5cdFx0XHRcdFx0b25Nb3VzZVVwPXtlPT50aGlzLm9uRW5kTW92ZShlKX1cblx0XHRcdFx0XHRvbk1vdXNlTW92ZT17ZT0+dGhpcy5tb3ZpbmcoZSl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdHshaXNBbmNob3IgJiYgPE1vdmluZ1BsYWNlaG9sZGVyIHsuLi57eCx5fX0vPn1cblx0XHRcdFx0PC9PdmVybGF5PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdFx0XHRcblx0fVxuXG4gICAgb25FbmRNb3ZlKGUpe1xuXHRcdGlmKCF0aGlzLnN0YXRlLm1vdmluZylcblx0XHRcdHJldHVyblxuXHRcdGNvbnN0IHtjbGllbnRYOmxlZnQsIGNsaWVudFk6dG9wfT1lXG5cdFx0dGhpcy5zZXRTdGF0ZSh7bW92aW5nOmZhbHNlfSwoKT0+e1xuXHRcdFx0Y29uc3Qge3Byb3BzOntpc0FuY2hvcixvbk1vdmV9LCBzdGF0ZTp7eCx5fX09dGhpc1xuXHRcdFx0aWYoaXNBbmNob3Ipe1xuXHRcdFx0XHRjb25zdCBkZXN0PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0LCB0b3B9KVxuXHRcdFx0XHRvbk1vdmUoe2Rlc3Q6e2R4OmRlc3QueC14LCBkeTpkZXN0LnkteX19KVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdG9uTW92ZSh7ZGVzdDp0aGlzLmNvbnRleHQucG9zaXRpb25pbmcuYXJvdW5kKGxlZnQsdG9wKX0pXG5cdFx0XHR9XG5cdFx0fSlcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuXG4gICAgbW92aW5nKGUpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7bW92aW5nLHgseX0scHJvcHM6e29uTW92ZSxpc0FuY2hvcn19PXRoaXNcblx0XHRpZihtb3Zpbmcpe1xuXHRcdFx0Y29uc3Qge2NsaWVudFg6bGVmdCwgY2xpZW50WTp0b3B9PWVcblx0XHRcdGlmKGlzQW5jaG9yKXtcblx0XHRcdFx0Y29uc3QgZGVzdD10aGlzLmNvbnRleHQucG9zaXRpb25pbmcuYXNDYW52YXNQb2ludCh7bGVmdCwgdG9wfSlcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7Li4uZGVzdH0sKCk9Pntcblx0XHRcdFx0XHRvbk1vdmUoe2Rlc3Q6e2R4OmRlc3QueC14LCBkeTpkZXN0LnkteX19KVxuXHRcdFx0XHR9KVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdGNvbnN0IHtpZCxhdH09dGhpcy5jb250ZXh0LnBvc2l0aW9uaW5nLmFyb3VuZChsZWZ0LHRvcClcblx0XHRcdFx0aWYoaWQpe1xuXHRcdFx0XHRcdGNvbnN0IHt4LHl9PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5wb3NpdGlvbihpZCxhdClcblx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKHt4LHksaWQsYXR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG59XG5cbmNvbnN0IE1vdmluZ1BsYWNlaG9sZGVyPSh7eD0wLHk9MH0pPT4oXG5cdDxUb3A+XG5cdFx0PEdyb3VwICB4PXt4fSB5PXt5fT5cblx0XHRcdDxyZWN0IHg9ezV9IHk9ezIwfSB3aWR0aD17MTB9IGhlaWdodD17NX1cblx0XHRcdFx0XHRmaWxsPVwidHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdHN0cm9rZT17XCJncmF5XCJ9XG5cdFx0XHRcdFx0c3Ryb2tlV2lkdGg9XCIxXCIvPlxuXHRcdFx0PHJlY3Qgd2lkdGg9ezJ9IGhlaWdodD17MjB9IGZpbGw9e1wiYmxhY2tcIn0vPlxuXHRcdDwvR3JvdXA+XG5cdDwvVG9wPlxuKVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge3doZW5TZWxlY3Rpb25DaGFuZ2UsQUNUSU9OfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi9tb3ZhYmxlXCJcblxuZXhwb3J0IGRlZmF1bHQgd2hlblNlbGVjdGlvbkNoYW5nZSgoe3NlbGVjdGlvbn0pPT57XG5cdHJldHVybiBzZWxlY3Rpb24gPyB7c2VsZWN0aW9uLHJlY3RzOnNlbGVjdGlvbi5nZXRSYW5nZVJlY3RzKCl9IDoge31cbn0sdW5kZWZpbmVkLHVuZGVmaW5lZCx7d2l0aFJlZjp0cnVlfSkoY2xhc3MgU2VsZWN0aW9uU2hhcGUgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55XG5cdH1cblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5hcmVhPVJlYWN0LmNyZWF0ZVJlZigpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHRcdHRoaXMub25TaHJpbms9dGhpcy5vblNocmluay5iaW5kKHRoaXMpXG5cdFx0dGhpcy5vbk1vdmU9dGhpcy5vbk1vdmUuYmluZCh0aGlzKVxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3N0YXRlOntyZWN0cz1bXSwgc2VsZWN0aW5nfSwgcHJvcHM6e319PXRoaXNcblx0XHRjb25zdCB7ZWRpdGFibGV9PXRoaXMuY29udGV4dFxuXHRcdGNvbnN0IHJhbmdlPTxBcmVhIHJlY3RzPXtyZWN0c30gaW5uZXJSZWY9e3RoaXMuYXJlYX0vPlxuXHRcdGlmKHNlbGVjdGluZylcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQocmFuZ2Use29uTW91c2VNb3ZlOnRoaXMub25TaHJpbmt9KVxuXHRcdFxuXHRcdHJldHVybiBlZGl0YWJsZSA/IDxNb3ZhYmxlIGNoaWxkcmVuPXtyYW5nZX0gb25Nb3ZlPXt0aGlzLm9uTW92ZX0vPiA6IHJhbmdlXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtyZWN0c30se3NlbGVjdGluZ30pe1xuXHRcdGlmKCFzZWxlY3RpbmcpXG5cdFx0XHRyZXR1cm4ge3JlY3RzfVxuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRvblNocmluayh7YnV0dG9ucywgY2xpZW50WDpsZWZ0LCBjbGllbnRZOiB0b3B9KXtcblx0XHRpZighKGJ1dHRvbnMmMHgxKSlcblx0XHRcdHJldHVyblxuXHRcdGNvbnN0IHtzZWxlY3Rpb259PXRoaXMucHJvcHNcblx0XHRjb25zdCB7cmVjdHN9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7eCx5fT1zZWxlY3Rpb24ucG9zaXRpb25pbmcuYXNDYW52YXNQb2ludCh7bGVmdCx0b3B9KVxuXG5cdFx0bGV0IGk9cmVjdHMuZmluZEluZGV4KCh7bGVmdCx0b3AscmlnaHQsYm90dG9tfSk9Pnk8PWJvdHRvbSAmJiBsZWZ0PD14ICYmIHg8PXJpZ2h0KVxuXHRcdGxldCBuZXdSZWN0cz1yZWN0cy5zbGljZSgwLGkrMSlcblx0XHRpZihpIT0tMSl7XG5cdFx0XHRuZXdSZWN0c1tuZXdSZWN0cy5sZW5ndGgtMV0ucmlnaHQ9eC0yXG5cdFx0fVxuXHRcdHRoaXMuc2V0U3RhdGUoe3JlY3RzOm5ld1JlY3RzfSlcblx0fVxuXG5cdG9uTW92ZShlKXtcblx0XHR0aGlzLnByb3BzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uTU9WRShlKSlcblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCl7XG5cdFx0dGhpcy5jb21wb25lbnREaWRVcGRhdGUoe30pXG5cdH1cblxuXHRjb21wb25lbnREaWRVcGRhdGUocHJldil7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uPXRoaXMucHJvcHMuc2VsZWN0aW9uXG5cdFx0aWYocHJldi5zZWxlY3Rpb24hPXNlbGVjdGlvbiAmJiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmlzUmFuZ2Upe1xuXHRcdFx0aWYoc2VsZWN0aW9uLmlzU2VsZWN0aW9uQ2hhbmdlZChwcmV2LnNlbGVjdGlvbikpe1xuXHRcdFx0XHRjb25zdCBzaGFwZT10aGlzLmFyZWEuY3VycmVudFxuXHRcdFx0XHRpZihzaGFwZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKVxuXHRcdFx0XHRcdHNoYXBlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSlcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHNoYXBlLnNjcm9sbEludG9WaWV3KClcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pXG5cbmV4cG9ydCBjb25zdCBBcmVhPSh7cmVjdHMsIGlubmVyUmVmLC4uLnByb3BzfSk9Pihcblx0PHBhdGhcblx0XHRyZWY9e2lubmVyUmVmfVxuXHRcdGZpbGw9XCIjMzI5N0ZEXCJcblx0XHRjbGFzc05hbWU9XCJzZWxlY3Rpb25TaGFwZVwiXG5cdFx0c3R5bGU9e3tmaWxsT3BhY2l0eTowLjV9fVxuXHRcdGQ9e1xuXHRcdFx0KHJlY3RzfHxbXSkubWFwKCh7bGVmdCx0b3AscmlnaHQsYm90dG9tfSk9PmBNJHtsZWZ0fSAke3RvcH0gTCR7cmlnaHR9ICR7dG9wfSBMJHtyaWdodH0gJHtib3R0b219IEwke2xlZnR9ICR7Ym90dG9tfSBaYCkuam9pbihcIiBcIilcblx0XHR9XG5cdFx0ey4uLnByb3BzfVxuXHRcdG9uQ2xpY2s9e2U9PmNvbnNvbGUubG9nKDEpfVxuXHRcdC8+XG4pXG4iLCJpbXBvcnQgUmVhY3Qse0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZX0gZnJvbSBcIndlLWVkaXRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aGVuU2VsZWN0aW9uQ2hhbmdlKCkoXG4gICAgY2xhc3MgQ3Vyc29yU2hhcGUgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB0aGlzLnNoYXBlPVJlYWN0LmNyZWF0ZVJlZigpXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCl7XG4gICAgICAgICAgICBjb25zdCB7c2VsZWN0aW9uLCBzdHlsZSB9PXRoaXMucHJvcHNcbiAgICAgICAgICAgIGNvbnN0IHtwb3NpdGlvbjp7eSA9IDAsIHggPSAwLCBoZWlnaHQgPSAwLCBjb2xvciA9IFwiYmxhY2tcIn0sIGlzQ3Vyc29yLCBpc0ZvY3VzYWJsZX09c2VsZWN0aW9ufHx7cG9zaXRpb246e319XG4gICAgICAgICAgICByZXR1cm4gKDxwYXRoIHJlZj17dGhpcy5zaGFwZX0gZD17YE0ke3h9ICR7eX0gdiR7aXNDdXJzb3ImJiFpc0ZvY3VzYWJsZSA/IGhlaWdodDogMH1gfSBzdHJva2VXaWR0aD17MX0gc3Ryb2tlPXtjb2xvcn0gc3R5bGU9e3N0eWxlfSAvPilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSh7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2KXtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbj10aGlzLnByb3BzLnNlbGVjdGlvblxuICAgICAgICAgICAgaWYocHJldi5zZWxlY3Rpb24hPXNlbGVjdGlvbiAmJiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmlzQ3Vyc29yKXtcbiAgICAgICAgICAgICAgICBpZihzZWxlY3Rpb24uaXNTZWxlY3Rpb25DaGFuZ2VkKHByZXYuc2VsZWN0aW9uKSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBlPXRoaXMuc2hhcGUuY3VycmVudFxuICAgICAgICAgICAgICAgICAgICBpZihzaGFwZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuKVxuIiwiaW1wb3J0IHtTZWxlY3Rpb25TdHlsZX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnaW5hdGlvblNlbGVjdGlvblN0eWxlIGV4dGVuZHMgU2VsZWN0aW9uU3R5bGV7XG4gICAgY29uc3RydWN0b3IocG9zaXRpb24sIHN0YXJ0LCBlbmQscG9zaXRpb25pbmcpIHtcbiAgICAgICAgc3VwZXIocG9zaXRpb24sIHN0YXJ0LCBlbmQpXG4gICAgICAgIHRoaXMucG9zaXRpb25pbmc9cG9zaXRpb25pbmdcbiAgICAgICAgaWYgKHN0YXJ0LmlkICE9IGVuZC5pZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udGVudChzdGFydC5pZCkuZm9yd2FyZEZpcnN0KGAjJHtlbmQuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzYWJsZT1zdGFydC5pZD09ZW5kLmlkICYmIHBvc2l0aW9uaW5nLmdldENvbXBvc2VyKHN0YXJ0LmlkKS5mb2N1c2FibGVcbiAgICAgICAgdGhpcy5pc1JhbmdlPSF0aGlzLmlzQ3Vyc29yICYmICF0aGlzLmlzRm9jdXNhYmxlXG4gICAgfVxuXG4gICAgaXNTZWxlY3Rpb25DaGFuZ2VkKGIpe1xuICAgICAgICByZXR1cm4gIWIgfHwgIShiLnN0YXJ0LmlkPT10aGlzLnN0YXJ0LmlkICYmIGIuc3RhcnQuYXQ9PXRoaXMuc3RhcnQuYXQgJiYgYi5lbmQuaWQ9PXRoaXMuZW5kLmlkICYmIGIuZW5kLmF0PT10aGlzLmVuZC5hdClcbiAgICB9XG5cbiAgICBnZXRDb21wb3Nlcigpe1xuICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uaW5nLmdldENvbXBvc2VyKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBnZXRDb250ZW50KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uaW5nLmdldENvbnRlbnQoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGdldFJhbmdlUmVjdHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19nZXRSYW5nZVJlY3RzKHRoaXMuc3RhcnQsdGhpcy5lbmQpXG4gICAgfVxuXG4gICAgX19nZXRSYW5nZVJlY3RzPW1lbW9pemUoKHN0YXJ0LCBlbmQpPT57XG4gICAgICAgIGlmKHRoaXMuaXNSYW5nZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbmluZy5nZXRSYW5nZVJlY3RzKHN0YXJ0LCBlbmQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJhbmdlUmVjdHMoKVxuICAgIH0pXG5cbiAgICBwcm9wcz1tZW1vaXplKCh0eXBlLCBnZXRGcm9tQ29udGVudCA9IHRydWUpPT57XG4gICAgICAgIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJwYWdlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlUHJvcHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJsYXlvdXRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dFByb3BzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wcz1zdXBlci5wcm9wcyh0eXBlLGdldEZyb21Db250ZW50KVxuICAgICAgICBpZighcHJvcHMpXG4gICAgICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgICAgY29uc3Qge2hhc2gsaWQsY29udGVudCxjaGlsZHJlbiwuLi5hfT1wcm9wc1xuICAgICAgICByZXR1cm4gYVxuICAgIH0pXG5cbiAgICBfbGF5b3V0UHJvcHM9bWVtb2l6ZSgoKT0+e1xuICAgICAgICBpZiAoIXRoaXMucG9zaXRpb25pbmcucmVhZHkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucG9zaXRpb25pbmcucGFnZXMuZmluZChhID0+IGEucHJvcHMuSSA9PSB0aGlzLnBvc2l0aW9uLnBhZ2UpO1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcGFnZS5sYXlvdXRPZih0aGlzLnBvc2l0aW9uKVxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiB4LCB5IG9mIHBhZ2UsbGluZSxjb2x1bW5cbiAgICAgKiBzaXplLCBtYXJnaW5cbiAgICAgKi9cbiAgICBfcGFnZVByb3BzPW1lbW9pemUoKCk9PntcbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uaW5nLnJlYWR5KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBvc2l0aW9uaW5nLnBhZ2VzLmZpbmQoYSA9PiBhLnByb3BzLkkgPT0gdGhpcy5wb3NpdGlvbi5wYWdlKTtcbiAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlWSA9ICgpID0+IHRoaXMucG9zaXRpb25pbmcucGFnZVhZKHRoaXMucG9zaXRpb24ucGFnZSkueTtcbiAgICAgICAgY29uc3QgbGluZSA9ICgpID0+IHRoaXMucG9zaXRpb24ubGluZVxuICAgICAgICBjb25zdCBjb2x1bW4gPSAoKSA9PiBwYWdlLmNvbHVtbkluZGV4T2YobGluZSgpLHRoaXMucG9zaXRpb24pO1xuICAgICAgICBjb25zdCBjb2xzID0gKCkgPT4gWy4uLnBhZ2UuY29sc107XG4gICAgICAgIGNvbnN0IHsgbWFyZ2luLCB3aWR0aCwgaGVpZ2h0IH0gPSBwYWdlLnByb3BzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5wb3NpdGlvbixcbiAgICAgICAgICAgIGdldCBwYWdlWSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZVkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbGluZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjb2x1bW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjb2xzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2xzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBtYXJnaW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtjb25uZWN0LEFDVElPTn0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtjb21wb3NlfSBmcm9tIFwicmVjb21wb3NlXCJcbmltcG9ydCBTZWxlY3Rpb25TdHlsZSBmcm9tIFwiLi9zZWxlY3Rpb24tc3R5bGVcIlxuXG4vKipcbiAqIFRvIHVwZGF0ZSBjdXJzb3IsIHNlbGVjdGlvbiwgYW5kIGZvY3VzIHNoYXBlIG9ubHkgd2hlblxuICogY2FudmFzIGlzIHJlYWR5LCB3aGljaCBtZWFucyBkb2N1bWVudCBjb21wb3NlZCwgYW5kIGJlIHVwZGF0ZWQgaW4gY2FudmFzXG4gKiBcbiAqIHRoZXJlIGFyZSAzIHN0YXRlczogW25leHQsIGN1cnJlbnQsIGFuZCBsYXN0XVtjb250ZW50LHNlbGVjdGlvbl1cbiAqIGlmIGFueSBvZiBuZXh0IGlzIGRpZmZlcmVudCBmcm9tIGxhc3Qgb3IgY3VycmVudCwgc2hvdWxkIHVwZGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKFxuICAgIGNvbm5lY3QoXG4gICAgICAgIHN0YXRlPT4oe1xuICAgICAgICAgICAgY29udGVudDpzdGF0ZS5nZXQoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgc2VsZWN0aW9uOnN0YXRlLmdldChcInNlbGVjdGlvblwiKSxcbiAgICAgICAgfSksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7d2l0aFJlZjp0cnVlfVxuICAgICksXG4pKGNsYXNzIFdoZW5TZWxlY3Rpb25DaGFuZ2VOb3RpZmllciBleHRlbmRzIENvbXBvbmVudHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGU9e2NvbXBvc2VkQ29udGVudDpudWxsfVxuICAgIH1cblxuXHRyZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUoe2NvbnRlbnQsc2VsZWN0aW9uLCBjYW52YXMsIHBvc2l0aW9uaW5nPWNhbnZhcy5wb3NpdGlvbmluZ30se2NvbXBvc2VkQ29udGVudH0pe1xuICAgICAgICBjb25zdCBjb21wb3NlZENvbnRlbnRJc1N5bmNlZD1jb250ZW50LmVxdWFscyhjb21wb3NlZENvbnRlbnQpXG4gICAgICAgIGlmKCFjb21wb3NlZENvbnRlbnRJc1N5bmNlZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRBbmRTZWxlY3Rpb25Jc05vdENoYW5nZWQ9XG4gICAgICAgICAgICBjb250ZW50LmVxdWFscyh0aGlzLnByb3BzLmNvbnRlbnQpICYmXG4gICAgICAgICAgICBzZWxlY3Rpb24uZXF1YWxzKHRoaXMucHJvcHMuc2VsZWN0aW9uKSAmJiBcbiAgICAgICAgICAgIGNvbnRlbnQuZXF1YWxzKHRoaXMubGFzdC5jb250ZW50KSAmJiBcbiAgICAgICAgICAgIHNlbGVjdGlvbi5lcXVhbHModGhpcy5sYXN0LnNlbGVjdGlvbilcblxuICAgICAgICBpZihjb250ZW50QW5kU2VsZWN0aW9uSXNOb3RDaGFuZ2VkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgLy9pbml0aWFsaXplXG4gICAgICAgIHRoaXMuc3R5bGU9bnVsbFxuXG4gICAgICAgIGNvbnN0IHtjdXJzb3JBdCwgLi4uYX09c2VsZWN0aW9uLnRvSlMoKVxuICAgICAgICBjb25zdCB7aWQsYXR9PWFbY3Vyc29yQXRdXG4gICAgICAgIGlmKCFpZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIHRoaXMuc3R5bGU9bmV3IFNlbGVjdGlvblN0eWxlKHBvc2l0aW9uaW5nLnBvc2l0aW9uKGlkLCBhdCwgdHJ1ZSksIGEuc3RhcnQsIGEuZW5kLHBvc2l0aW9uaW5nKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2Rpc3BhdGNoLGNvbnRlbnQsc2VsZWN0aW9ufSwgc3R5bGV9PXRoaXNcbiAgICAgICAgZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TVFlMRShzdHlsZSkpXG4gICAgICAgIHRoaXMubGFzdD17Y29udGVudCwgc2VsZWN0aW9ufVxuICAgIH1cbn0pXG5cblxuIiwiLyoqXG4gKiBUZXJtczpcbiAqIFBvc2l0aW9uOiBvYmplY3QgbXVzdCB3aXRoIGNvb3JkaW5hdGUgZmlndXJlcyBsaWtlIHt4LHksbGVmdCx0b3AsIC4uLn0gb24gY2FudmFzXG4gKiBMb2NhdGlvbjoge2lkLCBhdH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zaXRpb25pbmd7XG4gICAgY29uc3RydWN0b3IocmVzcG9uc2libGUpe1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmxlPXJlc3BvbnNpYmxlXG4gICAgfVxuXG4gICAgZ2V0Q29tcG9zZXIoKXsgIFxuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5nZXRDb21wb3NlciguLi5hcmd1bWVudHMpXG4gICAgfVxuICAgIGdldENvbnRlbnQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuZ2V0Q29udGVudCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgYXNDYW52YXNQb2ludCh7bGVmdCx0b3B9KXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuYXNDYW52YXNQb2ludCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgYXNWaWV3cG9ydFBvaW50KHt4LHl9KXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuYXNWaWV3cG9ydFBvaW50KC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBwYWdlWFkoST0wKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUucGFnZVhZKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBnZXQgcGFnZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUucGFnZXNcbiAgICB9XG5cbiAgICBnZXQgZnJhbWVzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzXG4gICAgfVxuXG4gICAgZ2V0IHJlYWR5KCl7XG4gICAgICAgIHJldHVybiAhIXRoaXMucmVzcG9uc2libGUuY2FudmFzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gZ2V0IHBvc2l0aW9ue3BhZ2UsbGluZSwgeCx5LGxlZnQsdG9wLH0gZm9yIGEgbG9jYXRpb257aWQsYXR9XG4gICAgICogXG4gICAgICovXG4gICAgcG9zaXRpb24oaWQsYXQpe1xuICAgICAgICByZXR1cm4ge3BhZ2U6MH1cbiAgICB9XG5cbiAgICAvKipnZXQgYSBsb2NhdGlvbntpZCxhdH0gZnJvbSBhIHBvc2l0aW9ue2xlZnQsdG9wfSovXG4gICAgYXJvdW5kKGxlZnQsdG9wKXtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLyoqZ2V0IHJhbmdlIHJlY3RzIGZyb20gcG9zaXRpb24gc3RhcnQgdG8gcG9zaXRpb24gZW5kKi9cbiAgICBnZXRSYW5nZVJlY3RzKHN0YXJ0LGVuZCl7XG4gICAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8qKmdldCBsb2NhdGlvbiBvZiBuZXh0IGxpbmUgZm9yIGEgbG9jYXRpb24gXG4gICAgICogc2ltcGxlOiBmaW5kIGxvY2F0aW9uIGZyb20gMSBwaXhlbCBiZWxvdyB0aGUgbGluZSwgd2hhdCBhYm91dCBpZiBpdCdzIGxhc3QgbGluZSBvZiBmcmFtZVxuICAgICovXG4gICAgbmV4dExpbmUoaWQsYXQpe1xuICAgICAgICBjb25zdCBwb3NpdGlvbj10aGlzLnBvc2l0aW9uKGlkLGF0KVxuICAgICAgICBpZighcG9zaXRpb24gJiYgbmV4dEZyYW1lKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZChsZWZ0LG5leHRGcmFtZS5maXJzdExpbmUueSsxKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyb3VuZChsZWZ0LHRvcCtsaW5lSGVpZ2h0KzEpXG4gICAgfVxuICAgIC8qKmdldCBsb2NhdGlvbiBvZiBwcmV2IGxpbmUgZm9yIGEgbG9jYXRpb24gKi9cbiAgICBwcmV2TGluZShpZCxhdCl7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uPXRoaXMucG9zaXRpb24oaWQsYXQpXG4gICAgICAgIGlmKCFwb3NpdGlvbiAmJiBwcmV2RnJhbWUpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kKGxlZnQscHJldkZyYW1lLmxhc3RMaW5lLnktMSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcm91bmQobGVmdCx0b3AtMSlcbiAgICB9XG5cbiAgICBwb3NpdGlvbkF0TGluZUVuZChpZCxhdCl7XG4gICAgICAgIHJldHVybiB7aWQsYXR9XG4gICAgfVxuXG4gICAgcG9zaXRpb25BdExpbmVTdGFydChpZCxhdCl7XG4gICAgICAgIHJldHVybiB7aWQsYXR9XG4gICAgfVxuXG5cblxuICAgIC8qKmV4dGVuZCBzZWxlY3Rpb24gZnJvbSBsb2NhdGlvbiB0byB3b3JkIHJhbmdlKi9cbiAgICBleHRlbmRXb3JkKGlkLGF0KXtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLyoqZXh0ZW5kIHNlbGVjdGlvbiBmcm9tIGxvY2F0aW9uIHRvIGxpbmUgcmFuZ2UqL1xuICAgIGV4dGVuZExpbmUoaWQsYXQpe1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBzdGF0aWMgbWFrZVNhZmU9QT0+Y2xhc3MgU2FmZVBvc2l0aW9uaW5nIGV4dGVuZHMgQXtcbiAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKVxuICAgICAgICAgICAgXCJwb3NpdGlvbixhcm91bmQsbmV4dExpbmUscHJldkxpbmUsZXh0ZW5kV29yZFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGs9PntcbiAgICAgICAgICAgICAgICB0aGlzW2tdPSguLi5hcmdzKT0+e1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXJba10oLi4uYXJncylcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pIFxuICAgICAgICB9XG4gICAgICAgIGdldFJhbmdlUmVjdHMoLi4uYXJncyl7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJhbmdlUmVjdHMoLi4uYXJncylcbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gICAgXG59IiwiaW1wb3J0IFJlYWN0LHtGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7UmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IFBvc2l0aW9uaW5nIGZyb20gXCIuL2Jhc2VcIlxuXG4vKipcbiAqIGxheW91dGVkIGlzIGEgZnJhbWUgdHJlZVxuICogdG9wIGZyYW1lKHRvcEZyYW1lKSBpcyB0aGUgdG9wIGZyYW1lXG4gKiBsZWFmRnJhbWUgaXMgYSBmcmFtZSB3aXRob3V0IG5lc3RlZCBmcmFtZVxuICogaXQncyBiYXNlZCBvbiBzb21lIGtub3dsZWRnZTpcbiAqIDEuIGRhdGEtZnJhbWU9ZnJhbWUudXVpZFxuICogMi4gaW5saW5lIGxheW91dCBzdG9yeSwgYW5kIGl0cyBiYXNlbGluZVxuICogXG4gKiB0aGUgcG9zaXRpb25pbmcgYmFzaWMgaWRlYSBpcyB0byBwb3NpdGlvbmluZyBpbiBsZWFmRnJhbWUoc28gdGhlIGNvbnRlbnQgaXMgZXhhY3QgYXRvbXMsIG9yIG1lcmdpbmcgdXAgd2l0aCBhdG9tcyksIFxuICogYW5kIHRoZW4gY29tcHV0ZWQgd2l0aCB0b3BGcmFtZS5vZmZzZXQsIGFuZCBsZWFmRnJhbWUub2Zmc2V0XG4gKi9cbmNsYXNzIFBvc2l0aW9uaW5nSGVscGVyIGV4dGVuZHMgUG9zaXRpb25pbmd7XG4gICAgZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSl7XG4gICAgICAgIGNvbnN0IHt4LHl9PXRoaXMucGFnZVhZKHRvcEZyYW1lLnByb3BzLkkpXG4gICAgICAgIHJldHVybiB7eCx5LHRvcDp5LGJvdHRvbTp5K3RvcEZyYW1lLnByb3BzLmhlaWdodH1cbiAgICB9XG5cbiAgICBnZXRUb3BGcmFtZUJ5UG9zaXRpb24oeCx5KXtcbiAgICAgICAgdmFyIHh5XG4gICAgICAgIGNvbnN0IHRvcEZyYW1lPXRoaXMuZnJhbWVzLmZpbmQoKHsgcHJvcHM6IHsgd2lkdGgsIGhlaWdodCwgSSB9IH0pID0+IHtcbiAgICAgICAgICAgIHh5ID0gdGhpcy5wYWdlWFkoSSk7XG4gICAgICAgICAgICByZXR1cm4geCA+PSB4eS54ICYmIHggPD0geHkueCArIHdpZHRoICYmIHkgPj0geHkueSAmJiB5IDw9IHh5LnkgKyBoZWlnaHQ7XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiB7dG9wRnJhbWUsIHRvcEZyYW1lT2Zmc2V0Onh5fSBcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzdGFydCBhbmQgZW5kIG11c3QgYmUgaW4gc2FtZSBibG9jayBsZXZlbCAoTk9UIHNhbWUgZnJhbWUsIEJVVCBzYW1lIGxldmVsIG9mIGdyYW5kIGNvbnRlbnQpLCBcbiAgICAgKiBpZiBub3QsIHN0YXJ0IGFuZCBlbmQgbXVzdCBiZSBleHRlbmRlZCB1cCB0byBzYW1lIGJsb2NrIGxldmVsXG4gICAgICogXG4gICAgICogdGhlcmUgYXJlIHR3byB0eXBlIG9mIGJsb2NrIGxpbmVcbiAgICAgKiAxLiBwYXJhZ3JhcGggbGluZVxuICAgICAqIDIuIHRhYmxlIHJvd1xuICAgICAqIHRoZXJlIGFyZSB0d28gdHlwZXMgb2YgZnJhbWUgXG4gICAgICogMS4gZnJhbWUgY29udGVudCwgXG4gICAgICogMi4gZmlzc2lvbiBmcmFtZSBhcyBsYXlvdXQgZW5naW5lXG4gICAgICogXG4gICAgICogQHBhcmFtIHsqfSBzdGFydCBcbiAgICAgKiBAcGFyYW0geyp9IGVuZCBcbiAgICAgKi9cbiAgICBub3JtYWxpemVTZWxlY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgICBpZiAoc3RhcnQuaWQgPT0gZW5kLmlkKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9XG4gICAgICAgIGNvbnN0IGdldEdyYW5kQmxvY2tDb250ZW50cz0oY3VycmVudCxibG9ja3M9W10pPT57XG4gICAgICAgICAgICB3aGlsZShjdXJyZW50KXtcbiAgICAgICAgICAgICAgICBpZihjdXJyZW50LmlzU2VjdGlvblxuICAgICAgICAgICAgICAgICAgICB8fGN1cnJlbnQuaXNGcmFtZVxuICAgICAgICAgICAgICAgICAgICB8fFtcInJvd1wiLFwiZG9jdW1lbnRcIl0uaW5jbHVkZXMoY3VycmVudC5nZXRDb21wb3NlVHlwZSgpKVxuICAgICAgICAgICAgICAgICAgICApe1xuICAgICAgICAgICAgICAgICAgICBibG9ja3MucHVzaChjdXJyZW50LnByb3BzLmlkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50PWN1cnJlbnQuY29udGV4dCA/IGN1cnJlbnQuY29udGV4dC5wYXJlbnQgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmxvY2tzXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGJsb2Nrc0EgPSBnZXRHcmFuZEJsb2NrQ29udGVudHModGhpcy5nZXRDb21wb3NlcihzdGFydC5pZCkpXG4gICAgICAgIGNvbnN0IGJsb2Nrc0IgPSBnZXRHcmFuZEJsb2NrQ29udGVudHModGhpcy5nZXRDb21wb3NlcihlbmQuaWQpKVxuICAgICAgICBjb25zdCBpID0gYmxvY2tzQS5maW5kTGFzdEluZGV4KChhLCBpKSA9PiBhID09IGJsb2Nrc0JbaV0pO1xuICAgICAgICBpZiAoaSAhPSAtMSkge1xuICAgICAgICAgICAgYmxvY2tzQS5zcGxpY2UoMCwgaSArIDEpO1xuICAgICAgICAgICAgYmxvY2tzQi5zcGxpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja3NBWzBdKSB7XG4gICAgICAgICAgICBzdGFydCA9IHsgaWQ6IGJsb2Nrc0FbMF0sIGF0OiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2Nrc0JbMF0pIHtcbiAgICAgICAgICAgIGVuZCA9IHsgaWQ6IGJsb2Nrc0JbMF0sIGF0OiAxIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xuICAgIH1cblxuICAgIGdldE9yZGVyZWRQb3NpdGlvbihzdGFydCxlbmQpe1xuICAgICAgICAvL2F0IGZpcnN0IHN0YXJ0IGFuZCBlbmQgbXVzdCBiZSBub3JtYWxpemVkIHRvIHNhbWUgYmxvY2sgbGV2ZWxcbiAgICAgICAgKHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5ub3JtYWxpemVTZWxlY3Rpb24oc3RhcnQsZW5kKSk7XG4gICAgICAgIGNvbnN0IHAwPXRoaXMucG9zaXRpb24oc3RhcnQuaWQsc3RhcnQuYXQsIHRydWUpXG4gICAgICAgIGNvbnN0IHAxPXRoaXMucG9zaXRpb24oZW5kLmlkLCBlbmQuYXQsdHJ1ZSlcbiAgICAgICAgY29uc3QgcmV2ZXJ0ZWQ9e3AwOnAxLHAxOnAwfVxuICAgICAgICBpZihwMC50b3BGcmFtZS5wcm9wcy5pPnAxLnRvcEZyYW1lLnByb3BzLmkpe1xuICAgICAgICAgICAgcmV0dXJuIHJldmVydGVkXG4gICAgICAgIH1lbHNlIGlmKHAwLnRvcEZyYW1lLnByb3BzLmk9PXAxLnRvcEZyYW1lLnByb3BzLmkpe1xuICAgICAgICAgICAgaWYocDAubGVhZkZyYW1lPT1wMS5sZWFmRnJhbWUpe1xuICAgICAgICAgICAgICAgIGlmKHAwLmxpbmVJbmRleEluTGVhZkZyYW1lPnAxLmxpbmVJbmRleEluTGVhZkZyYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmVydGVkXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYocDAubGluZUluZGV4SW5MZWFmRnJhbWU9PXAxLmxpbmVJbmRleEluTGVhZkZyYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgaWYocDAueD5wMS54KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZlcnRlZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2UgaWYocDAubGVhZkZyYW1lLnByb3BzLmk+cDEubGVhZkZyYW1lLnByb3BzLmkpe1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZlcnRlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7cDAscDF9XG4gICAgfVxuXG4gICAgZ2V0RnJhbWVPZmZzZXRHcmFuZEZyYW1lKGdyYW5kRnJhbWUsZnJhbWUpe1xuICAgICAgICBpZihncmFuZEZyYW1lPT1mcmFtZSlcbiAgICAgICAgICAgIHJldHVybiB7eDowLHk6MH1cbiAgICAgICAgY29uc3QgZ3JhbmRGcmFtZUxheW91dGVkPWdyYW5kRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KClcbiAgICAgICAgY29uc3Qge2ZpcnN0LHBhcmVudHN9PW5ldyBSZWFjdFF1ZXJ5KGdyYW5kRnJhbWVMYXlvdXRlZCkuZmluZEZpcnN0QW5kUGFyZW50cyhgW2RhdGEtZnJhbWU9JHtmcmFtZS51dWlkfV1gKVxuICAgICAgICByZXR1cm4gWy4uLnBhcmVudHMsZmlyc3QuZ2V0KDApXS5maWx0ZXIoYT0+ISFhKS5yZWR1Y2UoKHh5LHtwcm9wczp7eD0wLHk9MH19KT0+KHh5LngrPXgsIHh5LnkrPXksIHh5KSx7eDowLHk6MH0pXG4gICAgfVxuXG4gICAgX3RhcmdldEZyYW1lQ29udGFpbnNGcmFtZT1mcmFtZT0+dGFyZ2V0RnJhbWU9PntcbiAgICAgICAgY29uc3QgcGFyZW50cz0oKGEsZm91bmQ9W10pPT57XG4gICAgICAgICAgICB3aGlsZShhPWEuY29udGV4dC5wYXJlbnQpe1xuICAgICAgICAgICAgICAgIGZvdW5kLnB1c2goYS5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICB9KSh0aGlzLmdldENvbXBvc2VyKGZyYW1lLnByb3BzLmlkKSlcblxuICAgICAgICByZXR1cm4gbmV3IFJlYWN0UXVlcnkodGFyZ2V0RnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpLmZpbmRGaXJzdChub2RlPT57XG4gICAgICAgICAgICBpZighKG5vZGUgJiYgbm9kZS5wcm9wcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlkLFwiZGF0YS1mcmFtZVwiOmlzRnJhbWV9fT1ub2RlXG4gICAgICAgICAgICBpZighaXNGcmFtZSkgXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxuXG4gICAgICAgICAgICBpZihpc0ZyYW1lPT1mcmFtZS51dWlkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIXBhcmVudHMuaW5jbHVkZXMoaWQpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkubGVuZ3RoPT0xICBcbiAgICB9XG5cbiAgIC8qKlxuICAgICAqIHRyYXZlbCB1cFxuICAgICAqIHRvIGZpbmQgdXAgZnJhbWUgbGF5b3V0IG9yIGZpc3Npb25hYmxlJ3MgZmlzc2lvbiBiYXNlZCBvbiBmb2xsb3dpbmcga25vd2xlZGdlXG4gICAgICogMS4gY29tcG9zZWQgZnJhbWUgbXVzdCBnaXZlIGRhdGEtZnJhbWU9ZnJhbWUudXVpZCBvbiBjb250ZW50XG4gICAgICogMi4gZWFjaCBmcmFtZSBsYXlvdXQgbXVzdCBoYXZlIGNvbnRleHQuZnJhbWUoZm9yIGZpc3Npb24pfC5wYXJlbnQoZm9yIGZyYW1lIGNvbnRlbnQpIHRvIHRyYXZlbCB1cCBmcmFtZSB0cmVlXG4gICAgICogQHBhcmFtIHsqfSBmcmFtZSwgc3RhcnQgcG9pbnQgXG4gICAgICogQHBhcmFtIHsqfSBjaGVjayhmcmFtZSkgXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmaXJzdDogcmV0dXJuIGZpcnN0IGZvdW5kIG9yIHRvcEZyYW1lXG4gICAgICogQERlZmF1bHQgZm9yIHRvcEZyYW1lXG4gICAgICovXG4gICAgZ2V0Q2hlY2tlZEdyYW5kRnJhbWVCeUZyYW1lKGZyYW1lLGNoZWNrLCBmaXJzdCwgZmluZD1cImZpbmRcIil7XG4gICAgICAgIGlmKCFjaGVjayl7Ly9kZWZhdWx0OiBmcmFtZSBvciBhbnkgZ3JhbmRGcmFtZSBpbmNsdWRpbmcgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lQ29udGFpbmVkQnk9dGhpcy5fdGFyZ2V0RnJhbWVDb250YWluc0ZyYW1lKGZyYW1lKVxuICAgICAgICAgICAgY2hlY2s9dGFyZ2V0RnJhbWU9PnRhcmdldEZyYW1lPT1mcmFtZSB8fCBmcmFtZUNvbnRhaW5lZEJ5KHRhcmdldEZyYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGN1cnJlbnQ9ZnJhbWUsIGdyYW5kTWF5YmU9bnVsbFxuICAgICAgICB3aGlsZShjdXJyZW50KXtcbiAgICAgICAgICAgIGlmKGN1cnJlbnQuaXNGcmFtZSAmJiBjaGVjayhjdXJyZW50KSl7XG4gICAgICAgICAgICAgICAgZ3JhbmRNYXliZT1jdXJyZW50IFxuICAgICAgICAgICAgfWVsc2UgaWYoY3VycmVudC5pc1NlY3Rpb24pe1xuICAgICAgICAgICAgICAgIGdyYW5kTWF5YmU9Y3VycmVudC5jb21wdXRlZC5jb21wb3NlZFtmaW5kXShjaGVjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoZmlyc3QgJiYgZ3JhbmRNYXliZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyYW5kTWF5YmVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoY3VycmVudC5jb250ZXh0KVxuICAgICAgICAgICAgICAgIGN1cnJlbnQ9Y3VycmVudC5jb250ZXh0LmZyYW1lfHxjdXJyZW50LmNvbnRleHQucGFyZW50XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyYW5kTWF5YmVcbiAgICB9XG5cbiBcbiAgICAvKipcbiAgICAgKiB0cmF2ZWwgZG93biBjb21wb3NlZCB0byBmaW5kIG5vZGUsXG4gICAgICogKiogaXQgc2hvdWxkIGFsd2F5cyBmaW5kIGZyb20gbGFzdCB0byBjb25zaWRlciB6IG9yZGVyXG4gICAgICogQHBhcmFtIHsqfSBjb21wb3NlZCBcbiAgICAgKiBAcGFyYW0geyp9IGNoZWNrKHJlY3QsIG5vZGUpLCByZWN0KHtpbml0aWFsIGJvdW5hcnl9KSBpcyBmdW5jaXRvbiB0byByZXR1cm4gbm9kZSBib3VuZGFyeVxuICAgICAqIEBwYXJhbSB7fSBmb3JtYXROb2RlKG5vZGUpICBcbiAgICAgKi9cbiAgICBnZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKGNvbXBvc2VkLGNoZWNrLGZvcm1hdE5vZGU9YT0+YSl7XG4gICAgICAgIGNvbnN0IHJlY3Q9KG5vZGVzLHNpemU9e30pPT5ub2Rlcy5maWx0ZXIoYT0+YSE9Y29tcG9zZWQpXG4gICAgICAgIC5yZWR1Y2UoKGJvdW5kLCB7cHJvcHM6e2hlaWdodCx3aWR0aCx4PTAseT0wLFwiZGF0YS10eXBlXCI6dHlwZX09e319PXt9KT0+e1xuICAgICAgICAgICAgYm91bmQueCs9eFxuICAgICAgICAgICAgaWYodHlwZSE9PVwidGV4dFwiKVxuICAgICAgICAgICAgICAgIGJvdW5kLnkrPXlcbiAgICAgICAgICAgIGlmKHR5cGU9PVwicGFyYWdyYXBoXCIpXG4gICAgICAgICAgICAgICAgYm91bmQuaGVpZ2h0PWhlaWdodFxuICAgICAgICAgICAgaWYod2lkdGghPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBib3VuZC53aWR0aD13aWR0aFxuICAgICAgICAgICAgcmV0dXJuIGJvdW5kXG4gICAgICAgIH0sey4uLnNpemUseDowLHk6MH0pXG4gICAgICAgIFxuICAgICAgICB2YXIgY3VycmVudD1uZXcgUmVhY3RRdWVyeShjb21wb3NlZCksIGFsbFBhcmVudHM9W11cbiAgICAgICAgd2hpbGUodHJ1ZSl7Ly9maW5kIG1vc3QgaW5uZXIgbm9kZSB0aGF0IGluY2x1ZGVzIHRoZSBwb2ludFxuICAgICAgICAgICAgY29uc3QgZm91bmQ9Y3VycmVudC5maW5kTGFzdEFuZFBhcmVudHMoKG5vZGUscGFyZW50cyk9PntcbiAgICAgICAgICAgICAgICBpZighbm9kZSB8fCAhUmVhY3QuaXNWYWxpZEVsZW1lbnQobm9kZSkpIFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihub2RlLnByb3BzICYmIG5vZGUucHJvcHNbXCJkYXRhLW5vY29udGVudFwiXSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgaWYobm9kZT09Y3VycmVudC5nZXQoMCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2sobz0+cmVjdChbLi4uYWxsUGFyZW50cywgLi4ucGFyZW50cyxub2RlXSxvKSxub2RlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKGZvdW5kLmxhc3QubGVuZ3RoPT0xKXtcbiAgICAgICAgICAgICAgICBhbGxQYXJlbnRzPVsuLi5hbGxQYXJlbnRzLC4uLmZvdW5kLnBhcmVudHNdXG4gICAgICAgICAgICAgICAgY3VycmVudD1mb3VuZC5sYXN0XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFsbFBhcmVudHM9YWxsUGFyZW50cy5maWx0ZXIoYT0+YSE9Y29tcG9zZWQpXG4gICAgICAgIHJldHVybiBbLi4uYWxsUGFyZW50cyxjdXJyZW50LmdldCgwKV0uZmlsdGVyKGE9PiEhYSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHh5LHtwcm9wczp7eD0wLHk9MH19KT0+KHh5LngrPXgseHkueSs9eSx4eSkse1xuICAgICAgICAgICAgICAgIHg6MCx5OjAsXG4gICAgICAgICAgICAgICAgbm9kZTpmb3JtYXROb2RlKGN1cnJlbnQuZ2V0KDApLGFsbFBhcmVudHMpLFxuICAgICAgICAgICAgICAgIHBhcmVudHM6IGFsbFBhcmVudHNcbiAgICAgICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdG8gYXJvdW5kIHRvIHggaW4gYSBsaW5lIG9mIGZyYW1lLCB0aGUgbGluZSBtYXkgY29udGFpbiBmcmFtZVxuICAgICAqIHNjb3BlIGl0IHRvIGxlYWZGcmFtZSwgYW5kIHByb3h5IHRvIGFvdXJuZEluSW5saW5lXG4gICAgICogQHBhcmFtIHsqfSB0b3BGcmFtZSBcbiAgICAgKiBAcGFyYW0geyp9IGxpbmUgXG4gICAgICogQHBhcmFtIHsqfSBwYXJhbTIgXG4gICAgICovICAgIFxuICAgIGFyb3VuZEluQmxvY2tMaW5lKHt4PTAseT0wfT17fSxsaW5lLCB0b3BGcmFtZSwgYmxvY2tGcmFtZT10b3BGcmFtZSl7XG4gICAgICAgIGlmKCFsaW5lIHx8ICF0b3BGcmFtZSlcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICAvKipcbiAgICAgICAgICogbm93IG5leHQgbGluZSBmb3VuZCwgdGhlbiBsb2NhdGUgd2l0aCBvbmUgb2YgZm9sbG93aW5nIHdheXNcbiAgICAgICAgICogMS4gdG8gcm91bmQobGVmdCwgdG9wKzEpPz8/PyB3aGF0IGlmIGl0J3Mgb24gdG9wIG1hcmdpbi9ib3JkZXJcbiAgICAgICAgICogMi4gKipmaW5kIG1vc3QgaW5uZXIgbm9kZSB0aGF0IGluY2x1ZGVzIChsZWZ0LCopLCBhbmQgdGhlbiBwb3NpdGlvbiBpbiBwYXJhZ3JhcGggbGluZVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgbGluZU9mZnNldD1ibG9ja0ZyYW1lLmxpbmVYWShsaW5lKVxuICAgICAgICBjb25zdCB0b3BGcmFtZU9mZnNldD10aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXG4gICAgICAgIGNvbnN0IGJsb2NrRnJhbWVPZmZzZXQ9dGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsYmxvY2tGcmFtZSlcbiAgICAgICAgeD14LXRvcEZyYW1lT2Zmc2V0LngtYmxvY2tGcmFtZU9mZnNldC54LWxpbmVPZmZzZXQueFxuICAgICAgICBjb25zdCBpc0luY2x1ZGVYPShyZWN0KT0+cmVjdC54PD14ICYmIChyZWN0LngrcmVjdC53aWR0aCk+PXhcbiAgICAgICAgdmFyIHtub2RlLHBhcmVudHMsLi4uaW5saW5lT2Zmc2V0fT10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgLy9vbmx5IGNvbnRlbnQgaW5jbHVkZSB4XG4gICAgICAgICAgICAocmVjdCx7cHJvcHM6e3dpZHRofX0pPT57XG4gICAgICAgICAgICAgICAgaWYod2lkdGghPXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5hcnk9cmVjdCh7d2lkdGh9KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNJbmNsdWRlWChib3VuYXJ5KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICB2YXIgJHBhcmFncmFwaFxuICAgICAgICBjb25zdCBwb3NzaWJsZVBhcmFncmFwaD1uZXcgUmVhY3RRdWVyeShub2RlKS5maW5kRmlyc3RBbmRQYXJlbnRzKCdbZGF0YS10eXBlPXBhcmFncmFwaF0nKVxuICAgICAgICBjb25zdCBpc0lubGluZU5vZGU9cG9zc2libGVQYXJhZ3JhcGguZmlyc3QubGVuZ3RoPT0wXG4gICAgICAgIGlmKGlzSW5saW5lTm9kZSl7XG4gICAgICAgICAgICAvL2ZpbmQgcGFyYWdyYXBoIGJsb2NrIHVwXG4gICAgICAgICAgICBjb25zdCBqPXBhcmVudHMuZmluZExhc3RJbmRleChhPT5hLnByb3BzLnBhZ2luYXRpb24pXG4gICAgICAgICAgICBpZihqPT0tMSl7XG4gICAgICAgICAgICAgICAgLy9uZXh0TGluZSBzaG91bGQgYmUgcGFyYWdyYXBoIGxpbmVcbiAgICAgICAgICAgICAgICAkcGFyYWdyYXBoPWxpbmVcbiAgICAgICAgICAgICAgICBpbmxpbmVPZmZzZXQ9e3g6MCx5OjB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAkcGFyYWdyYXBoPXBhcmVudHNbal1cbiAgICAgICAgICAgICAgICBpbmxpbmVPZmZzZXQ9cGFyZW50cy5zbGljZSgwLGorMSkucmVkdWNlKCh4eSx7cHJvcHM6e3g9MCx5PTB9fSk9Pih4eS54Kz14LHh5LnkrPXkseHkpLHt4OjAseTowfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7Ly9uZXN0ZWQgcGFyYWdyYXBoLCB3aGljaCBtZWFucyBmcmFtZSBpbiBwYXJhZ3JhcGhcbiAgICAgICAgICAgIGlubGluZU9mZnNldD1bLi4ucG9zc2libGVQYXJhZ3JhcGgucGFyZW50cyxwb3NzaWJsZVBhcmFncmFwaC5maXJzdC5nZXQoMCldXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgoeHkse3Byb3BzOnt4PTAseT0wfX0pPT4oeHkueCs9eCx4eS55Kz15LHh5KSxpbmxpbmVPZmZzZXQpXG4gICAgICAgICAgICAkcGFyYWdyYXBoPXBvc3NpYmxlUGFyYWdyYXBoLmZpcnN0LmdldCgwKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtwYWdpbmF0aW9uOntpZDpwaWQsaX0scGFyYWdyYXBoPXRoaXMuZ2V0Q29tcG9zZXIocGlkKX09JHBhcmFncmFwaC5wcm9wc1xuICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbklubGluZShwYXJhZ3JhcGguY29tcHV0ZWQubGFzdENvbXBvc2VkW2ktMV0sIHgtaW5saW5lT2Zmc2V0LngpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdG8gYXJvdW5kIHRvIHggaW4gYSBsaW5lIG9mIHBhcmFncmFwaCwgdGhlIHBhcmFncmFwaCBsaW5lIG11c3QgYmUgaW4gIGxlYWZGcmFtZVxuICAgICAqIEBwYXJhbSB7Kn0gY29tcG9zZWRMaW5lIFxuICAgICAqIEBwYXJhbSB7Kn0gWCBcbiAgICAgKi9cbiAgICBhcm91bmRJbklubGluZShjb21wb3NlZExpbmUsWCl7XG4gICAgICAgIC8vZmluZCBhdG9tIG5vZGUgdGhhdCBpbmNsdWRlIHhcbiAgICAgICAgY29uc3Qge25vZGUsIHBhcmVudHMsIC4uLm9mZnNldH09dGhpcy5nZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKFxuICAgICAgICAgICAgY29tcG9zZWRMaW5lLFxuICAgICAgICAgICAgKHJlY3Qse3Byb3BzOnt3aWR0aH19KT0+e1xuICAgICAgICAgICAgICAgIGlmKHdpZHRoIT11bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7eH09cmVjdCgpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4PD1YICYmICh4K3dpZHRoKT49WFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub2RlPT5ub2RlPT1jb21wb3NlZExpbmUgPyB1bmRlZmluZWQgOiBub2RlXG4gICAgICAgIClcblxuICAgICAgICBpZihub2RlKXtcbiAgICAgICAgICAgIGNvbnN0ICRub2RlPW5ldyBSZWFjdFF1ZXJ5KG5vZGUpXG4gICAgICAgICAgICBpZigkbm9kZS5hdHRyKFwiY2xhc3NOYW1lXCIpPT1cImVuZGVyXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpjb21wb3NlZExpbmUucHJvcHNbXCJkYXRhLWNvbnRlbnRcIl0sYXQ6MX1cbiAgICAgICAgICAgIGNvbnN0IHRleHROb2RlPSRub2RlLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cInRleHRcIl1gKS5nZXQoMClcbiAgICAgICAgICAgIGlmKHRleHROb2RlKXsvL3RleHRcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e2NoaWxkcmVuOnRleHQsIFwiZGF0YS1jb250ZW50XCI6aWQsXCJkYXRhLWVuZGF0XCI6ZW5kYXR9LGNvbXBvc2VyPXRoaXMuZ2V0Q29tcG9zZXIoaWQpfT10ZXh0Tm9kZVxuICAgICAgICAgICAgICAgIGNvbnN0IGk9Y29tcG9zZXIubWVhc3VyZS53aWR0aFN0cmluZyhYLW9mZnNldC54LHRleHQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZCwgYXQ6ZW5kYXQtdGV4dC5sZW5ndGgraX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlkPSRub2RlLmZpbmRGaXJzdChgW2RhdGEtY29udGVudF1gKS5hdHRyKFwiZGF0YS1jb250ZW50XCIpXG4gICAgICAgICAgICBpZihpZClcbiAgICAgICAgICAgICAgICByZXR1cm4ge2lkfVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlcj1wYXJlbnRzLmZpbmRMYXN0KGE9PmEucHJvcHNbXCJkYXRhLWNvbnRlbnRcIl0pXG4gICAgICAgICAgICBpZih3cmFwcGVyKVxuICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6d3JhcHBlci5wcm9wc1tcImRhdGEtY29udGVudFwiXX1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zdCAkbGluZT1uZXcgUmVhY3RRdWVyeShjb21wb3NlZExpbmUucHJvcHMuY2hpbGRyZW4pXG4gICAgICAgICAgICBjb25zdCB7Zmlyc3QscGFyZW50c309JGxpbmUuZmluZEZpcnN0QW5kUGFyZW50cygnW2RhdGEtY29udGVudF0nKVxuICAgICAgICAgICAgaWYoZmlyc3QubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgIGlmKFg8PVsuLi5wYXJlbnRzLGZpcnN0LmdldCgwKV0ucmVkdWNlKCh4MCx7cHJvcHM6e3g9MH19KT0+eDAreCwwKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6Zmlyc3QuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MH1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2xhc3QscGFyZW50c309JGxpbmUuZmluZExhc3RBbmRQYXJlbnRzKCdbZGF0YS1jb250ZW50XScpXG4gICAgICAgICAgICAgICAgICAgIGlmKGxhc3QuYXR0cignZGF0YS10eXBlJyk9PVwidGV4dFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldC54PVsuLi5wYXJlbnRzLGxhc3QuZ2V0KDApXS5yZWR1Y2UoKHgwLHtwcm9wczp7eD0wfX0pPT54MCt4LDApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihYPj0ob2Zmc2V0LngrbGFzdC5hdHRyKCd3aWR0aCcpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpsYXN0LmF0dHIoJ2RhdGEtY29udGVudCcpLGF0Omxhc3QuYXR0cignZGF0YS1lbmRhdCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntjaGlsZHJlbjp0ZXh0LCBcImRhdGEtY29udGVudFwiOmlkLFwiZGF0YS1lbmRhdFwiOmVuZGF0fSxjb21wb3Nlcj10aGlzLmdldENvbXBvc2VyKGlkKX09bGFzdC5nZXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpPWNvbXBvc2VyLm1lYXN1cmUud2lkdGhTdHJpbmcoWC1vZmZzZXQueCx0ZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQsIGF0OmVuZGF0LXRleHQubGVuZ3RoK2l9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpsYXN0LmF0dHIoJ2RhdGEtY29udGVudCcpLGF0OjF9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9sYXN0IGNoYW5jZSBhdCBiZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBzdWNoIGFzIGVtcHR5IHBhcmFncmFwaFxuICAgICAgICByZXR1cm4ge2lkOmNvbXBvc2VkTGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXSxhdDowfVxuICAgIH1cblxuICAgIC8vdG8gbWFrZSBwb3NpdGlvbmluZyBvbmx5IGJhc2VkIG9uIGNvbXBvc2UsIG5vdCBjb250ZW50XG4gICAgX19maW5kRmlyc3RQYXJhZ3JhcGhJblRhcmdldCh0YXJnZXQpe1xuICAgICAgICBjb25zdCBnZXRQYXJhZ3JhcGhJbkNlbGw9YT0+bmV3IFJlYWN0UXVlcnkoYS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSkuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwicGFyYWdyYXBoXCJdYCkuYXR0cihcImRhdGEtY29udGVudFwiKVxuICAgICAgICB2YXIgcGFyYWdyYXBoSW5DZWxsPW51bGxcbiAgICAgICAgaWYodGFyZ2V0LmdldENvbXBvc2VUeXBlKCk9PVwiY2VsbFwiKXtcbiAgICAgICAgICAgIHRhcmdldC5jb21wdXRlZC5sYXN0Q29tcG9zZWQuZmluZChhPT5wYXJhZ3JhcGhJbkNlbGw9Z2V0UGFyYWdyYXBoSW5DZWxsKGEpKVxuICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaEluQ2VsbFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoRGlyZWN0PW5ldyBSZWFjdFF1ZXJ5KHRhcmdldC5jb21wdXRlZC5sYXN0Q29tcG9zZWQpLmZpbmRGaXJzdChhPT57XG4gICAgICAgICAgICAgICAgaWYoIWEgfHwgIWEucHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICBpZihhLnByb3BzW1wiZGF0YS10eXBlXCJdPT1cInBhcmFncmFwaFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIGlmKGEuaXNGcmFtZSl7Ly90YWJsZSBDZWxsIGlzIHNwZWNpYWwsIHNpbmNlIHRhYmxlIGFuZCByb3cgbGFzdCBjb21wb3NlZCBlbGVtZW50IGluY2x1ZGVzIENlbGwgRnJhbWVzLCBpbnN0ZWFkIG9mIGNlbGwgY29udGVudFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoSW5DZWxsPWdldFBhcmFncmFwaEluQ2VsbChhKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhJbkNlbGwgfHwgcGFyYWdyYXBoRGlyZWN0LmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbiBwYXJhZ3JhcGg6IGlkLT5wYXJhZ3JhcGgtPmxpbmVcbiAgICAgKiBwYXJhZ3JhcGg6XG4gICAgICogbGFyZ2VyIGZyYW1lIHRoYW4gcGFyYWdyYXBoOlxuICAgICAqIGFuY2hvciBub3QgaW4gcGFyYWdyYXBoOlxuICAgICAqIEBwYXJhbSB7Kn0gaWQgXG4gICAgICogQHBhcmFtIHsqfSBhdCBcbiAgICAgKi9cbiAgICBwb3NpdGlvblRvTGVhZkZyYW1lTGluZShpZCxhdCl7XG4gICAgICAgIGNvbnN0IHRhcmdldD10aGlzLmdldENvbXBvc2VyKGlkKVxuICAgICAgICBjb25zdCBwYXJhZ3JhcGg9dGFyZ2V0LmNsb3Nlc3QoXCJwYXJhZ3JhcGhcIilcbiAgICAgICAgY29uc3QgJGZpbmQ9YXQ9PTEgPyAnZmluZExhc3QnIDogJ2ZpbmRGaXJzdCdcbiAgICAgICAgY29uc3QgZmluZD1hdD09MSA/IFwiZmluZExhc3RcIiA6IFwiZmluZFwiXG4gICAgICAgIHZhciBpPTAsIGxlYWZGcmFtZSxsaW5lSW5GcmFtZSwgcG9zaXRpb24sIGFuY2hvclxuICAgICAgICAvL0BUT0RPOiBob3cgdG8gZmluZCB0YXJnZXQncyBmaXJzdCBwYXJhZ3JhcGg/Pz8gLy9cbiAgICAgICAgY29uc3QgdGFyZ2V0SGFzUGFyYWdyYXBoPSB0YXJnZXQhPXBhcmFncmFwaCAmJiB0aGlzLl9fZmluZEZpcnN0UGFyYWdyYXBoSW5UYXJnZXQodGFyZ2V0KS8vdGhpcy5nZXRDb250ZW50KGlkKVskZmluZF0oJ3BhcmFncmFwaCcpLmF0dHIoJ2lkJylcbiAgICAgICAgaWYocGFyYWdyYXBoICYmICF0YXJnZXRIYXNQYXJhZ3JhcGgpe1xuICAgICAgICAgICAgaWYocGFyYWdyYXBoLnByb3BzLmlkPT1pZCl7XG4gICAgICAgICAgICAgICAgLy9wYXJhZ3JhcGggbGV2ZWxcbiAgICAgICAgICAgICAgICBpPWF0PT0xID8gcGFyYWdyYXBoLmxpbmVzLmxlbmd0aC0xIDogMFxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgLy9pbmxpbmUgbGV2ZWxcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBpbmxpbmUgY29udGVudCBpbmNsdWRlczogXG4gICAgICAgICAgICAgICAgICogMS4gYXRvbXMsc3VjaCBhcyBpbWFnZSx0ZXh0LC4uLiwgd2hpY2ggaXMgbm90IHNlbnNpdGl2ZSB0byBxdWVyeS5maW5kRmlyc3QvZmluZExhc3RcbiAgICAgICAgICAgICAgICAgKiAyLiBpbmxpbmUgY29udGFpbmVyOiBpdCdzIHNlbnNpdGl2ZSB0byBhdCgwOmNvbmFpbmVyIHN0YXJ0fDE6IGNvbnRhaW5lciBlbmQpIHRvIHF1ZXJ5LmZpbmRGaXJzdC9maW5kTGFzdFxuICAgICAgICAgICAgICAgICAqIDMuIGFuY2hvcnNcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBpPXBhcmFncmFwaC5saW5lc1tgJHtmaW5kfUluZGV4YF0obGluZT0+bGluZS5hdG9tcy5maW5kKGF0b209PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGF0b209bmV3IFJlYWN0UXVlcnkoYXRvbSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZT0kYXRvbVskZmluZF0oYFtkYXRhLWNvbnRlbnQ9XCIke2lkfVwiXWApXG4gICAgICAgICAgICAgICAgICAgIGlmKG5vZGUubGVuZ3RoPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmKCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtZW5kYXRcIjplbmRhdCwgY2hpbGRyZW46dGV4dH19PW5vZGUuZ2V0KDApXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihlbmRhdD09dW5kZWZpbmVkIC8vbm90IHRleHQsIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYXQ+PWVuZGF0LXRleHQubGVuZ3RoICYmIGF0PGVuZGF0KSkvL2luc2lkZSB0ZXh0LHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYXQ9PWVuZGF0ICYmIHRoaXMuZ2V0Q29tcG9zZXIoaWQpLnRleHQubGVuZ3RoPT1lbmRhdCkvL25leHQgb2YgbGFzdCB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSkoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihhdG9tLnByb3BzLmFuY2hvcil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yPSRhdG9tLmZpbmRGaXJzdCgnW2RhdGEtdHlwZT1cImFuY2hvclwiXScpLmF0dHIoJ2RhdGEtY29udGVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZWFmRnJhbWU9cGFyYWdyYXBoLmxpbmVzW2ldLnNwYWNlLmZyYW1lXG4gICAgICAgICAgICBsaW5lSW5GcmFtZT1sZWFmRnJhbWUubGluZXMuZmluZCgoe3Byb3BzOntwYWdpbmF0aW9uOntpZDpwLGk6SX09e319fSk9PnA9PXBhcmFncmFwaC5wcm9wcy5pZCYmST09aSsxKVxuICAgICAgICAgICAgcG9zaXRpb249KCk9PnRoaXMucG9zaXRpb25JbklubGluZShpZCxhdCxwYXJhZ3JhcGguY29tcHV0ZWQubGFzdENvbXBvc2VkW2ldKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYmlnZ2VyIHRoYW4gcGFyYWdyYXBoIGxldmVsXG4gICAgICAgICAgICAgKiB3cmFwcGVyIG9mIHBhcmFncmFwaFxuICAgICAgICAgICAgICogdGFibGUvcm93L2NlbGxcbiAgICAgICAgICAgICAqIGZyYW1lL3NoYXBlXG4gICAgICAgICAgICAgKiBcbiAgICAgICAgICAgICAqIHVzZSB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRhcmdldCwgYW5kIGZpbmQgdXAgZnJhbWUgdGhhdCBpbmNsdWRlcyB0YXJnZXQgXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UGFyYWdyYXBoPXRoaXMuZ2V0Q29tcG9zZXIodGFyZ2V0SGFzUGFyYWdyYXBoKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZWFmRnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUoXG4gICAgICAgICAgICAgICAgZmlyc3RQYXJhZ3JhcGgubGluZXNbYXQ9PTEgPyBmaXJzdFBhcmFncmFwaC5saW5lcy5sZW5ndGgtMSA6IDBdLnNwYWNlLmZyYW1lLCBcbiAgICAgICAgICAgICAgICBhPT5uZXcgUmVhY3RRdWVyeShhLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKS5maW5kRmlyc3QoYFtkYXRhLWNvbnRlbnQ9JHtpZH1dYCkubGVuZ3RoPT0xLFxuICAgICAgICAgICAgICAgIHRydWUsLy9maXJzdCBmcmFtZSBpbmNsdWRlcyBpZFxuICAgICAgICAgICAgICAgIGZpbmRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGxpbmVJbkZyYW1lPWxlYWZGcmFtZS5saW5lc1tmaW5kXShsaW5lPT5uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3QoYFtkYXRhLWNvbnRlbnQ9JHtpZH1dYCkubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIWxpbmVJbkZyYW1lKXtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj0oKT0+e1xuICAgICAgICAgICAgICAgICAgICBpZihhdD09MSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7d2lkdGgsaGVpZ2h0fT1sZWFmRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkucHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7eDp3aWR0aCx5OmhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3g6MCx5OjAsfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uPSgpPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmaXJzdCxsYXN0LG5vZGU9Zmlyc3R8fGxhc3QsIHBhcmVudHN9PW5ldyBSZWFjdFF1ZXJ5KGxpbmVJbkZyYW1lKVtgJHskZmluZH1BbmRQYXJlbnRzYF0oYFtkYXRhLWNvbnRlbnQ9JHtpZH1dYClcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeD1bLi4ucGFyZW50cyxub2RlLmdldCgwKV0ucmVkdWNlKChYLHtwcm9wczp7eD0wfX0pPT54K1gsMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt4OmF0PT0xID8geCsobm9kZS5hdHRyKCd3aWR0aCcpfHwwKSA6IHgsIHk6MH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZWFmRnJhbWUsIFxuICAgICAgICAgICAgbGluZTpuZXcgUHJveHkobGluZUluRnJhbWV8fHt9LHtcbiAgICAgICAgICAgICAgICBnZXQobGluZSxwcm9wKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoW1wicG9zaXRpb25cIixcInBhcmFncmFwaFwiLFwiaVwiLFwiaW5GcmFtZVwiLFwiaGVpZ2h0XCJdLmluY2x1ZGVzKHByb3ApKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhZ3JhcGg6cGFyYWdyYXBoID8gcGFyYWdyYXBoLnByb3BzLmlkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6cGFyYWdyYXBoID8gaSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkZyYW1lOmxpbmVJbkZyYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDpsaW5lSW5GcmFtZSAmJiBsaW5lSW5GcmFtZS5wcm9wcy5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1bcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZVtwcm9wXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYW5jaG9yOiBhbmNob3IgJiYgKHtcbiAgICAgICAgICAgICAgICBpZDphbmNob3IsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246bnVsbCwvL2ltcGxlbWVudGVkIGJ5IG9mZnNldCBcbiAgICAgICAgICAgICAgICBvZmZzZXQodG9wRnJhbWUpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQ9bm9kZXM9Pm5vZGVzLmZpbHRlcihhPT4hIWEpLnJlZHVjZSgobyx7cHJvcHM6e3g9MCx5PTB9fSk9PihvLngrPXgsIG8ueSs9eSwgbykse3g6MCx5OjB9KVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7Zmlyc3QsIHBhcmVudHN9PW5ldyBSZWFjdFF1ZXJ5KHRvcEZyYW1lLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmRGaXJzdEFuZFBhcmVudHMoYFtkYXRhLWNvbnRlbnQ9XCIke2FuY2hvcn1cIl1gKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uPSgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhPWZpcnN0LmZpbmRGaXJzdEFuZFBhcmVudHMoYFtkYXRhLWNvbnRlbnQ9XCIke2lkfV1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldChbLi4uYS5wYXJlbnRzLGEuZmlyc3QuZ2V0KDApXSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0KFsuLi5wYXJlbnRzXSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcblx0ICogcG9zaXRpb24gKGlkLGF0KSBvbiBwYXJhZ3JhcGggY29tcG9zZWRMaW5lLCBwYXJhZ3JhcGggbGluZSBtdXN0IGJlIGluIGEgIGxlYWZGcmFtZVxuXHQgKiBAcGFyYW0geyp9IGlkIFxuXHQgKiBAcGFyYW0geyp9IGF0IFxuXHQgKiBAcGFyYW0geyp9IGkgXG5cdCAqL1xuXHRwb3NpdGlvbkluSW5saW5lKGlkLGF0LGNvbXBvc2VkTGluZSl7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaD10aGlzLmdldENvbXBvc2VyKGNvbXBvc2VkTGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXSlcblx0XHRjb25zdCBkZWZhdWx0U3R5bGU9cGFyYWdyYXBoLmdldERlZmF1bHRNZWFzdXJlKCkuZGVmYXVsdFN0eWxlXG5cdFx0Ly9jb3VsZCBpdCBzZWFyY2ggZnJvbSBsaW5lIGRpcmVjdGx5IHRvIHRhcmdldFxuICAgICAgICBjb25zdCB7Zmlyc3Q6c3RvcnkscGFyZW50czpzdG9yeVVwc309bmV3IFJlYWN0UXVlcnkoY29tcG9zZWRMaW5lKS5maW5kRmlyc3RBbmRQYXJlbnRzKFwiLnN0b3J5XCIpXG4gICAgICAgIGNvbnN0IHBvcz1zdG9yeVVwcy5yZWR1Y2UoKHh5LHtwcm9wczp7eD0wLHk9MH19KT0+KHh5LngrPXgseHkueSs9eSx4eSkse3g6MCx5OjAsLi4uZGVmYXVsdFN0eWxlfSlcbiAgICAgICAgY29uc3QgbGluZURlc2NlbnQ9c3RvcnkuYXR0cignbGluZURlc2NlbnQnKVxuICAgICAgICBcblx0XHRjb25zdCBpc1BhcmFncmFwaFNlbGY9aWQ9PXBhcmFncmFwaC5wcm9wcy5pZFxuXHRcdGNvbnN0IHtmaXJzdCxsYXN0LHRhcmdldD1maXJzdHx8bGFzdCxwYXJlbnRzfT1zdG9yeVtgJHthdD09MSA/IFwiZmluZExhc3RcIiA6IFwiZmluZEZpcnN0XCJ9QW5kUGFyZW50c2BdKFxuXHRcdFx0aXNQYXJhZ3JhcGhTZWxmID8gXG5cdFx0XHRgLmVuZGVyJHthdD09MCA/IFwiLFtkYXRhLWNvbnRlbnRdXCIgOiBcIlwifWAgOiBcblx0XHRcdG5vZGU9PntcbiAgICAgICAgICAgICAgICBpZighUmVhY3QuaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9wczp7XCJkYXRhLWNvbnRlbnRcIjpjb250ZW50LFwiZGF0YS1lbmRhdFwiOmVuZGF0LGNoaWxkcmVuOnRleHR9fT1ub2RlXG5cdFx0XHRcdGlmKGNvbnRlbnQhPWlkKVxuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHRpZihlbmRhdD09dW5kZWZpbmVkIHx8IChhdDw9ZW5kYXQgJiYgYXQ+PWVuZGF0LXRleHQubGVuZ3RoKSlcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0W3RhcmdldC5nZXQoMCksLi4ucGFyZW50c10ucmVkdWNlKChvLHtwcm9wczp7eD0wLHk9MH19KT0+KG8ueCs9eCwgby55Kz15LCBvKSwgcG9zKTtcbiAgICAgICAgXG4gICAgICAgIGlmKGlzUGFyYWdyYXBoU2VsZil7XG4gICAgICAgICAgICBwb3MueT0wXG5cdFx0XHRyZXR1cm4gcG9zXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHtoZWlnaHQsd2lkdGgsZGVzY2VudH09dGFyZ2V0LmdldCgwKS5wcm9wc1xuICAgICAgICBpZihkZXNjZW50IT11bmRlZmluZWQpey8vdGV4dCBvciB0ZXh0IGlubGluZSBjb250YWluZXJcbiAgICAgICAgICAgIHBvcy55LT0oaGVpZ2h0LWRlc2NlbnQpXG4gICAgICAgICAgICBwb3MuaGVpZ2h0PWhlaWdodFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHBvcy5oZWlnaHQ9aGVpZ2h0K2xpbmVEZXNjZW50XG4gICAgICAgIH1cblxuXHRcdGNvbnN0IGNvbXBvc2VyPXRoaXMuZ2V0Q29tcG9zZXIoaWQpXG5cdFx0aWYoY29tcG9zZXIuZ2V0Q29tcG9zZVR5cGUoKT09XCJ0ZXh0XCIpe1xuXHRcdFx0Y29uc3QgZW5kYXQ9dGFyZ2V0LmF0dHIoXCJkYXRhLWVuZGF0XCIpXG5cdFx0XHRjb25zdCB0ZXh0PXRhcmdldC5hdHRyKCdjaGlsZHJlbicpXG5cdFx0XHRpZihlbmRhdD49YXQpe1xuXHRcdFx0XHRjb25zdCBsZW49YXQtKGVuZGF0LXRleHQubGVuZ3RoKVxuXHRcdFx0XHRjb25zdCBvZmZzZXQ9Y29tcG9zZXIubWVhc3VyZS5zdHJpbmdXaWR0aCh0ZXh0LnN1YnN0cmluZygwLGxlbikpXG5cdFx0XHRcdHBvcy54Kz1vZmZzZXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2UgaWYoYXQ9PTEgJiYgd2lkdGgpe1xuICAgICAgICAgICAgcG9zLngrPXdpZHRoXG4gICAgICAgIH1cbiAgICAgICAgXG5cdFx0cmV0dXJuIHBvc1xuICAgIH1cbiAgICBcbiAgICBnZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUoe3Byb3BzOnsnZGF0YS1jb250ZW50JzppZCwnZGF0YS1mcmFtZSc6ZnJhbWVJZCwgY29tcG9zZXI9dGhpcy5nZXRDb21wb3NlcihpZCl9fSl7XG4gICAgICAgIHJldHVybiBmcmFtZUlkPT1pZCA/IGNvbXBvc2VyIDogY29tcG9zZXIuY29tcHV0ZWQuY29tcG9zZWQuZmluZChhPT5hLnV1aWQ9PWZyYW1lSWQpXG4gICAgfVxufVxuLyoqXG4gKiBJdCB1dGlsaXplIGNvbXBvc2VyIHRvIGRvIHBvc2l0aW9uaW5nLCBcbiAqIHNvIGVhY2ggY29tcG9zZXIgbXVzdCBpbXBsZW1lbnQgaXRzZWxmIHBvc2l0aW9uaW5nIG1ldGhvZHMsIHdoaWNoIGFjdHVhbGx5IG1ha2UgY29tcG9zZXIgY29tcGxleFxuICogQ2FuIHdlIG1ha2UgYSBwdXJlIHBvc2l0aW9uaW5nIGlzb2xhdGVkIGZyb20gY29tcG9zZXI/Pz9cbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBQb3NpdGlvbmluZy5tYWtlU2FmZShjbGFzcyBSZWFjdFBvc2l0aW9uaW5nIGV4dGVuZHMgUG9zaXRpb25pbmdIZWxwZXIge1xuICAgIC8qKlxuICAgICAqIDIgb3B0aW9uczpcbiAgICAgKiA+PmEuIHBvc2l0aW9uaW5nIGZyb20gdXAgdG8gaWQsIHNjb3BlIGZyb20gYmlnIHRvIHNtYWxsXG4gICAgICogPj5iLiBwb3NpdGlvbmluZyBmcm9tIGlkIHVwLCBwZXJmb3JtYW5jZSBzaG91bGQgYmUgYmV0dGVyLCBjaG9zZW5cbiAgICAgKiB0aGUgbG9jYXRpb24gbWF5IGJlOlxuICAgICAqIElubGluZSBMZXZlbFxuICAgICAqL1xuICAgIHBvc2l0aW9uKGlkLGF0LCBfX3JldHVybkV2ZXJ5dGhpbmcpe1xuICAgICAgICAvLyNiICwgKGlkLGF0KS0+bGluZS0+ZnJhbWUtPnRvcEZyYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBtYXliZSBubyBsaW5lXG4gICAgICAgICAqID4gYW5jaG9yXG4gICAgICAgICAqID4gdG9wRnJhbWUgaXRzZWxmXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCB7bGVhZkZyYW1lLGxpbmUsIGFuY2hvcn09dGhpcy5wb3NpdGlvblRvTGVhZkZyYW1lTGluZShpZCxhdClcbiAgICAgICAgY29uc3QgdG9wRnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUobGVhZkZyYW1lKVxuICAgICAgICBjb25zdCB0b3BGcmFtZU9mZnNldD10aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXG4gICAgICAgIGNvbnN0IGxlYWZGcmFtZU9mZnNldD0hYW5jaG9yID8gdGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsbGVhZkZyYW1lKSA6IGFuY2hvci5vZmZzZXQodG9wRnJhbWUsbGVhZkZyYW1lKVxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0PSghYW5jaG9yICYmIGxpbmUucGFyYWdyYXBoKSA/IGxlYWZGcmFtZS5saW5lWFkobGluZS5pbkZyYW1lKSA6IHt4OjAseTowfVxuICAgICAgICBjb25zdCBpbmxpbmU9IWFuY2hvciA/IGxpbmUucG9zaXRpb24oaWQsYXQpIDogYW5jaG9yLnBvc2l0aW9uKHRvcEZyYW1lLGlkLGF0KVxuXG4gICAgICAgIC8vZmluYWxseVxuICAgICAgICBjb25zdCB4PXRvcEZyYW1lT2Zmc2V0LngrbGVhZkZyYW1lT2Zmc2V0LngrbGluZU9mZnNldC54K2lubGluZS54XG4gICAgICAgIGNvbnN0IHk9dG9wRnJhbWVPZmZzZXQueStsZWFmRnJhbWVPZmZzZXQueStsaW5lT2Zmc2V0LnkraW5saW5lLnlcbiAgICAgICAgY29uc3QgcG9zaXRpb249e1xuICAgICAgICAgICAgaWQsYXQsXG4gICAgICAgICAgICAuLi5pbmxpbmUsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIC4uLnRoaXMuYXNWaWV3cG9ydFBvaW50KHsgeCx5IH0pLFxuICAgICAgICAgICAgcGFnZTp0b3BGcmFtZS5wcm9wcy5JLFxuICAgICAgICAgICAgcGFyYWdyYXBoOmxpbmUucGFyYWdyYXBoLFxuICAgICAgICAgICAgbGluZUluZGV4T2ZQYXJhZ3JhcGg6bGluZS5pLFxuICAgICAgICAgICAgbGluZUhlaWdodDpsaW5lLmhlaWdodFxuICAgICAgICB9XG5cbiAgICAgICAgaWYoIV9fcmV0dXJuRXZlcnl0aGluZylcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwb3NpdGlvbiwge1xuICAgICAgICAgICAgdG9wRnJhbWUsIFxuICAgICAgICAgICAgbGVhZkZyYW1lLCBcbiAgICAgICAgICAgIGdldCBsaW5lSW5kZXhJbkxlYWZGcmFtZSgpe1xuICAgICAgICAgICAgICAgIGlmKCFsaW5lLmluRnJhbWUgJiYgIWFuY2hvcil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdD09MCA/IDAgOiBsZWFmRnJhbWUubGluZXMubGVuZ3RoLTFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZGcmFtZS5saW5lcy5pbmRleE9mKGxpbmUuaW5GcmFtZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbGluZSgpe1xuICAgICAgICAgICAgICAgIGlmKHRvcEZyYW1lPT1sZWFmRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpbmVJbmRleEluTGVhZkZyYW1lXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvcEZyYW1lLmxpbmVzLmZpbmRJbmRleChhPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLWZyYW1lPVwiJHtsZWFmRnJhbWUudXVpZH1cIl1gKS5sZW5ndGg9PTEpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgbGF5ZXIoKXtcbiAgICAgICAgICAgICAgICBjb25zdCB7cGFyZW50c309bmV3IFJlYWN0UXVlcnkodG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpLmZpbmRGaXJzdEFuZFBhcmVudHMoYFtkYXRhLWNvbnRlbnQ9XCIke2lkfV1gKVxuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyPXBhcmVudHMuZmluZChhPT5hICYmIGEudHlwZS5kaXNwbGF5TmFtZT09XCJsYXllclwiKVxuICAgICAgICAgICAgICAgIGlmKGxheWVyKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLnByb3BzLnpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcG9zaXRpb25Ub0xpbmVFbmQoaWQsYXQpe1xuICAgICAgICBjb25zdCBwb3M9dGhpcy5wb3NpdGlvbihpZCxhdCx0cnVlKVxuICAgICAgICBjb25zdCB7cGFyYWdyYXBoLCBsaW5lSW5kZXhPZlBhcmFncmFwaH09cG9zXG4gICAgICAgIGlmKGxpbmVJbmRleE9mUGFyYWdyYXBoIT0tMSl7XG4gICAgICAgICAgICBjb25zdCAkcD10aGlzLmdldENvbXBvc2VyKHBhcmFncmFwaClcbiAgICAgICAgICAgIGNvbnN0IGF0b209JHAubGluZXNbbGluZUluZGV4T2ZQYXJhZ3JhcGhdLmxhc3RBdG9tXG4gICAgICAgICAgICBpZihhdG9tPT0kcC5hdG9tc1skcC5hdG9tcy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpwYXJhZ3JhcGgsIGF0OjF9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGU9bmV3IFJlYWN0UXVlcnkoYXRvbSkuZmluZExhc3Qobm9kZT0+e1xuICAgICAgICAgICAgICAgIGlmKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlzQ29udGVudCwgXCJkYXRhLXR5cGVcIjp0eXBlLCBjaGlsZHJlbn19PW5vZGVcbiAgICAgICAgICAgICAgICBpZihpc0NvbnRlbnQgJiYgKHR5cGU9PVwidGV4dFwiIHx8ICFjaGlsZHJlbikpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihub2RlLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5hdHRyKFwiZGF0YS10eXBlXCIpPT1cInRleHRcIil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSwgYXQ6TWF0aC5tYXgoMCxub2RlLmF0dHIoXCJkYXRhLWVuZGF0XCIpLTEpfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOm5vZGUuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cbiAgICBwb3NpdGlvblRvTGluZVN0YXJ0KGlkLGF0KXtcbiAgICAgICAgY29uc3QgcG9zPXRoaXMucG9zaXRpb24oaWQsYXQsdHJ1ZSlcbiAgICAgICAgY29uc3Qge3BhcmFncmFwaCwgbGluZUluZGV4T2ZQYXJhZ3JhcGh9PXBvc1xuICAgICAgICBpZihsaW5lSW5kZXhPZlBhcmFncmFwaCE9LTEpe1xuICAgICAgICAgICAgY29uc3QgJHA9dGhpcy5nZXRDb21wb3NlcihwYXJhZ3JhcGgpXG4gICAgICAgICAgICBjb25zdCBhdG9tPSRwLmxpbmVzW2xpbmVJbmRleE9mUGFyYWdyYXBoXS5maXJzdEF0b21cbiAgICAgICAgICAgIGlmKGF0b209PSRwLmF0b21zWzBdKVxuICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6cGFyYWdyYXBoLCBhdDowfVxuICAgICAgICAgICAgY29uc3Qgbm9kZT1uZXcgUmVhY3RRdWVyeShhdG9tKS5maW5kRmlyc3Qobm9kZT0+e1xuICAgICAgICAgICAgICAgIGlmKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlzQ29udGVudCwgXCJkYXRhLXR5cGVcIjp0eXBlLCBjaGlsZHJlbn19PW5vZGVcbiAgICAgICAgICAgICAgICBpZihpc0NvbnRlbnQgJiYgKHR5cGU9PVwidGV4dFwiIHx8ICFjaGlsZHJlbikpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihub2RlLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5hdHRyKFwiZGF0YS10eXBlXCIpPT1cInRleHRcIil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSwgYXQ6bm9kZS5hdHRyKFwiZGF0YS1lbmRhdFwiKS1ub2RlLmF0dHIoJ2NoaWxkcmVuJykubGVuZ3RofVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOm5vZGUuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cbiAgICBhcm91bmQobGVmdCx0b3Ape1xuICAgICAgICAvL2NvbnZlcnQgdG8gY2FudmFzIGNvLW9yZGluYXRlXG4gICAgICAgIHZhciB7IHgsIHkgfSA9IHRoaXMuYXNDYW52YXNQb2ludCh7IGxlZnQsIHRvcCB9KVxuICAgICAgICBcbiAgICAgICAgY29uc3Qge3RvcEZyYW1lLHRvcEZyYW1lT2Zmc2V0fT10aGlzLmdldFRvcEZyYW1lQnlQb3NpdGlvbih4LHkpXG4gICAgICAgIGlmKCF0b3BGcmFtZSlcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcG9pbnRJc0luc2lkZT0oe3g6eDA9MCx5OnkwPTAsd2lkdGgsaGVpZ2h0fSwuLi5vZmZzZXRzKT0+e1xuICAgICAgICAgICAgY29uc3Qgbz1vZmZzZXRzLnJlZHVjZSgobyx7eCx5fSk9PihvLngtPXgsby55LT15LG8pLHt4LHl9KVxuICAgICAgICAgICAgcmV0dXJuIHgwPD1vLnggJiYgeTA8PW8ueSAmJiAoeDArd2lkdGgpPj1vLnggJiYgKHkwK2hlaWdodCk+PW8ueVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL2ZpcnN0IGNoZWNrIGlmIGl0J3MgYW5jaG9yXG4gICAgICAgIGNvbnN0IGFuY2hvcj10b3BGcmFtZS5hbmNob3JzLmZpbmQoKHtwcm9wc30pPT57XG4gICAgICAgICAgICBjb25zdCB7eD0wLHk9MCx3aWR0aD0wLGhlaWdodD0wfT1wcm9wcy5nZW9tZXRyeXx8cHJvcHNcbiAgICAgICAgICAgIHJldHVybiBwb2ludElzSW5zaWRlKHt4LHksd2lkdGgsaGVpZ2h0fSx0b3BGcmFtZU9mZnNldClcbiAgICAgICAgfSlcbiAgICAgICAgaWYoYW5jaG9yKXtcbiAgICAgICAgICAgIGNvbnN0ICRhbmNob3I9bmV3IFJlYWN0UXVlcnkoYW5jaG9yKVxuICAgICAgICAgICAgY29uc3Qgbm90RnJhbWVBbmNob3I9JGFuY2hvci5maW5kRmlyc3QoYFtkYXRhLWZyYW1lXWApLmxlbmd0aD09MFxuICAgICAgICAgICAgaWYobm90RnJhbWVBbmNob3Ipe1xuICAgICAgICAgICAgICAgIGNvbnN0IHtub2RlfT10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvciwgXG4gICAgICAgICAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e3dpZHRoLGhlaWdodCwgXCJkYXRhLW5vY29udGVudFwiOm5vQ29udGVudH19PW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vQ29udGVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpZHRoICYmIGhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRJc0luc2lkZShyZWN0KHt3aWR0aCxoZWlnaHR9KSx0b3BGcmFtZU9mZnNldCwgYW5jaG9yLnByb3BzLmdlb21ldHJ5KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAobm9kZSxwYXJlbnRzKT0+W25vZGUsLi4ucGFyZW50c10uZmluZChhPT5hICYmIGEucHJvcHMgJiYgXCJkYXRhLWNvbnRlbnRcIiBpbiBhLnByb3BzKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5wcm9wc1tcImRhdGEtY29udGVudFwiXX1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vY29udGludWUgdXNlIGZyYW1lIHNlYXJjaFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdG8gZ2V0IGxlYWYgZnJhbWUgdGhhdCBpbmNsdWRlcyB0aGUgcG9pbnQsIGFuZCByZXR1cm4gdGhlIGZyYW1lXG4gICAgICAgIGNvbnN0IHtub2RlOmxlYWZGcmFtZX09dGhpcy5nZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKFxuICAgICAgICAgICAgdG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCksIFxuICAgICAgICAgICAgLy9vbmx5IGZyYW1lIHRoYXQgY29udGFpbiB0aGUgcG9pbnRcbiAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtZnJhbWVcIjppc0ZyYW1lLCB3aWR0aCxoZWlnaHR9fT1ub2RlXG4gICAgICAgICAgICAgICAgaWYoaXNGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50SXNJbnNpZGUocmVjdCh7d2lkdGgsaGVpZ2h0fSksdG9wRnJhbWVPZmZzZXQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy9nZXQgZnJhbWUgZnJvbSBkYXRhLWNvbnRlbnQgYW5kIGRhdGEtZnJhbWVcbiAgICAgICAgICAgIGxheW91dGVkRnJhbWVOb2RlPT50aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShsYXlvdXRlZEZyYW1lTm9kZSlcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBsZWFmRnJhbWVPZmZzZXQ9dGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsbGVhZkZyYW1lKVxuXG4gICAgICAgIC8vbG9jYXRlIHRoZSBsaW5lIHRoYXQgY29udGFpbiB0aGUgcG9pbnRcbiAgICAgICAgdmFyIGxpbmU9bGVhZkZyYW1lLmxpbmVzLmZpbmQobGluZT0+e1xuICAgICAgICAgICAgY29uc3Qge3Byb3BzOnt3aWR0aD0wLCBoZWlnaHQ9MH19PWxpbmVcbiAgICAgICAgICAgIHJldHVybiBwb2ludElzSW5zaWRlKHsuLi5sZWFmRnJhbWUubGluZVhZKGxpbmUpLHdpZHRoLGhlaWdodH0sbGVhZkZyYW1lT2Zmc2V0LHRvcEZyYW1lT2Zmc2V0KVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKCFsaW5lKXtcbiAgICAgICAgICAgIC8vZW5kIG9mIGZyYW1lXG4gICAgICAgICAgICByZXR1cm4ge2lkOmxlYWZGcmFtZS5wcm9wcy5pZCxhdDoxfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0PWxlYWZGcmFtZS5saW5lWFkobGluZSlcbiAgICAgICAgLy93aGF0IGlmIGxlYWZGcmFtZSBpcyBub3QgbGVhZiBub2RlPz8/Pz9cbiAgICAgICAgY29uc3Qge3BhZ2luYXRpb246e2lkLGl9LCBwYXJhZ3JhcGg9dGhpcy5nZXRDb21wb3NlcihpZCl9PWxpbmUucHJvcHNcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kSW5JbmxpbmUocGFyYWdyYXBoLmNvbXB1dGVkLmxhc3RDb21wb3NlZFtpLTFdLHgtdG9wRnJhbWVPZmZzZXQueC1sZWFmRnJhbWVPZmZzZXQueC1saW5lT2Zmc2V0LngpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMS4gc3RhcnQgYW5kIGVuZCBtdXN0IGJlIG5vcm1hbGl6ZWQgdG8gc2FtZSBsYXlvdXQgYmxvY2tcbiAgICAgKiAyLiBhcHBlbmQgcmVjdCBsaW5lIGJ5IGxpbmUgdXAgdG8gXG4gICAgICogMy4gcmVtb3ZlIGxlZnQgb2YgZmlyc3QgbGluZSwgYW5kIHJpZ2h0IG9mIGVuZCBsaW5lXG4gICAgICogQHBhcmFtIHsqfSBzdGFydCBcbiAgICAgKiBAcGFyYW0geyp9IGVuZCBcbiAgICAgKi9cbiAgICBnZXRSYW5nZVJlY3RzKHN0YXJ0LGVuZCl7XG4gICAgICAgIGNvbnN0IHJlY3RzPVtdXG4gICAgICAgIGNvbnN0IHsgcDAsIHAxIH0gPSB0aGlzLmdldE9yZGVyZWRQb3NpdGlvbihzdGFydCwgZW5kKVxuICAgICAgICBcbiAgICAgICAgY29uc3Qgc2NvcGU9KGZ1bmN0aW9uKiAoZnJhbWUwLCBmcmFtZTEpe1xuICAgICAgICAgICAgY29uc3QgbWFrZVJlY3RzPShmcmFtZSxmcm9tPTAsdG89ZnJhbWUubGluZXMubGVuZ3RoLTEpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgdG9wRnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUoZnJhbWUpXG4gICAgICAgICAgICAgICAgY29uc3Qgbz10aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXG4gICAgICAgICAgICAgICAgY29uc3Qge3gseX09dGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsZnJhbWUpIFxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5saW5lcy5zbGljZShmcm9tLHRvKzEpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGxpbmUsXyxfMSx7cHJvcHM6e3dpZHRoLGhlaWdodCxwYWdpbmF0aW9uOntpZDppc1BhcmFncmFwaExpbmV9PXt9fX09bGluZSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHh5PWZyYW1lLmxpbmVYWShsaW5lKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNQYXJhZ3JhcGhMaW5lKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yeT1uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3RBbmRQYXJlbnRzKCcuc3RvcnknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHg9Wy4uLnN0b3J5LnBhcmVudHMsc3RvcnkuZmlyc3QuZ2V0KDApXS5yZWR1Y2UoKFgse3Byb3BzOnt4PTB9fSk9PlgreCwwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0PXN0b3J5LmZpcnN0LmZpbmRGaXJzdEFuZFBhcmVudHMoJ1tkYXRhLWNvbnRlbnRdLC5lbmRlcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeDA9Wy4uLmZpcnN0LnBhcmVudHMsZmlyc3QuZmlyc3QuZ2V0KDApXS5yZWR1Y2UoKFgse3Byb3BzOnt4PTB9fSk9PlgreCx4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3Q9c3RvcnkuZmlyc3QuZmluZExhc3RBbmRQYXJlbnRzKCdbZGF0YS1jb250ZW50XSwuZW5kZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHgxPVsuLi5sYXN0LnBhcmVudHMsbGFzdC5sYXN0LmdldCgwKV0ucmVkdWNlKChYLHtwcm9wczp7eD0wfX0pPT5YK3gseCtsYXN0Lmxhc3QuYXR0cignd2lkdGgnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gey4uLnh5LHg6eHkueCt4MCwgd2lkdGg6eDEteDAsaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi54eSx3aWR0aCxoZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoYT0+KGEueCs9KHgrby54KSwgYS55Kz0oeStvLnkpLCBhKSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoe3g6bGVmdCx5OnRvcCx3aWR0aCxoZWlnaHR9KT0+KHtsZWZ0LHRvcCxyaWdodDpsZWZ0K3dpZHRoLGJvdHRvbTp0b3AraGVpZ2h0fSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihmcmFtZTA9PWZyYW1lMSl7XG4gICAgICAgICAgICAgICAgeWllbGQgbWFrZVJlY3RzKGZyYW1lMCwgcDAubGluZUluZGV4SW5MZWFmRnJhbWUsIHAxLmxpbmVJbmRleEluTGVhZkZyYW1lKVxuICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIG1ha2VSZWN0cyhmcmFtZTAsIHAwLmxpbmVJbmRleEluTGVhZkZyYW1lKVxuICAgICAgICAgICAgZm9yKGxldCBmcmFtZXM9ZnJhbWUwLmNvbnRleHQucGFyZW50LmNvbXB1dGVkLmNvbXBvc2VkLGk9ZnJhbWUwLnByb3BzLmkrMTtpPGZyYW1lMS5wcm9wcy5pO2krKyl7XG4gICAgICAgICAgICAgICAgeWllbGQgbWFrZVJlY3RzKGZyYW1lc1tpXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHlpZWxkIG1ha2VSZWN0cyhmcmFtZTEsIDAscDAubGluZUluZGV4SW5MZWFmRnJhbWUpXG4gICAgICAgIH0pLmNhbGwodGhpcywgcDAubGVhZkZyYW1lLCBwMS5sZWFmRnJhbWUpO1xuXG4gICAgICAgIGZvcihjb25zdCBib3VuZHMgb2Ygc2NvcGUpe1xuICAgICAgICAgICAgcmVjdHMuc3BsaWNlKHJlY3RzLmxlbmd0aCwgMCwgLi4uYm91bmRzKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYocmVjdHMubGVuZ3RoPT0wKVxuICAgICAgICAgICAgcmV0dXJuIHJlY3RzXG4gICAgXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVjdHNbMF0se2xlZnQ6cDAueH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVjdHNbcmVjdHMubGVuZ3RoLTFdLCB7cmlnaHQ6cDEueH0pXG5cbiAgICAgICAgcmV0dXJuIHJlY3RzLmZpbHRlcigoe2xlZnQscmlnaHR9KT0+KGxlZnQtcmlnaHQpIT0wKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHVzZSBjb21wb3NlZCB0byBsb2NhdGUsIHNvIGZyYW1lIHdvdWxkIG5vdCBcbiAgICAgKiBAcGFyYW0geyp9IGlkIFxuICAgICAqIEBwYXJhbSB7Kn0gYXQgXG4gICAgICovXG4gICAgbmV4dExpbmUoaWQsYXQpe1xuICAgICAgICAvL3RvIGdldCBuZXh0IGxpbmUgYmVsb3cgaW5wdXQgbGluZSBpbiB0aGUgZnJhbWVcbiAgICAgICAgY29uc3QgbmV4dExpbmVCZWxvdz0oZnJhbWUsbGluZSwgb2Zmc2V0KT0+e1xuICAgICAgICAgICAgdmFyIG5leHRMaW5lPSgoKT0+e1xuICAgICAgICAgICAgICAgIGlmKGZyYW1lLmxhc3RMaW5lPT1saW5lKS8vZ28gdG8gbmV4dCB0b3AgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYoZnJhbWUuY29scyAmJiBmcmFtZS5jb2xzLmxlbmd0aD4xKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDb2x1bW5MYXN0TGluZT1mcmFtZS5jb2x1bW5zLnJlZHVjZSgoaXNMYXN0LGEpPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdCB8fCAoYS5saW5lcy5sZW5ndGg+MCAmJiBhLmxpbmVzLmxlbmd0aC0xPT1hLmxpbmVzLmluZGV4T2YobGluZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDb2x1bW5MYXN0TGluZSl7Ly9nbyB0byBuZXh0IHRvcCBmcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5saW5lc1tmcmFtZS5saW5lcy5pbmRleE9mKGxpbmUpKzFdXG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgaWYobmV4dExpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRMaW5lXG5cbiAgICAgICAgICAgIC8vZnJhbWUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gYnJlYWsgQmxvY2sgTGF5b3V0IHN0cnVjdHVyZShzdWNoIGFzIFdvcmQgY29udGludW91cyBzZWN0aW9uKSwgXG4gICAgICAgICAgICAvL3NvIHRyeSB0byBsb2NhdGUgZnJvbSBsYXlvdXRlZCBcbiAgICAgICAgICAgIGNvbnN0IHBvaW50PVt0aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXS5yZWR1Y2UoKG8sYSk9Pih7eDpvLngtYS54LHk6by55LWEueX0pLG9mZnNldClcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lSXNCZWxvd1BvaW50QW5kQ29udGFpblBvaW50WD0oe3gseSx3aWR0aH0pPT5wb2ludC54Pj14ICYmIHBvaW50Lng8PXgrd2lkdGggJiYgeT5wb2ludC55XG4gICAgICAgICAgICAvL3RvIGdldCBtb3N0IGlubmVyIGZyYW1lIHRoYXQgdW5kZXIgb2Zmc2V0LnkgYW5kIGluY2x1ZGUgb2Zmc2V0LnhcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kPXRoaXMuZ2V0Qm91bmRhcnlDaGVja2VkTW9zdElubmVyTm9kZShcbiAgICAgICAgICAgICAgICB0b3BGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSwgXG4gICAgICAgICAgICAgICAgKHJlY3Qsbm9kZSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtZnJhbWVcIjppc0ZyYW1lLCB3aWR0aCxoZWlnaHR9fT1ub2RlXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRnJhbWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5nZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUobm9kZSk9PWZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lSXNCZWxvd1BvaW50QW5kQ29udGFpblBvaW50WChyZWN0KHt3aWR0aCxoZWlnaHR9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9nZXQgZnJhbWUgZnJvbSBkYXRhLWNvbnRlbnQgYW5kIGRhdGEtZnJhbWVcbiAgICAgICAgICAgICAgICAobGF5b3V0ZWRGcmFtZU5vZGUsW2xheW91dGVkVG9wRnJhbWVdKT0+XG4gICAgICAgICAgICAgICAgICAgIGxheW91dGVkRnJhbWVOb2RlICYmIGxheW91dGVkVG9wRnJhbWUvKm5vdCB0b3AgZnJhbWUgb3IgbGF5b3V0ZWQgbm90IHN5bmNlZCovXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlKGxheW91dGVkRnJhbWVOb2RlKSA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmKGZvdW5kLm5vZGUpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdExpbmVJbmNsdWRlWChsZWFmRnJhbWU9Zm91bmQubm9kZSwgcG9pbnQueC1mb3VuZC54KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBmaXJzdExpbmVJbmNsdWRlWD0oZnJhbWUsWCk9PntcbiAgICAgICAgICAgIGlmKCEoZnJhbWUuY29scyAmJiBmcmFtZS5jb2xzLmxlbmd0aD4xKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUuZmlyc3RMaW5lXG4gICAgICAgICAgICBjb25zdCBjb2x1bW49ZnJhbWUuY29sdW1ucy5maW5kKCh7eCx3aWR0aH0pPT5YPj14ICYmIFg8PXgrd2lkdGgpXG4gICAgICAgICAgICBpZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5saW5lc1swXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV4dFRvcEZyYW1lPWE9PnRoaXMuZnJhbWVzW3RoaXMuZnJhbWVzLmluZGV4T2YoYSkrMV1cblxuXG4gICAgICAgIHZhciB7eCx5LCBsZWFmRnJhbWUsIGxpbmVJbmRleEluTGVhZkZyYW1lLCB0b3BGcmFtZX09dGhpcy5wb3NpdGlvbihpZCxhdCx0cnVlKVxuICAgICAgICB2YXIgbGluZUluTGVhZkZyYW1lPWxlYWZGcmFtZS5saW5lc1tsaW5lSW5kZXhJbkxlYWZGcmFtZV1cbiAgICAgICAgXG4gICAgICAgIHZhciBuZXh0TGluZVxuICAgICAgICAvL2ZpbmQgbmV4dCBsaW5lIGluIGN1cnJlbnQgVE9QIGZyYW1lXG4gICAgICAgIHdoaWxlKGxlYWZGcmFtZSAmJiBsaW5lSW5MZWFmRnJhbWUpe1xuICAgICAgICAgICAgaWYobmV4dExpbmU9bmV4dExpbmVCZWxvdyhsZWFmRnJhbWUsIGxpbmVJbkxlYWZGcmFtZSx7eCx5fSkpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluQmxvY2tMaW5lKHt4LHl9LG5leHRMaW5lLCB0b3BGcmFtZSwgbGVhZkZyYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9kaXJlY3QgcGFyZW50IGZyYW1lXG4gICAgICAgICAgICBjb25zdCBsZWFmRnJhbWVDb250YWluZWRCeT10aGlzLl90YXJnZXRGcmFtZUNvbnRhaW5zRnJhbWUobGVhZkZyYW1lKVxuICAgICAgICAgICAgY29uc3QgcGFyZW50RnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUoXG4gICAgICAgICAgICAgICAgbGVhZkZyYW1lLFxuICAgICAgICAgICAgICAgIGE9PmEhPWxlYWZGcmFtZSAmJiBsZWFmRnJhbWVDb250YWluZWRCeShhKS8qKi8sXG4gICAgICAgICAgICAgICAgdHJ1ZS8qZmlyc3QqLylcbiAgICAgICAgICAgIGlmKHBhcmVudEZyYW1lKXtcbiAgICAgICAgICAgICAgICAvL2xvY2F0ZSBsaW5lIGluY2x1ZGVzIGZyYW1lXG4gICAgICAgICAgICAgICAgbGluZUluTGVhZkZyYW1lPXBhcmVudEZyYW1lLmxpbmVzLmZpbmQobGluZT0+bmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0KGBbZGF0YS1mcmFtZT0ke2xlYWZGcmFtZS51dWlkfV1gKS5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAgbGVhZkZyYW1lPXBhcmVudEZyYW1lXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vZmluZCBmaXJzdCBsaW5lIGluIG5leHQgc2libGluZ3Mgb2YgY3VycmVudCB0b3AgZnJhbWVcbiAgICAgICAgd2hpbGUodG9wRnJhbWUgJiYgIW5leHRMaW5lICYmICh0b3BGcmFtZT1uZXh0VG9wRnJhbWUodG9wRnJhbWUpKSl7XG4gICAgICAgICAgICBpZihuZXh0TGluZT1maXJzdExpbmVJbmNsdWRlWCh0b3BGcmFtZSx4KSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kSW5CbG9ja0xpbmUoe3gseX0sIG5leHRMaW5lLCB0b3BGcmFtZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgICBwcmV2TGluZShpZCxhdCl7XG4gICAgICAgIC8vdG8gZ2V0IHByZXYgbGluZSBhYm92ZSBpbnB1dCBsaW5lIGluIHRoZSBmcmFtZVxuICAgICAgICBjb25zdCBwcmV2TGluZUFib3ZlPShmcmFtZSxsaW5lLCBvZmZzZXQpPT57XG4gICAgICAgICAgICBjb25zdCBwcmV2TGluZT0oKCk9PntcbiAgICAgICAgICAgICAgICBpZihmcmFtZS5maXJzdExpbmU9PWxpbmUpLy9nbyB0byBwcmV2IHRvcCBmcmFtZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICBpZihmcmFtZS5jb2xzICYmIGZyYW1lLmNvbHMubGVuZ3RoPjEpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NvbHVtbkZpcnN0TGluZT1mcmFtZS5jb2x1bW5zLnJlZHVjZSgoaXNGaXJzdCxhKT0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0ZpcnN0IHx8IGEubGluZXMuaW5kZXhPZihsaW5lKT09MCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ29sdW1uRmlyc3RMaW5lKXsvL2dvIHRvIG5leHQgdG9wIGZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmxpbmVzW2ZyYW1lLmxpbmVzLmluZGV4T2YobGluZSktMV1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBpZihwcmV2TGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldkxpbmVcblxuICAgICAgICAgICAgLy9mcmFtZSBjYW4gYmUgY3VzdG9taXplZCB0byBicmVhayBCbG9jayBMYXlvdXQgc3RydWN0dXJlKHN1Y2ggYXMgV29yZCBjb250aW51b3VzIHNlY3Rpb24pLCBcbiAgICAgICAgICAgIC8vc28gdHJ5IHRvIGxvY2F0ZSBmcm9tIGxheW91dGVkIFxuICAgICAgICAgICAgY29uc3QgcG9pbnQ9W3RoaXMuZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSldLnJlZHVjZSgobyxhKT0+KHt4Om8ueC1hLngseTpvLnktYS55fSksb2Zmc2V0KVxuICAgICAgICAgICAgY29uc3QgZnJhbWVJc0Fib3ZlUG9pbnRBbmRDb250YWluUG9pbnRYPSh7eCx5LHdpZHRoLGhlaWdodH0pPT5wb2ludC54Pj14ICYmIHBvaW50Lng8PXgrd2lkdGggJiYgKHBvaW50LnkteS1oZWlnaHQpPj0wXG4gICAgICAgICAgICAvL3RvIGdldCBtb3N0IGlubmVyIGZyYW1lIHRoYXQgdW5kZXIgb2Zmc2V0LnkgYW5kIGluY2x1ZGUgb2Zmc2V0LnhcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kPXRoaXMuZ2V0Qm91bmRhcnlDaGVja2VkTW9zdElubmVyTm9kZShcbiAgICAgICAgICAgICAgICB0b3BGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSwgXG4gICAgICAgICAgICAgICAgKHJlY3Qsbm9kZSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtZnJhbWVcIjppc0ZyYW1lLCB3aWR0aCxoZWlnaHR9fT1ub2RlXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRnJhbWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5nZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUobm9kZSk9PWZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lSXNBYm92ZVBvaW50QW5kQ29udGFpblBvaW50WChyZWN0KHt3aWR0aCxoZWlnaHR9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy9nZXQgZnJhbWUgZnJvbSBkYXRhLWNvbnRlbnQgYW5kIGRhdGEtZnJhbWVcbiAgICAgICAgICAgICAgICAobGF5b3V0ZWRGcmFtZU5vZGUsW2xheW91dGVkVG9wRnJhbWVdKT0+XG4gICAgICAgICAgICAgICAgICAgIGxheW91dGVkRnJhbWVOb2RlICYmIGxheW91dGVkVG9wRnJhbWUvKm5vdCB0b3AgZnJhbWUgb3IgbGF5b3V0ZWQgbm90IHN5bmNlZCovXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlKGxheW91dGVkRnJhbWVOb2RlKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgdHJ1ZS8vZmluZExhc3RcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmKGZvdW5kLm5vZGUpe1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0TGluZUluY2x1ZGVYKGxlYWZGcmFtZT1mb3VuZC5ub2RlLCBwb2ludC54LWZvdW5kLngpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGxhc3RMaW5lSW5jbHVkZVg9KGZyYW1lLFgpPT57XG4gICAgICAgICAgICBpZighKGZyYW1lLmNvbHMgJiYgZnJhbWUuY29scy5sZW5ndGg+MSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmxhc3RMaW5lXG4gICAgICAgICAgICBjb25zdCBjb2x1bW49ZnJhbWUuY29sdW1ucy5maW5kKCh7eCx3aWR0aH0pPT5YPj14ICYmIFg8PXgrd2lkdGgpXG4gICAgICAgICAgICBpZihjb2x1bW4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5saW5lc1tjb2x1bW4ubGluZXMubGVuZ3RoLTFdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmV2VG9wRnJhbWU9YT0+dGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMuaW5kZXhPZihhKS0xXVxuXG5cbiAgICAgICAgdmFyIHt4LHksIGxlYWZGcmFtZSwgbGluZUluZGV4SW5MZWFmRnJhbWUsIHRvcEZyYW1lfT10aGlzLnBvc2l0aW9uKGlkLGF0LHRydWUpXG4gICAgICAgIHZhciBsaW5lSW5MZWFmRnJhbWU9bGVhZkZyYW1lLmxpbmVzW2xpbmVJbmRleEluTGVhZkZyYW1lXVxuICAgICAgICBcbiAgICAgICAgdmFyIHByZXZMaW5lXG4gICAgICAgIC8vZmlyc3QgdHJ5IHRvIGZpbmQgcHJldiBsaW5lIGluIGN1cnJlbnQgdG9wIGZyYW1lXG4gICAgICAgIHdoaWxlKGxlYWZGcmFtZSAmJiBsaW5lSW5MZWFmRnJhbWUpe1xuICAgICAgICAgICAgaWYocHJldkxpbmU9cHJldkxpbmVBYm92ZShsZWFmRnJhbWUsIGxpbmVJbkxlYWZGcmFtZSx7eCx5fSkpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluQmxvY2tMaW5lKHt4LHl9LHByZXZMaW5lLHRvcEZyYW1lLGxlYWZGcmFtZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZGlyZWN0IHBhcmVudCBmcmFtZVxuICAgICAgICAgICAgY29uc3QgbGVhZkZyYW1lQ29udGFpbmVkQnk9dGhpcy5fdGFyZ2V0RnJhbWVDb250YWluc0ZyYW1lKGxlYWZGcmFtZSlcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEZyYW1lPXRoaXMuZ2V0Q2hlY2tlZEdyYW5kRnJhbWVCeUZyYW1lKFxuICAgICAgICAgICAgICAgIGxlYWZGcmFtZSxcbiAgICAgICAgICAgICAgICBhPT5hIT1sZWFmRnJhbWUgJiYgbGVhZkZyYW1lQ29udGFpbmVkQnkoYSkvKiovLFxuICAgICAgICAgICAgICAgIHRydWUvKmZpcnN0Ki8pXG4gICAgICAgICAgICBpZihwYXJlbnRGcmFtZSl7XG4gICAgICAgICAgICAgICAgLy9sb2NhdGUgbGluZSBpbmNsdWRlcyBmcmFtZVxuICAgICAgICAgICAgICAgIGxpbmVJbkxlYWZGcmFtZT1wYXJlbnRGcmFtZS5saW5lcy5maW5kKGxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtZnJhbWU9JHtsZWFmRnJhbWUudXVpZH1dYCkubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgIGxlYWZGcmFtZT1wYXJlbnRGcmFtZVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL290aGVyd2lzZSBmaW5kIGZpcnN0IGxpbmUgaW4gbmV4dCBzaWJsaW5ncyBvZiBjdXJyZW50IHRvcCBmcmFtZVxuICAgICAgICB3aGlsZSh0b3BGcmFtZSAmJiAhcHJldkxpbmUgJiYgKHRvcEZyYW1lPXByZXZUb3BGcmFtZSh0b3BGcmFtZSkpKXtcbiAgICAgICAgICAgIGlmKHByZXZMaW5lPWxhc3RMaW5lSW5jbHVkZVgodG9wRnJhbWUseCkpe1xuICAgICAgICAgICAgICAgIC8vdGhlbiBhcm91bmQgaW4gdGhlIGxpbmVcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbkJsb2NrTGluZSh7eCx5fSxwcmV2TGluZSwgdG9wRnJhbWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcblx0ZXh0ZW5kV29yZChpZCxhdCl7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaD10aGlzLmdldENvbXBvc2VyKGlkKS5jbG9zZXN0KFwicGFyYWdyYXBoXCIpXG4gICAgICAgIGlmKCFwYXJhZ3JhcGgpXG4gICAgICAgICAgICByZXR1cm4ge31cblx0XHRjb25zdCBhdG9tPXBhcmFncmFwaC5hdG9tcy5maW5kKGE9Pntcblx0XHRcdGNvbnN0IGZvdW5kPW5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdCgoe3Byb3BzOntcImRhdGEtY29udGVudFwiOnhpZCwgXCJkYXRhLWVuZGF0XCI6ZW5kPTB9fSk9Pntcblx0XHRcdFx0cmV0dXJuICh4aWQ9PWlkICYmIGVuZD49YXQpfHx1bmRlZmluZWRcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm4gZm91bmQubGVuZ3RoPjBcblx0XHR9KVxuXHRcdGlmKGF0b20pe1xuXHRcdFx0Y29uc3QgdGFyZ2V0PW5ldyBSZWFjdFF1ZXJ5KGF0b20pXG5cdFx0XHRjb25zdCBmaXJzdD10YXJnZXQuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwidGV4dFwiXWApXG5cdFx0XHRpZihmaXJzdC5sZW5ndGgpe1xuXHRcdFx0XHRjb25zdCBsYXN0PXRhcmdldC5maW5kTGFzdChgW2RhdGEtdHlwZT1cInRleHRcIl1gKVxuXHRcdFx0XHRpZihsYXN0Lmxlbmd0aCl7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdHN0YXJ0Ontcblx0XHRcdFx0XHRcdFx0aWQ6Zmlyc3QuYXR0cignZGF0YS1jb250ZW50JyksXG5cdFx0XHRcdFx0XHRcdGF0OnBhcnNlSW50KGZpcnN0LmF0dHIoJ2RhdGEtZW5kYXQnKSktZmlyc3QuYXR0cihcImNoaWxkcmVuXCIpLmxlbmd0aFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGVuZDp7XG5cdFx0XHRcdFx0XHRcdGlkOmxhc3QuYXR0cignZGF0YS1jb250ZW50JyksXG5cdFx0XHRcdFx0XHRcdGF0OnBhcnNlSW50KGxhc3QuYXR0cignZGF0YS1lbmRhdCcpKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4ge31cblx0fVxufSkiLCJpbXBvcnQgUmVhY3RQb3NpdGlvbmluZyBmcm9tIFwiLi9yZWFjdC1wb3NpdGlvbmluZ1wiXG5cbmV4cG9ydCBkZWZhdWx0IFJlYWN0UG9zaXRpb25pbmciLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHsgc2V0RGlzcGxheU5hbWUsIGNvbXBvc2UsIGdldENvbnRleHQgfSBmcm9tIFwicmVjb21wb3NlXCJcbmltcG9ydCBXYXlwb2ludCBmcm9tIFwicmVhY3Qtd2F5cG9pbnRcIlxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBjb25uZWN0IH0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoXG4gICAgc2V0RGlzcGxheU5hbWUoXCJDb21wb3NlTW9yZVRyaWdnZXJcIiksIFxuICAgIGNvbm5lY3Qoc3RhdGUgPT4gKHsgc2VsZWN0aW9uOiBnZXRTZWxlY3Rpb24oc3RhdGUpIH0pKSxcbikoY2xhc3MgQ29tcG9zZU1vcmVUcmlnZ2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICBzZWxlY3Rpb246IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIGdldENvbXBvc2VkWTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGlzU2VsZWN0aW9uQ29tcG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjb21wb3NlNFNjcm9sbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGNvbXBvc2U0U2VsZWN0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9XG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB9XG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKHsgc2VsZWN0aW9uLCBpc1NlbGVjdGlvbkNvbXBvc2VkLCBjb21wb3NlNFNlbGVjdGlvbiB9KSB7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25Db21wb3NlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBjb21wb3NlNFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY29tcG9zZTRTY3JvbGwsIGdldENvbXBvc2VkWSwgZGVidWcgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHkgPSBnZXRDb21wb3NlZFkoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxXYXlwb2ludCBvbkVudGVyPXsoKSA9PiBjb21wb3NlNFNjcm9sbCh5KX0+XG4gICAgICAgICAgICAgICAgPEdyb3VwIHk9e3kgLSAxMDB9PlxuICAgICAgICAgICAgICAgICAgICA8bGluZSBjbGFzc05hbWU9XCJjb21wb3NlVHJpZ2dlclwiIHgxPVwiMFwiIHkxPVwiMFwiIHgyPVwiMlwiIHkyPVwiMFwiIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT17ZGVidWcgPyBcInJlZFwiIDogXCJ0cmFuc3BhcmVudFwifSAvPlxuICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICA8L1dheXBvaW50PlxuICAgICAgICApO1xuICAgIH1cbn0pXG4iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuXG5leHBvcnQgZGVmYXVsdCAoKT0+KFxuICAgIDxGcmFnbWVudD5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8VGFibGVBZGRlci8+XG4gICAgICAgICAgICA8Um90YXRvci8+XG4gICAgICAgIDwvZGVmcz5cbiAgICA8L0ZyYWdtZW50PlxuKVxuXG5jb25zdCBUYWJsZUFkZGVyPSgpPT4oXG4gICAgPHBhdGggaWQ9XCJ0YWJsZS5hZGRlclwiXG4gICAgICAgIHdpZHRoPXsxNH1cbiAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgc3Ryb2tlV2lkdGg9ezF9XG4gICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIGQ9XCJNOCw5aDhNMTIsNXY4IE0xMiwyQzguMTMsMiw1LDUuMTMsNSw5YzAsNS4yNSw3LDEzLDcsMTNzNy03Ljc1LDctMTNDMTksNS4xMywxNS44NywyLDEyLDJ6XCJcbiAgICAgICAgLz5cbilcblxuY29uc3QgUm90YXRvcj0oKT0+KFxuICAgIDxzdmcgaWQ9XCJyb3RhdG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0+XG4gICAgICAgIDxjaXJjbGUgY3g9ezEyfSBjeT17MTJ9IHI9ezE1fVxuICAgICAgICAgICAgc3Ryb2tlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmlsbE9wYWNpdHk9ezAuMDF9XG4gICAgICAgICAgICBjdXJzb3I9XCJwb2ludGVyXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwiLz5cbiAgICA8L3N2Zz5cbikiLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7QUNUSU9OLCBDdXJzb3IsIFNlbGVjdGlvbixDb250ZW50UXVlcnksIGdldFNlbGVjdGlvbn0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgQ2FudmFzIGZyb20gXCIuLi9jYW52YXNcIlxuaW1wb3J0IFNlbGVjdGlvblNoYXBlIGZyb20gXCIuL3NlbGVjdGlvbi1zaGFwZVwiXG5pbXBvcnQgQ3Vyc29yU2hhcGUgZnJvbSBcIi4vY3Vyc29yLXNoYXBlXCJcbmltcG9ydCBXaGVuU2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIgZnJvbSBcIi4vd2hlbi1zZWxlY3Rpb24tY2hhbmdlLW5vdGlmaWVyXCJcbmltcG9ydCBQb3NpdGlvbmluZyBmcm9tIFwiLi9wb3NpdGlvbmluZ1wiXG5pbXBvcnQgQ29tcG9zZU1vcmVUcmlnZ2VyIGZyb20gXCIuL2NvbXBvc2UtbW9yZS10cmlnZ2VyXCJcbmltcG9ydCBEZWZpbmVTaGFwZXMgZnJvbSBcIi4vZGVmaW5lLXNoYXBlc1wiXG5cbi8qKlxuICogbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgXG4gKiAxLiBmb3IgUG9zaXRpb25pbmc6IHBhZ2VzLCBnZXRDb21wb3NlciwgZ2V0Q29udGVudCwgYXNDYW52YXNQb2ludCwgYXNWaWV3cG9ydFBvaW50LCBwYWdlWFkoSSlcbiAqIDIuIGZvciBSZXNwb25zaWJsZSBFdmVudHM6IFxuICovXG5jbGFzcyBSZXNwb25zaWJsZSBleHRlbmRzIENvbXBvbmVudHtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWU9XCJyZXNwb25zaWJsZS1jb21wb3NlZC1kb2N1bWVudC1kZWZhdWx0LWNhbnZhc1wiXG4gICAgc3RhdGljIENhbnZhcz1DYW52YXNcbiAgICBzdGF0aWMgQ29tcG9zZU1vcmVUcmlnZ2VyPUNvbXBvc2VNb3JlVHJpZ2dlclxuICAgIHN0YXRpYyBwcm9wVHlwZXM9e1xuICAgICAgICBwYWdlR2FwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBzY3JlZW5CdWZmZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHNjYWxlOiBQcm9wVHlwZXMubnVtYmVyLCAgXG5cdFx0dmlld3BvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBoZWlnaHQ6UHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAgICAgbm9kZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRWxlbWVudCksXG5cdFx0fSksICAgICAgICBcbiAgICAgICAgZG9jdW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0cGFnZUdhcDoxMixcbiAgICAgICAgc2NyZWVuQnVmZmVyOiAxLFxuICAgICAgICBzY2FsZToxLFxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGFjdGl2ZURvY1N0b3JlOiBQcm9wVHlwZXMuYW55LFxuICAgIH1cblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG4gICAgICAgIHBvc2l0aW9uaW5nOlByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2RvY3VtZW50LC4uLm1lfSl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7ZWRpdGFibGUsY2FudmFzSWQsY29udGVudCx2aWV3cG9ydD1tZS52aWV3cG9ydCxzY3JlZW5CdWZmZXI9bWUuc2NyZWVuQnVmZmVyLH0sc3RhdGU6e3k9MH19PWRvY3VtZW50XG4gICAgICAgIHJldHVybiB7Li4uQ2FudmFzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyguLi5hcmd1bWVudHMpLCBlZGl0YWJsZSxjYW52YXNJZCxjb250ZW50LHZpZXdwb3J0LHNjcmVlbkJ1ZmZlcixjb21wb3NlZDRZOnl9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlPXt9XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9zZXI9dGhpcy5nZXRDb21wb3Nlci5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0Q29udGVudD10aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKVxuICAgICAgICB0aGlzLnBvc2l0aW9uaW5nPW5ldyBQb3NpdGlvbmluZyh0aGlzKVxuICAgIH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb25pbmc6dGhpcy5wb3NpdGlvbmluZ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqdGhlIGZvbGxvd2luZyBBUEkgbXVzdCBiZSBwcm92aWRlZCB0byBQb3NpdGlvbmluZyAqL1xuICAgIGdldCBwYWdlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5wYWdlc1xuICAgIH1cblxuICAgIGdldENvbXBvc2VyKGlkKXtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5kb2N1bWVudC5nZXRDb21wb3NlcihpZClcblx0fVxuXG5cdGdldENvbnRlbnQoaWQpe1xuICAgICAgICByZXR1cm4gQ29udGVudFF1ZXJ5LmZyb21Db250ZW50KHRoaXMuc3RhdGUuY29udGVudCwgIGlkID8gYCMke2lkfWAgIDogdW5kZWZpbmVkKVxuICAgIH1cbiAgICBcbiAgICBhc0NhbnZhc1BvaW50KHtsZWZ0LHRvcH0pe1xuICAgICAgICBjb25zdCBwb2ludD10aGlzLmNhbnZhcy5jcmVhdGVTVkdQb2ludCgpXG4gICAgICAgIHBvaW50Lng9bGVmdCxwb2ludC55PXRvcFxuICAgICAgICBjb25zdCB7eCx5fT1wb2ludC5tYXRyaXhUcmFuc2Zvcm0odGhpcy5jYW52YXMuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKVxuICAgICAgICByZXR1cm4ge3gsIHl9XG4gICAgfVxuXG4gICAgYXNWaWV3cG9ydFBvaW50KHt4LHl9KXtcbiAgICAgICAgbGV0IHBvaW50PXRoaXMuY2FudmFzLmNyZWF0ZVNWR1BvaW50KClcbiAgICAgICAgcG9pbnQueD14LHBvaW50Lnk9eVxuICAgICAgICBsZXQgbG9jYXRpb249cG9pbnQubWF0cml4VHJhbnNmb3JtKHRoaXMuY2FudmFzLmdldFNjcmVlbkNUTSgpKVxuICAgICAgICByZXR1cm4ge2xlZnQ6bG9jYXRpb24ueCwgdG9wOmxvY2F0aW9uLnl9XG4gICAgfVxuICAgIFxuICAgIHBhZ2VYWShJPTApe1xuICAgICAgICBjb25zdCByZWN0PXRoaXMuY29uc3RydWN0b3IuQ2FudmFzLnBhZ2VSZWN0KEksdGhpcy5jYW52YXMpXG4gICAgICAgIHJldHVybiAhcmVjdCA/IHt4OjAseTowfSA6IHRoaXMuYXNDYW52YXNQb2ludChyZWN0KVxuICAgIH1cbiAgICAvLy8vRW5kIFBvc2l0aW9uaW5nIEFQSS9cbiAgICBcbiAgICBnZXQgZGlzcGF0Y2goKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5hY3RpdmVEb2NTdG9yZS5kaXNwYXRjaFxuICAgIH1cblxuICAgIGdldCBzZWxlY3Rpb25DaGFuZ2VOb3RpZmllcigpe1xuICAgICAgICBpZih0aGlzLnJlZnMuc2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLmdldFdyYXBwZWRJbnN0YW5jZSgpXG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGluZygpe1xuICAgICAgICBpZih0aGlzLnJlZnMuc2VsZWN0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5zZWxlY3RpbmcuZ2V0V3JhcHBlZEluc3RhbmNlKClcbiAgICB9XG5cblx0Z2V0IHNlbGVjdGlvbigpe1xuICAgICAgICByZXR1cm4gZ2V0U2VsZWN0aW9uKHRoaXMuY29udGV4dC5hY3RpdmVEb2NTdG9yZS5nZXRTdGF0ZSgpKVxuXHR9XG5cblx0Z2V0IGN1cnNvcigpe1xuXHRcdGNvbnN0IHtjdXJzb3JBdCwgLi4uYX09dGhpcy5zZWxlY3Rpb25cbiAgICAgICAgcmV0dXJuIHsuLi5hW2N1cnNvckF0XX1cbiAgICB9XG5cbiAgICBfX2NvbXBvc2VkWSgpe1xuICAgICAgICBjb25zdCB7cGFnZXMsIHBhZ2VHYXB9PXRoaXMuc3RhdGVcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuQ2FudmFzLmNvbXBvc2VkWShwYWdlcywgcGFnZUdhcClcbiAgICB9XG4gICAgXG4gICAgLy9wcm92aWRlIHRvIGRvY3VtZW50IHRvIHF1ZXJ5IFxuICAgIGF2YWlsYWJsZUJsb2NrU2l6ZSgpe1xuICAgICAgICBjb25zdCB7c2NhbGUsIGNvbXBvc2VkNFk9MCxzY3JlZW5CdWZmZXIsdmlld3BvcnQ6e2hlaWdodCxub2RlOntzY3JvbGxUb3B9fX09dGhpcy5zdGF0ZVxuICAgICAgICBjb25zdCBjb21wb3NlZFk9dGhpcy5fX2NvbXBvc2VkWSgpICogc2NhbGVcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsKE1hdGgubWF4KHNjcm9sbFRvcCxjb21wb3NlZDRZKStoZWlnaHQrc2NyZWVuQnVmZmVyKmhlaWdodCktY29tcG9zZWRZKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2NoaWxkcmVuLGRvY3VtZW50fSwgc3RhdGU6e2VkaXRhYmxlPXRydWUsc2NhbGUscGFnZUdhcCxwYWdlcyxwcmVjaXNpb259fT10aGlzXG4gICAgICAgIGNvbnN0IG5vQ3Vyc29yPWVkaXRhYmxlICYmIGVkaXRhYmxlLmN1cnNvcj09PWZhbHNlXG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlcnM9IW5vQ3Vyc29yID8gdGhpcy5ldmVudEhhbmRsZXJzICA6IHt9XG4gICAgICAgIGNvbnN0IG5vdGlmeVNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyPWNhbGxiYWNrPT57XG5cdFx0XHQhdGhpcy5zZWxlY3Rpb25DaGFuZ2VOb3RpZmllciA/IGNhbGxiYWNrKCkgOiB0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLnNldFN0YXRlKHtjb21wb3NlZENvbnRlbnQ6bnVsbH0sY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge0NhbnZhcywgQ29tcG9zZU1vcmVUcmlnZ2VyfT10aGlzLmNvbnN0cnVjdG9yXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q2FudmFzIFxuICAgICAgICAgICAgICAgIHsuLi57c2NhbGUscGFnZUdhcCxwYWdlcyxwcmVjaXNpb24sZG9jdW1lbnQscGFwZXI6dHJ1ZX19XG4gICAgICAgICAgICAgICAgaW5uZXJSZWY9e2E9Pnt0aGlzLmNhbnZhcz1hfX0gXG4gICAgICAgICAgICAgICAgey4uLmV2ZW50SGFuZGxlcnN9PlxuICAgICAgICAgICAgICAgIDxDb21wb3NlTW9yZVRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9zZWRZPXsoKT0+dGhpcy5fX2NvbXBvc2VkWSgpfVxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGlvbkNvbXBvc2VkPXtzZWxlY3Rpb249PmRvY3VtZW50LmlzU2VsZWN0aW9uQ29tcG9zZWQoc2VsZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZTRTZWxlY3Rpb249e2E9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkb2N1bWVudC5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIoc2VsZWN0aW9uPT5kb2N1bWVudC5jb21wb3NlNFNlbGVjdGlvbihzZWxlY3Rpb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlNFNjcm9sbD17eT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRvY3VtZW50LmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTZWxlY3Rpb25DaGFuZ2VOb3RpZmllcigoKT0+ZG9jdW1lbnQuY29tcG9zZTRTY3JvbGwoeSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz4gICAgXG4gICAgICAgICAgICAgICAgPERlZmluZVNoYXBlcy8+XG5cdFx0XHRcdDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuXHRcdFx0XHRcdDxDdXJzb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzplPT50aGlzLm9uS2V5QXJyb3dMZWZ0KGUpLC8vbW92ZSBsZWZ0XG5cdFx0XHQgICAgICAgICAgICAgICAgMzk6ZT0+dGhpcy5vbktleUFycm93UmlnaHQoZSksLy9tb3ZlIHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ZT0+dGhpcy5vbktleUFycm93VXAoZSksLy9tb3ZlIHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ZT0+dGhpcy5vbktleUFycm93RG93bihlKSwvL21vdmUgZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q3Vyc29yU2hhcGUgc2Nyb2xsTm9kZUludG9WaWV3PXtub2RlPT50aGlzLnNjcm9sbE5vZGVJbnRvVmlldyhub2RlKX0vPlxuICAgICAgICAgICAgICAgICAgICA8L0N1cnNvcj5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGlvbiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0aW9uU2hhcGUgcmVmPXtcInNlbGVjdGluZ1wifS8+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8V2hlblNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIGNhbnZhcz17dGhpc30gcmVmPVwic2VsZWN0aW9uQ2hhbmdlTm90aWZpZXJcIi8+XG5cdFx0XHRcdDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICA8L0NhbnZhcz5cbiAgICAgICAgKVxuICAgIH1cblxuICAgIF9fc3RhdGlzdGljcygpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2RvY3VtZW50fX09dGhpc1xuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TdGF0aXN0aWNzKHtcblx0XHRcdHBhZ2VzOnRoaXMucGFnZXMubGVuZ3RoLFxuXHRcdFx0YWxsQ29tcG9zZWQ6ZG9jdW1lbnQuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCksXG5cdFx0XHR3b3JkczogQXJyYXkuZnJvbShkb2N1bWVudC5jb21wb3NlcnMudmFsdWVzKCkpLmZpbHRlcihhPT4hIWEpXG5cdFx0XHRcdC5yZWR1Y2UoKHdvcmRzLGEpPT53b3Jkcys9KGEuYXRvbXMgPyBhLmF0b21zLmxlbmd0aCA6IDApLDApXG5cdFx0fSkpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCl7XG4gICAgICAgIHRoaXMuX19zdGF0aXN0aWNzKClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VOb3RpZmllciAmJiB0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLnNldFN0YXRlKHtjb21wb3NlZENvbnRlbnQ6dGhpcy5zdGF0ZS5jb250ZW50fSlcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgICAgICB0aGlzLmFjdGl2ZSgpXG4gICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlKClcbiAgICB9XG5cbiAgICBhY3RpdmUoKXtcblx0XHR0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQUNUSVZFKHRoaXMuc3RhdGUuY2FudmFzSWQpKVxuICAgIH0gICAgXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UmVzcG9uc2libGUgZXh0ZW5kcyBSZXNwb25zaWJsZXtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycz1cIm9uQ2xpY2ssb25Eb3VibGVDbGljayxvbkNvbnRleHRNZW51LG9uTW91c2VEb3duLG9uTW91c2VNb3ZlLG9uTW91c2VVcFwiLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgLnJlZHVjZSgoaGFuZGxlcnMsa2V5KT0+e1xuICAgICAgICAgICAgICAgIGlmKGtleSBpbiB0aGlzKXtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNba2V5XT10aGlzW2tleV09dGhpc1trZXldLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGByZXNwb25zaWJsZSBjYW52YXMgZG9lc24ndCBpbXBsZW1lbnRlZCAke2tleX0gZXZlbnRgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNcbiAgICAgICAgICAgIH0se30pXG4gICAgICAgIHRoaXMuX19tb3VzZURvd25GbGFnPXt9XG4gICAgfVxuXG4gICAgX19vbkNsaWNrKHtzaGlmdEtleTpzZWxlY3RpbmcsIGNsaWVudFg6bGVmdCxjbGllbnRZOnRvcH0sIGRvdWJsZUNsaWNrZWQ9ZmFsc2Upe1xuXHRcdGNvbnN0IHtpZCxhdH09dGhpcy5wb3NpdGlvbmluZy5hcm91bmQobGVmdCwgdG9wKVxuXHRcdGlmKGlkKXtcbiAgICAgICAgICAgIGlmKGF0PT11bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TRUxFQ1QoaWQsMCxpZCwxKSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgIFx0XHRcdGlmKCFzZWxlY3Rpbmcpe1xuICAgICAgICAgICAgICAgICAgICBpZihkb3VibGVDbGlja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGFydCxlbmR9PXRoaXMucG9zaXRpb25pbmcuZXh0ZW5kV29yZChpZCxhdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0ICYmIGVuZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChzdGFydC5pZCxzdGFydC5hdCwgZW5kLmlkLCBlbmQuYXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgIFx0XHRcdFx0dGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgIFx0XHRcdH1lbHNle1xuICAgIFx0XHRcdFx0bGV0IHtlbmR9PXRoaXMuc2VsZWN0aW9uXG4gICAgXHRcdFx0XHRsZXQge2xlZnQsdG9wfT10aGlzLnBvc2l0aW9uaW5nLnBvc2l0aW9uKGlkLGF0KVxuICAgIFx0XHRcdFx0bGV0IHtsZWZ0OmxlZnQxLHRvcDp0b3AxfT10aGlzLnBvc2l0aW9uaW5nLnBvc2l0aW9uKGVuZC5pZCxlbmQuYXQpXG4gICAgXHRcdFx0XHRpZih0b3A8dG9wMSB8fCAodG9wPT10b3AxICYmIGxlZnQ8PWxlZnQxKSl7XG4gICAgXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TVEFSVF9BVChpZCxhdCkpXG4gICAgXHRcdFx0XHR9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGE9dGhpcy5wb3NpdGlvbmluZy5ub3JtYWxpemVTZWxlY3Rpb24oYS5lbmQse2lkLGF0fSlcbiAgICBcdFx0XHRcdFx0dGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChhLnN0YXJ0LmlkLGEuc3RhcnQuYXQsIGEuZW5kLmlkLCBhLmVuZC5hdCkpXG4gICAgXHRcdFx0XHR9XG4gICAgXHRcdFx0fVxuICAgICAgICAgICAgfVxuXHRcdH1cblxuICAgICAgICB0aGlzLmFjdGl2ZSgpXG4gICAgfVxuXG4gICAgX19vbktleUFycm93KGlkLGF0LHNlbGVjdGluZyl7XG4gICAgICAgIGlmKCFzZWxlY3Rpbmcpe1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zdCB7Y3Vyc29yQXQsLi4uYX09dGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIGFbY3Vyc29yQXRdPXtpZCxhdH1cbiAgICAgICAgICAgIGNvbnN0IHtzdGFydCxlbmR9PXRoaXMucG9zaXRpb25pbmcubm9ybWFsaXplU2VsZWN0aW9uKGEuc3RhcnQsYS5lbmQpXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKHN0YXJ0LmlkLCBzdGFydC5hdCwgZW5kLmlkLGVuZC5hdCkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfX3Nob3VsZElnbm9yZU1vdXNlRG93bkV2ZW50KHtjbGllbnRYLGNsaWVudFl9KXtcbiAgICAgICAgcmV0dXJuIGNsaWVudFg9PXRoaXMuX19tb3VzZURvd25GbGFnLmNsaWVudFggJiYgY2xpZW50WT09dGhpcy5fX21vdXNlRG93bkZsYWcuY2xpZW50WVxuICAgIH1cblxuICAgIG9uQ2xpY2soZSl7XG4gICAgICAgIGlmKCF0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZCl7XG4gICAgICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZD1mYWxzZVxuICAgICAgICAgICAgdGhpcy5fX29uQ2xpY2soZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGV4dE1lbnUoZSl7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0OntvbkNvbnRleHRNZW51fX09dGhpc1xuICAgICAgICB0aGlzLl9fb25DbGljayhlKVxuICAgICAgICBvbkNvbnRleHRNZW51ICYmIG9uQ29udGV4dE1lbnUoZSlcbiAgICB9XG5cbiAgICBvbkRvdWJsZUNsaWNrKGUpe1xuICAgICAgICBpZighdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQpe1xuICAgICAgICAgICAgdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQ9ZmFsc2VcbiAgICAgICAgICAgIHRoaXMuX19vbkNsaWNrKGUsdHJ1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW91c2VEb3duKHtjbGllbnRYLGNsaWVudFl9KXtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdmcgbW91c2UgZG93blwiKVxuICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZz17Y2xpZW50WCxjbGllbnRZfVxuICAgIH1cblxuICAgIG9uTW91c2VNb3ZlKGUpe1xuICAgICAgICBpZighKGUuYnV0dG9ucyYweDEpKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuX19zaG91bGRJZ25vcmVNb3VzZURvd25FdmVudChlKSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtpZCxhdH09dGhpcy5wb3NpdGlvbmluZy5hcm91bmQoZS5jbGllbnRYLGUuY2xpZW50WSlcbiAgICAgICAgaWYoaWQpe1xuICAgICAgICAgICAgY29uc3QgZW5kPXtpZCxhdH1cbiAgICAgICAgICAgIGxldCB7c3RhcnQ9ZW5kfT10aGlzLnNlbGVjdGluZy5zdGF0ZVxuICAgICAgICAgICAgY29uc3QgcmVjdHM9c3RhcnQ9PWVuZCA/IFtdIDogdGhpcy5wb3NpdGlvbmluZy5nZXRSYW5nZVJlY3RzKHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGluZy5zZXRTdGF0ZSh7c3RhcnQ6c3RhcnR8fGVuZCwgZW5kLCByZWN0cywgc2VsZWN0aW5nOnRydWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwKGUpe1xuICAgICAgICBpZih0aGlzLl9fc2hvdWxkSWdub3JlTW91c2VEb3duRXZlbnQoZSkpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHtzdGFydCxlbmR9PXRoaXMuc2VsZWN0aW5nLnN0YXRlXG4gICAgICAgIGlmKHN0YXJ0ICYmIGVuZCl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGluZy5zZXRTdGF0ZSh7c3RhcnQ6dW5kZWZpbmVkLCBlbmQ6dW5kZWZpbmVkLCByZWN0czp1bmRlZmluZWQsc2VsZWN0aW5nOmZhbHNlfSlcbiAgICAgICAgICAgIDsoe3N0YXJ0LGVuZH09dGhpcy5wb3NpdGlvbmluZy5ub3JtYWxpemVTZWxlY3Rpb24oc3RhcnQsZW5kKSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKHN0YXJ0LmlkLHN0YXJ0LmF0LGVuZC5pZCxlbmQuYXQpKVxuICAgICAgICAgICAgdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQ9dHJ1ZVxuICAgICAgICB9XG4gICAgfVxuXG5cdG9uS2V5QXJyb3dVcCh7c2hpZnRLZXk6c2VsZWN0aW5nfSl7XG4gICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuXHRcdGNvbnN0IHtpZCwgYXR9PXRoaXMucG9zaXRpb25pbmcucHJldkxpbmUoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgaWYoaWQpe1xuICAgIFx0XHR0aGlzLl9fb25LZXlBcnJvdyhpZCxhdCxzZWxlY3RpbmcpXG4gICAgICAgIH1cblx0fVxuXG5cdG9uS2V5QXJyb3dEb3duKHtzaGlmdEtleTpzZWxlY3Rpbmd9KXtcblx0XHRjb25zdCBjdXJzb3I9dGhpcy5jdXJzb3Jcblx0XHRjb25zdCB7aWQsIGF0fT10aGlzLnBvc2l0aW9uaW5nLm5leHRMaW5lKGN1cnNvci5pZCxjdXJzb3IuYXQpXG4gICAgICAgIGlmKGlkKXtcbiAgICAgICAgICAgIHRoaXMuX19vbktleUFycm93KGlkLGF0LHNlbGVjdGluZylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uS2V5QXJyb3dMZWZ0KGUpe1xuICAgICAgICBjb25zdCB7bWV0YUtleSxjdHJsS2V5LHNoaWZ0S2V5OnNlbGVjdGluZ309ZVxuICAgICAgICBpZihtZXRhS2V5fHxjdHJsS2V5KXtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQ9dGhpcy5wb3NpdGlvbmluZy5wb3NpdGlvblRvTGluZVN0YXJ0KGN1cnNvci5pZCxjdXJzb3IuYXQpXG4gICAgICAgICAgICBpZihjdXJzb3IuaWQhPXN0YXJ0LmlkIHx8IGN1cnNvci5hdCE9c3RhcnQuYXQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX19vbktleUFycm93KHN0YXJ0LmlkLCBzdGFydC5hdCwgc2VsZWN0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQkFDS1dBUkQoZSkpXG4gICAgfVxuXG4gICAgb25LZXlBcnJvd1JpZ2h0KGUpe1xuICAgICAgICBjb25zdCB7bWV0YUtleSxjdHJsS2V5LHNoaWZ0S2V5OnNlbGVjdGluZ309ZVxuICAgICAgICBpZihtZXRhS2V5fHxjdHJsS2V5KXtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuICAgICAgICAgICAgY29uc3QgZW5kPXRoaXMucG9zaXRpb25pbmcucG9zaXRpb25Ub0xpbmVFbmQoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgICAgIGlmKGN1cnNvci5pZCE9ZW5kLmlkIHx8IGN1cnNvci5hdCE9ZW5kLmF0KXtcbiAgICAgICAgICAgICAgICB0aGlzLl9fb25LZXlBcnJvdyhlbmQuaWQsIGVuZC5hdCwgc2VsZWN0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuRk9SV0FSRChlKSlcbiAgICB9XG59XG5cblxuIiwiaW1wb3J0IFJlYWN0LCB7RnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCB7SGFzQ2hpbGQsIExvY2F0YWJsZSxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IHtkb20sZ2V0U2VsZWN0aW9ufSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgVGVtcGxhdGUgZnJvbSBcIi4vdGVtcGxhdGVcIlxuaW1wb3J0IHtDYW52YXN9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5pbXBvcnQgUmVzcG9uc2libGUgZnJvbSBcIi4uL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhc1wiXG5cblxuY29uc3QgU3VwZXI9TG9jYXRhYmxlLkxvY2F0b3JpemUoSGFzQ2hpbGQoZG9tLkRvY3VtZW50KSlcblxuY2xhc3MgRG9jdW1lbnQgZXh0ZW5kcyBTdXBlcntcbiAgICBzdGF0aWMgcHJvcFR5cGVzPXtcbiAgICAgICAgLi4uU3VwZXIucHJvdG90eXBlLFxuICAgICAgICBjYW52YXM6IFByb3BUeXBlcy5ub2RlLFxuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzPXtcbiAgICAgICAgLi4uU3VwZXIuZGVmYXVsdFByb3BzLFxuICAgICAgICBjYW52YXM6PENhbnZhcy8+LFxuICAgIH1cblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAuLi5TdXBlci5jb250ZXh0VHlwZXMsXG4gICAgICAgIE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuICAgIH1cblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG4gICAgICAgIC4uLlN1cGVyLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICBNZWFzdXJlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZ2V0Q29tcG9zZWRUZW1wbGF0ZTpQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgcHJldkxheW91dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55LFxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5jb21wdXRlZC50ZW1wbGF0ZXM9W11cbiAgICB9XG5cbiAgICBnZXQgcGFnZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZWQuY29tcG9zZWRcbiAgICB9XG5cbiAgICBnZXRDb21wb3NlZCgpe1xuICAgICAgICByZXR1cm4gPENhbnZhcyBkb2N1bWVudD17dGhpc30vPlxuICAgIH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICBjb25zdCBzZWxmPXRoaXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLmdldENoaWxkQ29udGV4dCgpLFxuICAgICAgICAgICAgTWVhc3VyZTogdGhpcy5nZXRNZWFzdXJlKCksXG4gICAgICAgICAgICBnZXRDb21wb3NlZFRlbXBsYXRlKHhocmVmKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21wdXRlZC50ZW1wbGF0ZXMuZmluZChhPT5hLnByb3BzLnhocmVmPT09eGhyZWYpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldkxheW91dChyZWYpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VzPXNlbGYuY29tcHV0ZWQuY29tcG9zZWRcbiAgICAgICAgICAgICAgICBjb25zdCBpPXBhZ2VzLmluZGV4T2YocmVmKVxuICAgICAgICAgICAgICAgIHJldHVybiBwYWdlc1tpLTFdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZWRpdGFibGU6dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5lZGl0YWJsZSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE1lYXN1cmU9bWVtb2l6ZSgoKT0+e1xuICAgICAgICBjb25zdCB7cHJlY2lzaW9uPTF9PXRoaXMucHJvcHNcbiAgICAgICAgaWYocHJlY2lzaW9uPT0xKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5NZWFzdXJlXG5cbiAgICAgICAgcmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyB0aGlzLmNvbnRleHQuTWVhc3VyZXtcbiAgICAgICAgICAgIGxpbmVIZWlnaHQoLi4uYXJncyl7XG4gICAgICAgICAgICAgICAgY29uc3Qge2hlaWdodCxkZXNjZW50fT1zdXBlci5saW5lSGVpZ2h0KC4uLmFyZ3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OmhlaWdodCpwcmVjaXNpb24sXG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbnQ6ZGVzY2VudCpwcmVjaXNpb25cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0cmluZ1dpZHRoKC4uLmFyZ3Mpe1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmVjaXNpb24qc3VwZXIuc3RyaW5nV2lkdGgoLi4uYXJncylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgY29uc3Qge2NhbnZhc309dGhpcy5wcm9wc1xuICAgICAgICBpZighY2FudmFzKVxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpXG4gICAgICAgIGNvbnN0IHtwcm9wczp7X19zZXF1ZW50aWFsQ29tcG9zZT10cnVlfX09Y2FudmFzXG4gICAgICAgIGlmKF9fc2VxdWVudGlhbENvbXBvc2Upe1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHtzdXBlci5yZW5kZXIoKX1cbiAgICAgICAgICAgICAgICAgICAge2NhbnZhcyAmJiBSZWFjdC5jbG9uZUVsZW1lbnQoY2FudmFzLCB7ZG9jdW1lbnQ6dGhpc30pfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjYW52YXMsIHtkb2N1bWVudDp0aGlzfSlcbiAgICAgICAgfVxuICAgIH1cblxuXHRhcHBlbmRDb21wb3NlZChwYWdlKXtcbiAgICAgICAgaWYoVGVtcGxhdGUuaXNUZW1wbGF0ZShwYWdlKSl7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLnRlbXBsYXRlcy5wdXNoKHBhZ2UpXG4gICAgICAgIH1lbHNlIGlmKHRoaXMuY29tcHV0ZWQuY29tcG9zZWQuaW5kZXhPZihwYWdlKT09LTEpe1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5jb21wb3NlZC5wdXNoKHBhZ2UpXG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBlZGl0YWJsZShEb2N1bWVudCx7Y29udGludWFibGU6dHJ1ZX0pe1xuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdC4uLkRvY3VtZW50LmRlZmF1bHRQcm9wcyxcblx0XHRjYW52YXM6PFJlc3BvbnNpYmxlLz4sXG4gICAgfVxuICAgIFxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5Eb2N1bWVudC5jb250ZXh0VHlwZXMsXG4gICAgICAgIGFjdGl2ZURvY1N0b3JlOiBQcm9wVHlwZXMuYW55LFxuXHR9XG5cblx0c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh7aGFzaCx2aWV3cG9ydCxlZGl0YWJsZT10cnVlfSxzdGF0ZSl7XG5cdFx0cmV0dXJuIHt2aWV3cG9ydCxoYXNoLCBlZGl0YWJsZSwgLi4uKGhhc2ghPXN0YXRlLmhhc2ggJiYge21vZGU6XCJjb250ZW50XCIseTowfSl9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGU9e21vZGU6XCJjb250ZW50XCIsIC4uLnRoaXMuc3RhdGV9XG4gICAgICAgIHRoaXMuY29tcHV0ZWQuc2hvdWxkQ29udGludWVDb21wb3NlPXRydWUvL2NhY2hlIGZvciBzaG91bGRDb250aW51ZUNvbXBvc2Vcblx0fVxuICAgIFxuICAgIGdldCBjYW52YXMoKXtcbiAgICAgICAgY29uc3Qge2NhbnZhczp7dHlwZTpUeXBlLHByb3BzfX09dGhpcy5wcm9wc1xuICAgICAgICBjb25zdCBjYW52YXM9bmV3IFR5cGUoey4uLnByb3BzLGRvY3VtZW50OnRoaXN9KVxuICAgICAgICBjYW52YXMuc3RhdGU9VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoY2FudmFzLnByb3BzLGNhbnZhcy5zdGF0ZSlcbiAgICAgICAgcmV0dXJuIGNhbnZhc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb250aW51YWJsZVxuXHQgKiAxLiBzZWxlY3Rpb24gZW5kXG5cdCAqIDIuIHZpZXdwb3J0OiB2aWV3cG9ydGVyLnNjcm9sbFRvcCt2aWV3cG9ydGVyLmhlaWdodFxuICAgICAqIFxuICAgICAqIGNvbXB1dGVkLnNob3VsZENvbnRpbnVlQ29tcG9zZSBhcyBjYWNoZSwgc2luY2UgZnJlcXVlbnRseSBjYWxsZWRcbiAgICAgKiBcblx0ICoqL1xuXHRzaG91bGRDb250aW51ZUNvbXBvc2UoY29tcG9zZXIpe1xuICAgICAgICBpZih0aGlzLmNvbXB1dGVkLnNob3VsZENvbnRpbnVlQ29tcG9zZT09PWZhbHNlKXtcbiAgICAgICAgICAgIGNvbXBvc2VyICYmIHRoaXMubm90aWZ5Tm90QWxsQ29tcG9zZWQoY29tcG9zZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lZGl0YWJsZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbj1nZXRTZWxlY3Rpb24odGhpcy5jb250ZXh0LmFjdGl2ZURvY1N0b3JlLmdldFN0YXRlKCkpXG5cdFx0Y29uc3Qgc2hvdWxkPXRoaXMuY2FudmFzLmF2YWlsYWJsZUJsb2NrU2l6ZSgpIHx8ICF0aGlzLmlzU2VsZWN0aW9uQ29tcG9zZWQoc2VsZWN0aW9uKVxuICAgICAgICBpZighc2hvdWxkKXtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuc2hvdWxkQ29udGludWVDb21wb3NlPWZhbHNlXG4gICAgICAgICAgICBjb21wb3NlciAmJiB0aGlzLm5vdGlmeU5vdEFsbENvbXBvc2VkKGNvbXBvc2VyKVxuXHRcdH1cblx0XHRyZXR1cm4gc2hvdWxkXG4gICAgfVxuICAgIFxuICAgIGlzQXRvbUNvbGxlY3Rvcigpe1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgXG4gICAgLy9ubyBjYWNoZSBvbiBkb2N1bWVudCBsZXZlbFxuICAgIGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKCl7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQudGVtcGxhdGVzPVtdXG4gICAgICAgIHRoaXMuY29tcHV0ZWQuc2hvdWxkQ29udGludWVDb21wb3NlPXRydWVcbiAgICAgICAgc3VwZXIuY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGlzU2VsZWN0aW9uQ29tcG9zZWQoe3N0YXJ0LGVuZH0pe1xuICAgICAgICBjb25zdCBhbGxDb21wb3NlZD1pZD0+IWlkIHx8IHRoaXMuY29tcG9zZXJzLmhhcyhpZCkgJiYgdGhpcy5nZXRDb21wb3NlcihpZCkuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKClcblx0XHRyZXR1cm4gYWxsQ29tcG9zZWQoc3RhcnQuaWQpICYmIGFsbENvbXBvc2VkKGVuZC5pZClcbiAgICB9XG5cblx0Y29tcG9zZTRTY3JvbGwoeSl7XG5cdFx0dGhpcy5zZXRTdGF0ZSh7bW9kZTpcInNjcm9sbFwiLHl9KVxuXHR9XG5cblx0Y29tcG9zZTRTZWxlY3Rpb24oc2VsZWN0aW9uKXtcblx0XHR0aGlzLnNldFN0YXRlKHttb2RlOlwic2VsZWN0aW9uXCIsc2VsZWN0aW9ufSlcblx0fVxufVxuXG5cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkLCBlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcblxuXG5jb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChkb20uU2VjdGlvbilcbmNsYXNzIFNlY3Rpb24gZXh0ZW5kcyBTdXBlcntcblx0c3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0Li4uU3VwZXIuZGVmYXVsdFByb3BzLFxuXHRcdGNyZWF0ZUxheW91dChwcm9wcywuLi5hcmdzKXtcblx0XHRcdHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvci5MYXlvdXQoey4uLnRoaXMucHJvcHMubGF5b3V0LCAuLi5wcm9wc30sLi4uYXJncylcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuXHRcdC4uLlN1cGVyLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICBwcmV2TGF5b3V0OiBQcm9wVHlwZXMuZnVuYyxcblx0fVxuXG5cdHN0YXRpYyBMYXlvdXQ9Y2xhc3MgTGF5b3V0U2VjdGlvbiBleHRlbmRzIEZyYW1le1xuXHRcdHN0YXRpYyBkaXNwbGF5TmFtZT1cImZyYW1lLXNlY3Rpb25cIlxuXG5cdFx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0XHRjb25zdCB7cHJvcHM6e2ksSSxtYXJnaW59fT10aGlzXG5cdFx0XHRjb25zdCBwcm9wcz17bWFyZ2luLGksa2V5Oml9XG5cdFx0XHRpZihJIT11bmRlZmluZWQpXG5cdFx0XHRcdHByb3BzLkk9SVxuXHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChzdXBlci5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSxwcm9wcylcblx0XHR9XG5cblx0XHRjbG9uZTRTcGFjZShsYXlvdXQpe1xuXHRcdFx0aWYobGF5b3V0LmNvbnRleHQuZnJhbWU9PXRoaXMuY29udGV4dC5mcmFtZSlcblx0XHRcdFx0cmV0dXJuIHRoaXNcblx0XHRcdGNvbnN0IGNsb25lZD10aGlzLmNsb25lKHtzcGFjZTpsYXlvdXQucHJvcHMuc3BhY2V9KVxuXHRcdFx0Y2xvbmVkLmNvbnRleHQuZnJhbWU9bGF5b3V0LmNvbnRleHQuZnJhbWVcblx0XHRcdHJldHVybiBjbG9uZWRcblx0XHR9XG5cdH1cbiAgICBcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5jb21wdXRlZC5uYW1lZD17fVxuXHR9XG5cblx0Z2V0IGlzU2VjdGlvbigpe1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRnZXQgY3VycmVudCgpe1xuICAgICAgICBpZih0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aD09MCl7XG5cdFx0XHRjb25zdCBsYXlvdXQ9dGhpcy5jcmVhdGVMYXlvdXQoKVxuXHRcdFx0aWYobGF5b3V0KXtcblx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZC5wdXNoKGxheW91dClcblx0XHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudChsYXlvdXQpKVxuXHRcdFx0fVxuICAgICAgICB9XG5cdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuY29tcG9zZWRbdGhpcy5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGgtMV1cblx0fSBcblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICBjb25zdCBzZWxmPXRoaXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLmdldENoaWxkQ29udGV4dCgpLFxuICAgICAgICAgICAgcHJldkxheW91dChyZWYpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHtjb21wb3NlZH09c2VsZi5jb21wdXRlZFxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFtjb21wb3NlZC5pbmRleE9mKHJlZiktMV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXHRuYW1lZChuYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5uYW1lZFtuYW1lXVxuXHR9XG5cblxuXHQvKipwYWdlIGluZGV4LCBvciB1bmRlZmluZWQgKi9cblx0Z2V0IHRvcEluZGV4KCl7XG5cdFx0dmFyIGN1cnJlbnQ9dGhpcy5jb250ZXh0LnBhcmVudFxuXHRcdHdoaWxlKGN1cnJlbnQpe1xuXHRcdFx0aWYoY3VycmVudC5pc0ZyYW1lIHx8IGN1cnJlbnQuaXNTZWN0aW9uKVxuXHRcdFx0XHRyZXR1cm4gXG5cdFx0XHRpZighY3VycmVudC5jb250ZXh0IHx8ICFjdXJyZW50LmNvbnRleHQucGFyZW50KVxuXHRcdFx0XHRyZXR1cm4gY3VycmVudC5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGhcblx0XHRcdGN1cnJlbnQ9Y3VycmVudC5jb250ZXh0LnBhcmVudFxuXHRcdH1cblx0fVxuXG4gICAgLyoqXG4gICAgICogKiogY3JlYXRlIGlzIHB1cmUsIHNvIHlvdSBoYXZlIHRvIGFwcGVuZCB0byB5b3VyIGNvbXBvc2VkIGFuZCBwYXJlbnQgbWFudWFsbHkgZXZlcnkgdGltZSBjcmVhdGUgY2FsbGVkKioqXG4gICAgICogY3JlYXRlIGEgYmxvY2sgbGF5b3V0IGVuZ2luZSB3aXRoIGEgZW5zdXJlZCBzcGFjZSB7bGVmdCxyaWdodCxibG9ja09mZnNldCxoZWlnaHQsd3JhcHBlZXN9XG4gICAgICogd2hlbiBjdXJyZW50IHNwYWNlIGlzIGZ1bGwsIGl0IHdvdWxkIGJlIGNhbGxlZFxuICAgICAqIEBwYXJhbSB7Kn0gcHJvcHNcbiAgICAgKiBAcGFyYW0geyp9IGNvbnRleHQgXG4gICAgICogQHBhcmFtIHsqfSByZXF1aXJlZFNwYWNlIFxuICAgICAqL1xuICAgIGNyZWF0ZUxheW91dChwcm9wcz17fSxjb250ZXh0PXt9LHJlcXVpcmVkU3BhY2Upe1xuXHRcdGNvbnN0IGFsbFByb3BzPXsuLi5wcm9wcyxcblx0XHRcdGlkOnRoaXMucHJvcHMuaWQsIFxuXHRcdFx0aTp0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aCxcblx0XHR9XG5cdFx0Y29uc3QgST10aGlzLnRvcEluZGV4XG5cdFx0aWYodHlwZW9mKEkpPT1cIm51bWJlclwiKVxuXHRcdFx0YWxsUHJvcHMuST1JXG5cdFx0cmV0dXJuIHRoaXMucHJvcHMuY3JlYXRlTGF5b3V0LmJpbmQodGhpcykoXG5cdFx0XHRhbGxQcm9wcyxcbiAgICAgICAgICAgIHsuLi5jb250ZXh0LHBhcmVudDp0aGlzLGdldENvbXBvc2VyOmlkPT50aGlzLmNvbnRleHQuZ2V0Q29tcG9zZXIoaWQpfVxuICAgICAgICApXG4gICAgfVxuXG4gICAgY3JlYXRlQ29tcG9zZWQyUGFyZW50KGEpe1xuICAgICAgICByZXR1cm4gYVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGl0IHByb3h5IHRoZSBjYWxsIHRvIGN1cnJlbnQgbGF5b3V0XG4gICAgICogaWYgY3VycmVudCBsYXlvdXQgaGFzIG5vIHJlcXVpcmVkIHNwYWNlLCBhIG5ldyBMYXlvdXQgd2lsbCBiZSBjcmVhdGVkXG4gICAgICogQHBhcmFtIHsqfSByZXF1aXJlZCBcbiAgICAgKi9cbiAgICBuZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQpe1xuICAgICAgICBjb25zdCBzcGFjZT10aGlzLmN1cnJlbnQubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcbiAgICAgICAgaWYoIXNwYWNlKXtcblx0XHRcdGNvbnN0IGxheW91dD10aGlzLmNyZWF0ZUxheW91dCh1bmRlZmluZWQse2ZyYW1lOnNwYWNlLmZyYW1lfSxyZXF1aXJlZClcblx0XHRcdGlmKGxheW91dCl7XG5cdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQucHVzaChsYXlvdXQpXG5cdFx0XHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQobGF5b3V0KSlcblx0XHRcdFx0cmV0dXJuIHRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcblx0XHRcdH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhY2VcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBuYW1lZCBpcyBzdXBwb3J0ZWQgdG8gYmUga2VwdFxuICAgICAqIEBwYXJhbSB7Kn0gY29tcG9zZWRDaGlsZGVuQ29udGVudCBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIG51bWJlcjogdG8gcm9sbGJhY2sgbGFzdCBudW1iZXIgb2YgbGluZXNcbiAgICAgKi9cbiAgICBhcHBlbmRDb21wb3NlZCh7cHJvcHM6e25hbWVkLGhlaWdodH19KXtcbiAgICAgICAgaWYobmFtZWQpe1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5uYW1lZFtuYW1lZF09YXJndW1lbnRzWzBdXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zdCBhcHBlbmRlZD10aGlzLmN1cnJlbnQuYXBwZW5kQ29tcG9zZWQoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgaWYoYXBwZW5kZWQ9PT1mYWxzZSl7XG5cdFx0XHRcdGlmKHRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKHtoZWlnaHR9KSl7XG5cdFx0XHRcdFx0cmV0dXJuIDEvL3JlY29tcG9zZSBjdXJyZW50IGxpbmUgaW4gY2FzZSBkaWZmZXJlbnQgYXZhaWxhYmxlU3BhY2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gRnJhbWUuSU1NRURJQVRFX1NUT1BcbiAgICAgICAgICAgIH1lbHNlIGlmKE51bWJlci5pc0ludGVnZXIoYXBwZW5kZWQpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwZW5kZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXHR9XG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG5cdFx0Ly9sYXN0IG9uZSBzaG91bGQgY2hlY2sgYmFsYW5jZWFibGVcblx0XHRjb25zdCBsYXN0PXRoaXMuY29tcHV0ZWQuY29tcG9zZWRbdGhpcy5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGgtMV1cblx0XHRpZihsYXN0LmJhbGFuY2VhYmxlKXtcblx0XHRcdGxhc3QuYmFsYW5jZSgpXG5cdFx0fVxuXHRcdHN1cGVyLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVTZWN0aW9uIGV4dGVuZHMgZWRpdGFibGUoU2VjdGlvbix7c3RvcHBhYmxlOnRydWV9KXtcblx0LyoqXG5cdCAqIGxhc3RDb21wb3NlZD09Y29tcG9zZWRcblx0ICovXG5cdGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKG5leHRQcm9wcyl7XG5cdFx0Y29uc3QgY2hhbmdlZD1uZXh0UHJvcHMuaGFzaCE9dGhpcy5wcm9wcy5oYXNoXG5cdFx0aWYoY2hhbmdlZCl7XG5cdFx0XHR0aGlzLl9jYW5jZWxDaGFuZ2VkUGFydCguLi5hcmd1bWVudHMpXG5cdFx0fVxuXHRcdHRoaXMuX2NhbmNlbFVudGlsTGFzdEFsbENoaWxkcmVuQ29tcG9zZWQoLi4uYXJndW1lbnRzKVxuXHR9XG5cblx0LyoqXG5cdCAqIGJvdGggY29tcG9zZWQgYW5kIGxhc3RDb21wb3NlZCByZWZlciB0byBmaXNzaW9ucywgY2hlY2sgY3JlYXRlQ29tcG9zZWQyUGFyZW50XG5cdCAqIFxuXHQgKi9cblx0YXBwZW5kTGFzdENvbXBvc2VkKCl7XG5cdFx0Y29uc3QgbGFzdENvbXBvc2VkPXRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkXG5cdFx0Ly9jbGVhciBsYXN0IGNvbXBvc2VkXG5cdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZD1bXVxuXHRcdHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkPVtdXG5cdFx0XG5cdFx0Ly9hcHBlbmQgbGFzdCBjb21wb3NlZCBmaXNzaW9ucyBvbmUgYnkgb25lXG5cdFx0Y29uc3Qgc3BhY2VDaGFuZ2VkQXQ9bGFzdENvbXBvc2VkLmZpbmRJbmRleCgoZmlzc2lvbixpLF8sJCxpc0xhc3Q9aT09bGFzdENvbXBvc2VkLmxlbmd0aC0xKT0+e1xuXHRcdFx0aWYoaXNMYXN0JiZmaXNzaW9uLmlzRW1wdHkoKSl7XG5cdFx0XHRcdC8vbGFzdCBlbXB0eSBmaXNzaW9uIGlzIHVzZWxlc3MgZm9yIGNhY2hlXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0Y29uc3QgY3VycmVudD10aGlzLmNyZWF0ZUxheW91dCgpXG5cdFx0XHRpZihmaXNzaW9uLmdldFNwYWNlKCkuZXF1YWxzKGN1cnJlbnQuZ2V0U3BhY2UoKSkpe1xuXHRcdFx0XHRmaXNzaW9uPWZpc3Npb24uY2xvbmU0U3BhY2UoY3VycmVudClcblx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZC5zcGxpY2UoaSwxLGZpc3Npb24pXG5cdFx0XHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQoZmlzc2lvbikpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9KVxuXG5cblx0XHRpZihzcGFjZUNoYW5nZWRBdD09MCl7XG5cdFx0XHQvL2NsZWFyIGFsbCBjb21wdXRlZFxuXHRcdFx0dGhpcy5hbmNob3JzPVtdXG5cdFx0XHRzdXBlci5jYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCh7Y2hhbmdlZDp0cnVlfSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1lbHNlIGlmKHNwYWNlQ2hhbmdlZEF0PT0tMSl7XG5cdFx0XHRpZih0aGlzLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHRcdC8vY29udGludWUgZnJvbSBsYXN0XG5cdFx0fWVsc2V7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZFxuXHRcdFx0Ly9jb250aW51ZSBmcm9tIGxhc3Rcblx0XHR9XG5cblx0XHRjb25zdCBsYXN0SWQ9dGhpcy5jdXJyZW50Lmxhc3RMaW5lLnByb3BzW1wiZGF0YS1jb250ZW50XCJdXG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5maW5kSW5kZXgoYT0+YSAmJiBhLnByb3BzLmlkPT1sYXN0SWQpXG5cdH1cblxuXHRfY2FuY2VsQ2hhbmdlZFBhcnQobmV4dCl7XG5cdFx0dmFyIGxpbmVJbmRleD0tMVxuXHRcdGNvbnN0IGNoaWxkcmVuTmVlZFJlY29tcG9zZT10aGlzLmNoaWxkcmVuTmVlZFJlY29tcG9zZShuZXh0LHRoaXMucHJvcHMpXG5cdFx0Y29uc3QgZmlzc2lvbkluZGV4PXRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmZpbmRJbmRleCgoe2xpbmVzfSk9Pntcblx0XHRcdHJldHVybiAobGluZUluZGV4PWxpbmVzLmZpbmRJbmRleChhPT5jaGlsZHJlbk5lZWRSZWNvbXBvc2UuaW5jbHVkZXModGhpcy5jaGlsZElkT2YoYSkpKSkhPS0xXG5cdFx0fSlcblxuXHRcdHRoaXMuX2tlZXBMYXN0Q29tcG9zZWRVbnRpbChmaXNzaW9uSW5kZXgsbGluZUluZGV4KVxuXHR9XG5cblx0XG4gICAgLyoqXG4gICAgICogY2FjaGVhYmxlIEFQSVxuICAgICAqIGNvbXBvc2UgcnVsZTogYWx3YXlzIGNvbXBvc2UgYWxsIGNoaWxkcmVuLCBhbmQgY29udGVudCBjb21wb3NpbmcgaXMgc3RvcHBhYmxlIFxuICAgICAqIGJvdGggY29tcG9zZWQgYW5kIGxhc3RDb21wb3NlZCByZWZlciB0byBmaXNzaW9uc1xuICAgICAqL1xuXHRfY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCgpe1xuXHRcdHZhciBsaW5lSW5kZXg9LTFcbiAgICAgICAgY29uc3QgZmlzc2lvbkluZGV4PXRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmZpbmRMYXN0SW5kZXgoKHtsaW5lc30pPT57XG5cdFx0XHRyZXR1cm4gKGxpbmVJbmRleD1saW5lcy5maW5kTGFzdEluZGV4KChhLGksXywkLGlkPXRoaXMuY2hpbGRJZE9mKGEpKT0+e1xuXHRcdFx0XHRjb25zdCBjb21wb3Nlcj10aGlzLmNvbnRleHQuZ2V0Q29tcG9zZXIoaWQpXG5cdFx0XHRcdHJldHVybiBjb21wb3NlciAmJiBjb21wb3Nlci5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHRcdFx0fSkpIT0tMVxuXHRcdH0pXG5cdFx0dGhpcy5fa2VlcExhc3RDb21wb3NlZFVudGlsKGZpc3Npb25JbmRleCxsaW5lSW5kZXgrMSlcblx0fVxuXG5cdF9rZWVwTGFzdENvbXBvc2VkVW50aWwoZmlzc2lvbkluZGV4LGxpbmVJbmRleCl7XG5cdFx0Y29uc3Qge2xhc3RDb21wb3NlZH09dGhpcy5jb21wdXRlZFxuXHRcdGlmKGZpc3Npb25JbmRleD09LTEgfHwgXG5cdFx0XHQoZmlzc2lvbkluZGV4PT1sYXN0Q29tcG9zZWQubGVuZ3RoLTEgJiYgbGluZUluZGV4Pj1sYXN0Q29tcG9zZWRbZmlzc2lvbkluZGV4XS5saW5lcy5sZW5ndGgpKXtcblx0XHRcdHJldHVybiBcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWRcblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZD1sYXN0Q29tcG9zZWQuc2xpY2UoMCxmaXNzaW9uSW5kZXgrMSlcblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZFtmaXNzaW9uSW5kZXhdLnJlbW92ZUZyb20obGluZUluZGV4KVxuXHR9XG59XG4iLCJpbXBvcnQgTGluZUJyZWFrZXIgZnJvbSBcImxpbmVicmVha1wiXG5cbi8qKlxuKiBmaW5kIG9wcG9ydHVuaXRpZXMgZnJvbSBzdHJpbmdcbipcbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcHBvcnR1bml0aWVzKHN0cil7XG5cdGxldCBicmVha2VyPW5ldyBMaW5lQnJlYWtlcihzdHIpXG5cdGxldCBsYXN0PTBcblx0dmFyIG9wPVtdXG5cdGZvciAobGV0IGJrO2JrID0gYnJlYWtlci5uZXh0QnJlYWsoKTspIHtcblx0ICBvcC5wdXNoKHN0ci5zbGljZShsYXN0LCBiay5wb3NpdGlvbikpXG5cblx0ICBpZiAoYmsucmVxdWlyZWQpIHtcblx0XHQvL29wLnB1c2goXCJcXG5cIilcblx0ICB9XG5cblx0ICBsYXN0ID0gYmsucG9zaXRpb25cblx0fVxuXHRyZXR1cm4gb3Bcbn1cbi8qKlxuKiBmaW5kIG9wcG9ydHVuaXRpZXMgZnJvbSBhIHN0cnVjdHVyZWQgdGV4dHNcbipcbiovXG4gZnVuY3Rpb24gb3Bwb3J0dW5pdGllc09mT2JqZWN0cyhpdGVtcyxnZXRUZXh0PWE9PmEscmV2aXZlcj1hPT5hKXtcbiAgICBsZXQgY29tbWl0PShzdGF0ZSxpKT0+e1xuICAgICAgICBpZihzdGF0ZS50ZXh0Lmxlbmd0aD09MClcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVxuXG4gICAgICAgIGxldCB7dGV4dCxvcHBvcnR1bml0aWVzLGluZGV4ZXN9PXN0YXRlXG4gICAgICAgIGxldCBzdHI9dGV4dC5qb2luKFwiXCIpXG4gICAgICAgIGxldCBicmVha2VyPW5ldyBMaW5lQnJlYWtlcihzdHIpXG4gICAgICAgIGxldCBvcCwgd29yZFxuICAgICAgICBsZXQgc3RhcnQ9e2l0ZW1JbmRleDpzdGF0ZS5zdGFydCxpOjAsaW5kZXhPZlN0cjowfVxuICAgICAgICBsZXQgZm91bmQ9KGEsb3Asaik9PntcbiAgICAgICAgICAgIGlmKGEuaXRlbUluZGV4PT1qKVxuICAgICAgICAgICAgICAgIGEuaT1hLmkrb3AucG9zaXRpb24tYS5pbmRleE9mU3RyXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYS5pPW9wLnBvc2l0aW9uLWEuaW5kZXhPZlN0clxuXG4gICAgICAgICAgICBhLml0ZW1JbmRleD1qXG4gICAgICAgICAgICBhLmluZGV4T2ZTdHI9b3AucG9zaXRpb25cbiAgICAgICAgfVxuICAgICAgICB3aGlsZShvcD1icmVha2VyLm5leHRCcmVhaygpKXtcbiAgICAgICAgICAgIHdvcmQ9c3RyLnNsaWNlKHN0YXJ0LmluZGV4T2ZTdHIsb3AucG9zaXRpb24pXG5cbiAgICAgICAgICAgIGxldCBlbmQ9aW5kZXhlcy5yZWR1Y2UoKGEsbGVuLGopPT57XG4gICAgICAgICAgICAgICAgaWYoajxzdGFydC5pdGVtSW5kZXgpe1xuXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZihqPT1zdGFydC5pdGVtSW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW49bGVuLXN0YXJ0LmlcblxuICAgICAgICAgICAgICAgICAgICBpZihhLmluZGV4T2ZTdHIrbGVuPG9wLnBvc2l0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaW5kZXhPZlN0cis9bGVuXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGEuaW5kZXhPZlN0citsZW4+b3AucG9zaXRpb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYS5pbmRleE9mU3RyPT1vcC5wb3NpdGlvbil7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kKGEsb3AsailcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoYS5pbmRleE9mU3RyK2xlbj09b3AucG9zaXRpb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQoYSxvcCxqKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFcbiAgICAgICAgICAgIH0sey4uLnN0YXJ0fSlcblxuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5wdXNoKHJldml2ZXIoe1xuICAgICAgICAgICAgICAgICAgICBzdGFydDp7aXRlbUluZGV4OnN0YXJ0Lml0ZW1JbmRleCxhdDpzdGFydC5pfSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOntpdGVtSW5kZXg6ZW5kLml0ZW1JbmRleCxhdDplbmQuaX0sXG4gICAgICAgICAgICAgICAgICAgIHdvcmRcbiAgICAgICAgICAgICAgICB9KSlcblxuXHRcdFx0c3RhcnQ9ZW5kXG5cblx0XHRcdC8vZW5kIGF0IGl0ZW0gZW5kLCBsZXQgbmV4dCBzdGFydCBmcm9tIG5leHQgaXRlbVxuICAgICAgICAgICAgaWYoc3RhcnQuaXRlbUluZGV4PHRleHQubGVuZ3RoXG5cdFx0XHRcdCYmIHRleHRbc3RhcnQuaXRlbUluZGV4XS5sZW5ndGg9PXN0YXJ0Lmkpe1xuXHRcdFx0XHRzdGFydC5pdGVtSW5kZXgrPTFcblx0XHRcdFx0c3RhcnQuaT0wXG5cdFx0XHR9XG4gICAgICAgIH1cbiAgICAgICB0ZXh0LnNwbGljZSgwLHRleHQubGVuZ3RoKVxuICAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gY29tbWl0KGl0ZW1zLnJlZHVjZSgoc3RhdGUsIHBpZWNlLCBpKT0+e1xuICAgICAgICBsZXQge3RleHQsb3Bwb3J0dW5pdGllcyxpbmRleGVzfT1zdGF0ZVxuXHRcdGxldCB0PWdldFRleHQocGllY2UpXG4gICAgICAgIGlmKHQpe1xuICAgICAgICAgICAgdGV4dC5wdXNoKHQpXG4gICAgICAgICAgICBpbmRleGVzW2ldPXQubGVuZ3RoXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgY29tbWl0KHN0YXRlLGkpXG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnB1c2goe3N0YXJ0OntpdGVtSW5kZXg6aSxhdDowfSxlbmQ6e2l0ZW1JbmRleDppLGF0OjB9IH0pXG4gICAgICAgICAgICBzdGF0ZS5zdGFydD1pKzFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGVcbiAgICB9LHtzdGFydDowLCB0ZXh0OltdLCBvcHBvcnR1bml0aWVzOltdLCBpbmRleGVzOltdfSkpXG4gICAgICAgIC5vcHBvcnR1bml0aWVzXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5pbXBvcnQge2RvbSwgUmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsTGF5b3V0LCBlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IGJyZWFrT3Bwb3J0dW5pdGllcyBmcm9tIFwiLi4vd29yZHdyYXAvbGluZS1icmVha1wiXG5pbXBvcnQge1RleHQgYXMgQ29tcG9zZWRUZXh0LCAgR3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5QYXJhZ3JhcGgpXG5jbGFzcyBQYXJhZ3JhcGggZXh0ZW5kcyBTdXBlcntcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5TdXBlci5jb250ZXh0VHlwZXMsXG5cdFx0TWVhc3VyZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0bnVtYmVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblx0fVxuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHQuLi5TdXBlci5wcm9wVHlwZXMsXG5cdFx0ZGVmYXVsdFN0eWxlOlByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcdFxuXHR9XG5cbiAgIGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuY29tcHV0ZWQuYXRvbXM9W11cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtcblx0XHRcdGxpbmVzOntcblx0XHRcdFx0Z2V0KCl7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuY29tcG9zZWRcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHYpe1xuXHRcdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQ9dlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YXRvbXM6e1xuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5hdG9tc1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodil7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuYXRvbXM9dlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGdldCBlbmRlcldpZHRoKCl7XG5cdFx0cmV0dXJuIHRoaXMuYXRvbXNbdGhpcy5hdG9tcy5sZW5ndGgtMV0ucHJvcHMud2lkdGhcblx0fVxuXG5cdGdldCBjdXJyZW50TGluZSgpe1xuXHRcdGlmKHRoaXMubGluZXMubGVuZ3RoPT0wKXtcblx0XHRcdHRoaXMubGluZXMucHVzaCh0aGlzLmNyZWF0ZUxpbmUoKSlcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGgtMV1cblx0fVxuXG5cdGdldERlZmF1bHRNZWFzdXJlPW1lbW9pemUoKHN0eWxlPXRoaXMucHJvcHMuZGVmYXVsdFN0eWxlKT0+e1xuXHRcdHJldHVybiBuZXcgdGhpcy5jb250ZXh0Lk1lYXN1cmUoc3R5bGUpXG5cdH0pXG5cbiAgICAvKipcblx0ICogdG8gY29sbGVjdCBhdG9taWMgaW5saW5lIGl0ZW1zXG5cdCAqIGEgdGV4dCBzdGFydCBtYXkgbWVyZ2Ugd2l0aCBsYXN0IHRleHQgdG8gY29tcHV0ZSBicmVhayBvcHBvcnR1bml0eVxuXHQgKiBgJHtsYXN0VGV4dH0ke3RleHR9YCBzaG91bGQgYmUgZ29vZCBlbm91Z2hcblx0ICogQHBhcmFtIHsqfSBjb250ZW50XG5cdCAqL1xuICAgIGFwcGVuZENvbXBvc2VkKGNvbnRlbnQpe1xuXHRcdGNvbnN0IGxhc3Q9dGhpcy5hdG9tc1t0aGlzLmF0b21zLmxlbmd0aC0xXVxuXHRcdGlmKGxhc3QgJiYgbGFzdC5wcm9wcy5tZXJnZU9wcG9ydHVuaXR5ICYmIGNvbnRlbnQucHJvcHMubWVyZ2VPcHBvcnR1bml0eSl7XG5cdFx0XHRjb25zdCBsYXN0VGV4dD1sYXN0LnByb3BzLm1lcmdlT3Bwb3J0dW5pdHlcblx0XHRcdGNvbnN0IHRleHQ9Y29udGVudC5wcm9wcy5tZXJnZU9wcG9ydHVuaXR5XG5cdFx0XHRjb25zdCBvcHM9YnJlYWtPcHBvcnR1bml0aWVzKGAke2xhc3RUZXh0fSR7dGV4dH1gKVxuXHRcdFx0c3dpdGNoKG9wcy5sZW5ndGgpe1xuXHRcdFx0Y2FzZSAxOnsvL21lcmdlIGNvbnRlbnQgaW50byBsYXN0IGF0b21cblx0XHRcdFx0Y29uc3QgaGVpZ2h0PU1hdGgubWF4KGxhc3QucHJvcHMuaGVpZ2h0LCBjb250ZW50LnByb3BzLmhlaWdodClcblx0XHRcdFx0Y29uc3QgZGVzY2VudD1NYXRoLm1heChsYXN0LnByb3BzLmRlc2NlbnQsIGNvbnRlbnQucHJvcHMuZGVzY2VudClcblx0XHRcdFx0Y29uc3Qgd2lkdGg9bGFzdC5wcm9wcy53aWR0aCtjb250ZW50LnByb3BzLndpZHRoXG5cdFx0XHRcdGNvbnN0IHtwcm9wczp7XCJkYXRhLWNvbnRlbnRcIjppc1Jhd0F0b20sIGNoaWxkcmVuLG1lcmdlT3Bwb3J0dW5pdHl9fT1sYXN0XG5cdFx0XHRcdHRoaXMuYXRvbXMuc3BsaWNlKC0xLDEsXG5cdFx0XHRcdFx0PEdyb3VwIHsuLi57d2lkdGgsaGVpZ2h0LGRlc2NlbnQsbWVyZ2VPcHBvcnR1bml0eTpgJHttZXJnZU9wcG9ydHVuaXR5fSR7Y29udGVudC5wcm9wcy5tZXJnZU9wcG9ydHVuaXR5fWB9fT5cblx0XHRcdFx0XHRcdHtpc1Jhd0F0b20gPyBcblx0XHRcdFx0XHRcdFtSZWFjdC5jbG9uZUVsZW1lbnQobGFzdCx7a2V5OjB9KSxSZWFjdC5jbG9uZUVsZW1lbnQoY29udGVudCx7eDpsYXN0LnByb3BzLndpZHRoLGtleToxfSldXG5cdFx0XHRcdFx0XHQ6IFsuLi5jaGlsZHJlbixSZWFjdC5jbG9uZUVsZW1lbnQoY29udGVudCx7eDpsYXN0LnByb3BzLndpZHRoLGtleTpjaGlsZHJlbi5sZW5ndGgtMX0pXVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdClcblx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0fVxuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRpZihsYXN0VGV4dD09PW9wc1swXSl7Ly9kb24ndCBuZWVkIG1lcmdlXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Y29uc29sZS53YXJuKGBlcnJvcjogXCIke2xhc3RUZXh0fSR7dGV4dH1cIiBicmVhayBvcHBvcnR1bml0aWVzOiBbJHtvcHMuam9pbihcIixcIil9XWApXG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHRoaXMuYXRvbXMucHVzaChjb250ZW50KVxuXHR9XG5cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKXsvL25lZWQgYXBwZW5kIGxhc3Qgbm9uLWZ1bGwtd2lkdGggbGluZSB0byBwYXJlbnQgPz8/XG5cdFx0Y29uc3Qge3Byb3BzOntFbmQ9XCJcIn19PXRoaXNcblx0XHRjb25zdCBtZWFzdXJlPXRoaXMuZ2V0RGVmYXVsdE1lYXN1cmUoKVxuXHRcdHRoaXMuYXRvbXMucHVzaCg8Q29tcG9zZWRUZXh0XG5cdFx0XHR7Li4ubWVhc3VyZS5kZWZhdWx0U3R5bGV9XG5cdFx0XHR3aWR0aD17bWVhc3VyZS5zdHJpbmdXaWR0aChFbmQpfVxuXHRcdFx0bWluV2lkdGg9ezB9XG5cdFx0XHRjaGlsZHJlbj17RW5kfVxuXHRcdFx0Y2xhc3NOYW1lPVwiZW5kZXJcIlxuXHRcdFx0Lz4pXG5cdFx0dGhpcy5jb21taXQoKVxuXHRcdHN1cGVyLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG4gICAgfVxuXG5cdHJvbGxiYWNrTGluZXMobil7XG5cdFx0dGhpcy5saW5lcy5zcGxpY2UoLW4pXG5cdH1cblxuXHQvKipcblx0KiBsaW5lLmFwcGVuZENvbXBvc2VkIGNhbiByb2xsYmFjayB0byBhIHNwZWNpZmllZCBhdG9tXG5cdCogcGFyZW50LmFwcGVuZENvbXBvc2VkIGNhbiByb2xsYmFjayBsaW5lc1xuXHQqKi9cblx0Y29tbWl0KHN0YXJ0PTAsIGVuZD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUil7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0OntwYXJlbnR9LCBjb21wdXRlZDp7YXRvbXN9fT10aGlzXG5cblx0XHRjb25zdCByb2xsYmFja1RvTGluZVdpdGhGaXJzdEF0b21JbmRleD1hdD0+e1xuXHRcdFx0Y29uc3Qge2xpbmVzLGF0b21zfT10aGlzXG5cdFx0XHRjb25zdCBpPWxpbmVzLmZpbmRJbmRleChhPT5hdG9tcy5pbmRleE9mKGEuZmlyc3RBdG9tKT09YXQpXG5cdFx0XHR0aGlzLnJvbGxiYWNrTGluZXMobGluZXMubGVuZ3RoLWkpXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwZW5kQ29tcG9zZWRMaW5lPWJMYXN0TGluZT0+e1xuXHRcdFx0dGhpcy5jdXJyZW50TGluZS5mcmVlemUoKVxuXHRcdFx0cmV0dXJuIHBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCh0aGlzLmN1cnJlbnRMaW5lLGJMYXN0TGluZSkpXG5cdFx0fVxuXG5cdFx0Y29uc3QgYXRvbUluZGV4T2ZMYXN0TnRoTGluZT1pPT57XG5cdFx0XHRjb25zdCBsaW5lcz10aGlzLmxpbmVzXG5cdFx0XHRjb25zdCBsYXN0TnRoTGluZT1saW5lc1tsaW5lcy5sZW5ndGgtaV1cblx0XHRcdHJldHVybiBhdG9tcy5pbmRleE9mKGxhc3ROdGhMaW5lLmZpcnN0QXRvbSlcblx0XHR9XG5cblx0XHRjb25zdCBjcmVhdGVBbmRBcHBlbmRMaW5lPSguLi5hcmdzKT0+e1xuXHRcdFx0Y29uc3QgbGluZT10aGlzLmNyZWF0ZUxpbmUoLi4uYXJncylcblx0XHRcdGlmKCFsaW5lKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdHRoaXMubGluZXMucHVzaChsaW5lKVxuXHRcdFx0cmV0dXJuIGxpbmVcblx0XHR9XG5cblx0XHRjb25zdCBsZW49YXRvbXMubGVuZ3RoXG5cdFx0Y29uc3QgREVBRD01XG5cdFx0dmFyIG5lc3RlZD0wXG5cblx0XHRpZighY3JlYXRlQW5kQXBwZW5kTGluZSgpKVxuXHRcdFx0cmV0dXJuIFxuXG5cdFx0Y29uc3QgY29tbWl0RnJvbT0oc3RhcnQ9MCk9Pntcblx0XHRcdGxldCBsYXN0PTAsIHRpbWVzPTBcblx0XHRcdGxldCBuZXh0LCByb2xsYmFja0xpbmVzXG5cdFx0XHRmb3IobGV0IGk9c3RhcnQ7aTxsZW47KXtcblx0XHRcdFx0aWYoaT5lbmQpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaT09bGFzdCl7XG5cdFx0XHRcdFx0dGltZXMrK1xuXHRcdFx0XHRcdGlmKHRpbWVzPkRFQUQpe1xuXHRcdFx0XHRcdFx0dGhyb3cgRXJyb3IoYGl0IG1heSBiZSBkZWFkIGxvb3Agb24gJHtpfXRoIGF0b21zYClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdGxhc3Q9aVxuXHRcdFx0XHRcdHRpbWVzPTBcblx0XHRcdFx0fVxuXHRcdFx0XHRuZXh0PXRoaXMuY3VycmVudExpbmUuYXBwZW5kQXRvbShhdG9tc1tpXSxpKVxuXHRcdFx0XHRpZih0eXBlb2YobmV4dCk9PVwibnVtYmVyXCIpe1xuXHRcdFx0XHRcdC8vZGlzY2FyZCBjdXJyZW50IGxpbmUsIGFuZCBuZXh0IGlzIHJlcXVpcmVkSGVpZ2h0XG5cdFx0XHRcdFx0dGhpcy5yb2xsYmFja0xpbmVzKDEpXG5cdFx0XHRcdFx0aWYoIWNyZWF0ZUFuZEFwcGVuZExpbmUoe2hlaWdodDpuZXh0fSkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gXG5cdFx0XHRcdFx0Y29udGludWVcblx0XHRcdFx0fWVsc2UgaWYobmV4dCE9PWZhbHNlKXtcblx0XHRcdFx0XHRpKytcblx0XHRcdFx0XHRpZihpPmVuZCl7XG5cdFx0XHRcdFx0XHQvL2l0J3MgcmVjb21taXR0aW5nIHNpbmNlIGVuZCBpcyByZWFzb25hYmxlIHZhbHVlXG5cdFx0XHRcdFx0XHRpZihhcHBlbmRDb21wb3NlZExpbmUoaT09YXRvbXMubGVuZ3RoKT09TGF5b3V0LklNTUVESUFURV9TVE9QKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gTGF5b3V0LklNTUVESUFURV9TVE9QXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vY3VycmVudCBsaW5lIGlzIGZ1bGwsIGF0b21zW2ldIG5vdCBhc3NlbWJsZWQsIGNvbW1pdCB0byBibG9jayBsYXlvdXRcblx0XHRcdFx0XHRyb2xsYmFja0xpbmVzPWFwcGVuZENvbXBvc2VkTGluZShmYWxzZSlcblx0XHRcdFx0XHRpZighTnVtYmVyLmlzSW50ZWdlcihyb2xsYmFja0xpbmVzKSl7XG5cdFx0XHRcdFx0XHQvL2xpbmUgY29tbWl0dGVkXG5cdFx0XHRcdFx0XHRpZighY3JlYXRlQW5kQXBwZW5kTGluZSgpKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0Ly9mYWlsIGNvbW1pdHRlZCwgYW5kIHJvbGxiYWNrIGxpbmVzXG5cdFx0XHRcdFx0XHRpZihyb2xsYmFja0xpbmVzPT1MYXlvdXQuSU1NRURJQVRFX1NUT1ApXG5cdFx0XHRcdFx0XHRcdHJldHVybiBMYXlvdXQuSU1NRURJQVRFX1NUT1BcblxuXHRcdFx0XHRcdFx0bmV4dD1hdG9tSW5kZXhPZkxhc3ROdGhMaW5lKHJvbGxiYWNrTGluZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIuaXNJbnRlZ2VyKG5leHQpKXtcblx0XHRcdFx0XHRcdFx0cm9sbGJhY2tUb0xpbmVXaXRoRmlyc3RBdG9tSW5kZXgobmV4dClcblx0XHRcdFx0XHRcdFx0aWYoIWNyZWF0ZUFuZEFwcGVuZExpbmUoKSlcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gXG4gICAgICAgIFx0XHRcdFx0XHRpPW5leHRcbiAgICAgICAgXHRcdFx0XHRcdGNvbnRpbnVlXG4gICAgICAgIFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZigrK25lc3RlZD5ERUFEKXtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihgaXQgbWF5IGJlIGRlYWQgbG9vcCBvbiBzaW5jZSBjb21taXQgbmVzdGVkICR7bmVzdGVkfSwgaWdub3JlIGFuZCBjb250aW51ZWApXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZih0aGlzLmxpbmVzLmxlbmd0aD09MSB8fCAhdGhpcy5jdXJyZW50TGluZS5pc0VtcHR5KCkpe1xuXHRcdFx0XHRyb2xsYmFja0xpbmVzPWFwcGVuZENvbXBvc2VkTGluZSh0cnVlKVxuXHRcdFx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKHJvbGxiYWNrTGluZXMpKXtcblx0XHRcdFx0XHRpZihyb2xsYmFja0xpbmVzPT1GcmFtZS5JTU1FRElBVEVfU1RPUClcblx0XHRcdFx0XHRcdHJldHVybiBGcmFtZS5JTU1FRElBVEVfU1RPUFxuXHRcdFx0XHRcdG5leHQ9YXRvbUluZGV4T2ZMYXN0TnRoTGluZShyb2xsYmFja0xpbmVzKVxuXHRcdFx0XHRcdHJvbGxiYWNrVG9MaW5lV2l0aEZpcnN0QXRvbUluZGV4KG5leHQpXG5cdFx0XHRcdFx0aWYoIWNyZWF0ZUFuZEFwcGVuZExpbmUoKSlcblx0XHRcdFx0XHRcdHJldHVybiBcblx0XHRcdFx0XHRjb21taXRGcm9tKG5leHQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29tbWl0RnJvbShzdGFydClcblx0fVxuXG5cdC8qKlxuXHQgKiByZS1jb21taXQgbGFzdExpbmVzXG5cdCAqIGRlZmF1bHQgcmUtY29tbWl0IGFsbCBhbHJlYWR5IGxheW91dGVkIGxpbmVzXG5cdCAqIEBwYXJhbSB7fSBsYXN0TGluZXMgXG5cdCAqL1xuXHRyZWNvbW1pdChsYXN0TGluZXM9dGhpcy5saW5lcyl7XG5cdFx0Y29uc3Qge2F0b21zLCBsaW5lc309dGhpc1xuXHRcdGxhc3RMaW5lcz1saW5lcy5zbGljZSgtbGFzdExpbmVzLmxlbmd0aClcblxuXHRcdHRoaXMucm9sbGJhY2tMaW5lcyhsYXN0TGluZXMubGVuZ3RoKVxuXG5cdFx0Y29uc3Qgc3RhcnQ9YXRvbXMuZmluZEluZGV4KGE9PmE9PWxhc3RMaW5lc1swXS5maXJzdEF0b20pXG5cdFx0Y29uc3QgZW5kPWF0b21zLnNsaWNlKHN0YXJ0KzEpLmZpbmRJbmRleChhPT5hPT1sYXN0TGluZXNbbGFzdExpbmVzLmxlbmd0aC0xXS5sYXN0QXRvbSkrc3RhcnQrMVxuXHRcdHJldHVybiB0aGlzLmNvbW1pdChzdGFydCwgZW5kPT1hdG9tcy5sZW5ndGgtMSA/IHVuZGVmaW5lZCA6IGVuZClcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yeSBjYW4gaGFuZGxlIGl0LCBzbyBpdCBjYW4gYmUgaW4gTGluZSBhcyBub3JtYWwgYXRvbVxuXHQgKiBmaXJzdExpbmUgaXMgdXN1YWxseSBtaW51cyBmb3IgbnVtYmVyaW5nXG5cdCAqL1xuXHRnZXROdW1iZXJpbmdBdG9tKCl7XG5cdFx0Y29uc3Qge3Byb3BzOntudW1iZXJpbmc6e3N0eWxlfSwgaW5kZW50OntmaXJzdExpbmU9MH0saWR9LGNvbnRleHQ6e01lYXN1cmUsIG51bWJlcmluZ319PXRoaXNcblx0XHRjb25zdCB7ZGVmYXVsdFN0eWxlfT1uZXcgTWVhc3VyZShzdHlsZSlcblxuXHRcdHJldHVybiA8Q29tcG9zZWRUZXh0LkR5bmFtaWNcblx0XHRcdHsuLi5kZWZhdWx0U3R5bGV9XG5cdFx0XHRrZXk9XCJudW1iZXJpbmdcIlxuXHRcdFx0Y2xhc3NOYW1lPVwibnVtYmVyaW5nXCJcblx0XHRcdHg9e2ZpcnN0TGluZX1cblx0XHRcdHdpZHRoPXstZmlyc3RMaW5lfVxuXHRcdFx0Y2hpbGRyZW49eygpPT5udW1iZXJpbmcoaWQpfVxuXHRcdC8+XG5cdH1cblxuXHRuZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQpe1xuXHRcdGNvbnN0IHNwYWNlPXN1cGVyLm5leHRBdmFpbGFibGVTcGFjZShyZXF1aXJlZClcblx0XHRpZighc3BhY2UpXG5cdFx0XHRyZXR1cm4gc3BhY2Vcblx0XHRjb25zdCB7d2lkdGgsbGVmdD0wLHJpZ2h0PXdpZHRofT1zcGFjZVxuXHRcdGNvbnN0IHtpbmRlbnQ6e2xlZnQ6aW5kZW50TGVmdD0wLHJpZ2h0OmluZGVudFJpZ2h0PTAsZmlyc3RMaW5lPTB9LCBudW1iZXJpbmcsfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgYkZpcnN0TGluZT10aGlzLmxpbmVzLmxlbmd0aD09MFxuXHRcdHJldHVybiBzcGFjZS5jbG9uZSh7XG5cdFx0XHRsZWZ0OmxlZnQraW5kZW50TGVmdCsoYkZpcnN0TGluZSYmIW51bWJlcmluZyYmZmlyc3RMaW5lfHwwKSwgXG5cdFx0XHRyaWdodDpyaWdodC1pbmRlbnRSaWdodCxcblx0XHR9KVxuXHR9XG5cblx0LyoqXG5cdCAqIEJsb2NrIG9mZnNldC90b3AgbXVzdCBiZSBkZWNpZGVkLCBzbyB0aGUgZm9sbG93aW5nIG11c3QgYmUgaGFuZGxlZCBoZXJlXG5cdCAqIHRvcCwgZmlyc3RMaW5lLCBudW1iZXJpbmcgXG5cdCAqIHBhcmFncmFwaCBib3R0b20gZG9lc24ndCBhZmZlY3QgY3VycmVudCBsaW5lJ3MgYmxvY2sgb2Zmc2V0LCBzbyBkb24ndCBoYW5kbGUgaXQgaGVyZVxuXHQgKiAqKiogZXZlcnkgY3JlYXRlZCBsaW5lIGlzIGFwcGVuZGVkIElNTUVESUFURUxZIGludG8gY29tcG9zZWQsIHNvIHRoZSBsaW5lIGluZGV4IGlzIGZyb20gMSBpbiBjcmVhdGVDb21wb3NlZDJQYXJlbnQgXG5cdCAqL1xuICAgIGNyZWF0ZUxpbmUocmVxdWlyZWQpe1xuXHRcdGNvbnN0IHNwYWNlPXRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKHJlcXVpcmVkKVxuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHJldHVybiBzcGFjZVxuXHRcdGNvbnN0IHtudW1iZXJpbmcsIGFsaWduLHNwYWNpbmc6e2xpbmVIZWlnaHQsdG9wfX09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IGJGaXJzdExpbmU9dGhpcy5saW5lcy5sZW5ndGg9PTBcblxuXHRcdGNvbnN0IGxpbmU9bmV3IHRoaXMuY29uc3RydWN0b3IuTGluZSh7XG5cdFx0XHRzcGFjZSxcblx0XHRcdHBvc2l0aW9uZWQ6IGJGaXJzdExpbmUmJm51bWJlcmluZyA/IFt0aGlzLmdldE51bWJlcmluZ0F0b20oKV0gOiBbXSxcblx0XHRcdHRvcDogYkZpcnN0TGluZSA/IHRvcCA6IHVuZGVmaW5lZCwgXG5cdFx0XHRsaW5lSGVpZ2h0LFxuXHRcdFx0YWxpZ24sXG5cdFx0fSx7cGFyZW50OnRoaXN9KVxuXG5cdFx0cmV0dXJuIGxpbmVcblx0fVxuXHRcblx0LyoqXG5cdCAqIHwgc3BhY2luZyBsZWZ0IHwgbGluZSBib3ggfCBzcGFjaW5nIHJpZ2h0fFxuXHQgKiBzcGFjaW5nIGJvdHRvbSBkb2Vzbid0IGFmZmVjdCBsaW5lIGJsb2NrIG9mZnNldCwgc28gaXQncyBvayBoZXJlXG5cdCAqIFN0b3J5OiBoZWxwcyBcblx0ICogMS4gbWVyZ2UsIGZvciBwZXJmb3JtYW5jZSBvbiB2aWV3LCBzaW1wbGVyIGRvbVxuXHQgKiAyLiBzZXQgYmFzZWxpbmVcblx0ICogMy4gYWxpZ25cblx0ICogNC4ganVzdGlmeVxuXHQgKiBAcGFyYW0geyp9IGxpbmUgXG5cdCAqIEBwYXJhbSB7Kn0gbGFzdCBcblx0ICovXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudChsaW5lLGJMYXN0TGluZSl7XG5cdFx0Y29uc3Qge2hlaWdodCx3aWR0aCwgYW5jaG9yLCB0b3BUb0Jsb2NrT2Zmc2V0fT1saW5lXG5cdFx0Y29uc3Qge1xuXHRcdFx0bnVtYmVyaW5nLFxuXHRcdFx0aW5kZW50OntsZWZ0PTAscmlnaHQ9MCwgZmlyc3RMaW5lPTB9LFxuXHRcdFx0c3BhY2luZzp7Ym90dG9tPTB9LFxuXHRcdFx0b3JwaGFuLHdpZG93LGtlZXBXaXRoTmV4dCxrZWVwTGluZXMsXG5cdFx0XHR9PXRoaXMucHJvcHNcblx0XHRcblx0XHRjb25zdCBiRmlyc3RMaW5lPXRoaXMubGluZXMubGVuZ3RoPT0xXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCBjbGFzc05hbWU9XCJsaW5lXCJcblx0XHRcdFx0aGVpZ2h0PXt0b3BUb0Jsb2NrT2Zmc2V0K2hlaWdodCsoYkxhc3RMaW5lJiZib3R0b218fDApfSBcblx0XHRcdFx0d2lkdGg9e2xlZnQrKGJGaXJzdExpbmUmJiFudW1iZXJpbmcmJmZpcnN0TGluZXx8MCkrd2lkdGgrcmlnaHR9IFxuXHRcdFx0XHRwYWdpbmF0aW9uPXt7XG5cdFx0XHRcdFx0aWQ6dGhpcy5wcm9wcy5pZCxcblx0XHRcdFx0XHRvcnBoYW4sd2lkb3csa2VlcFdpdGhOZXh0LGtlZXBMaW5lcywgXG5cdFx0XHRcdFx0aTp0aGlzLmxpbmVzLmxlbmd0aCxcblx0XHRcdFx0XHRsYXN0OmJMYXN0TGluZVxuXHRcdFx0XHR9fSBcblx0XHRcdFx0YW5jaG9yPXthbmNob3J9IFxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxHcm91cCBcblx0XHRcdFx0XHR4PXtsZWZ0KyhiRmlyc3RMaW5lJiYhbnVtYmVyaW5nJiZmaXJzdExpbmV8fDApfSBcblx0XHRcdFx0XHR5PXt0b3BUb0Jsb2NrT2Zmc2V0fSBcblx0XHRcdFx0XHR3aWR0aD17d2lkdGh9IFxuXHRcdFx0XHRcdGhlaWdodD17aGVpZ2h0fT5cblx0XHRcdFx0XHR7bGluZS5yZW5kZXIoYkxhc3RMaW5lKX1cbiAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgKVxuXHR9XG5cdFxuXHRzdGF0aWMgTGluZT1jbGFzcyBMaW5lIGV4dGVuZHMgTGF5b3V0LklubGluZXtcblx0XHQvKip3aGVyZSBkb2VzIGxhc3QgYXRvbSBlbmQgd2l0aCBpbiBpbmxpbmUgc2l6ZSwgZm9yIHBvc2l0aW9uaW5nIG9ubHkgKi9cblx0XHRnZXQgY3VycmVudFgoKXtcblx0XHRcdHJldHVybiB0aGlzLmlubGluZVNlZ21lbnRzLmN1cnJlbnRYXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlUGFyYWdyYXBoIGV4dGVuZHMgZWRpdGFibGUoUGFyYWdyYXBoLHtzdG9wcGFibGU6dHJ1ZX0pe1xuXHQvKip0byBzeW5jIGxhc3RDb21wb3NlZCB3aXRoIGNvbXBvc2VkICovXG5cdHJvbGxiYWNrTGluZXMobil7XG5cdFx0c3VwZXIucm9sbGJhY2tMaW5lcyhuKVxuXHRcdHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLnNwbGljZSgtbilcblx0fVxuXHRcblx0Y2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2hhc2gsY2hhbmdlZD1oYXNoIT10aGlzLnByb3BzLmhhc2h9KXtcblx0XHRpZihjaGFuZ2VkKXtcblx0XHRcdHRoaXMuYXRvbXM9W11cblx0XHRcdHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0XHR9XG5cdH1cblxuXHQvKippZiBsaW5lU2VnbWVudHMgaXMgc2FtZSwgbGFzdCBsYXlvdXRlZCBsaW5lIHNob3VsZCBiZSBhYmxlIHRvIGZpdCBpbiB3aXRob3V0IHJlbGF5b3V0ICovXG5cdGFwcGVuZExhc3RDb21wb3NlZCgpe1xuXHRcdGNvbnN0IGxpbmVzPXRoaXMubGluZXNcblx0XHR0aGlzLmxpbmVzPVtdXG5cdFx0Y29uc3Qgc3BhY2VDaGFuZ2VkQXQ9dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuZmluZEluZGV4KChhLGkpPT57XG5cdFx0XHR2YXIgbGluZT1saW5lc1tpXVxuXHRcdFx0Y29uc3QgbmV3TGluZT10aGlzLmNyZWF0ZUxpbmUoe2hlaWdodDphLnByb3BzLmhlaWdodH0pXG5cdFx0XHRpZighbmV3TGluZSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdGNvbnN0IHNwYWNlPW5ld0xpbmUucHJvcHMuc3BhY2Vcblx0XHRcdGlmKGxpbmUuaXNGaXRUbyhzcGFjZSkpe1xuXHRcdFx0XHRsaW5lPWxpbmUuY2xvbmU0U3BhY2Uoc3BhY2UpXG5cdFx0XHRcdHRoaXMubGluZXMucHVzaChsaW5lKVxuXHRcdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKGEpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLnNwbGljZShpKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRpZihzcGFjZUNoYW5nZWRBdD09MCl7XG5cdFx0XHR0aGlzLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKHtjaGFuZ2VkOnRydWV9KVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fVxuXHRcdFxuXHRcdGlmKHNwYWNlQ2hhbmdlZEF0PjApe1xuXHRcdFx0dGhpcy5jb21taXQodGhpcy5hdG9tcy5pbmRleE9mKGxpbmVzW3NwYWNlQ2hhbmdlZEF0XS5maXJzdEF0b20pKVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG59XG5cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuaW1wb3J0IHtzaGFsbG93RXF1YWx9IGZyb20gXCJyZWNvbXBvc2VcIlxuXG5pbXBvcnQge05vQ2hpbGQsZWRpdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgYnJlYWtPcHBvcnR1bml0aWVzIGZyb20gXCIuLi93b3Jkd3JhcC9saW5lLWJyZWFrXCJcblxuaW1wb3J0IHtUZXh0IGFzIENvbXBvc2VkVGV4dH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuY29uc3QgU3VwZXI9Tm9DaGlsZChkb20uVGV4dClcblxuY2xhc3MgVGV4dCBleHRlbmRzIFN1cGVye1xuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdC4uLlN1cGVyLmNvbnRleHRUeXBlcyxcblx0XHRNZWFzdXJlOiBQcm9wVHlwZXMuZnVuYyxcblx0fVxuXG4gICAgZ2V0IHRleHQoKXtcbiAgICAgICAgY29uc3Qge2NoaWxkcmVuPVwiXCJ9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4uam9pbihcIlwiKSA6IGNoaWxkcmVuXG4gICAgfVxuXG4gICAgY3JlYXRlTWVhc3VyZT1tZW1vaXplKChmb250cyxzaXplLGJvbGQsaXRhbGljKT0+e1xuICAgICAgICBjb25zdCB7TWVhc3VyZX09dGhpcy5jb250ZXh0XG4gICAgICAgIGNvbnN0IG1lYXN1cmU9bmV3IE1lYXN1cmUoe2ZvbnRzLHNpemUsYm9sZCxpdGFsaWN9KVxuICAgICAgICBjb25zdCBfc3RyaW5nV2lkdGg9bWVhc3VyZS5zdHJpbmdXaWR0aC5iaW5kKG1lYXN1cmUpXG4gICAgICAgIGNvbnN0IGNhY2hlPW5ldyBNYXAoKVxuICAgICAgICBtZWFzdXJlLnN0cmluZ1dpZHRoPXdvcmQ9PntcbiAgICAgICAgICAgIGlmKGNhY2hlLmhhcyh3b3JkKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KHdvcmQpXG4gICAgICAgICAgICBjb25zdCB3aWR0aD1fc3RyaW5nV2lkdGgod29yZClcbiAgICAgICAgICAgIGNhY2hlLnNldCh3b3JkLHdpZHRoKVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVcbiAgICB9KVxuXG4gICAgZ2V0IG1lYXN1cmUoKXtcbiAgICAgICAgY29uc3Qge2ZvbnRzLCBzaXplLCBib2xkLCBpdGFsaWMsIH09dGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVNZWFzdXJlKGZvbnRzLHNpemUsYm9sZCxpdGFsaWMpXG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRTdHlsZSgpe1xuICAgICAgICBjb25zdCB7Y29sb3IsaGlnaGxpZ2h0LHZhbmlzaCxib3JkZXIsdW5kZXJsaW5lLHN0cmlrZX09dGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5tZWFzdXJlLmRlZmF1bHRTdHlsZSxcbiAgICAgICAgICAgIGNvbG9yLCBoaWdobGlnaHQsYm9yZGVyLHVuZGVybGluZSxzdHJpa2VcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGl0J3Mgc2FmZSB0byBvdmVycmlkZSByZW5kZXIgc2luY2UgYWxsQ2hpbGRyZW5Db21wb3NlZCB3b3VsZCBiZSBzZXQgbWFudWFsbHkgYXQgZW5kIG9mIHJlbmRlclxuICAgICAqL1xuICAgIHJlbmRlcigpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZhbmlzaCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN0eWxlPXRoaXMuZGVmYXVsdFN0eWxlXG4gICAgICAgICAgICBjb25zdCBtZWFzdXJlPXRoaXMubWVhc3VyZVxuICAgICAgICAgICAgY29uc3Qgd2hpdGVzcGFjZVdpZHRoPW1lYXN1cmUuc3RyaW5nV2lkdGgoXCIgXCIpXG5cbiAgICAgICAgICAgIGxldCBzdGFydD0wXG4gICAgICAgICAgICBicmVha09wcG9ydHVuaXRpZXModGhpcy50ZXh0KS5mb3JFYWNoKChhLGosXzEsXzIsakxhc3Q9XzEubGVuZ3RoLTE9PWopPT57XG4gICAgICAgICAgICAgICAgYS5zcGxpdCgvKFxccykvKS5maWx0ZXIoYT0+ISFhKS5mb3JFYWNoKChiLGksJDEsJDIsaUxhc3Q9JDEubGVuZ3RoLTE9PWkpPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzV2hpdGVzcGFjZT1iPT1cIiBcIlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRpbmc9Yi5lbmRzV2l0aChcIixcIikgPyBiLnN1YnN0cmluZygwLGIubGVuZ3RoLTEpIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb21wb3NlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6aXNXaGl0ZXNwYWNlID8gXCJ3aGl0ZXNwYWNlXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDppc1doaXRlc3BhY2UgPyB3aGl0ZXNwYWNlV2lkdGggOiBtZWFzdXJlLnN0cmluZ1dpZHRoKGIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6aXNXaGl0ZXNwYWNlID8gMCA6IChlbmRpbmcgPyBtZWFzdXJlLnN0cmluZ1dpZHRoKGVuZGluZykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLWVuZGF0XCI6c3RhcnQrPWIubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZU9wcG9ydHVuaXR5OigoaStqKT09MHx8KGpMYXN0JiZpTGFzdCkpJiYhaXNXaGl0ZXNwYWNlJiZiLy9maXJzdCBvciBsYXN0XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9ZmluYWxseXtcbiAgICAgICAgICAgIHRoaXMub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgfVxuICAgIH1cblxuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQocHJvcHMpe1xuICAgICAgICByZXR1cm4gPENvbXBvc2VkVGV4dCB7Li4ucHJvcHN9Lz5cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVRleHQgZXh0ZW5kcyBlZGl0YWJsZShUZXh0KXtcbiAgICBpc0F0b21DaGFuZ2VkKHByb3BzKXtcbiAgICAgICAgaWYoIXN1cGVyLmlzQXRvbUNoYW5nZWQoLi4uYXJndW1lbnRzKSl7XG4gICAgICAgICAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChwcm9wcyx0aGlzLnByb3BzKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKHRoaXMudGV4dC5sZW5ndGg9PTApe1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRDb21wb3NlZCh7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5kZWZhdWx0U3R5bGUsXG4gICAgICAgICAgICAgICAgd2lkdGg6MCxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDowLFxuICAgICAgICAgICAgICAgIFwiZGF0YS1lbmRhdFwiOjAsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFwiXCJcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXMub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpXG4gICAgfVxufVxuIiwiaW1wb3J0IFBhdGggZnJvbSBcInN2Z3BhdGhcIlxuaW1wb3J0IHNpbXBsaWZ5IGZyb20gXCJzaW1wbGlmeS1wYXRoXCJcbmltcG9ydCBjb250b3VycyBmcm9tIFwic3ZnLXBhdGgtY29udG91cnNcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgX18kMSBleHRlbmRzIFBhdGh7XG4gICAgc3RhdGljIGZyb21SZWN0KHt4LHksd2lkdGg6dyxoZWlnaHQ6aH0pe1xuICAgICAgICByZXR1cm4gbmV3IHRoaXMoYE0ke3h9ICR7eX0gaCR7d30gdiR7aH0gaCR7LXd9emApICAgIFxuICAgIH1cblxuICAgIHRvU3RyaW5nKCl7XG4gICAgICAgIHRoaXMuX19ldmFsdWF0ZVN0YWNrKClcbiAgICAgICAgcmV0dXJuIG1lbW9pemUoZD0+c3VwZXIudG9TdHJpbmcoKSkodGhpcy5zZWdtZW50cy5tYXAoYT0+YS5qb2luKFwiXCIpKS5qb2luKFwiXCIpKVxuICAgIH1cblxuICAgIGJvdW5kcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5jb250b3VyKClcblx0XHRcdC5yZWR1Y2UoKHtsZWZ0LHRvcCxyaWdodCxib3R0b219LFt4LHldKT0+KHtcblx0XHRcdFx0bGVmdDpNYXRoLm1pbihsZWZ0LHgpLFxuXHRcdFx0XHR0b3A6TWF0aC5taW4odG9wLHkpLFxuXHRcdFx0XHRyaWdodDpNYXRoLm1heChyaWdodCx4KSxcblx0XHRcdFx0Ym90dG9tOk1hdGgubWF4KGJvdHRvbSx5KVxuXHRcdFx0fSkse1xuXHRcdFx0XHRsZWZ0Ok51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuXHRcdFx0XHR0b3A6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG5cdFx0XHRcdHJpZ2h0Ok51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuXHRcdFx0XHRib3R0b206TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG5cdFx0XHR9KVxuICAgIH1cblxuICAgIGNvbnRvdXIodG9sZXJhbmNlPTEsZD10aGlzLnRvU3RyaW5nKCkpe1xuICAgICAgICByZXR1cm4gbWVtb2l6ZSgodG9sZXJhbmNlLCBkKT0+Y29udG91cnModGhpcy5zZWdtZW50cylcbiAgICAgICAgICAgIC5tYXAoYT0+YS5tYXAoKFt4LHldKT0+W01hdGguY2VpbCh4KSwgTWF0aC5jZWlsKHkpXSkpXG4gICAgICAgICAgICAubWFwKGE9PnNpbXBsaWZ5KGEsdG9sZXJhbmNlKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFsbCxhKT0+Wy4uLmFsbCwuLi5hXSxbXSlcbiAgICAgICAgKSgpO1xuICAgIH1cblxuICAgIGludGVyc2VjdHMobGluZS8qe3gxLHgyLHkxLHkyfSovLCB0b2xlcmFuY2Upe1xuICAgICAgICBjb25zdCBwb2ludHM9dGhpcy5jb250b3VyKHRvbGVyYW5jZSlcbiAgICAgICAgcmV0dXJuIHBvaW50cy5zbGljZSgxKVxuXHRcdFx0Lm1hcCgoW3gyLHkyXSxpKT0+e1xuXHRcdFx0XHRjb25zdCBbeDEseTFdPXBvaW50c1tpXVxuXHRcdFx0XHRyZXR1cm4ge3gxLHkxLHgyLHkyfVxuXHRcdFx0fSlcblx0XHRcdC5tYXAobGluZTE9PmxpbmVfbGluZV9pbnRlcnNlY3QobGluZTEsbGluZSkpXG5cdFx0XHQuZmlsdGVyKGE9PiEhYSlcbiAgICB9XG5cbiAgICBjZW50ZXIoKXtcbiAgICAgICAgY29uc3Qge2xlZnQscmlnaHQsdG9wLGJvdHRvbSx4PShsZWZ0K3JpZ2h0KS8yLCB5PSh0b3ArYm90dG9tKS8yfT10aGlzLmJvdW5kcygpXG4gICAgICAgIHJldHVybiB7eCx5fVxuICAgIH1cblxuICAgIGNsb25lKCl7XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnRvU3RyaW5nKCkpXG4gICAgfVxuXG4gICAgc2l6ZShzdHJva2VXaWR0aD0wKXtcbiAgICAgICAgY29uc3Qge2xlZnQscmlnaHQsdG9wLGJvdHRvbSx3aWR0aD1yaWdodC1sZWZ0LGhlaWdodD1ib3R0b20tdG9wfT10aGlzLmJvdW5kcygpXG4gICAgICAgIHJldHVybiB7d2lkdGg6d2lkdGgrc3Ryb2tlV2lkdGgsaGVpZ2h0OmhlaWdodCtzdHJva2VXaWR0aH1cbiAgICB9XG59XG5cbmNvbnN0IGJldHdlZW49KGEsYjEsYjIpPT4oKGEgPj0gYjEpICYmIChhIDw9IGIyKSl8fCgoYSA+PSBiMikgJiYgKGEgPD0gYjEpKVxuZnVuY3Rpb24gbGluZV9saW5lX2ludGVyc2VjdChsaW5lMSwgbGluZTIpIHtcblx0dmFyIHgxID0gbGluZTEueDEsIHgyID0gbGluZTEueDIsIHgzID0gbGluZTIueDEsIHg0ID0gbGluZTIueDI7XG5cdHZhciB5MSA9IGxpbmUxLnkxLCB5MiA9IGxpbmUxLnkyLCB5MyA9IGxpbmUyLnkxLCB5NCA9IGxpbmUyLnkyO1xuXHR2YXIgcHRfZGVub20gPSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4NCk7XG5cdHZhciBwdF94X251bSA9ICh4MSp5MiAtIHkxKngyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgyKSAqICh4Myp5NCAtIHkzKng0KTtcblx0dmFyIHB0X3lfbnVtID0gKHgxKnkyIC0geTEqeDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzKnk0IC0geTMqeDQpO1xuXHRpZiAocHRfZGVub20gPT0gMCkge1xuXHRcdGlmKHB0X3hfbnVtPT0wICYmIHB0X3lfbnVtPT0wKXsvL292ZXJsYXBwZWRcblx0XHRcdFxuXHRcdH1cblx0XHQvL3JldHVybiBcInBhcmFsbGVsXCJcblx0fWVsc2V7XG5cdFx0dmFyIHB0ID0ge1xuXHRcdFx0eDogcHRfeF9udW0gLyBwdF9kZW5vbSxcblx0XHRcdHk6IHB0X3lfbnVtIC8gcHRfZGVub21cblx0XHR9XG5cblx0XHRpZiAoIGJldHdlZW4ocHQueCwgeDEsIHgyKVxuXHRcdFx0JiYgYmV0d2VlbihwdC55LCB5MSwgeTIpXG5cdFx0XHQmJiBiZXR3ZWVuKHB0LngsIHgzLCB4NClcblx0XHRcdCYmIGJldHdlZW4ocHQueSwgeTMsIHk0KSkge1xuXHRcdFx0XHRyZXR1cm4gcHRcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9yZXR1cm4gXCJub3QgaW4gcmFuZ2VcIlxuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi9vdmVybGF5XCJcblxuLyoqXG4gKiByZXNpemFibGUgc3VwcG9ydCB0d28gdHlwZXM6XG4gKiAxLiBzcG90cyBmb3IgbXVsdGlwbGUgZGlyZWN0aW9ucywgb3IgXG4gKiAyLiBhIHNpbmdsZSBkaXJlY3Rpb24gXG4gKi9cbmNvbnN0IGRpcmVjdGlvbj1Qcm9wVHlwZXMub25lT2YoXCJldyxucyxud3NlLG5lc3dcIi5zcGxpdChcIixcIikucmVkdWNlKChhbGwsYSk9PihhbGwuc3BsaWNlKDAsMCxhLFwiLVwiK2EpLGFsbCksW10pKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzaXphYmxlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHRkaXJlY3Rpb24sXG5cdFx0b25SZXNpemU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG5cdFx0c3BvdHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHR4OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0XHR5OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0XHRkaXJlY3Rpb24sXG5cdFx0XHR3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdGhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHR9KSlcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RhdGU9e31cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtyZXNpemluZyxjdXJzb3J9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7Y2hpbGRyZW4sc3BvdHM9W10sIG9uRW5kLCBkaXJlY3Rpb259PXRoaXMucHJvcHNcblx0XHRpZihyZXNpemluZyl7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8T3ZlcmxheVxuXHRcdFx0XHRcdG9uTW91c2VVcD17ZT0+e1xuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmc6ZmFsc2V9KVxuXHRcdFx0XHRcdFx0b25FbmQgJiYgb25FbmQoKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0b25Nb3VzZU1vdmU9e2U9Pntcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdHRoaXMucmVzaXplKGUpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRzdHlsZT17e2N1cnNvcn19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0XHR7c3BvdHMubWFwKGE9PjxTcG90IGtleT17YS5kaXJlY3Rpb259IHsuLi5hfS8+KX1cblx0XHRcdFx0PC9PdmVybGF5PlxuXHRcdFx0KVxuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7ZGlyZWN0aW9uID8gUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLHtvbk1vdXNlRG93bjplPT50aGlzLnN0YXJ0UmVzaXplKGRpcmVjdGlvbixlKX0pIDogY2hpbGRyZW59XG5cdFx0XHRcdHtzcG90cy5tYXAoYT0+PFNwb3Qga2V5PXthLmRpcmVjdGlvbn0gey4uLmF9IG9uTW91c2VEb3duPXtlPT50aGlzLnN0YXJ0UmVzaXplKGEuZGlyZWN0aW9uLGUpfS8+KX19XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdClcblx0fVxuXG5cdHN0YXJ0UmVzaXplKHJlc2l6aW5nLGUpe1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRjb25zdCB7Y2xpZW50WDpsZWZ0LCBjbGllbnRZOnRvcCx0YXJnZXQ6e3N0eWxlOntjdXJzb3J9fX09ZVxuXHRcdGNvbnN0IHtvblN0YXJ0fT10aGlzLnByb3BzXG5cdFx0dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmcsY3Vyc29yfSlcblx0XHRvblN0YXJ0ICYmIG9uU3RhcnQoKVxuXHRcdHRoaXMubGVmdD1sZWZ0XG5cdFx0dGhpcy50b3A9dG9wXG5cdH1cblxuXHRyZXNpemUoe2NsaWVudFg6bGVmdCxjbGllbnRZOnRvcH0pe1xuXHRcdGNvbnN0IHtwcm9wczp7b25SZXNpemV9LCBzdGF0ZTp7cmVzaXppbmd9fT10aGlzXG5cdFx0bGV0IHg9bGVmdC10aGlzLmxlZnRcblx0XHRsZXQgeT10b3AtdGhpcy50b3Bcblx0XHRzd2l0Y2gocmVzaXppbmcpe1xuXHRcdGNhc2UgXCItbnNcIjpcblx0XHRcdHkqPS0xXG5cdFx0Y2FzZSBcIm5zXCI6XG5cdFx0XHRpZih5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eToteX0pKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdGJyZWFrXG5cdFx0Y2FzZSBcIi1ld1wiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwiZXdcIjpcblx0XHRcdGlmKHgpe1xuXHRcdFx0XHRpZihmYWxzZT09PW9uUmVzaXplKHt4fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblxuXHRcdGNhc2UgXCItbndzZVwiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwibndzZVwiOlxuXHRcdFx0aWYoeCAmJiB5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eDoteCx5fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblxuXHRcdGNhc2UgXCItbmVzd1wiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwibmVzd1wiOlxuXHRcdFx0aWYoeCAmJiB5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eCx5fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblx0XHR9XG5cdFx0dGhpcy5sZWZ0PWxlZnRcblx0XHR0aGlzLnRvcD10b3Bcblx0fVxufVxuXG5jb25zdCBTcG90PSgoe3dpZHRoPTUsaGVpZ2h0PTUseCx5LGRpcmVjdGlvbixzdHlsZT17fSwgLi4ucHJvcHN9KT0+PHJlY3Qgey4uLntcblx0XHQuLi5wcm9wcyxcblx0XHR3aWR0aCxoZWlnaHQsXG5cdFx0eDp4LXdpZHRoLzIsXG5cdFx0eTp5LWhlaWdodC8yLFxuXHRcdHN0eWxlOntcblx0XHRcdGZpbGw6XCJ3aGl0ZVwiLHN0cm9rZTpcImxpZ2h0Z3JheVwiLHN0cm9rZVdpZHRoOjEsXG5cdFx0XHRjdXJzb3I6YCR7ZGlyZWN0aW9uLnJlcGxhY2UoXCItXCIsXCJcIil9LXJlc2l6ZWAsXG5cdFx0XHQuLi5zdHlsZVxuXHRcdH0sXG5cdH19Lz5cbilcblxuXG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBPdmVybGF5IGZyb20gXCIuL292ZXJsYXlcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3RhdGFibGUgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdHg6UHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdHI6UHJvcFR5cGVzLm51bWJlcixcblx0XHRkZWdyZWU6IFByb3BUeXBlcy5udW1iZXIsXG5cdH1cblx0XG5cdHN0YXRlPXtyb3RhdGluZzpmYWxzZX1cblxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7cHJvcHM6e3I9MTIseCx5LG9uRW5kLCBkZWdyZWU9MCwgb25Sb3RhdGV9LHN0YXRlOntyb3RhdGluZ319PXRoaXNcblx0XHRjb25zdCByb3RhdG9yPXtcblx0XHRcdHdpZHRoOjIqcixoZWlnaHQ6MipyLHg6eC1yLHk6LTIqcixcblx0XHRcdHN0eWxlOntmaWxsOlwid2hpdGVcIixzdHJva2U6XCJsaWdodGdyYXlcIixzdHJva2VXaWR0aDoxfSxcblx0XHR9XG5cdFx0XG5cdFx0aWYoIXJvdGF0aW5nKVxuXHRcdFx0cmV0dXJuICg8dXNlIHhsaW5rSHJlZj1cIiNyb3RhdG9yXCIgey4uLnJvdGF0b3J9IG9uTW91c2VEb3duPXtlPT50aGlzLnNldFN0YXRlKHtyb3RhdGluZzp0cnVlfSl9Lz4pXG5cdFx0XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0PGcgcmVmPVwibG9jYXRvclwiPlxuXHRcdFx0XHRcdDx0ZXh0IHg9e3grcn0geT17LTIwfT57ZGVncmVlfTwvdGV4dD5cblx0XHRcdFx0XHQ8dXNlIHhsaW5rSHJlZj1cIiNyb3RhdG9yXCIgey4uLnJvdGF0b3J9Lz5cblx0XHRcdFx0PC9nPlxuXHRcdFx0XHQ8T3ZlcmxheSBjdXJzb3I9XCJjcm9zc2hhaXJcIlxuXHRcdFx0XHRcdG9uTW91c2VVcD17ZT0+e1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7cm90YXRpbmc6dW5kZWZpbmVkfSlcblx0XHRcdFx0XHRcdGlmKG9uRW5kKVxuXHRcdFx0XHRcdFx0XHRvbkVuZCgpXG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRvbk1vdXNlTW92ZT17ZT0+e1xuXHRcdFx0XHRcdFx0b25Sb3RhdGUoZSlcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHt3aGVuU2VsZWN0aW9uQ2hhbmdlLEFDVElPTiwgUmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtjb21wb3NlLCBzaG91bGRVcGRhdGUgfSBmcm9tIFwicmVjb21wb3NlXCJcblxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi9jb21wb3NlZC9ncm91cFwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGVcIlxuaW1wb3J0IFJlc2l6YWJsZSBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Jlc2l6YWJsZVwiXG5pbXBvcnQgUm90YXRhYmxlIGZyb20gXCIuLi8uLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlXCJcblxuXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKFxuXHR3aGVuU2VsZWN0aW9uQ2hhbmdlKCksXG5cdHNob3VsZFVwZGF0ZSgoYSxiKT0+e1xuXHRcdGNvbnN0IHRhcmdldENoYW5nZWQ9YS5zZWxlY3Rpb24/LnBvc2l0aW9uLmlkIT1iLnNlbGVjdGlvbj8ucG9zaXRpb24uaWRcblx0XHRjb25zdCBpc1NlbGZPckdyYW5kPXQ9PiEhdC5zZWxlY3Rpb24/LmdldENvbXBvc2VyKHQuc2VsZWN0aW9uPy5wb3NpdGlvbi5pZCkuY2xvc2VzdChwPT5wLnByb3BzLmlkPT10LmlkKVxuXHRcdGNvbnN0IHNoYXBlUmVjb21wb3NlZD1hLmNvbXBvc2VkVVVJRCE9Yi5jb21wb3NlZFVVSURcblx0XHRjb25zdCBpc0FHcmFuZD1pc1NlbGZPckdyYW5kKGEpXG5cdFx0Y29uc3QgaXNCR3JhbmQ9aXNTZWxmT3JHcmFuZChiKVxuXHRcdHJldHVybiAoc2hhcGVSZWNvbXBvc2VkIHx8IHRhcmdldENoYW5nZWQpJiYoaXNBR3JhbmR8fGlzQkdyYW5kKVxuXHR9KVxuKShjbGFzcyBGb2N1c1NoYXBlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0cGF0aDogUHJvcFR5cGVzLnN0cmluZyxcblx0XHRyZXNpemFibGU6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLFxuXHRcdHJvdGF0YWJsZTogUHJvcFR5cGVzLnNoYXBlKHtcblx0XHRcdHg6UHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0eTpQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG5cdFx0XHRyOlByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRkZWdyZWU6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0fSksXG5cdFx0bW92YWJsZTogUHJvcFR5cGVzLmJvb2wsXG5cdFx0aWQ6UHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdGVkaXRhYmxlOlByb3BUeXBlcy5hbnlcblx0fVxuXG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2lkLHNlbGVjdGlvbn0pe1xuXHRcdGlmKCFzZWxlY3Rpb24pXG5cdFx0XHRyZXR1cm4ge31cblx0XHRjb25zdCBnZXRDb21wb3Nlcj1hPT5zZWxlY3Rpb24ucG9zaXRpb25pbmcuZ2V0Q29tcG9zZXIoYSlcblx0XHRjb25zdCBjdXJzb3I9c2VsZWN0aW9uLnBvc2l0aW9uLmlkXG5cdFx0Y29uc3QgdGFyZ2V0PWdldENvbXBvc2VyKGlkKVxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOnRhcmdldC5nZXRDb21wb3NlVHlwZSgpLFxuXHRcdFx0XG5cdFx0XHQvL2FsbCBncmFuZCBmb2N1cyBzaGFwZSBvZiBjdXJzb3Ivc2VsZWN0aW9uIHNob3VsZCBzaG93IGl0c2VsZlxuXHRcdFx0c2hvd0ZvY3VzOiEhZ2V0Q29tcG9zZXIoY3Vyc29yKS5jbG9zZXN0KGE9PmEucHJvcHMuaWQ9PWlkKSxcblx0XHRcdFxuXHRcdFx0Ly9cblx0XHRcdGlzQW5jaG9yOnRhcmdldC5jbG9zZXN0KGE9PihhIT10YXJnZXQgJiYgKGEuaXNGcmFtZXx8YS5pc1NlY3Rpb24pKXx8YS5nZXRDb21wb3NlVHlwZSgpPT1cImFuY2hvclwiKS5nZXRDb21wb3NlVHlwZSgpPT1cImFuY2hvclwiLFxuXHRcdFx0XG5cdFx0XHQvL3Nob3VsZCBub3QgdHJhbnNmb3JtIGlmIGN1cnNvci9zZWxlY3Rpb24gaXMgaW4gZWRpdGFibGUgY3Vyc29yLCBzdWNoIGFzIGFueSBpbmxpbmUgY29udGVudFxuXHRcdFx0aXNFZGl0YWJsZUN1cnNvcjogKGlzUGFyYWdyYXBoPT57XG5cdFx0XHRcdFx0Y29uc3QgZ3JhbmQ9Z2V0Q29tcG9zZXIoY3Vyc29yKS5jbG9zZXN0KGE9PmlzUGFyYWdyYXBoKGEpfHxhLnByb3BzLmlkPT1pZClcblx0XHRcdFx0XHRyZXR1cm4gZ3JhbmQgJiYgaXNQYXJhZ3JhcGgoZ3JhbmQpXG5cdFx0XHRcdH0pKGE9PmEuZ2V0Q29tcG9zZVR5cGUoKT09XCJwYXJhZ3JhcGhcIiksXG5cdFx0fVxuXHR9XG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RhdGU9e31cblxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3Byb3BzOntzZWxlY3Rpb24sIGNoaWxkcmVuOm91dGxpbmUsIHJvdGF0ZSwgc2NhbGUsIHRyYW5zbGF0ZX0sY29udGV4dDp7ZWRpdGFibGV9LHN0YXRlOntzaG93Rm9jdXN9fT10aGlzXG5cdFx0aWYoIXNlbGVjdGlvbiB8fCAhZWRpdGFibGUgfHwgIXNob3dGb2N1cyl7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8R3JvdXAgey4uLntyb3RhdGUsIHNjYWxlLCAuLi50cmFuc2xhdGV9fT5cblx0XHRcdFx0XHR7b3V0bGluZX1cblx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdClcblx0XHR9XG5cblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0fT1vdXRsaW5lLnByb3BzXG5cdFx0Y29uc3QgJG91dGxpbmU9bmV3IFJlYWN0UXVlcnkob3V0bGluZSlcblx0XHRjb25zdCBjb250ZW50PSRvdXRsaW5lLmZpbmRGaXJzdChcIi5jb250ZW50XCIpLmdldCgwKVxuXG5cdFx0Y29uc3Qge2lkLCBkZWdyZWUsIGRpc3BhdGNoLHBvc2l0aW9uaW5nPXNlbGVjdGlvbi5wb3NpdGlvbmluZyxcblx0XHRcdHBhdGg9YE0wIDAgaCR7d2lkdGh9IHYke2hlaWdodH0gaCR7LXdpZHRofSBaYCxcblx0XHRcdHJlc2l6YWJsZT1bLy9kZWZhdWx0IGZvciByZWN0W3dpZHRoLGhlaWdodF1cblx0XHRcdFx0e3g6MCx5OjAsZGlyZWN0aW9uOlwibndzZVwifSxcblx0XHRcdFx0e3g6d2lkdGgvMix5OjAsZGlyZWN0aW9uOlwibnNcIix9LFxuXHRcdFx0XHR7eDp3aWR0aCx5OjAsZGlyZWN0aW9uOlwibmVzd1wifSxcblx0XHRcdFx0e3g6d2lkdGgseTpoZWlnaHQvMixkaXJlY3Rpb246XCJld1wifSxcblx0XHRcdFx0e3g6d2lkdGgseTpoZWlnaHQsZGlyZWN0aW9uOlwiLW53c2VcIn0sXG5cdFx0XHRcdHt4OndpZHRoLzIseTpoZWlnaHQsZGlyZWN0aW9uOlwiLW5zXCJ9LFxuXHRcdFx0XHR7eDowLHk6aGVpZ2h0LGRpcmVjdGlvbjpcIi1uZXN3XCJ9LFxuXHRcdFx0XHR7eDowLHk6aGVpZ2h0LzIsZGlyZWN0aW9uOlwiLWV3XCJ9LFxuXHRcdFx0XSxcblx0XHRcdHJvdGF0YWJsZT17Ly9kZWZhdWx0IGZvciByZWN0LCBhbmQge3gseX0gaXMgY2VudGVyXG5cdFx0XHRcdHg6d2lkdGgvMixcblx0XHRcdFx0eTpoZWlnaHQvMixcblx0XHRcdFx0ZGVncmVlOk1hdGguY2VpbChkZWdyZWUqMTAwKS8xMDAsXG5cdFx0XHR9LFxuXHRcdFx0Zm9jdXNhYmxlQ29udGVudD10cnVlLG1vdmFibGU9dHJ1ZX09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IHt0eXBlLGlzQW5jaG9yLGlzRWRpdGFibGVDdXJzb3J9PXRoaXMuc3RhdGVcblx0XHRjb25zdCBlZHRhYmxlQ29udGVudD0oXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxHcm91cCB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0PHBhdGggZD17cGF0aH0gZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJsaWdodGdyYXlcIi8+XG5cdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdHttb3ZhYmxlID8gKFxuXHRcdFx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0XHRcdHshZm9jdXNhYmxlQ29udGVudCAmJiBjb250ZW50fVxuXHRcdFx0XHRcdFx0PEdyb3VwIHsuLi57XCJkYXRhLW5vY29udGVudFwiOnRydWV9fT5cblx0XHRcdFx0XHRcdFx0PE1vdmFibGUgaXNBbmNob3I9e2lzQW5jaG9yfVxuXHRcdFx0XHRcdFx0XHRcdG9uTW92ZT17ZT0+ZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5NT1ZFKHsuLi5lLCBpZCx0eXBlfSkpfT5cblx0XHRcdFx0XHRcdFx0XHQ8cGF0aCBkPXtwYXRofSBmaWxsPVwid2hpdGVcIiBmaWxsT3BhY2l0eT17MC4wMX0gY3Vyc29yPVwibW92ZVwiLz5cblx0XHRcdFx0XHRcdFx0PC9Nb3ZhYmxlPlxuXHRcdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0XHRcdHtmb2N1c2FibGVDb250ZW50ICYmIGNvbnRlbnR9XG5cdFx0XHRcdFx0PC9GcmFnbWVudD5cblx0XHRcdFx0KSA6IGNvbnRlbnR9XG5cblx0XHRcdFx0PEdyb3VwIHsuLi57XCJkYXRhLW5vY29udGVudFwiOnRydWV9fT5cblx0XHRcdFx0XHR7cm90YXRhYmxlICYmICg8Um90YXRhYmxlIHsuLi5yb3RhdGFibGV9XG5cdFx0XHRcdFx0XHRcdG9uUm90YXRlPXsoe2NsaWVudFg6bGVmdCxjbGllbnRZOnRvcH0pPT57XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgeHk9cG9zaXRpb25pbmcuYXNDYW52YXNQb2ludCh7bGVmdCx0b3B9KVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBvcz1wb3NpdGlvbmluZy5wb3NpdGlvbihpZCwwKVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGNlbnRlcj17eDpyb3RhdGFibGUueCtwb3MueCx5OnJvdGF0YWJsZS55K3Bvcy55fVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRlZ3JlZT1wYXJzZUludChNYXRoLmF0YW4yKHh5LngtY2VudGVyLngsLXh5LnkrY2VudGVyLnkpKjE4MC9NYXRoLlBJKVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2goQUNUSU9OLkVudGl0eS5VUERBVEUoe2lkLHR5cGUscm90YXRlOmRlZ3JlZTwwID8gZGVncmVlKzM2MCA6IGRlZ3JlZX0pKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHtyZXNpemFibGUgJiYgKDxSZXNpemFibGUgc3BvdHM9e3Jlc2l6YWJsZX1cblx0XHRcdFx0XHRcdFx0b25SZXNpemU9eyh7eCx5fSk9Pntcblx0XHRcdFx0XHRcdFx0XHRsZXQgc2l6ZT1udWxsXG5cdFx0XHRcdFx0XHRcdFx0aWYoeT09PXVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaXplPXt3aWR0aDp3aWR0aCt4fVxuXHRcdFx0XHRcdFx0XHRcdH1lbHNlIGlmKHg9PT11bmRlZmluZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT17aGVpZ2h0OmhlaWdodCt5fVxuXHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2NhbGU9MStNYXRoLm1heChNYXRoLmFicyh4KS93aWR0aCxNYXRoLmFicyh5KS9oZWlnaHQpKngvTWF0aC5hYnMoeClcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9e3dpZHRoOndpZHRoKnNjYWxlLCBoZWlnaHQ6aGVpZ2h0KnNjYWxlfVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkaXNwYXRjaChBQ1RJT04uRW50aXR5LlVQREFURSh7aWQsdHlwZSxzaXplfSkpXG5cdFx0XHRcdFx0XHRcdH19Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIHsuLi4oaXNFZGl0YWJsZUN1cnNvciA/IHsvKm5vdCB0cmFuc2Zvcm0qL30gOiB7c2NhbGUsIHJvdGF0ZSwgLi4udHJhbnNsYXRlfSl9PlxuXHRcdFx0XHR7JG91dGxpbmUucmVwbGFjZShjb250ZW50LCBlZHRhYmxlQ29udGVudCkuZ2V0KDApfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cbn0pXG5cbiIsImltcG9ydCBSZWFjdCx7Q29tcG9uZW50LH0gZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi8uLi9jb21wb3NlZFwiXG5cbmltcG9ydCBQYXRoIGZyb20gXCIuLi8uLi90b29sL3BhdGhcIlxuaW1wb3J0IEZvY3VzU2hhcGUgZnJvbSBcIi4vZm9jdXMtc2hhcGVcIlxuXG5leHBvcnQgY2xhc3MgY3VzdG9tIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRnZXQgc3Ryb2tlV2lkdGgoKXtcblx0XHRjb25zdCB7b3V0bGluZTp7d2lkdGg9MH09e319PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gd2lkdGh8fDBcblx0fVxuXG5cdGdldCBjb250ZW50Qm94KCl7XG5cdFx0Y29uc3Qge21hcmdpbjp7cmlnaHQ9MCxsZWZ0PTAsdG9wPTAsYm90dG9tPTB9fT10aGlzLnByb3BzXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09dGhpcy5nZXRQYXRoKCkuc2l6ZSgpXG5cdFx0Y29uc3Qgc3Ryb2tlV2lkdGg9dGhpcy5zdHJva2VXaWR0aFxuXHRcdHJldHVybiB7d2lkdGg6d2lkdGgtc3Ryb2tlV2lkdGgvMi1yaWdodC1sZWZ0LGhlaWdodDpoZWlnaHQtc3Ryb2tlV2lkdGgvMi10b3AtYm90dG9tfVxuXHR9XG5cblx0Z2V0IG91dGxpbmVCb3goKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRQYXRoKCkuc2l6ZSh0aGlzLnN0cm9rZVdpZHRoKVxuXHR9XG5cblx0YXZhaWxhYmxlU3BhY2UoKXtcblx0XHRyZXR1cm4gdGhpcy5jb250ZW50Qm94XG5cdH1cblxuXHRjcmVhdGVDb21wb3NlZFNoYXBlKGNvbnRlbnQsIHByb3BzKXtcblx0XHRjb25zdCB7XG5cdFx0XHRcdG1hcmdpbjp7bGVmdD0wLHRvcD0wfSxcblx0XHRcdFx0c29saWRGaWxsPVwidHJhbnNwYXJlbnRcIixibGlwRmlsbDp7dXJsfT17fSxcblx0XHRcdFx0b3V0bGluZT17d2lkdGg6MH0sXG5cdFx0XHRcdGZpbGw9e2ZpbGw6c29saWRGaWxsfSxcblx0XHRcdFx0cm90YXRlOmRlZ3JlZSxcblx0XHRcdFx0c2NhbGUsXG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRoYXNoLFxuXHRcdFx0fT10aGlzLnByb3BzXG5cblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LHJvdGF0ZSx0cmFuc2xhdGUsZ2VvbWV0cnl9PXRoaXMudHJhbnNmb3JtKHRoaXMuZ2V0UGF0aCgpLmNsb25lKCkpXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB7Li4ue3dpZHRoLGhlaWdodCwgZ2VvbWV0cnl9fT5cblx0XHRcdFx0PEZvY3VzU2hhcGUgey4uLnt3aWR0aCxoZWlnaHQsIHNjYWxlLHJvdGF0ZSx0cmFuc2xhdGUsIGRlZ3JlZSwgaWQsLi4ucHJvcHN9fT5cblx0XHRcdFx0XHQ8R3JvdXAgey4uLnRoaXMub3V0bGluZUJveH0+XG5cdFx0XHRcdFx0XHQ8R3JvdXAgeD17dGhpcy5zdHJva2VXaWR0aC8yfSB5PXt0aGlzLnN0cm9rZVdpZHRoLzJ9PlxuXHRcdFx0XHRcdFx0XHQ8R3JvdXAgIHsuLi57XCJkYXRhLW5vY29udGVudFwiOnRydWV9fT5cblx0XHRcdFx0XHRcdFx0XHR7PHBhdGggZD17dGhpcy5nZXRQYXRoKCkudG9TdHJpbmcoKX0gc3Ryb2tlV2lkdGg9e3RoaXMuc3Ryb2tlV2lkdGh9IHN0cm9rZT17b3V0bGluZS5zb2xpZEZpbGx9IHsuLi5maWxsfS8+fVxuXHRcdFx0XHRcdFx0XHRcdHt1cmwgJiYgPGltYWdlIHsuLi57Li4udGhpcy5jb250ZW50Qm94LHg6bGVmdCwgeTp0b3AsIHhsaW5rSHJlZjogdXJsLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwifX0gLz59XG5cdFx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0XHRcdDxHcm91cCB4PXt0aGlzLnN0cm9rZVdpZHRoLzIrbGVmdH0geT17dGhpcy5zdHJva2VXaWR0aC8yK3RvcH0gY2xhc3NOYW1lPVwiY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtjb250ZW50fVxuXHRcdFx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHQ8L0ZvY3VzU2hhcGU+XG5cdFx0XHQ8L0dyb3VwPlxuXHRcdClcblx0fVxuXG5cdGdldFBhdGgoKXtcblx0XHRyZXR1cm4gbWVtb2l6ZSgoZ2VvbWV0cnkpPT5uZXcgUGF0aChnZW9tZXRyeSkpKHRoaXMucHJvcHMuZ2VvbWV0cnkpXG5cdH1cblxuXHQvKipcblx0ICogUm90YXRpb24gaGVhdmlseSBkZXBlbmRzIG9uIGlubGluZSBzdG9yeSBiYXNlbGluZSBpbXBsZW1lbnRhdGlvblxuXHQgKi9cblx0dHJhbnNmb3JtKGdlb21ldHJ5KXtcblx0XHR2YXIge3JvdGF0ZSwgc2NhbGV9PXRoaXMucHJvcHNcblx0XHRjb25zdCB0cmFuc2xhdGU9e31cblx0XHRpZihyb3RhdGUpe1xuXHRcdFx0Y29uc3QgYT1nZW9tZXRyeS5ib3VuZHMoKVxuXHRcdFx0Y29uc3Qge3gseX09Z2VvbWV0cnkuY2VudGVyKClcblx0XHRcdGdlb21ldHJ5LnJvdGF0ZShyb3RhdGUseCx5KVxuXHRcdFx0Y29uc3QgYj1nZW9tZXRyeS5ib3VuZHMoKVxuXHRcdFx0cm90YXRlPWAke3JvdGF0ZX0gJHt4fSAke3l9YFxuXHRcdFx0XG5cdFx0XHR0cmFuc2xhdGUueD1wYXJzZUludChhLmxlZnQtYi5sZWZ0KVxuXHRcdFx0dHJhbnNsYXRlLnk9cGFyc2VJbnQoYS50b3AtYi50b3ApXG5cdFx0XHRnZW9tZXRyeS50cmFuc2xhdGUodHJhbnNsYXRlLngsIHRyYW5zbGF0ZS55KVxuXHRcdFx0Z2VvbWV0cnkub3JpZ2luPXt4OnRyYW5zbGF0ZS54LHk6dHJhbnNsYXRlLnl9XG5cdFx0fVxuXG5cdFx0aWYoc2NhbGUpe1xuXHRcdFx0Z2VvbWV0cnkuc2NhbGUoc2NhbGUpXG5cdFx0fVxuXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuc2l6ZShnZW9tZXRyeS5zdHJva2VXaWR0aD10aGlzLnN0cm9rZVdpZHRoKVxuXHRcdHJldHVybiB7d2lkdGgsaGVpZ2h0LGdlb21ldHJ5LHJvdGF0ZSx0cmFuc2xhdGV9XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIHJlY3QgZXh0ZW5kcyBjdXN0b217XG5cdGdldFBhdGgoKXtcblx0XHRjb25zdCB7d2lkdGg6dyxoZWlnaHQ6aH09dGhpcy5wcm9wc1xuXHRcdHJldHVybiBuZXcgUGF0aChgTTAgMGgke3d9diR7aH1oJHstd316YClcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgZWxsaXBzZSBleHRlbmRzIGN1c3RvbXtcblx0Z2V0UGF0aCgpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsY3g9d2lkdGgvMixjeT1oZWlnaHQvMixyeD1jeCxyeT1jeX09dGhpcy5wcm9wc1xuXHRcdHJldHVybiBuZXcgUGF0aChgTSR7Y3gtcnh9LCR7Y3l9YSR7cnh9LCR7cnl9IDAgMSwwICR7cngqMn0sMGEke3J4fSwke3J5fSAwIDEsMCAtJHtyeCoyfSwwYClcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgY2lyY2xlIGV4dGVuZHMgZWxsaXBzZXtcblxufSIsImltcG9ydCBSZWFjdCx7RnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkLGVkaXRhYmxlLExheW91dH0gZnJvbSBcIi4uLy4uL2NvbXBvc2FibGVcIlxuXG5pbXBvcnQgRnJhbWUgZnJvbSBcIi4uL2ZyYW1lXCJcblxuXG5pbXBvcnQge2N1c3RvbSwgcmVjdCwgZWxsaXBzZSwgY2lyY2xlfSBmcm9tIFwiLi9zaGFwZXNcIlxuXG5jb25zdCBTdXBlcj1lZGl0YWJsZShIYXNQYXJlbnRBbmRDaGlsZChkb20uU2hhcGUpKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hhcGUgZXh0ZW5kcyBGcmFtZXtcblx0c3RhdGljIGRpc3BsYXlOYW1lPVN1cGVyLmRpc3BsYXlOYW1lXG5cdHN0YXRpYyBwcm9wVHlwZXM9U3VwZXIucHJvcFR5cGVzXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9U3VwZXIuZGVmYXVsdFByb3BzXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdC4uLkZyYW1lLmNvbnRleHRUeXBlcyxcblx0XHRlZGl0YWJsZTogUHJvcFR5cGVzLmFueSxcblx0fVxuXG5cdGZvY3VzYWJsZT10cnVlXG5cblx0X19nZXRHZW9tZXRyeT1tZW1vaXplKGNvbXBvc2VkVVVJRD0+e1xuXHRcdGNvbnN0IHtnZW9tZXRyeT1cInJlY3RcIn09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IEdlb21ldHJ5PXRoaXMuY29uc3RydWN0b3JbZ2VvbWV0cnldfHx0aGlzLmNvbnN0cnVjdG9yLmN1c3RvbVxuXHRcdHJldHVybiBuZXcgR2VvbWV0cnkodGhpcy5wcm9wcywgdGhpcy5jb250ZXh0KVxuXHR9KVxuXG5cdGdldCBnZW9tZXRyeSgpe1xuXHRcdHJldHVybiB0aGlzLl9fZ2V0R2VvbWV0cnkodGhpcy5jb21wdXRlZC5jb21wb3NlZFVVSUQpXG5cdH1cblxuXHRfX2dldFNwYWNlPW1lbW9pemUoZ2VvbWV0cnk9Pntcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0fT1nZW9tZXRyeS5hdmFpbGFibGVTcGFjZSgpXG5cdFx0cmV0dXJuIExheW91dC5Db25zdHJhaW50U3BhY2UuY3JlYXRlKHt3aWR0aCxoZWlnaHR9KVxuXHRcdFx0LmNsb25lKHtlZGdlczp7XG5cdFx0XHRcdHBhZ2U6e2xlZnQ6MCxyaWdodDp3aWR0aCx0b3A6MCxib3R0b206aGVpZ2h0fSxcblx0XHRcdFx0W3RoaXMuZ2V0Q29tcG9zZVR5cGUoKV06e2xlZnQ6MCxyaWdodDp3aWR0aCx0b3A6MCxib3R0b206aGVpZ2h0fSxcblx0XHRcdH19KVxuXHR9KVxuXG5cdGdldFNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMuX19nZXRTcGFjZSh0aGlzLmdlb21ldHJ5KVxuXHR9XG5cblx0LyoqXG5cdCAqIHRoZXJlJ3Mgbm8gY2FsbCBzdXBlci5jcmVhdGVDb21wb3NlZDJQYXJlbnQsIHNvIGVkaXRhYmxlIGludGVyZmFjZSBpcyBza2lwcGVkXG5cdCAqL1xuXHRyZWNvbXBvc2FibGVfY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0Y29uc3Qge3gseSx6fT10aGlzLnByb3BzXG5cdFx0Y29uc3QgY29udGVudD0oXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHtbXG5cdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucG9zaXRpb25MaW5lcyh0aGlzLmxpbmVzKSx7a2V5OlwiY29udGVudFwifSksXG5cdFx0XHRcdFx0Li4udGhpcy5hbmNob3JzLm1hcCgoYSxpKT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleTppfSkpLFxuXHRcdFx0XHRdLmZpbHRlcihhPT4hIWEpLnNvcnQoKHtwcm9wczp7ejp6MT0wfX0se3Byb3BzOnt6OnoyPTB9fSwpPT56MS16Milcblx0XHRcdFx0fVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cblx0XHRjb25zdCBjb21wb3NlZD1SZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHR0aGlzLmdlb21ldHJ5LmNyZWF0ZUNvbXBvc2VkU2hhcGUoY29udGVudCx7Y29tcG9zZWRVVUlEOnRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEfSksXG5cdFx0XHR7Y2xhc3NOYW1lOlwiZnJhbWVcIiwgXCJkYXRhLWZyYW1lXCI6dGhpcy51dWlkLHgseSx6fVxuXHRcdClcblx0XHRyZXR1cm4gY29tcG9zZWRcblx0fVxuXG5cdHN0YXRpYyBjdXN0b209Y3VzdG9tXG5cblx0c3RhdGljIHJlY3Q9cmVjdFxuXG5cdHN0YXRpYyBlbGxpcHNlPWVsbGlwc2VcblxuXHRzdGF0aWMgY2lyY2xlPWNpcmNsZVxufSIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgQ29tcG9zZWRJbWFnZSBmcm9tIFwiLi4vY29tcG9zZWQvaW1hZ2VcIlxuaW1wb3J0IHtOb0NoaWxkLGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5cbmltcG9ydCBTaGFwZSBmcm9tIFwiLi9zaGFwZVwiXG5jb25zdCBTdXBlcj1lZGl0YWJsZShOb0NoaWxkKGRvbS5JbWFnZSkpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZSBleHRlbmRzIFN1cGVye1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5TdXBlci5jb250ZXh0VHlwZXMsXG5cdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5hbnksXG5cdH1cblx0Zm9jdXNhYmxlPXRydWVcblxuXHRnZXRTaGFwZSgpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsaWQsfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIG5ldyBTaGFwZSh7d2lkdGgsIGhlaWdodCxpZCwuLi50aGlzLnByb3BzLm91dGxpbmUsIG1hcmdpbjp7fSxjaGlsZHJlbjpudWxsfSx7Y29udGV4dDp0aGlzLmNvbnRleHR9KVxuXHR9XG5cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0Y29uc3QgZ2VvbWV0cnk9dGhpcy5nZXRTaGFwZSgpLmdlb21ldHJ5XG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuY29udGVudEJveFxuXHRcdGNvbnN0IHtzcmN9PXRoaXMucHJvcHNcblx0XHRjb25zdCBpbWFnZT08Q29tcG9zZWRJbWFnZSB7Li4ue1xuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHR4bGlua0hyZWY6IHNyYyxcblx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCIsXHRcblx0XHR9fS8+XG5cdFx0cmV0dXJuIGdlb21ldHJ5LmNyZWF0ZUNvbXBvc2VkU2hhcGUoaW1hZ2UsIHtmb2N1c2FibGVDb250ZW50OmZhbHNlLCBjb21wb3NlZFVVSUQ6dGhpcy5jb21wdXRlZC5jb21wb3NlZFVVSUR9KVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGR9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5UYWJsZSlcblxuLyoqXG4gKiB0YWJsZS9yb3cvY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBibG9ja3NcbiAqIGNlbGwgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgY29tcG9zaW5nXG4gKiBidXQgY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBibG9ja3NcbiAqIHNwYWNlIGlzIGRlZmluZWQgYnkgY2VsbC0+cm93LT50YWJsZS0+cGFyZW50IHNwYWNlLCBzbyBpdCBoYXMgdG8gcmVxdWlyZSBzcGFjZSB1cFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZSBleHRlbmRzIFN1cGVye1xuXHQvKipyb3cgY2FsbCBpdCB0byBhcHBlbmQgYSBibG9jayBvZiByb3cqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQocm93KXtcblx0XHRjb25zdCB7d2lkdGgsaW5kZW50fT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB3aWR0aD17d2lkdGh9IGhlaWdodD17cm93LnByb3BzLmhlaWdodH0+XG5cdFx0XHRcdHtSZWFjdC5jbG9uZUVsZW1lbnQocm93LHt4OmluZGVudH0pfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCx7UHVyZUNvbXBvbmVudCBhcyBDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbSwgUmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuY29uc3QgU3VwZXI9SGFzUGFyZW50QW5kQ2hpbGQoZG9tLlJvdylcblxuLyoqXG4gKiB0ZXJtczpcbiAqIFJhbms6IGEgY29tcG9zZWQgbGluZSwgYSByb3cgbWF5IGJlIHNwbGl0dGVkIGludG8gbW9yZSB0aGFuIG9uZSByYW5rLCByYW5rIGFwcGx5IHZlcnRBbGlnblxuICogU2xvdDogYSBjb21wb3NlZCBjZWxsIHNlZ21lbnQsIGEgY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBtb3JlIHRoYW4gb25lIHNsb3RcbiAqIFxuICogXG4gKiAqKipFdmVyeSB0aW1lIGEgcm93IHJlcXVlc3Qgc3BhY2UgdXAsIGEgcmFuayB3b3VsZCBiZSBjcmVhdGVkIHRvIGtlZXAgdGhlIHNwYWNlIGluIHRoZSBsYXlvdXQgZW5naW5lXG4gKiAqKipcbiAqID53aHkgcmFuaydzIGhlaWdodCBtdXN0IGJlIGZpeGVkPyBcbiAqICoqKiBib3JkZXJcbiAqID5yYW5rJ3MgaGVpZ2h0IGlzIG5vdCBhbHdheXMgY29ycmVjdCwgaG93IHRvIGZpeCBpdD8/PyBcbiAqICoqKiBhbGwgY2hpbGRyZW4gY29tcG9zZWQsIGVhY2ggcmFuaydzIGhlaWdodCBjb3VsZCBiZSBmaXhlZFxuICogKioqIHJhbmsncyBoZWlnaHQ9TWF4KHJvdyBoZWlnaHQgaWYgZGVmaW5lZCwgLi4uIHNsb3QncyBoZWlnaHQpXG4gKiBcbiAqIGNvbXB1dGVkLmNvbXBvc2VkIGlzIFtyYW5rLCByYW5rLCByYW5rLCAuLi5dXG4gKiByYW5rXHRcdHNwYWNlXFxjb2xcdGNvbDFcdGNvbDIgXHQuLi5cbiAqIHJhbmsxXHRzcGFjZTFcdFx0c2xvdDExXHRcdFxuICogcmFuazJcdHNwYWNlMlx0XHRzbG90MTJcdHNsb3QyMVxuICogLi4uXHRcdC4uLlx0IFx0XHQuLi5cdCBcdC4uLlxuICogd2hlbiBhcHBlbmQgUmFuayB0byBzcGFjZSwgIzEgaXMgc2ltcGxlIGFuZCBjaG9zZW5cbiAqIDE+IHJlcXVlc3QgcmFuayBzcGFjZSwgdGhlbiBhZGQgZW1wdHkgUmFuayBwbGFjZWhvbGRlciwgdGhlbiBhZGp1c3QgcmFuayBldmVyeSB0aW1lIGEgc2xvdCBjb21taXR0ZWRcbiAqIDI+IGJlZm9yZSByZXF1ZXN0aW5nIHJhbmsgc3BhY2UsIGNvbW1pdCBsYXN0IFJhbmsgcGxhY2Vob2xkZXIsIGRvIHdoYXQgIzEgd291bGQgZG9cbiAqIDM+IGFsbCBjaGlsZHJlbiBjb21wb3NlZCA6IGFmZmVjdCBibG9ja09mZnNldCwgc28gaXQncyBOT1QgcG9zc2libGVcbiovXG5jbGFzcyBSb3cgZXh0ZW5kcyBTdXBlcntcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHRyYW5rczp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2YWx1ZSl7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZD12YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGdldCB3aWR0aCgpey8vdXNlZCBieSBjYWxjIHJvdyByYW5nZVxuXHRcdHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ0YWJsZVwiKS5wcm9wcy53aWR0aFxuXHR9XG5cdFxuXHQvKipcblx0ICogc3VwcG9ydCBnZXQgY29sdW1uIGJ5IGNlbGxpZCwgc3VjaCBhcyB0aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKVtcImNlbGxpZDFcIl0gXG5cdCAqIGNlbGwgaWQgd291bGQgYmUgc2V0IGluIGNvbHVtbiBhY2NvZGluZyB0byB1c2luZy9jb21wb3Npbmcgb3JkZXIoaXQncyBjb3JyZWN0IGZvciBjb21wb3NpbmcpXG5cdCAqIHN1cHBvcnQgXG5cdCAqIGNvbHVtbi5jdXJyZW50UmFuazpjdXJyZW50IHZhbGlkIHJhbmsgZm9yIHRoZSBjb2x1bW5cblx0ICogY29sdW1uLmZpcnN0U2xvdDpmaXJzdCBzbG90IG9mIHRoaXMgY29sdW1uXG5cdCAqIG1ha2UgaXQgZHluYW1pYyB0byBhbHdheXMgdXNlIGN1cnJlbnQgY29sc1xuXHQgKi9cblx0Z2V0Q29sdW1ucz1tZW1vaXplKGNvbHM9Pntcblx0XHRjb25zdCBtZT10aGlzXG5cdFx0cmV0dXJuIG5ldyBQcm94eShjb2xzLm1hcChhPT5uZXcgUHJveHkoYSx7XG5cdFx0XHRnZXQoY29sLHByb3Ape1xuXHRcdFx0XHRzd2l0Y2gocHJvcCl7XG5cdFx0XHRcdGNhc2UgXCJjdXJyZW50UmFua1wiOntcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtzPW1lLnJhbmtzXG5cdFx0XHRcdFx0XHRjb25zdCBpPWNvbHMuaW5kZXhPZihjb2wpXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmFua3NbcmFua3MuZmluZExhc3RJbmRleChhPT4hIWEuc2xvdHNbaV0pKzFdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFwiZmlyc3RTbG90XCI6e1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua3M9bWUucmFua3Ncblx0XHRcdFx0XHRcdGNvbnN0IGk9Y29scy5pbmRleE9mKGNvbClcblx0XHRcdFx0XHRcdHJldHVybiByYW5rcy5maW5kKGE9PiEhYS5zbG90c1tpXSkuc2xvdHNbaV1cdFxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb2xbcHJvcF1cblx0XHRcdH1cblx0XHR9KSkse1xuXHRcdFx0Z2V0KGNvbHVtbnMsIHByb3Ape1xuXHRcdFx0XHRpZihwcm9wIGluIGNvbHVtbnMpe1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW5zW3Byb3BdXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZih0eXBlb2YocHJvcCk9PVwic3RyaW5nXCIpe1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW5zLmZpbmQoYT0+YS5pZCA/IGEuaWQ9PXByb3AgOiBhLmlkPXByb3ApXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9KVxuXG5cdC8qKlxuXHQgKiBpdCB3b3VsZCBmaW5kIGEgcmFuaydzIHNwYWNlIG1lZXRpbmcgcmVxdWlyZWQsIGlmIHRoZXJlIGlzbid0IFxuXHQgKiBpdCB3b3VsZCByZXF1ZXN0IHNwYWNlIHVwLCBhbmQgdXNlIGFuIGVtcHR5IHJhbmsgcGxhY2Vob2xkZXIgdG8gdGFrZSB1cCB0aGUgYmxvY2sgaW4gbGF5b3V0IGVuZ2luZVxuXHQgKiBcblx0ICogKioqRG9uJ3QgdXNlIHJlcXVpcmVkIGhlaWdodCB0byByZXF1ZXN0IHNwYWNlLCBzaW5jZSBsYXRlciBvdGhlciBjZWxscycgc2xvdCBtYXkgZml0IGluXG5cdCAqIGlmIHRoZXJlJ3Mgbm8gc2xvdCBmaXQgaW4gYSByYW5rLCBpdCBjYW4gYmUgZGVsZXRlIGFmdGVyIGFsbCBjaGlsZHJlbiBjb21wb3NlZFxuXHQgKiBAVE9ETzogdGhlcmUgbWF5IGJlIGRlYWQgbG9vcFxuXHQgKiBAcGFyYW0geyp9IGNvbCBcblx0ICogQHBhcmFtIHsqfSByZXF1aXJlZFNwYWNlXG5cdCAqL1xuXHRmaW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCwge2hlaWdodDptaW5IZWlnaHQ9MH09e30pe1xuXHRcdHZhciByYW5rPWNvbC5jdXJyZW50UmFuayBcblx0XHRpZihyYW5rKXtcblx0XHRcdC8vZmluZCBmaXJzdCByYW5rIHdob3NlIHNwYWNlIG1lZXQgcmVxdWlyZWRcblx0XHRcdHJhbms9dGhpcy5yYW5rcy5zbGljZSh0aGlzLnJhbmtzLmluZGV4T2YocmFuaykpLmZpbmQocmFuaz0+cmFuay5zcGFjZS5oZWlnaHQ+PW1pbkhlaWdodClcblx0XHR9XG5cdFx0d2hpbGUoIXJhbmspe1xuXHRcdFx0Ly9yZXF1ZXN0IGxhcmdlc3Qgc3BhY2UgaW4gY3VycmVudCBjb25zdHJhaW50IHNwYWNlXG5cdFx0XHRjb25zdCBzcGFjZT1zdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UoKVxuXHRcdFx0aWYoIXNwYWNlKS8vbm8gc3BhY2UgYW55IG1vcmUsIHN0b3AgaW1tZWRpYXRlbHlcblx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0dGhpcy5yYW5rcy5wdXNoKHJhbms9bmV3IHRoaXMuY29uc3RydWN0b3IuUmFuayh7c3BhY2UsIGNoaWxkcmVuOm5ldyBBcnJheSh0aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKS5sZW5ndGgpLmZpbGwobnVsbCl9KSlcblx0XHRcdC8vZWFjaCByZXF1ZXN0ZWQgc3BhY2Ugc2hvdWxkIGJlIHRha2VuIHVwIGJ5IGFwcGVuZGluZyByYW5rIHBsYWNlaG9sZGVyLCBzbyBuZXh0IHJlcXVlc3QgY2FuIHRha2UgZWZmZWN0XG5cdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KHJhbmspKVxuXHRcdH1cblx0XHRyZXR1cm4gcmFua1xuXHR9XG5cdC8qKlxuXHQgKiByZXF1ZXN0IGEgcmFuayBzcGFjZSBmcm9tIHVwLCBhbmQgdGhlblxuXHQgKiBjcmVhdGUgc3BhY2UgZm9yIGVhY2ggY2VsbFxuXHQgKiB3aGVuIGEgY2VsbCByZXF1ZXN0IHNwYWNlLCB3ZSBuZWVkIGF0IGZpcnN0IGRldGVybWluIHdoaWNoIHJhbmssIHRoZW4gd2UgY2FuIGRldGVybWluIFxuXHQgKiAxLiByZXF1ZXN0IHJhbmsgc3BhY2UgZnJvbSB1cFxuXHQgKiAyLiBvciBjYWxjIGNlbGwgc3BhY2UgZnJvbSByYW5rIHNwYWNlXG5cdCAqIEhvdyB0byBkZXRlcm1pbiB3aGljaCByYW5rIHdoZW4gY2VsbCByZXF1ZXN0IHNwYWNlPz8/XG5cdCAqICoqIHVzZSBjZWxsSWQgdG8gcXVlcnkgcmFua1xuXHQgKiBcblx0ICogXG5cdCAqICoqZXZlcnkgdGltZSByZXF1ZXN0aW5nIHNwYWNlLCBhIHJhbmsgcGxhY2Vob2xkZXIgaGVpZ2h0PTAgd291bGQgYmUgYXBwZW5kZWQgdG8gdGFrZSB0aGUgc3BhY2Vcblx0ICogKip0aGVuIGhlaWdodCB3aWxsIGJlIGNvcnJlY3RlZCBldmVyeSB0aW1lIGEgc2xvdCBhcHBlbmRlZFxuXHQgKiBAcGFyYW0geyp9IHJlcXVpcmVkU3BhY2Uge2NlbGxJZCwgaGVpZ2h0OnJlcXVpcmVkQmxvY2tTaXplfSBcblx0ICovXG5cdG5leHRBdmFpbGFibGVTcGFjZSh7aWQ6Y2VsbElkLCAuLi5yZXF1aXJlZH0pe1xuXHRcdGNvbnN0IHtrZWVwTGluZXN9PXRoaXMucHJvcHNcblx0XHRjb25zdCBjb2w9dGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylbY2VsbElkXVxuXHRcdGNvbnN0IHJhbms9dGhpcy5maW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCxyZXF1aXJlZClcblx0XHRpZighcmFuaylcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGNvbnN0IHNwYWNlPXJhbmsuc3BhY2Vcblx0XHQvL2Z1cnRoZXIgY29uc3RyYWludCByYW5rIHNwYWNlIGZvciBjb2x1bW4gb2YgY2VsbGlkXG5cdFx0Y29uc3Qge2xlZnQsaGVpZ2h0fT1zcGFjZSwge3g9MCx3aWR0aH09Y29sLCBYPWxlZnQreFxuXHRcdHJldHVybiBzcGFjZS5jbG9uZSh7XG5cdFx0XHRsZWZ0OlgsXG5cdFx0XHRyaWdodDpYK3dpZHRoLFxuXHRcdFx0aGVpZ2h0OmtlZXBMaW5lcyA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogaGVpZ2h0LFxuXHRcdH0pXG5cdH1cblxuXHQvKipcblx0ICogcHV0IGl0IGludG8gY29ycmVjdCBjb2x1bW5baV0ucHVzaChjZWxsKVxuXHQgKiBAcGFyYW0geyp9IHNsb3RGcmFtZSBcblx0ICovXG5cdGFwcGVuZENvbXBvc2VkKHNsb3RGcmFtZSl7XG5cdFx0Y29uc3QgY29sdW1ucz10aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKVxuXHRcdGNvbnN0IGNlbGxJZD1zbG90RnJhbWUgJiYgc2xvdEZyYW1lLnByb3BzLmlkXG5cdFx0Y29uc3QgY29sPWNvbHVtbnNbY2VsbElkXVxuXHRcdGNvbnN0IHJhbms9dGhpcy5maW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCwge2hlaWdodDp0aGlzLmdldEhlaWdodChbc2xvdEZyYW1lXSl9KVxuXHRcdHJhbmsgJiYgcmFuay5pbnNlcnRBdChzbG90RnJhbWUsY29sdW1ucy5pbmRleE9mKGNvbCkpXG5cdH1cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKXtcblx0XHQvL3JlbW92ZSBlbXB0eSByYW5rLCBjYW4gaXQgYmUgaWdub3JlZD8/Pz9cblx0XHR0aGlzLnJhbmtzPXRoaXMucmFua3MuZmlsdGVyKHJhbms9Pntcblx0XHRcdGlmKCFyYW5rLmlzRW1wdHkoKSl7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHRyYW5rLmRlbGF5b3V0KClcblx0XHR9KVxuXHRcdGNvbnN0IGNvbHVtbnM9dGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylcblx0XHR0aGlzLnJhbmtzLmZvckVhY2goKHJhbmssaSxyYW5rcyk9Pntcblx0XHRcdGNvbnN0IGhlaWdodD10aGlzLmdldEhlaWdodChyYW5rLnNsb3RzKVxuXHRcdFx0Ly9yZXBsYWNlICBlbXB0eSBzbG90IHdpdGggZW1wdHkgY29sdW1uLmZpcnN0U2xvdCBzaGFwZVxuXHRcdFx0cmFuay5zbG90cy5mb3JFYWNoKChhLGksc2xvdHMpPT4hYSAmJiAoc2xvdHNbaV09Y29sdW1uc1tpXS5maXJzdFNsb3QuY2xvbmVBc0VtcHR5KCkpKVxuXHRcdFx0Ly90aGVuIFxuXHRcdFx0cmFuay5yZWxheW91dChoZWlnaHQscmFua3MubGVuZ3RoLTE9PWkpXG5cdFx0fSlcblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHR9XG5cblx0LyoqXG5cdCAqIGl0IGNyZWF0ZSBhIHJhbmsgcGxhY2Vob2xkZXIsIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGFwcGVuZCB0byBibG9jayBhcyBwbGFjZWhvbGRlclxuXHQgKiBpdCBmaXJzdCB0YWtlIHVwIHRoZSB3aG9sZSBsZWZ0IHNwYWNlIHdpdGggc3BhY2UuaGVpZ2h0LCB0aGVuXG5cdCAqIGFmdGVyIGFsbCBjaGlsZHJlbiBjb21wb3NlZCwgdGhlIHJhbmsgaGVpZ2h0IGFuZCBzbG90cyBoZWlnaHQgd291bGQgYmUgZml4ZWRcblx0ICogQHBhcmFtIHsqfSByYW5rIFxuXHQgKiBAcGFyYW0geyp9IGxhc3QgXG5cdCAqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoe3Byb3BzOntzcGFjZTp7aGVpZ2h0fSwgY2hpbGRyZW59fSl7XG5cdFx0Y29uc3Qge3Byb3BzOntjb2xzLGlkOnJvd30sd2lkdGh9PXRoaXNcblx0XHRyZXR1cm4gPHRoaXMuY29uc3RydWN0b3IuUmFuayB7Li4ue2hlaWdodCx3aWR0aCwgcm93LCBjaGlsZHJlbiwgY29sc319Lz5cblx0fVxuXG5cdGdldEhlaWdodChzbG90cyl7XG5cdFx0cmV0dXJuIE1hdGgubWF4KHRoaXMucHJvcHMuaGVpZ2h0fHwwLC4uLnNsb3RzLmZpbHRlcihhPT4hIWEpLm1hcChhPT5hLnNsb3RIZWlnaHQpKVxuXHR9XG5cblx0c3RhdGljIFJhbms9Y2xhc3MgZXh0ZW5kcyBDb21wb25lbnR7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPVwicmFua1wiXG5cdFx0Z2V0IHNwYWNlKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zcGFjZVxuXHRcdH1cblx0XG5cdFx0Z2V0IHNsb3RzKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuXHRcdH1cblxuXHRcdC8qKnRoZSBsYXlvdXRlZCByYW5rIGluIHRoZSBzcGFjZSAqL1xuXHRcdGdldCBsYXlvdXRlZCgpe1xuXHRcdFx0Y29uc3QgZnJhbWU9dGhpcy5zcGFjZS5mcmFtZVxuXHRcdFx0cmV0dXJuIG5ldyBQcm94eShmcmFtZS5sYXN0TGluZSwge1xuXHRcdFx0XHRnZXQobGluZSwgcHJvcCkge1xuXHRcdFx0XHRcdGlmIChwcm9wID09IFwicmVwbGFjZVdpdGhcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2VtZW50ID0+IGZyYW1lLmxpbmVzLnNwbGljZSgtMSwgMSwgcmVwbGFjZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmIChwcm9wID09IFwiZGV0YWNoXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiBmcmFtZS5saW5lcy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0XHRcdH1lbHNlIGlmKHByb3AgPT0gXCJpc0ZpcnN0Um93SW5QYWdlXCIpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldkxpbmU9ZnJhbWUubGluZXNbZnJhbWUubGluZXMubGVuZ3RoLTJdXG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZT1hPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLXR5cGU9dGFibGVdYCkuYXR0cihcImRhdGEtY29udGVudFwiKVxuXHRcdFx0XHRcdFx0cmV0dXJuICFwcmV2TGluZSB8fCB0YWJsZShsaW5lKSE9dGFibGUocHJldkxpbmUpXG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbGluZVtwcm9wXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsYXlvdXQoKXtcblx0XHRcdHRoaXMubGF5b3V0ZWQuZGV0YWNoKClcblx0XHR9XG5cdFxuXHRcdGlzRW1wdHkoKXtcblx0XHRcdGNvbnN0IHtjaGlsZHJlbjpzbG90c309dGhpcy5wcm9wc1xuXHRcdFx0cmV0dXJuICFzbG90cy5maW5kKGE9PiEhYSlcblx0XHR9XG5cblx0XHRyZWxheW91dChoZWlnaHQsIGlzTGFzdFJhbmtPZlJvdyl7XG5cdFx0XHRjb25zdCBSYW5rPXRoaXMuY29uc3RydWN0b3Jcblx0XHRcdGZ1bmN0aW9uIGNoYW5nZUhlaWdodFVwKGhlaWdodCwgcmFuaywgcGFyZW50cykge1xuXHRcdFx0XHRjb25zdCBkZWx0YT1oZWlnaHQtKHJhbmsucHJvcHMuaGVpZ2h0fHwwKVxuXHRcdFx0XHRyZXR1cm4gcGFyZW50cy5yZWR1Y2VSaWdodCgoY2hpbGQsIHBhcmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJvcHM6IHsgaGVpZ2h0LCBjaGlsZHJlbiB9IH0gPSBwYXJlbnRcblx0XHRcdFx0XHRpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09IDEpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgKGhlaWdodCkgPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KHBhcmVudCwgeyBoZWlnaHQ6IGhlaWdodCArIGRlbHRhIH0sIGNoaWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwicm93J3Mgb2Zmc3ByaW5nIHNob3VsZCBvbmx5IGhhcyBvbmUgY2hpbGRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBwYXJlbnRcblx0XHRcdFx0fSwgbmV3IFJhbmsoey4uLnJhbmsucHJvcHMsaGVpZ2h0fSkucmVuZGVyKCkpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCB7Zmlyc3QscGFyZW50cyxyYW5rPWZpcnN0LmdldCgwKX09bmV3IFJlYWN0UXVlcnkodGhpcy5sYXlvdXRlZCkuZmluZEZpcnN0QW5kUGFyZW50cyhgcmFua2ApXG5cdFx0XHR0cnl7XG5cdFx0XHRjb25zdCBjaGFuZ2VkPWNoYW5nZUhlaWdodFVwKFxuXHRcdFx0XHRoZWlnaHQsXG5cdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChyYW5rLHtcblx0XHRcdFx0XHRpc0xhc3RSYW5rT2ZSb3csXG5cdFx0XHRcdFx0aXNGaXJzdFJvd0luUGFnZTp0aGlzLmxheW91dGVkLmlzRmlyc3RSb3dJblBhZ2UsXG5cdFx0XHRcdFx0dGFibGU6cGFyZW50cy5maW5kTGFzdChhPT5hLnByb3BzW1wiZGF0YS10eXBlXCJdPT1cInRhYmxlXCIpLnByb3BzW1wiZGF0YS1jb250ZW50XCJdLFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0cGFyZW50c1xuXHRcdFx0KVxuXHRcdFx0LyoqIHNldCBoZWlnaHQgY2hhbmdlcyBmcm9tIHJhbmsgdG8gYmxvY2sgbGluZSovXG5cdFx0XHR0aGlzLmxheW91dGVkLnJlcGxhY2VXaXRoKGNoYW5nZWQpXG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGRlYnVnZ2VyXG5cdFx0XHR9XG5cdFx0fVxuXHRcblx0XHRpbnNlcnRBdChzbG90LCBpKXtcblx0XHRcdHRoaXMuc2xvdHNbaV09c2xvdFxuXHRcdH1cblx0XG5cdFx0cmVuZGVyKCl7XG5cdFx0XHRjb25zdCB7Y2hpbGRyZW46c2xvdHM9W10sY29scyxoZWlnaHQsaXNMYXN0UmFua09mUm93LCBpc0ZpcnN0Um93SW5QYWdlLHRhYmxlLCByb3csIHNwYWNlLCAuLi5wcm9wc309dGhpcy5wcm9wc1xuXHRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEdyb3VwIGhlaWdodD17aGVpZ2h0fSB7Li4ucHJvcHN9ID5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzbG90cy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0YS5jbG9uZSh7aGVpZ2h0LFxuXHRcdFx0XHRcdFx0XHRcdGNvbEluZGV4OmksdGFibGUscm93LGlzTGFzdFJhbmtPZlJvdyxpc0ZpcnN0Um93SW5QYWdlLy9lZGl0YWJsZSBlZGdlcyBuZWVkIHRoZSBpbmZvcm1hdGlvblxuXHRcdFx0XHRcdFx0XHR9KS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSx7XG5cdFx0XHRcdFx0XHRcdC4uLmNvbHNbaV0sXG5cdFx0XHRcdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0XHRcdFx0a2V5OmksXG5cdFx0XHRcdFx0XHR9KSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0KVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVJvdyBleHRlbmRzIGVkaXRhYmxlKFJvdyx7c3RvcHBhYmxlOnRydWUsIGNvbnRpbnVhYmxlOnRydWV9KXtcblx0LyoqXG5cdCAqIEBjb250aW51YWJsZVxuXHQgKiAxLiBbZG9uZV1zaW1wbHkoc3VpdGFibGUgZm9yIG1vc3QgY2FzZXMpLCByb3cgaXMgYXRvbSBvZiBjb21wb3NpbmcsIHNvIGNvbXBvc2UgYWxsIGNvbnRlbnQgb3Igbm90aGluZ1xuXHQgKiAyLiBiaWcgcm93OiBpdCBjYW4gYXZvaWQgY29tcG9zaW5nIGZvciBvdXQgb2Ygdmlld3BvcnQgc3BhY2Vcblx0ICogQHBhcmFtIHsqfSBhIFxuXHQgKi9cblx0c2hvdWxkQ29udGludWVDb21wb3NlKCl7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxufVxuXG5cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL2dyb3VwXCJcblxuY29uc3QgRWRnZT0oe3N6OnNpemUsY29sb3IsZCwgdmFsLCBzcGFjZSwgLi4ueHl9KT0+PGxpbmUgc3Ryb2tlV2lkdGg9e3NpemV9IHN0cm9rZT17Y29sb3J9IHsuLi54eX0vPlxuXG5leHBvcnQgZGVmYXVsdCAoe3RvcCxsZWZ0LHJpZ2h0LGJvdHRvbSwgd2lkdGgsaGVpZ2h0LCAuLi5wcm9wc30pPT4oXG4gICAgPEdyb3VwIHsuLi5wcm9wc30+XG4gICAgICAgIDxFZGdlIHsuLi50b3B9IHkxPXswfSB5Mj17MH0geDE9ezB9IHgyPXt3aWR0aH0vPlxuICAgICAgICA8RWRnZSB7Li4uYm90dG9tfSB5MT17aGVpZ2h0fSB5Mj17aGVpZ2h0fSB4MT17MH0geDI9e3dpZHRofS8+XG4gICAgICAgIDxFZGdlIHsuLi5yaWdodH0geDE9e3dpZHRofSB4Mj17d2lkdGh9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgICAgIDxFZGdlIHsuLi5sZWZ0fSB4MT17MH0geDI9ezB9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgPC9Hcm91cD5cbikiLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5jbGFzcyBTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IG9uU2VsZWN0LCBjdXJzb3IsIHNpemUgPSA1LCAuLi5wcm9wcyB9ID0gdGhpcy5wcm9wcztcblx0XHRyZXR1cm4gPGxpbmUgey4uLnByb3BzfSBzdHJva2U9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZVdpZHRoPXtzaXplfSBzdHlsZT17eyBjdXJzb3IgfX0gb25DbGljaz17b25TZWxlY3R9IC8+O1xuXHR9XG59XG5leHBvcnQgY29uc3QgUm93U2VsZWN0b3IgPSBwcm9wcyA9PiA8U2VsZWN0b3Igey4uLnByb3BzfSBjdXJzb3I9XCJlLXJlc2l6ZVwiIC8+O1xuZXhwb3J0IGNvbnN0IENvbFNlbGVjdG9yID0gcHJvcHMgPT4gPFNlbGVjdG9yIHsuLi5wcm9wc30gY3Vyc29yPVwicy1yZXNpemVcIiAvPjtcbiIsIlxuaW1wb3J0IFJlYWN0LHtDb21wb25lbnQsIEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcFwiXG5pbXBvcnQgUmVzaXphYmxlIGZyb20gXCIuLi8uLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcmVzaXphYmxlXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzaXplciBleHRlbmRzIENvbXBvbmVudHtcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17cmVzaXppbmc6ZmFsc2V9XG5cdH1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3Jlc2l6aW5nfT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge29uUmVzaXplLGRpcmVjdGlvbixkPWRpcmVjdGlvbj09XCJld1wiID8gJ3knIDoneCcsY3Vyc29yLGNoaWxkcmVuLC4uLnByb3BzfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8UmVzaXphYmxlXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvblN0YXJ0PXtlPT50aGlzLnNldFN0YXRlKHtyZXNpemluZzp0cnVlfSl9XG4gICAgICAgICAgICAgICAgICAgIG9uRW5kPXtlPT50aGlzLnNldFN0YXRlKHtyZXNpemluZzpmYWxzZX0pfVxuICAgICAgICAgICAgICAgICAgICBvblJlc2l6ZT17b25SZXNpemV9PlxuICAgICAgICAgICAgICAgICAgICA8bGluZSB7Li4ucHJvcHN9IHN0cm9rZT17XCJ0cmFuc3BhcmVudFwifSBzdHJva2VXaWR0aD17NX0gc3R5bGU9e3tjdXJzb3J9fS8+XG4gICAgICAgICAgICAgICAgPC9SZXNpemFibGU+XG4gICAgICAgICAgICAgICAge3Jlc2l6aW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHsuLi57Li4ucHJvcHMsW2QrJzEnXTpcIi0xMDAlXCIsIFtkKycyJ106XCIxMDAlXCJ9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImxpZ2h0Z3JheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5PVwiNSw1XCIvPlxuICAgICAgICAgICAgICAgICAgICA8L1RvcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IENvbFJlc2l6ZXI9cHJvcHM9PjxSZXNpemVyIHsuLi5wcm9wc30gZGlyZWN0aW9uPVwiZXdcIiBjdXJzb3I9XCJjb2wtcmVzaXplXCIvPlxuZXhwb3J0IGNvbnN0IFJvd1Jlc2l6ZXI9cHJvcHM9PjxSZXNpemVyIHsuLi5wcm9wc30gZGlyZWN0aW9uPVwiLW5zXCIgY3Vyc29yPVwicm93LXJlc2l6ZVwiLz5cblx0XG5cdCIsImltcG9ydCBSZWFjdCx7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2Nvbm5lY3QsIEFDVElPTn0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQge0NvbFNlbGVjdG9yLCBSb3dTZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3JcIlxuaW1wb3J0IHtDb2xSZXNpemVyLCBSb3dSZXNpemVyfSBmcm9tIFwiLi9yZXNpemVyXCJcbmltcG9ydCBFZGdlcyBmcm9tIFwiLi9lZGdlc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoKShjbGFzcyBFZGl0YWJsZUVkZ2VzIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRlZGl0YWJsZTpQcm9wVHlwZXMuYW55LFxuXHR9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtpc0ZpcnN0Um93SW5QYWdlLCBpc0xhc3RSYW5rT2ZSb3csIHRhYmxlLHJvdywgY2VsbCxpLHdpZHRoLGhlaWdodCxkaXNwYXRjaH09dGhpcy5wcm9wc1xuXHRcdGlmKCF0aGlzLmNvbnRleHQuZWRpdGFibGUpXG5cdFx0XHRyZXR1cm4gPEVkZ2VzIHsuLi50aGlzLnByb3BzfS8+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPEVkZ2VzIHsuLi50aGlzLnByb3BzfS8+XG5cbiAgICAgICAgICAgICAgICB7aXNGaXJzdFJvd0luUGFnZSAmJiA8Q29sU2VsZWN0b3IvPn1cblxuICAgICAgICAgICAgICAgIHtpc0xhc3RSYW5rT2ZSb3cgJiYgPFJvd1Jlc2l6ZXIgeDE9ezB9IHgyPXt3aWR0aH0geTE9e2hlaWdodH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyh7eX0pPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChBQ1RJT04uRW50aXR5LlVQREFURSh7aWQ6dGFibGUsIHR5cGU6XCJ0YWJsZVwiLGhlaWdodDp7dmFsdWU6aGVpZ2h0K3kscm93LGNlbGwsaX19KSlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz4gfHwgbnVsbFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtpPT0wICAmJiA8Um93U2VsZWN0b3IgeDE9ezB9IHgyPXswfSB5MT17MH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9eygpPT5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChyb3cpKX0vPn1cblxuICAgICAgICAgICAgICAgIDxDb2xSZXNpemVyIHgxPXt3aWR0aH0geTE9ezB9IHgyPXt3aWR0aH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyh7eH0pPT57XG5cdFx0XHRcdFx0XHRkaXNwYXRjaChBQ1RJT04uRW50aXR5LlVQREFURSh7aWQ6dGFibGUsIHR5cGU6XCJ0YWJsZVwiLCB3aWR0aDp7dmFsdWU6d2lkdGgreCwgcm93LCBjZWxsLGl9fSkpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApXG4gICAgfVxufSlcblxuXG5cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgRWRnZXMgZnJvbSBcIi4vZWRnZXNcIlxuaW1wb3J0IEVkaXRhYmxlRWRnZXMgZnJvbSBcIi4vZWRpdGFibGUtZWRnZXNcIlxuaW1wb3J0IFNlY3Rpb24gZnJvbSBcIi4uL3NlY3Rpb25cIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZH0gZnJvbSBcIi4uLy4uL2NvbXBvc2FibGVcIlxuXG4vKipcbiAqIENlbGwgaXMgZmlzc2lvbmFibGVcbiAqIGNvbW1pdCBhbGwgd2hlbiBhbGwgY29tcG9zZWQ/Pz8/XG4gKi9cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5DZWxsKVxuY29uc3QgZGlzcGxheU5hbWU9KCk9Pntcblx0Y29uc3QgcGFydHM9U2VjdGlvbi5kaXNwbGF5TmFtZS5zcGxpdChcIi1cIilcblx0cGFydHMuc3BsaWNlKC0xLDEsU3VwZXIuZGlzcGxheU5hbWUuc3BsaXQoXCItXCIpLnBvcCgpKVxuXHRyZXR1cm4gcGFydHMuam9pbihcIi1cIilcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENlbGwgZXh0ZW5kcyBTZWN0aW9ue1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9ZGlzcGxheU5hbWUoKVxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5TdXBlci5kZWZhdWx0UHJvcHMsXG5cdFx0Y3JlYXRlTGF5b3V0OlNlY3Rpb24uZGVmYXVsdFByb3BzLmNyZWF0ZUxheW91dCxcblx0fVxuXHRcblx0c3RhdGljIExheW91dD1jbGFzcyBMYXlvdXRDZWxsIGV4dGVuZHMgU2VjdGlvbi5MYXlvdXR7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPVwiZnJhbWUtY2VsbFwiXG5cdFx0bmV4dEF2YWlsYWJsZVNwYWNlKHtoZWlnaHQ6cmVxdWlyZWRCbG9ja1NpemU9MH09e30pe1xuXHRcdFx0Y29uc3Qgc3BhY2U9c3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcblx0XHRcdC8qKmNlbGwgaXMgYWxsb3dlZCB0byBiZSBlbXB0eSwgYnV0IG5vcm1hbCBmcmFtZSBpcyBub3QgYWxsb3dlZCAqL1xuXHRcdFx0aWYoc3BhY2UgJiYgdGhpcy5pc0VtcHR5KCkgJiYgcmVxdWlyZWRCbG9ja1NpemU+dGhpcy5hdmFpbGFibGVCbG9ja1NpemUpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblx0XHRcdHJldHVybiBzcGFjZVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIGEgY2VsbCBzcGFjZSBib3JkZXJ8bWFyZ2lufGNvbnRlbnR8bWFyZ2lufGJvcmRlclxuXHRcdCAqL1xuXHRcdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdFx0Y29uc3Qge2JvcmRlcnMsd2lkdGgsaGVpZ2h0fT10aGlzLnByb3BzXG5cdFx0XHRjb25zdCB7dGFibGUscm93LGlkOmNlbGwsY29sSW5kZXg6aSxpc0ZpcnN0Um93SW5QYWdlLGlzTGFzdFJhbmtPZlJvd309dGhpcy5wcm9wc1xuICAgICAgICBcblx0XHRcdGNvbnN0IGNvbnRlbnQ9c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdHt3aWR0aCxoZWlnaHR9LFxuXHRcdFx0XHRjb250ZW50LnByb3BzLmNoaWxkcmVuLFxuXHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoYm9yZGVycyx7aGVpZ2h0LHdpZHRoLFxuXHRcdFx0XHRcdHRhYmxlLHJvdyxjZWxsLGksaXNGaXJzdFJvd0luUGFnZSxpc0xhc3RSYW5rT2ZSb3cvL2VkaXRhYmxlIGVkZ2VzXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNyZWF0ZSBlbXB0eSBjZWxsIHNsb3Rcblx0XHQgKi9cblx0XHRjbG9uZUFzRW1wdHkoKXtcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuY2xvbmUoLi4uYXJndW1lbnRzKSx7Y29tcHV0ZWQ6e2NvbXBvc2VkOltdLGFuY2hvcnM6W10sbGFzdENvbXBvc2VkOltdfX0pXG5cdFx0fVxuXG5cdFx0LyoqdXNlZCB0byBjYWN1bGF0ZSByYW5rIGhlaWdodCAqL1xuXHRcdGdldCBzbG90SGVpZ2h0KCl7XG5cdFx0XHRjb25zdCB7bWFyZ2luOntib3R0b209MH19PXRoaXMucHJvcHNcblx0XHRcdHJldHVybiB0aGlzLmJsb2NrT2Zmc2V0K2JvdHRvbVxuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBFZGdlcz1FZGl0YWJsZUVkZ2VzXG5cblx0LyoqXG5cdCAqIHNwYWNlIGlzIGRlZmluZWQgYnkgcm93LT50YWJsZS0+cGFyZW50IHNwYWNlLCBzbyBpdCBoYXMgdG8gcmVxdWlyZSBzcGFjZSB1cFxuXHQgKiB3aGVuIGN1cnJlbnQgY2VsbCBzcGFjZSBpcyBmdWxsLCBpdCdzIGNhbGxlZCB0byBjcmVhdGUgbmV3IGNlbGwgc3BhY2UgYnkgcmVxdWlyZSBzcGFjZSB1cCBBRlRFUlxuXHQgKiAqKiogY29tbWl0IGN1cnJlbnQgY29tcG9zZWQgdG8gcGFyZW50LCBcblx0ICogT3IgY29tbWl0IGFsbCB3aGVuIGFsbCBjb21wb3NlZD8/Pz8gTm8sIGJsb2NrT2Zmc2V0IGNhbid0IGJlIGRldGVybWluZWQgZnJvbSBzZWNvbmQgc2VnbWVudFxuXHQgKiBAcGFyYW0geyp9IHByb3BzIFxuXHQgKiBAcGFyYW0geyp9IGNvbnRleHQgXG5cdCAqIEBwYXJhbSB7Kn0gcmVxdWlyZWQgXG5cdCAqL1xuXHRjcmVhdGVMYXlvdXQocHJvcHMsY29udGV4dCxyZXF1aXJlZD17fSl7XG5cdFx0Y29uc3Qgc3BhY2U9dGhpcy5jb250ZXh0LnBhcmVudC5uZXh0QXZhaWxhYmxlU3BhY2Uoey4uLnJlcXVpcmVkLGlkOnRoaXMucHJvcHMuaWR9KVxuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHJldHVybiBudWxsXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodCxmcmFtZX09c3BhY2Vcblx0XHRjb25zdCB7bWFyZ2luOntyaWdodD0wLGxlZnQ9MCx0b3A9MCxib3R0b209MH09e30sIHZlcnRBbGlnbixib3JkZXJ9PXRoaXMucHJvcHNcblx0XHQvKipcblx0XHQgKiBhIGNlbGwgc3BhY2UgYm9yZGVyfG1hcmdpbnxjb250ZW50fG1hcmdpbnxib3JkZXJcblx0XHQgKi9cblx0XHRyZXR1cm4gc3VwZXIuY3JlYXRlTGF5b3V0KHtcblx0XHRcdG1hcmdpbjp7XG5cdFx0XHRcdGxlZnQ6bGVmdCtib3JkZXIubGVmdC5zeixcblx0XHRcdFx0cmlnaHQ6cmlnaHQrYm9yZGVyLmxlZnQuc3osXG5cdFx0XHRcdHRvcDp0b3ArYm9yZGVyLnRvcC5zeixcblx0XHRcdFx0Ym90dG9tOmJvdHRvbStib3JkZXIuYm90dG9tLnN6XG5cdFx0XHR9LFxuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHR2ZXJ0QWxpZ24sXG5cdFx0XHRib3JkZXJzOjx0aGlzLmNvbnN0cnVjdG9yLkVkZ2VzIHsuLi57XG5cdFx0XHRcdC4uLmJvcmRlcix3aWR0aCxoZWlnaHQsXG5cdFx0XHRcdFwiZGF0YS1ub2NvbnRlbnRcIjp0cnVlLC8vaWdub3JlIHNlYXJjaCBmb3IgcG9zaXRpb25pbmdcblx0XHRcdFx0fX0vPlxuXHRcdH0se2ZyYW1lfSlcblx0fVxuXG5cdG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpe1xuXHRcdGlmKHRoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoPT0wKXtcblx0XHRcdGNvbnN0IGE9dGhpcy5jcmVhdGVMYXlvdXQoKVxuXHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZC5wdXNoKGEpXG5cdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KGEpKVxuXHRcdH1cblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGR9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbi8qKlxuKiB4eSBmb3IgUG9zaXRpb25pbmdcbiogd3JhcCBib3VuZGFyeSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGNoaWxkcmVuIGNvbnRlbnQsIGFuZCB0aGVuIHBhc3MgdG8gZnJhbWVcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmNob3IgZXh0ZW5kcyBIYXNQYXJlbnRBbmRDaGlsZChkb20uQW5jaG9yKXtcbiAgICBjcmVhdGVDb21wb3NlZDJQYXJlbnQoY29udGVudCl7XG4gICAgICAgIHZhciB7d2lkdGgsaGVpZ2h0LGdlb21ldHJ5fT1jb250ZW50LnByb3BzXG4gICAgICAgIGNvbnN0IHttYXJnaW46e2xlZnQ9MCxyaWdodD0wLHRvcD0wLGJvdHRvbT0wfT17fSwgd3JhcCwgeDpYLCB5Oll9PXRoaXMucHJvcHNcbiAgICAgICAgdGhpcy53aWR0aD13aWR0aCs9KGxlZnQrcmlnaHQpXG4gICAgICAgIHRoaXMuaGVpZ2h0PWhlaWdodCs9KHRvcCtib3R0b20pXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R3JvdXAgY2hpbGRyZW49e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgYW5jaG9yPXtzcGFjZT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplPXt3aWR0aDp0aGlzLndpZHRoLCBoZWlnaHQ6dGhpcy5oZWlnaHR9ICBcbiAgICAgICAgICAgICAgICAgICAgdmFyIHg9c3BhY2UuYW5jaG9yKHthbGlnbjpcImxlZnRcIiwuLi5YfSxzaXplLHNwYWNlKVxuICAgICAgICAgICAgICAgICAgICB2YXIgeT1zcGFjZS5hbmNob3Ioe2FsaWduOlwidG9wXCIsLi4uWX0sc2l6ZSxzcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHg9eC1sZWZ0LCB5PXktdG9wXG4gICAgICAgICAgICAgICAgICAgIGlmKGdlb21ldHJ5ICYmIGdlb21ldHJ5Lm9yaWdpbil7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LT1nZW9tZXRyeS5vcmlnaW4ueFxuICAgICAgICAgICAgICAgICAgICAgICAgeS09Z2VvbWV0cnkub3JpZ2luLnlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBGdW5jPShmbj0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWZuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdyYXAubW9kZT09XCJTcXVhcmVcIiB8fCB3cmFwLm1vZGU9PVwiVG9wQW5kQm90dG9tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU9PmZuLmNhbGwodGhpcywgbGluZSwge2JvdW5kczooKT0+KHtsZWZ0OngsdG9wOnkscmlnaHQ6eCt3aWR0aCxib3R0b206eStoZWlnaHR9KX0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZT0+Zm4uY2FsbCh0aGlzLCBsaW5lLCBnZW9tZXRyeS5jbG9uZSgpLnRyYW5zbGF0ZSh4LHkpKVxuICAgICAgICAgICAgICAgICAgICB9KSh3cmFwICYmICh0eXBlb2Yod3JhcCk9PVwiZnVuY3Rpb25cIiA/IHdyYXAgOiB0aGlzW2B3cmFwJHt3cmFwLm1vZGV9YF0pKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyb3VwIHsuLi57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6d3JhcEZ1bmMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6e3gseSx3aWR0aCxoZWlnaHR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1jb250ZW50XCI6dGhpcy5wcm9wcy5pZCxcImRhdGEtdHlwZVwiOnRoaXMuZ2V0Q29tcG9zZVR5cGUoKX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcm91cCB4PXtsZWZ0fSB5PXt0b3B9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBhcHBseVdyYXBUZXh0KHgxLHgyLCB4LCBYKXtcbiAgICAgICAgY29uc3Qge3dyYXA6e3dyYXBUZXh0fX09dGhpcy5wcm9wc1xuICAgICAgICBjb25zdCBnZXQ9dHlwZT0+e1xuICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge3gsd2lkdGg6eDIteH1cbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7eDp4MSx3aWR0aDpYLXgxfVxuICAgICAgICAgICAgY2FzZSBcImxhcmdlc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KCh4LXgxKT49KHgyLVgpID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIpXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB7eCwgd2lkdGg6WC14fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldCh3cmFwVGV4dClcbiAgICB9XG5cbiAgICB3cmFwU3F1YXJlKHt4MSx4Mix5Mjp5LHkxPXl9LGdlb21ldHJ5KXtcbiAgICAgICAgY29uc3Qge3dyYXA6e21vZGUsIHdyYXBUZXh0fSxtYXJnaW46e3JpZ2h0Om1yPTAsIGxlZnQ6bWw9MH09e319PXRoaXMucHJvcHNcbiAgICAgICAgY29uc3Qge2xlZnQsdG9wLHJpZ2h0LGJvdHRvbX09Z2VvbWV0cnkuYm91bmRzKClcbiAgICAgICAgaWYoeT49dG9wICYmIHk8PWJvdHRvbSl7XG4gICAgICAgICAgICBpZighKHgyPD1sZWZ0IHx8IHgxPj1yaWdodCkpe1xuICAgICAgICAgICAgICAgIGlmKHkxIT09Ym90dG9tKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5hcHBseVdyYXBUZXh0KHgxLHgyLGxlZnQtbWwsIHJpZ2h0K21yKSx7eTpib3R0b219KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyYXBUaWdodChsaW5lLGdlb21ldHJ5KXtcbiAgICAgICAgY29uc3Qge21hcmdpbjp7bGVmdD0wLHJpZ2h0PTB9fT10aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IHt4MSx4MiwgeTJ9PWxpbmVcbiAgICAgICAgY29uc3QgcG9pbnRzPWdlb21ldHJ5LmludGVyc2VjdHMoe3gxLHgyLHkyLHkxOnkyfSkuc29ydCgoYSxiKT0+YS54LWIueClcbiAgICAgICAgaWYocG9pbnRzLmxlbmd0aD4yKXtcbiAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoMSxwb2ludHMubGVuZ3RoLTEtMSlcbiAgICAgICAgfVxuICAgICAgICBpZihwb2ludHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlXcmFwVGV4dCh4MSx4Mixwb2ludHNbMF0ueC1sZWZ0LHBvaW50cy5wb3AoKS54K3JpZ2h0KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JhcFRocm91Z2gobGluZSxnZW9tZXRyeSl7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUaWdodCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgd3JhcENsZWFyKHt4MSx4Mix5Mjp5LCB5MT15fSxnZW9tZXRyeSl7XG4gICAgICAgIGNvbnN0IHtsZWZ0LHRvcCxyaWdodCxib3R0b219PWdlb21ldHJ5LmJvdW5kcygpXG4gICAgICAgIGlmKHk+PXRvcCAmJiB5PD1ib3R0b20pe1xuICAgICAgICAgICAgaWYoeTEhPT1ib3R0b20pe1xuICAgICAgICAgICAgICAgIHJldHVybiB7eDp4MSx3aWR0aDp4Mi14MSx5OmJvdHRvbSx0eXBlOlwiY2xlYXJcIn1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyYXBUb3BBbmRCb3R0b20oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcENsZWFyKC4uLmFyZ3VtZW50cylcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsU3RvcHBhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgU3RvcHBhYmxlKEhhc1BhcmVudEFuZENoaWxkKGRvbS5Db250YWluZXIpLGZhbHNlKXtcbiAgICBnZXRDb21wb3NlVHlwZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50eXBlIHx8IHN1cGVyLmdldENvbXBvc2VUeXBlKClcbiAgICB9XG5cbiAgICBhcHBlbmRDb21wb3NlZChlbGVtZW50KXtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgd2lkdGgsaGVpZ2h0LG1pbldpZHRoLHgseSxibG9ja09mZnNldCxcbiAgICAgICAgICAgIHdyYXAsIGFuY2hvcixcbiAgICAgICAgICAgIGRlc2NlbnQscGFnaW5hdGlvbixcbiAgICAgICAgICAgIG1lcmdlT3Bwb3J0dW5pdHksXG4gICAgICAgICAgICAuLi5wcm9wc309ZWxlbWVudC5wcm9wc1xuICAgICAgICByZXR1cm4gc3VwZXIuYXBwZW5kQ29tcG9zZWQoUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCx7XG4gICAgICAgICAgICB3aWR0aCxoZWlnaHQsbWluV2lkdGgsd3JhcCwgYW5jaG9yLGRlc2NlbnQscGFnaW5hdGlvbix4LHksYmxvY2tPZmZzZXQsbWVyZ2VPcHBvcnR1bml0eSxcbiAgICAgICAgICAgIGNoaWxkcmVuOlJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LHtcbiAgICAgICAgICAgICAgICB4OnVuZGVmaW5lZCwgeTp1bmRlZmluZWQsd3JhcDp1bmRlZmluZWQsYW5jaG9yOnVuZGVmaW5lZCxibG9ja09mZnNldDp1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbWVyZ2VPcHBvcnR1bml0eTp1bmRlZmluZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KSlcbiAgICB9XG59XG4iLCJpbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxMb2NhdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcblxuaW1wb3J0IERvY3VtZW50IGZyb20gXCIuL2RvY3VtZW50XCJcbmltcG9ydCBTZWN0aW9uIGZyb20gXCIuL3NlY3Rpb25cIlxuaW1wb3J0IFBhcmFncmFwaCBmcm9tIFwiLi9wYXJhZ3JhcGhcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4vdGV4dFwiXG5pbXBvcnQgSW1hZ2UgZnJvbSBcIi4vaW1hZ2VcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuL3RhYmxlXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vcm93XCJcbmltcG9ydCBDZWxsIGZyb20gXCIuL2NlbGxcIlxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcbmltcG9ydCBBbmNob3IgZnJvbSBcIi4vYW5jaG9yXCJcbmltcG9ydCBTaGFwZSBmcm9tIFwiLi9zaGFwZVwiXG5pbXBvcnQgQ29udGFpbmVyIGZyb20gXCIuL2NvbnRhaW5lclwiXG5pbXBvcnQgVGVtcGxhdGUgZnJvbSBcIi4vdGVtcGxhdGVcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi9jb21wb3NlZC9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IExvY2F0YWJsZS5lbmFibGUoSGFzUGFyZW50QW5kQ2hpbGQuZW5hYmxlKGRvbSx7XG5cdERvY3VtZW50LFxuXHRTZWN0aW9uLFxuXHRQYXJhZ3JhcGgsXG5cdFRleHQsXG5cblx0SW1hZ2UsXG5cdFRhYmxlLFxuXHRSb3csXG5cdENlbGwsXG5cdEZyYW1lLFxuXHRTaGFwZSxcblx0QW5jaG9yLFxuXHRDb250YWluZXIsXG5cdFRlbXBsYXRlLFxufSkse0dyb3VwfSlcbiIsImltcG9ydCBkb20gZnJvbSBcIi4uXCJcblxuaW1wb3J0IHtlZGl0YWJsZX0gZnJvbSBcIi4uLy4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi9jb21wb3NlZC9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGVkaXRhYmxlLmVuYWJsZShkb20se0dyb3VwfSlcbiIsImltcG9ydCBGb250S2l0IGZyb20gXCJmb250a2l0XCJcblxuY29uc3QgZm9udHM9bmV3IChjbGFzc3tcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmZhbWlsaWVzPXt9XG4gICAgfVxuXG4gICAgZ2V0KG5hbWUse2JvbGQsaXRhbGljfT17fSl7XG4gICAgICAgIGNvbnN0IGZvdW5kPXRoaXMuZmFtaWx5KG5hbWUpXG4gICAgICAgIGlmKGZvdW5kKXtcbiAgICAgICAgICAgIGlmKGZvdW5kLmxlbmd0aD09MSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRbMF1cblxuICAgICAgICAgICAgZm91bmQuc29ydCgoYSxiKT0+YS5ib2xkfHwwK2EuaXRhbGljfHwwLWIuYm9sZHx8MC1iLml0YWxpY3x8MClcblxuICAgICAgICAgICAgbGV0IGJvbGRzPWZvdW5kLmZpbHRlcihhPT5hLmJvbGQpXG4gICAgICAgICAgICBsZXQgaXRhbGljcz1mb3VuZC5maWx0ZXIoYT0+YS5pdGFsaWMpXG5cbiAgICAgICAgICAgIGlmKGJvbGQgJiYgaXRhbGljKXtcbiAgICAgICAgICAgICAgICBjb25zdCBiaT1ib2xkcy5maW5kKGE9Pml0YWxpY3MuaW5jbHVkZXMoYSkpXG4gICAgICAgICAgICAgICAgaWYoYmkpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGJvbGQpe1xuICAgICAgICAgICAgICAgIGlmKCFpdGFsaWMpe1xuICAgICAgICAgICAgICAgICAgICBib2xkcz1ib2xkcy5maWx0ZXIoYT0+IWl0YWxpY3MuaW5jbHVkZXMoYSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGJvbGRzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib2xkc1swXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaXRhbGljKXtcbiAgICAgICAgICAgICAgICBpZighYm9sZCl7XG4gICAgICAgICAgICAgICAgICAgIGl0YWxpY3M9aXRhbGljcy5maWx0ZXIoYT0+IWJvbGRzLmluY2x1ZGVzKGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihpdGFsaWNzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGFsaWNzWzBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBmb3VuZFswXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHV0KGZvbnQscHJvcHMpe1xuICAgICAgICBpZighZm9udC5mYW1pbHlOYW1lKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleT1mb250LmZhbWlseU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICBjb25zdCBmYW1pbHk9KHRoaXMuZmFtaWxpZXNba2V5XT10aGlzLmZhbWlsaWVzW2tleV18fFtdKVxuICAgICAgICBpZihmYW1pbHkuZmluZChhPT5hLmZ1bGxOYW1lPT1mb250LmZ1bGxOYW1lKSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGZvbnQ9ZXh0ZW5kKGZvbnQscHJvcHMpXG4gICAgICAgIGNvbnN0IHtmdWxsTmFtZT1cIlwiLGZhbWlseU5hbWU9XCJcIixzdWJmYW1pbHlOYW1lPVwiXCJ9PWZvbnRcbiAgICAgICAgY29uc3QgdXVpZD1gJHtmdWxsTmFtZX0sJHtmYW1pbHlOYW1lfSwke3N1YmZhbWlseU5hbWV9YFxuICAgICAgICBpZigvYm9sZC9pLnRlc3QodXVpZCkpXG4gICAgICAgICAgICBmb250LmJvbGQ9MVxuICAgICAgICBpZigvaXRhbGljL2kudGVzdCh1dWlkKSlcbiAgICAgICAgICAgIGZvbnQuaXRhbGljPTFcbiAgICAgICAgY29uc3QgbmFtZT1mb250LmZhbWlseU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICBjb25zb2xlLmxvZyhgZm9udFske2ZvbnQuZmFtaWx5TmFtZX1dIGxvYWRlZGApXG4gICAgICAgIGZhbWlseS5wdXNoKGZvbnQpXG4gICAgICAgIHJldHVybiBmb250XG4gICAgfVxuXG4gICAgbmFtZXMoKXtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmFtaWxpZXMpXG5cdFx0XHQubWFwKGs9PnRoaXMuZmFtaWxpZXNba11bMF0uZmFtaWx5TmFtZSlcblx0XHRcdC5maWx0ZXIoYT0+ISFhKVxuICAgIH1cblxuICAgIGZhbWlseShuYW1lKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFtaWxpZXNbbmFtZS50b0xvd2VyQ2FzZSgpXVxuICAgIH1cbn0pKClcblxuY29uc3QgRm9udE1hbmFnZXI9e1xuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4gZm9udHMuZ2V0KC4uLmFyZ3VtZW50cylcbiAgICB9LFxuXG4gICAgZ2V0IG5hbWVzKCl7XG5cdFx0cmV0dXJuIGZvbnRzLm5hbWVzKCkuc29ydCgpXG5cdH0sXG5cbiAgICByZWxlYXNlKCl7XG4gICAgICAgIHRoaXMuaXRlcmF0ZUxvY2FsKGE9PlVSTC5yZWxlYXNlT2JqZWN0VVJMKGEuc3JjKSlcbiAgICAgICAgZm9udHMuZmFtaWxpZXM9e31cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXRlcmF0ZUxvY2FsKGYpe1xuICAgICAgICBmb250cy5uYW1lcygpLmZvckVhY2goaz0+e1xuICAgICAgICAgICAgZm9udHMuZmFtaWx5KGspLmZvckVhY2goYT0+e1xuICAgICAgICAgICAgICAgIGlmKGEuc3JjICYmIGEuc3JjLnN0YXJ0c1dpdGgoXCJibG9iOlwiKSl7XG4gICAgICAgICAgICAgICAgICAgIGYoYSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0sXG5cblx0ZnJvbUJyb3dzZXIobG9hZGVyKXtcbiAgICAgICAgY29uc3QgbG9hZDE9ZmlsZT0+e1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PntcbiAgICAgICAgICAgICAgICBjb25zdCBzcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKVxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3IEZpbGVSZWFkZXIoKSx7XG4gICAgICAgICAgICAgICAgICAgIG9ubG9hZCh7dGFyZ2V0OntyZXN1bHQ6ZGF0YX19KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250PUZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFmb250KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZm9udC5mb250cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShmb250LmZvbnRzKS5tYXAoZm9udD0+Zm9udHMucHV0KGZvbnQse3NyY30pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2V7XG4gICAgXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZvbnRzLnB1dChmb250LHtzcmN9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKVxuXHRcdFx0XHRcdFx0fVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yOmU9PnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIH0pLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20obG9hZGVyLmZpbGVzKS5tYXAobG9hZDEpKS50aGVuKGZvbnRzPT57XG4gICAgICAgICAgICBsb2FkZXIudmFsdWU9XCJcIlxuICAgICAgICAgICAgcmV0dXJuIGZsYXQoZm9udHMpXG4gICAgICAgIH0pLmZpbmFsbHkobWFrZVdlYkZvbnQpXG5cdH0sXG5cbiAgICBmcm9tUGF0aChwYXRoKXtcbiAgICAgICAgY29uc3QgbG9hZDE9ZmlsZT0+e1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PntcbiAgICAgICAgICAgICAgICBGb250S2l0Lm9wZW4oZmlsZSwoZXJyLCBmb250KT0+e1xuICAgICAgICAgICAgICAgICAgICBpZihlcnIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZvbnQuZm9udHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShBcnJheS5mcm9tKGZvbnQuZm9udHMpLm1hcChmb250PT5mb250cy5wdXQoZm9udCx7c3JjOmZpbGV9KSkpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmb250cy5wdXQoZm9udCx7c3JjOmZpbGV9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICAgICAgaWYocGF0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoXCJmc1wiKS5yZWFkZGlyKHBhdGgsIChlcnIsIGZpbGVzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChmaWxlcy5tYXAoZmlsZT0+bG9hZDEoYCR7cGF0aH0vJHtmaWxlfWApKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+cmVzb2x2ZShmbGF0KGZvbnRzKSkscmVqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwiZ2V0LXN5c3RlbS1mb250c1wiKSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+UHJvbWlzZS5hbGwoZm9udHMubWFwKGxvYWQxKS5maWx0ZXIoYT0+ISFhKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+cmVzb2x2ZShmbGF0KGZvbnRzKSkscmVqZWN0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgfSxcblxuICAgIGZyb21SZW1vdGUoc2VydmljZSl7XG4gICAgICAgIHJldHVybiBmZXRjaChzZXJ2aWNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzPT5yZXMudGV4dCgpKVxuICAgICAgICAgICAgLnRoZW4obGlzdD0+e1xuICAgICAgICAgICAgICAgIGxldCBmb250c1xuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgZm9udHM9SlNPTi5wYXJzZShsaXN0KVxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgZm9udHM9bGlzdC5zcGxpdChcIixcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRzLmZpbHRlcihhPT4hIWEpLm1hcChhPT5hLnRyaW0oKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihsaXN0PT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICBsaXN0Lm1hcChhPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcmM9YCR7c2VydmljZX0vJHthfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaChzcmMpLnRoZW4ocmVzPT57XG4gICAgICAgICAgICBcdFx0XHRcdFx0aWYocmVzLm9rKXtcbiAgICAgICAgICAgIFx0XHRcdFx0XHRcdHJldHVybiByZXMuYXJyYXlCdWZmZXIoKS50aGVuKGJ1ZmZlcj0+Zm9udHMucHV0KEZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGJ1ZmZlcikpLHtzcmN9KSlcbiAgICAgICAgICAgIFx0XHRcdFx0XHR9XG4gICAgICAgICAgICBcdFx0XHRcdH0pXG5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbmFsbHkobWFrZVdlYkZvbnQpXG4gICAgfSxcblxuXHRsb2FkKHNlcnZpY2UsaWQpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25zdCBmb3VuZD10aGlzLmdldChpZClcbiAgICBcdFx0aWYodHlwZW9mKGZvdW5kKSE9XCJ1bmRlZmluZWRcIilcbiAgICBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvdW5kKVxuICAgICAgICB9Y2F0Y2goZSl7XG5cbiAgICAgICAgfVxuXG5cdFx0bGV0IGRhdGFSZXRyaWV2ZWQscHJvcHM9e31cblx0XHRpZih0eXBlb2Yoc2VydmljZSk9PVwic3RyaW5nXCIpe1xuICAgICAgICAgICAgZGF0YVJldHJpZXZlZD1mZXRjaChwcm9wcy5zcmM9YCR7c2VydmljZX0vJHtpZH1gKVxuXHRcdFx0XHQudGhlbihyZXM9Pntcblx0XHRcdFx0XHRpZighcmVzLm9rKXtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihyZXMuc3RhdHVzVGV4dClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHJlcy5hcnJheUJ1ZmZlcigpXG5cdFx0XHRcdH0pXG5cdFx0fWVsc2V7XG5cdFx0XHRkYXRhUmV0cmlldmVkPXNlcnZpY2UoaWQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGFSZXRyaWV2ZWRcblx0XHRcdC50aGVuKGJ1ZmZlcj0+Zm9udHMucHV0KEZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGJ1ZmZlcikpLHByb3BzKSlcblx0XHRcdC5jYXRjaCgpXG5cdH0sXG5cbiAgICBhc1NlcnZpY2Uoc3c9XCIvZm9udC1zZXJ2aWNlLmpzXCIsc2NvcGU9XCJcIil7XG4gICAgICAgIGlmICh0eXBlb2YobmF2aWdhdG9yKSE9XCJ1bmRlZmluZWRcIiAmJiAnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgX2Zyb21Ccm93c2VyPUZvbnRNYW5hZ2VyLmZyb21Ccm93c2VyXG4gICAgICAgICAgICBGb250TWFuYWdlci5mcm9tQnJvd3Nlcj1mdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHJldHVybiBfZnJvbUJyb3dzZXIuY2FsbChGb250TWFuYWdlciwuLi5hcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgICAuZmluYWxseSgoKT0+Rm9udE1hbmFnZXIuaXRlcmF0ZUxvY2FsKCh7ZmFtaWx5TmFtZSwgc3JjfSk9PntcbiAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuYWN0aXZlLnBvc3RNZXNzYWdlKHtmYW1pbHlOYW1lLCBzcmMsIHNjb3BlfSlcbiAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoYCR7c3d9YCwgeyBzY29wZTogYCR7c2NvcGV9L2AgfSkudGhlbihmdW5jdGlvbihyZWcpIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlPXJlZ1xuICAgICAgICAgICAgICAgIGlmKHJlZy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZvbnQgU2VydmljZVske3N3fV0gd29ya2VyIGFjdGl2ZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZvbnQgU2VydmljZVske3N3fV0gZmFpbGVkIHdpdGggYCArIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9udE1hbmFnZXJcblxuZnVuY3Rpb24gZmxhdChmb250cyl7XG4gICAgcmV0dXJuIGZvbnRzLnJlZHVjZSgoY2x0LGEpPT57XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xuICAgICAgICAgICAgY2x0LnNwbGljZShjbHQubGVuZ3RoLDAsLi4uYSlcbiAgICAgICAgfWVsc2UgaWYoYSl7XG4gICAgICAgICAgICBjbHQucHVzaChhKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHRcbiAgICB9LFtdKVxufVxuXG5mdW5jdGlvbiBleHRlbmQoZm9udCwgcHJvcHM9e30pe1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmb250LHtcblx0XHRsaW5lSGVpZ2h0KGZvbnRTaXplKXtcblx0XHRcdGNvbnN0IHNjYWxlID0gMSAvIHRoaXMudW5pdHNQZXJFbSAqIGZvbnRTaXplXG5cdFx0XHRyZXR1cm4gc2NhbGUqKHRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXApXG5cdFx0fSxcblx0XHRsaW5lRGVzY2VudChmb250U2l6ZSl7XG5cdFx0XHRjb25zdCBzY2FsZSA9IDEgLyB0aGlzLnVuaXRzUGVyRW0gKiBmb250U2l6ZTtcblx0XHRcdHJldHVybiAtdGhpcy5kZXNjZW50KnNjYWxlXG5cdFx0fSxcblxuICAgICAgICBzdHJpbmdXaWR0aChzdHJpbmcsZm9udFNpemUpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0KHN0cmluZykuYWR2YW5jZVdpZHRoL3RoaXMudW5pdHNQZXJFbSAqIGZvbnRTaXplXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG5cdH0pXG59XG5cbnZhciB3ZWJGb250cz1udWxsXG5mdW5jdGlvbiBtYWtlV2ViRm9udCgpe1xuICAgIGlmKCF3ZWJGb250cyl7XG4gICAgICAgIHdlYkZvbnRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKVxuICAgICAgICB3ZWJGb250cy5pZD1cIndlX2VkaXRfd2ViX2ZvbnRzXCJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh3ZWJGb250cylcbiAgICB9XG4gICAgY29uc3QgbG9hZGVkPUFycmF5LmZyb20od2ViRm9udHMuc2hlZXQucnVsZXMpLm1hcChhPT5hLnN0eWxlLmZvbnRGYW1pbHkpXG4gICAgZm9udHMubmFtZXMoKS5maWx0ZXIoYT0+IWxvYWRlZC5pbmNsdWRlcyhhKSlcbiAgICAgICAgLmZvckVhY2goaz0+e1xuICAgICAgICAgICAgY29uc3QgZm9udD1mb250cy5nZXQoaylcbiAgICAgICAgICAgIGNvbnN0IHtmYW1pbHlOYW1lLCBzcmN9PWZvbnRcbiAgICAgICAgICAgIGlmKHNyYyAmJiBmYW1pbHlOYW1lKXtcbiAgICAgICAgICAgICAgICB3ZWJGb250cy5zaGVldC5hZGRSdWxlKCdAZm9udC1mYWNlJyxgZm9udC1mYW1pbHk6XCIke2ZhbWlseU5hbWV9XCI7c3JjOiBsb2NhbChcIiR7ZmFtaWx5TmFtZX1cIiksIHVybChcIiR7c3JjfVwiKTtgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxufVxuIiwiZXhwb3J0IGNsYXNzIE1lYXN1cmV7XG4gICAgY29uc3RydWN0b3Ioc3R5bGUpe1xuXHRcdGNvbnN0IHtmb250cywgc2l6ZX09c3R5bGVcblx0XHR0aGlzLnN0eWxlPXN0eWxlXG5cdFx0dGhpcy5mb250RmFtaWx5cz1mb250cy5zcGxpdChcIixcIikubWFwKGE9PmEudHJpbSgpKS5maWx0ZXIoYT0+ISFhKVxuICAgICAgICB0aGlzLmZvbnRGYW1pbHk9dGhpcy5mb250RmFtaWx5c1swXVxuXHRcdHRoaXMuc2l6ZT1zaXplXG4gICAgICAgIHRoaXMuZGVmYXVsdFN0eWxlPXtcblx0XHRcdHdoaXRlU3BhY2U6J3ByZScsXG5cdFx0XHRmb250U2l6ZTpgJHtzaXplfXB0YCxcblx0XHRcdGZvbnRXZWlnaHQ6c3R5bGUuYm9sZCA/IDcwMCA6IDQwMCxcblx0XHRcdGZvbnRTdHlsZTpzdHlsZS5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIixcblx0XHRcdGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5XG5cdFx0fVxuXG5cdFx0Y29uc3Qge2hlaWdodCwgZGVzY2VudH09dGhpcy5saW5lSGVpZ2h0KClcbiAgICAgICAgdGhpcy5kZWZhdWx0U3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0PWhlaWdodFxuXHRcdHRoaXMuZGVmYXVsdFN0eWxlLmRlc2NlbnQ9dGhpcy5kZXNjZW50PWRlc2NlbnRcbiAgICB9XG5cblx0bGluZUhlaWdodCgpe1xuXHRcdHJldHVybiB7aGVpZ2h0OjI1LGRlc2NlbnQ6Mn1cblx0fVxuXG5cdHN0cmluZ1dpZHRoKHN0cmluZyl7XG5cdFx0cmV0dXJuIDIwMFxuXHR9XG5cblx0d2lkdGhTdHJpbmcod2lkdGgsc3RyaW5nKXtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHN0cmluZywoc3RhdGUsYSk9Pntcblx0XHRcdGlmKHN0YXRlLmRvbmUpXG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXG5cdFx0XHRsZXQgYVdpZHRoPXRoaXMuc3RyaW5nV2lkdGgoYSlcblx0XHRcdGlmKHN0YXRlLndpZHRoK2FXaWR0aD53aWR0aCl7XG5cdFx0XHRcdHN0YXRlLmRvbmU9dHJ1ZVxuXHRcdFx0XHRpZih3aWR0aC1zdGF0ZS53aWR0aD5zdGF0ZS53aWR0aCthV2lkdGgtd2lkdGgpe1xuXHRcdFx0XHRcdHN0YXRlLndpZHRoKz1hV2lkdGhcblx0XHRcdFx0XHRzdGF0ZS50ZXh0Kz1hXG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRzdGF0ZS53aWR0aCs9YVdpZHRoXG5cdFx0XHRcdHN0YXRlLnRleHQrPWFcblx0XHRcdH1cblx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdH0se3dpZHRoOjAsdGV4dDpcIlwiLGRvbmU6ZmFsc2V9KS50ZXh0Lmxlbmd0aFxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVcbiIsImltcG9ydCBNZWFzdXJlIGZyb20gXCIuL2Jhc2VcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuLyoqXG4gKlxuICogd2h5IGl0J3Mgc2xvd2VyIHRoYW4gaHRtbFxuICovXG5sZXQgdGVzdGVyPW51bGxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWR01lYXN1cmUgZXh0ZW5kcyBNZWFzdXJle1xuICAgIGxpbmVIZWlnaHQoKXtcblx0XHRpZighdGVzdGVyKXtcblx0XHRcdGxldCBjb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuXHRcdFx0Y29udGFpbmVyLnN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDAwcHhcIlxuXHRcdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG5cdFx0XHRjb250YWluZXIuaW5uZXJIVE1MPWA8c3ZnIHZpZXdCb3g9XCIwIDAgJHsxMDB9ICR7MTAwfVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48dGV4dD7DhDwvdGV4dD48L3N2Zz5gXG5cdFx0XHR0ZXN0ZXI9Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3RleHQnKVxuICAgICAgICAgICAgdGVzdGVyLnNldFN0eWxlPW1lbW9pemUoc3R5bGU9PnRlc3Rlci5zdHlsZT1zdHlsZSlcblx0XHR9XG5cdFx0dGVzdGVyLnNldFN0eWxlKHRoaXMuY3NzU3R5bGUoKSlcbiAgICAgICAgdGVzdGVyLmZpcnN0Q2hpbGQuZGF0YT1cIsOEXCJcbiAgICAgICAgY29uc3Qge2hlaWdodCx5LCBiYXNlbGluZT0teX09dGVzdGVyLmdldEJCb3goKVxuICAgICAgICByZXR1cm4ge2hlaWdodCxkZXNjZW50OmhlaWdodC1iYXNlbGluZX1cbiAgICB9XG5cbiAgICBjc3NTdHlsZSgpe1xuICAgICAgICByZXR1cm4gYHdoaXRlLXNwYWNlOnByZTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiR7dGhpcy5mb250RmFtaWx5fTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZToke3RoaXMuc2l6ZX1wdDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiR7dGhpcy5zdHlsZS5ib2xkID8gXCI3MDBcIiA6IFwiNDAwXCJ9O1xuICAgICAgICAgICAgZm9udC1zdHlsZToke3RoaXMuc3R5bGUuaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCJ9O1xuICAgICAgICAgICAgYFxuICAgIH1cblxuICAgIHN0cmluZ1dpZHRoKHdvcmQpe1xuXHRcdHRlc3Rlci5zZXRTdHlsZSh0aGlzLmNzc1N0eWxlKCkpXG4gICAgICAgIHRlc3Rlci5maXJzdENoaWxkLmRhdGE9d29yZFxuICAgICAgICByZXR1cm4gdGVzdGVyLmdldEJCb3goKS53aWR0aFxuICAgIH1cbn1cbiIsImltcG9ydCBNZWFzdXJlIGZyb20gXCIuL2Jhc2VcIlxuaW1wb3J0IEZvbnRNYW5hZ2VyIGZyb20gXCIuLi9mb250c1wiXG5pbXBvcnQge2RlZmF1bHQgYXMgaXNOb2RlfSBmcm9tIFwiaXMtbm9kZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvbnRNZWFzdXJlIGV4dGVuZHMgTWVhc3VyZXtcblx0Z2V0Rm9udCgpe1xuXHRcdHJldHVybiBGb250TWFuYWdlci5nZXQodGhpcy5mb250RmFtaWx5LCB0aGlzLnN0eWxlKVxuXHR9XG5cbiAgICBsaW5lSGVpZ2h0KCl7XG5cdFx0dGhpcy5mb250PXRoaXMuZ2V0Rm9udCgpXG4gICAgICAgIHJldHVybiB7XG5cdFx0XHRoZWlnaHQgOiB0aGlzLmZvbnQubGluZUhlaWdodCh0aGlzLnNpemUpKjk2LzcyLFxuXHRcdFx0ZGVzY2VudDogdGhpcy5mb250LmxpbmVEZXNjZW50KHRoaXMuc2l6ZSkqOTYvNzJcblx0XHR9XG4gICAgfVxuXG4gICAgc3RyaW5nV2lkdGgoaW5wdXQpe1xuXHRcdHJldHVybiB0aGlzLmZvbnQuc3RyaW5nV2lkdGgoaW5wdXQsdGhpcy5zaXplKSo5Ni83MlxuICAgIH1cblxuXHRzdGF0aWMgcmVxdWlyZUZvbnRzKHNlcnZpY2UsZm9udHM9W10pe1xuXHRcdGNvbnN0IGRvbmU9KCk9Pntcblx0XHRcdGxldCB1bmxvYWRlZD1mb250cy5maWx0ZXIoYT0+IUZvbnRNYW5hZ2VyLmdldChhKSlcblx0XHRcdGlmKHVubG9hZGVkLmxlbmd0aD4wKVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZm9udFtcIit1bmxvYWRlZC5qb2luKFwiLFwiKStcIl0gY2FuJ3QgYmUgbG9hZGVkIVwiKSlcblx0XHR9XG5cblx0XHRpZihmb250cy5yZWR1Y2UoKGxvYWRlZCxrKT0+bG9hZGVkICYmICEhRm9udE1hbmFnZXIuZ2V0KGspLHRydWUpKXtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9uZSgpKVxuXHRcdH1cblxuXHRcdGlmKGlzTm9kZSAmJiB0eXBlb2Yoc2VydmljZSk9PVwic3RyaW5nXCIgJiYgcmVxdWlyZShcImZzXCIpLmV4aXN0c1N5bmMoc2VydmljZSkpe1xuXHRcdFx0cmV0dXJuIEZvbnRNYW5hZ2VyXG5cdFx0XHRcdC5mcm9tUGF0aChzZXJ2aWNlKVxuXHRcdFx0XHQuZmluYWxseShkb25lKVxuXHRcdH1cblxuXHRcdHN3aXRjaCh0eXBlb2Yoc2VydmljZSkpe1xuXHRcdGNhc2UgXCJzdHJpbmdcIjovL3VybFxuXHRcdFx0cmV0dXJuIEZvbnRNYW5hZ2VyLmZyb21SZW1vdGUoc2VydmljZSlcblx0XHRcdFx0LmZpbmFsbHkoZG9uZSlcblx0XHRjYXNlIFwiZnVuY3Rpb25cIjpcblx0XHRcdHJldHVybiBQcm9taXNlXG5cdFx0XHRcdC5hbGwoZm9udHMubWFwKGE9PkZvbnRNYW5hZ2VyLmxvYWQoc2VydmljZSxhKSkpXG5cdFx0XHRcdC5maW5hbGx5KGRvbmUpXG5cdFx0YnJlYWtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb25lKCkpXG5cdFx0YnJlYWtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7RW1pdHRlcn0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IFBhcnNlciBmcm9tIFwiaHRtbHBhcnNlcjJcIlxuXG5jb25zdCBSRV9UUkFOU0xBVEU9L3RyYW5zbGF0ZVxcKCguKilcXHMrKC4qKVxcKS9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE91dHB1dCBleHRlbmRzIEVtaXR0ZXIuRm9ybWF0LkJhc2V7XG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdC4uLkVtaXR0ZXIuRm9ybWF0LkJhc2UuZGVmYXVsdFByb3BzLFxuXHRcdHJlcHJlc2VudGF0aW9uOiBcInBhZ2luYXRpb25cIlxuXHR9XG5cdG91dHB1dChjb250ZW50KXtcblx0XHRjb250ZW50LnBpcGUobmV3IFBhcnNlci5Xcml0YWJsZVN0cmVhbSh0aGlzLHt4bWxNb2RlOnRydWV9KSlcblx0fVxuXG5cdG9ub3BlbnRhZyhuYW1lLGF0dHJzKXtcblx0XHRzd2l0Y2gobmFtZSl7XG5cdFx0XHRjYXNlICdzdmcnOlxuXHRcdFx0XHR0aGlzLm9ucmVzZXQoKVxuXHRcdFx0XHR0aGlzLm9uRG9jdW1lbnQoYXR0cnMpXG5cdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnZyc6XG5cdFx0XHRcdGlmKGF0dHJzLmNsYXNzPT1cInBhZ2VcIil7XG5cdFx0XHRcdFx0Y29uc3QgaT1wYXJzZUludChhdHRycy5pZC5zdWJzdHJpbmcoNCkpXG5cdFx0XHRcdFx0Y29uc3Qge3Byb3BzOnt3aWR0aCxoZWlnaHR9fT10aGlzLnByb3BzLmRvY3VtZW50LnBhZ2VzW2ldXG5cdFx0XHRcdFx0dGhpcy5vblBhZ2Uoe3dpZHRoLGhlaWdodH0pXG5cdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0dGhpcy5vbkdyb3VwKGF0dHJzKVxuXHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0XHR0aGlzLl9jdXJyZW50VGV4dD1hdHRyc1xuXHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6e1xuXHRcdFx0XHRsZXQgb25Db250ZW50PWBvbiR7bmFtZVswXS50b1VwcGVyQ2FzZSgpfSR7bmFtZS5zdWJzdHIoMSl9YFxuXHRcdFx0XHRpZih0aGlzW29uQ29udGVudF0pe1xuXHRcdFx0XHRcdHRoaXNbb25Db250ZW50XShhdHRycylcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRvbmNsb3NldGFnKG5hbWUpe1xuXHRcdHN3aXRjaChuYW1lKXtcblx0XHRcdGNhc2UgJ2cnOlxuXHRcdFx0XHR0aGlzLm9uR3JvdXBFbmQoKVxuXHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0XHR0aGlzLm9uVGV4dCh0aGlzLl9jdXJyZW50VGV4dClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXHR9XG5cblx0b25hdHRyaWJ1dGUobmFtZSwgdmFsdWUpe1xuXG5cdH1cblxuXHRvbnRleHQodGV4dCl7XG5cdFx0dGhpcy5fY3VycmVudFRleHQudGV4dD10ZXh0XG5cdH1cblxuXHRvbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihuYW1lLCBkYXRhKXtcblxuXHR9XG5cdG9uY29tbWVudChkYXRhKXtcblxuXHR9XG5cdG9uY29tbWVudGVuZCgpe1xuXG5cdH1cblxuXHRvbmNkYXRhc3RhcnQoKXtcblxuXHR9XG5cdG9uY2RhdGFlbmQoKXtcblxuXHR9XG5cblx0b25lcnJvcihlcnJvcil7XG5cblx0fVxuXG5cdG9ucmVzZXQoKXtcblx0XHR0aGlzLl9vZmZzZXRzPVt7eDowLHk6MH1dXG5cdFx0dGhpcy5fY3VycmVudFRleHQ9bnVsbFxuXHRcdHRoaXMuX2FzeW5jSm9icz1bXVxuXHR9XG5cblx0b25lbmQoKXtcblx0XHRQcm9taXNlLmFsbCh0aGlzLl9hc3luY0pvYnMpXG5cdFx0XHQudGhlbigoKT0+e1xuXHRcdFx0XHR0aGlzLm9uRG9jdW1lbnRFbmQoKVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChlPT57XG5cdFx0XHRcdHRoaXMub25Eb2N1bWVudEVuZChlKVxuXHRcdFx0fSlcblx0fVxuXG5cdGFkZEFzeW5jSm9iKGEpe1xuXHRcdHRoaXMuX2FzeW5jSm9icy5wdXNoKGEuY2F0Y2goZT0+e1xuXHRcdFx0Y29uc29sZS5lcnJvcihlKVxuXHRcdFx0cmV0dXJuIGVcblx0XHR9KSlcblx0fVxuXG5cdG9uRG9jdW1lbnQoKXtcblxuXHR9XG5cblx0b25Eb2N1bWVudEVuZCgpe1xuXG5cdH1cblxuXHRvblBhZ2UoYXR0cnMpe1xuXHRcdHRoaXMub25Hcm91cChhdHRycylcblx0fVxuXG5cdG9uSW1hZ2UoKXtcblxuXHR9XG5cblx0b25UZXh0KHt0ZXh0fSl7XG5cblx0fVxuXG5cdG9uR3JvdXAoe3RyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDApXCJ9KXtcblx0XHRsZXQgWyx4PTAseT0wXT10cmFuc2Zvcm0ubWF0Y2goUkVfVFJBTlNMQVRFKVxuXHRcdHRoaXMuX29mZnNldHMucHVzaCh7eDpwYXJzZUludCh4KSx5OnBhcnNlSW50KHkpfSlcblx0fVxuXG5cdG9uR3JvdXBFbmQoKXtcblx0XHR0aGlzLl9vZmZzZXRzLnBvcCgpXG5cdH1cblxuXHRnZXQgb2Zmc2V0KCl7XG5cdFx0cmV0dXJuIHRoaXMuX29mZnNldHMucmVkdWNlKChzdGF0ZSx7eCx5fSk9Pntcblx0XHRcdHN0YXRlLngrPXhcblx0XHRcdHN0YXRlLnkrPXlcblx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdH0se3g6MCx5OjB9KVxuXHR9XG59XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBCYXNlIGZyb20gXCIuL2luZGV4XCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWRyBleHRlbmRzIEJhc2V7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cIlNWR1wiXG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdC4uLkJhc2UucHJvcFR5cGVzLFxuXHRcdHBhZ2VHYXA6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0cGdDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJzdmdcIixcblx0XHRuYW1lOlwiU1ZHIERvY3VtZW50XCIsXG5cdFx0ZXh0Olwic3ZnXCIsXG5cdFx0cmVwcmVzZW50YXRpb246IFwicGFnaW5hdGlvblwiLFxuXG5cdFx0cGFnZUdhcDoyNCxcblx0XHRwZ0NvbG9yOlwid2hpdGVcIlxuXHR9XG5cblx0b25yZXNldCgpe1xuXHRcdHN1cGVyLm9ucmVzZXQoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMueT0wXG5cdFx0dGhpcy5kZXB0aD0tMVxuXHRcdHRoaXMuZGVmcz1uZXcgU2V0KClcblx0fVxuXG5cdHNwcmVhZChhdHRycyl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGF0dHJzKS5tYXAoaz0+YCR7a309XCIke2F0dHJzW2tdfVwiYCkuam9pbihcIiBcIilcblx0fVxuXG5cdG9uRG9jdW1lbnQoe3ZpZXdCb3h9KXtcblx0XHRjb25zdCB7cGFnZUdhcH09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IFssLHdpZHRoLGhlaWdodF09dmlld0JveC50cmltKCkuc3BsaXQoL1xccysvZylcblx0XHR0aGlzLndpZHRoPXBhZ2VHYXArcGFyc2VJbnQod2lkdGgpK3BhZ2VHYXBcblx0XHR0aGlzLmhlaWdodD1wYXJzZUludChoZWlnaHQpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxzdmdcblx0c3R5bGU9XCJiYWNrZ3JvdW5kOmxpZ2h0Z3JheVwiXG5cdHdpZHRoPVwiJHt0aGlzLndpZHRofVwiIGhlaWdodD1cIiR7dGhpcy5oZWlnaHR9XCJcblx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuXHRcdGApXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke3BhZ2VHYXB9LDApXCI+YClcblx0fVxuXG5cdG9uRG9jdW1lbnRFbmQoZSl7XG5cdFx0dGhpcy5zdHJlYW0uZW5kKCc8L2c+PC9zdmc+Jylcblx0fVxuXG5cdG9uUGFnZSh7d2lkdGgsaGVpZ2h0fSl7XG5cdFx0d2lkdGg9cGFyc2VJbnQod2lkdGgpXG5cdFx0aGVpZ2h0PXBhcnNlSW50KGhlaWdodClcblx0XHR0aGlzLnkrPXRoaXMucHJvcHMucGFnZUdhcFxuXHRcdGNvbnN0IHsgcGFnZUdhcCwgcGdDb2xvcn09dGhpcy5wcm9wc1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJHsodGhpcy53aWR0aC13aWR0aCkvMn0gJHt0aGlzLnl9KVwiPmApXG5cdFx0aWYocGdDb2xvcilcblx0XHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8cmVjdCB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiJHtoZWlnaHR9XCIgZmlsbD1cIiR7cGdDb2xvcn1cIi8+YClcblxuXHRcdHRoaXMueSs9aGVpZ2h0XG5cdH1cblxuXHRvbkltYWdlKGF0dHJzKXtcblx0XHRsZXQgaHJlZj1hdHRyc1tcInhsaW5rOmhyZWZcIl1cblx0XHRkZWxldGUgYXR0cnNbXCJ4bGluazpocmVmXCJdXG5cdFx0bGV0IGlkPWJ0b2EoaHJlZilcblxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8dXNlIHhsaW5rOmhyZWY9XCIjJHtpZH1cIi8+YClcblxuXHRcdGlmKCF0aGlzLmRlZnMuaGFzKGhyZWYpKXtcblx0XHRcdHRoaXMuZGVmcy5hZGQoaHJlZilcblx0XHRcdGxldCBqb2I9ZmV0Y2goaHJlZilcblx0XHRcdFx0LnRoZW4ocmVzPT57XG5cdFx0XHRcdFx0aWYoIXJlcy5vayl7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IocmVzLnN0YXR1c1RleHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXMuYXJyYXlCdWZmZXIoKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbihidWZmZXI9Pntcblx0XHRcdFx0XHRjb25zdCBzdHJlYW09dGhpcy5zdHJlYW1cblxuXHRcdFx0XHRcdGNvbnN0IHRvU3RyaW5nPXZpZXc9PnZpZXcucmVkdWNlKChiLGEsaSk9Pntcblx0XHRcdFx0XHRcdFx0YltpXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpXG5cdFx0XHRcdFx0XHRcdHJldHVybiBiXG5cdFx0XHRcdFx0XHR9LG5ldyBBcnJheSh2aWV3LmJ5dGVMZW5ndGgpKS5qb2luKFwiXCIpXG5cblx0XHRcdFx0XHRzdHJlYW0ud3JpdGUoYDxkZWZzPmApXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGA8aW1hZ2UgaWQ9XCIke2lkfVwiICR7dGhpcy5zcHJlYWQoYXR0cnMpfSBgKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZSgneGxpbms6aHJlZj1cImRhdGE6aW1hZ2UvKjtiYXNlNjQsJylcblx0XHRcdFx0XHRzdHJlYW0ud3JpdGUoYnRvYSh0b1N0cmluZyhuZXcgVWludDhBcnJheShidWZmZXIpKSkpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKCdcIicpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKCcvPicpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGA8L2RlZnM+YClcblx0XHRcdFx0fSlcblxuXHRcdFx0dGhpcy5hZGRBc3luY0pvYihqb2IpXG5cdFx0fVxuXHR9XG5cblx0b25UZXh0KHt0ZXh0LCAuLi5hdHRyc30pe1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8dGV4dCAke3RoaXMuc3ByZWFkKGF0dHJzKX0+JHt0ZXh0fTwvdGV4dD5gKVxuXHR9XG5cblx0b25Hcm91cChhdHRycyl7XG5cdFx0c3VwZXIub25Hcm91cCguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxnICR7dGhpcy5zcHJlYWQoYXR0cnMpfT5gKVxuXHR9XG5cblx0b25Hcm91cEVuZCgpe1xuXHRcdHN1cGVyLm9uR3JvdXBFbmQoKVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKFwiPC9nPlwiKVxuXHR9XG5cblx0b25vcGVudGFnKCl7XG5cdFx0c3VwZXIub25vcGVudGFnKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0cmVhbS53cml0ZShcIlxcclxcblwiKVxuXHRcdHRoaXMuZGVwdGgrK1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKG5ldyBBcnJheSh0aGlzLmRlcHRoKS5maWxsKFwiXFx0XCIpLmpvaW4oXCJcIikpXG5cdH1cblxuXHRvbmNsb3NldGFnKCl7XG5cdFx0c3VwZXIub25jbG9zZXRhZyguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoXCJcXHJcXG5cIilcblx0XHR0aGlzLnN0cmVhbS53cml0ZShuZXcgQXJyYXkodGhpcy5kZXB0aCkuZmlsbChcIlxcdFwiKS5qb2luKFwiXCIpKVxuXHRcdHRoaXMuZGVwdGgtLVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5pbXBvcnQgaXNOb2RlIGZyb20gXCJpcy1ub2RlXCJcbmltcG9ydCB7UmVwcmVzZW50YXRpb259IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IFZpZXdlcnMgZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBFZGl0b3JzIGZyb20gXCIuL2RvbS9lZGl0XCJcbmltcG9ydCB7ZWRpdGFibGV9IGZyb20gXCIuL2NvbXBvc2FibGVcIlxuXG5pbXBvcnQgRm9udE1hbmFnZXIgZnJvbSBcIi4vZm9udHNcIlxuaW1wb3J0ICogYXMgQ29tcG9zZWQgZnJvbSBcIi4vY29tcG9zZWRcIlxuaW1wb3J0ICogYXMgTWVhc3VyZSBmcm9tIFwiLi9tZWFzdXJlXCJcbmltcG9ydCBPdXRwdXQgZnJvbSBcIi4vb3V0cHV0XCJcbmltcG9ydCBTVkcgZnJvbSBcIi4vb3V0cHV0L3N2Z1wiXG5cbmltcG9ydCBSZXNpemFibGUgZnJvbSBcIi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Jlc2l6YWJsZVwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvbW92YWJsZVwiXG5pbXBvcnQgUm90YXRhYmxlIGZyb20gXCIuL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yb3RhdGFibGVcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvdG9wXCJcblxuXG5pbXBvcnQgKiBhcyBjb21wb3NhYmxlIGZyb20gXCIuL2NvbXBvc2FibGVcIlxuXG5jb25zdCB7Rm9udE1lYXN1cmUsIFNWR01lYXN1cmV9PU1lYXN1cmVcblxuY29uc3QgY3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdD1kZWZhdWx0Rm9udD0+e1xuXHRyZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEZvbnRNZWFzdXJle1xuXHRcdGdldEZvbnQoKXtcblx0XHRcdHJldHVybiBzdXBlci5nZXRGb250KCl8fEZvbnRNYW5hZ2VyLmdldChkZWZhdWx0Rm9udClcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIFJlcHJlc2VudGF0aW9uLkJhc2V7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cInBhZ2luYXRpb25cIlxuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0bWVhc3VyZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0Zm9udHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsUHJvcFR5cGVzLmZ1bmNdKSxcblx0XHRkZWZhdWx0Rm9udDogUHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJwYWdpbmF0aW9uXCIsXG5cdFx0ZGVmYXVsdEZvbnQ6XCJBcmlhbFwiXG5cdH1cblxuXHRzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuXHRcdE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRkb2M6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cblxuXHRzdGF0aWMgT3V0cHV0PU91dHB1dFxuXG5cdHN0YXRlPXtmb250c0xvYWRlZDpmYWxzZX1cblx0Y29tcG9uZW50RGlkTW91bnQoKXtcblx0XHRjb25zdCB7ZGVmYXVsdEZvbnQsbWVhc3VyZSxmb250c309dGhpcy5wcm9wc1xuXHRcdHRoaXMuTWVhc3VyZT1tZWFzdXJlfHwoZm9udHN8fGlzTm9kZSA/IEZvbnRNZWFzdXJlIDogU1ZHTWVhc3VyZSlcblx0XHRzd2l0Y2godGhpcy5NZWFzdXJlKXtcblx0XHRcdGNhc2UgRm9udE1lYXN1cmU6e1xuXHRcdFx0XHR0aGlzLk1lYXN1cmU9Y3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdChkZWZhdWx0Rm9udClcblx0XHRcdFx0Y29uc3QgcmVxdWlyZWRGb250cz10aGlzLmNvbnRleHQuZG9jLmdldEZvbnRMaXN0KClcblx0XHRcdFx0Y29uc3QgZm9udHNMb2FkZWQ9ZXJyb3I9Pntcblx0XHRcdFx0XHRsZXQgbG9hZGVkPUZvbnRNYW5hZ2VyLm5hbWVzXG5cdFx0XHRcdFx0aWYobG9hZGVkICYmIGxvYWRlZC5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0aWYoIUZvbnRNYW5hZ2VyLmdldChkZWZhdWx0Rm9udCkpe1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYGRlZmF1bHQgZm9udFske2RlZmF1bHRGb250fV0gY2FuJ3QgYmUgbG9hZGVkLCBzZXQgJHtsb2FkZWRbMF19IGFzIGRlZmF1bHRgKVxuXHRcdFx0XHRcdFx0XHR0aGlzLk1lYXN1cmU9Y3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdChsb2FkZWRbMF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZXJyb3Ipe1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe2ZvbnRzTG9hZGVkOnRydWV9KVxuXHRcdFx0XHR9XG5cdFx0XHRcdEZvbnRNZWFzdXJlXG5cdFx0XHRcdFx0LnJlcXVpcmVGb250cyhmb250cyxbZGVmYXVsdEZvbnQsLi4ucmVxdWlyZWRGb250c10pXG5cdFx0XHRcdFx0LnRoZW4oZm9udHNMb2FkZWQsIGZvbnRzTG9hZGVkKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDp7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe2ZvbnRzTG9hZGVkOnRydWV9KVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldENoaWxkQ29udGV4dCgpe1xuXHRcdHJldHVybiB7XG5cdFx0XHRNZWFzdXJlOiB0aGlzLk1lYXN1cmUsXG5cdFx0fVxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2ZvbnRzTG9hZGVkfT10aGlzLnN0YXRlXG5cdFx0aWYoIWZvbnRzTG9hZGVkKVxuXHRcdFx0cmV0dXJuIDxkaXY+bG9hZGluZyBmb250cy4uLjwvZGl2PlxuXG5cdFx0Y29uc3Qge2RlZmF1bHRGb250LG1lYXN1cmUsZm9udHMsIHR5cGUsIFZpZXdlclR5cGVzPVZpZXdlcnMsIEVkaXRvclR5cGVzPUVkaXRvcnMsIC4uLnByb3BzfT10aGlzLnByb3BzXG5cblx0XHRyZXR1cm4gKDxSZXByZXNlbnRhdGlvbiB7Li4ue1ZpZXdlclR5cGVzLEVkaXRvclR5cGVzLC4uLnByb3BzLHR5cGU6dW5kZWZpbmVkfSB9Lz4pXG5cdH1cbn1cblxuXG4oZnVuY3Rpb24oQSl7XG5cdGNvbnN0IGluc3RhbGw9QS5pbnN0YWxsLmJpbmQoQSlcblx0QS5pbnN0YWxsPWZ1bmN0aW9uKCl7XG5cdFx0aW5zdGFsbCguLi5hcmd1bWVudHMpXG5cdFx0U1ZHLmluc3RhbGwoKVxuXHR9XG5cblx0Y29uc3QgdW5pbnN0YWxsPUEudW5pbnN0YWxsLmJpbmQoQSlcblx0QS51bmluc3RhbGw9ZnVuY3Rpb24oKXtcblx0XHR1bmluc3RhbGwoLi4uYXJndW1lbnRzKVxuXHRcdFNWRy51bmluc3RhbGwoKVxuXHR9XG59KShQYWdpbmF0aW9uKTtcblxuUGFnaW5hdGlvbi5pbnN0YWxsKClcblxuZXhwb3J0IHtWaWV3ZXJzLCBFZGl0b3JzLCBGb250TWFuYWdlciwgTWVhc3VyZSwgQ29tcG9zZWQsIGNvbXBvc2FibGUsIGVkaXRhYmxlLCBSZXNpemFibGUsIE1vdmFibGUsIFJvdGF0YWJsZSxUb3B9XG4iXSwic291cmNlUm9vdCI6IiJ9
\No newline at end of file