UNPKG

802 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=32)}([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("@babel/runtime/helpers/toArray")},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 ft})),n.d(r,"Group",(function(){return lt})),n.d(r,"Text",(function(){return st})),n.d(r,"Image",(function(){return mt})),n.d(r,"Shape",(function(){return gt}));var i={};n.r(i),n.d(i,"default",(function(){return Ht})),n.d(i,"enablify",(function(){return Vt})),n.d(i,"editable",(function(){return Qt})),n.d(i,"Layout",(function(){return Gt})),n.d(i,"HasChild",(function(){return R})),n.d(i,"HasParentAndChild",(function(){return N})),n.d(i,"NoChild",(function(){return z})),n.d(i,"ComposedAllTrigger",(function(){return I})),n.d(i,"Recomposable",(function(){return W})),n.d(i,"Locatable",(function(){return G})),n.d(i,"Stoppable",(function(){return H})),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 Mr}));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},F=n(13),D=n.n(F);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",D()((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},z=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))},W=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",D()((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 X(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 Y(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?X(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):X(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var H=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",Y({},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);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}p()(st,"Dynamic",(function(t){var e=t.children,n=s()(t,["children"]);return P.a.createElement(st,it()({},n,{children:e()}))}));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.active,n=void 0===e||e,r=t.style,i=t.children,o=t.areas,a=void 0===o?[]:o,s=function(t){return t.stopPropagation()},c="onClick,onMouseDown,onMouseMove,onMouseUp,onContextMenu".split(",").reduce((function(t,e){return t[e]=s,t}),{});return n?P.a.createElement(lt,null,i):P.a.createElement(lt,{style:r},i,a.map((function(t){return P.a.cloneElement(t,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}({},c,{onDoubleClick:function(t){t.stopPropagation();var e=new MouseEvent("click",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY});t.target.viewportElement.dispatchEvent(e)}}))})))}}]),e}(C.Component);p()(ut,"displayName","layer"),p()(ut,"propTypes",{z:j.a.number,active:j.a.bool}),p()(ut,"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,e=t.active,n=t.activeStyle,r=t.inactiveStyle,i=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})),o=i.filter((function(t){return t.props.z!=e})).map((function(t){return P.a.cloneElement(t,{active:!1,style:r})})),a=i.find((function(t){return t.props.z==e}));return P.a.createElement(C.Fragment,null,[].concat(o,[a&&n?P.a.cloneElement(a,{style:n}):a]).filter((function(t){return!!t})))}}]),e}(C.Component),p()(K,"contextTypes",{editable:j.a.any}),J)));var lt=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 pt(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?pt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):pt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(lt,"propTypes",{width:j.a.number,height:j.a.number,x:j.a.number,y:j.a.number,z:j.a.number}),p()(lt,"contextTypes",{debug:j.a.bool}),p()(lt,"Layer",ut),p()(lt,"Layers",ut.Container);var ft=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.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:"getComposed",value: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})}},{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:ht({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(lt,{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(lt,{y:t.y,x:(e-c)/2},"file"==a?n:P.a.createElement(dt,{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()(ft,"displayName","composed-document-default-canvas"),p()(ft,"contextTypes",{media:j.a.string}),p()(ft,"propTypes",{pages:j.a.arrayOf(j.a.object),pageGap:j.a.number,scale:j.a.number,document:j.a.object}),p()(ft,"defaultProps",{pageGap:24,scale:1});var dt=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(yt,ht({width:i,height:o,margin:a,fill:"white",precision:s},c)),e?r:null))}}]),e}(C.Component),yt=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")}))},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 P.a.createElement("image",this.props)}}]),e}(C.PureComponent),gt=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 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 bt(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}var wt=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(bt({},this.props,{},e,{edges:bt({},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 xt(t,e){this.set(t,e)}function Ot(t,e,n,r){this.left=t,this.top=e,this.right=t+n,this.bottom=e+r}xt.prototype={clone:function(){return new xt(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];xt.prototype[r]=t(xt.prototype[r])}}(),Ot.fromRect=function(t){return new Ot(t.left,t.top,t.right-t.left,t.bottom-t.top)},Ot.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 Ot(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 xt(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 Ot(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 Ot(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 kt=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(lt,{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 wt.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 Ot(t.x,t.y,t.width,t.height).intersects(new Ot(e.x,e.y,e.width,e.height))}}]),e}(N(T.dom.Container));p()(kt,"IMMEDIATE_STOP",Number.MAX_SAFE_INTEGER),p()(kt,"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 Ct=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,d=i(c.clone({edges:{paragraph:{top:(f=t.props.pagination.id,n.__lineXY(n.lines.find((function(t){return t.props.pagination.id==f}))).y)},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))}}})),y=d.props,m=y.wrap,g=y.geometry,v=y["data-content"];if(!m||!this.__isDirtyIn(g))return x()(b()(e.prototype),"appendComposed",this).call(this,d),1;var w=this.recompose((function(r,i){return n.anchors=i,x()(b()(e.prototype),"appendComposed",n).call(n,d),r.push(t),v}));return u(v,this.lines[this.lines.length-1])?(this.lines.pop(),1):(w(),!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 Ot(t.x,t.y,t.width,t.height).intersects(new Ot(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})})))}},{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)}}}]),e}(kt);function Pt(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 Et=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=jt(t,'[data-type="paragraph"]');if(!e)return 0;var n=this.lines,r=n.findLastIndex((function(t){return jt(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=jt(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=jt(t);return jt(this.lastLine)==e&&jt(this.firstLine)!=e}},{key:"shouldKeepWithNext",value:function(t){return(this.lastLine.props.pagination||{}).keepWithNext&&0==this.orphanCount(t)&&jt(this.firstLine)!==jt(this.lastLine)}}]),e}(Ct);p()(Et,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Pt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Pt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Ct.contextTypes,{prevLayout:j.a.func})),p()(Et,"Fixed",Et);var jt=function(t){return new ReactQuery(t).findFirst('[data-type="paragraph"]').attr("data-content")};function St(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 At(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?St(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):St(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Tt=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=At({},this.cols[this.columns.length],{lines:It.create.apply(It,[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=wt.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(lt,{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}(Et),It=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}(),Ft=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}(Tt);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 Mt(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 Lt=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(Mt({segments:r.map((function(t){return new Rt(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(Mt({},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&&!_t(t)?P.a.cloneElement(t,{y:-t.props.height}):t})),o.splice.apply(o,[o.length,0].concat(i!=u?[P.a.createElement(lt,{x:i-e,width:u-i})].concat(a):a)),{X:u+p,flat:o}}),{flat:[],X:e}).flat;return P.a.createElement(lt,{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()(Lt,"propTypes",{left:j.a.number,segments:j.a.arrayOf(Rt)});var Rt=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(lt,{x:n,width:r},this.items.map((function(t){var e=P.a.cloneElement(t,{x:i});return i+=t.props.width||0,!_t(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()(Rt,"propTypes",{x:j.a.number,width:j.a.number});var _t=function(t){return void 0!==t.props.descent},Nt=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",D()((function(t){return P.a.Children.toArray(t).reduce((function(t,e,n){var r=zt(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 zt(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=zt(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(lt,{x:n},this.getMerged(e))}}]),e}(C.Component);function zt(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)&&zt(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(lt,{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:!Bt(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 Nt({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 Nt({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 Nt({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 Nt({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 Bt(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 Bt(t){return new T.ReactQuery(t).findFirst(".whitespace").length>0}function Ut(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 qt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ut(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ut(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Wt,"displayName","story");var Gt={Block:Ft,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=Lt.create(qt({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(lt,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(qt({},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:wt,IMMEDIATE_STOP:Ft.IMMEDIATE_STOP};function Xt(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 Yt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Xt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Xt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function Ht(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=W(t,o)),r&&!t.already("stoppable")&&(t=H(t,r)),i&&!t.already("continuable")&&(t=Z(t,Z)),t}function Qt(t){return Ht(t,Yt({locatable:!0,recomposable:!0},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}))}var Vt=function(t){return function(e,n){return Object.keys(e).reduce((function(n,r){return n[r]||(n[r]=t(e[r])),n}),Yt({},n))}};[R,N,z,W,G,H,Z,Qt].forEach((function(t){return t.enable=Vt(t)}));var Kt=n(25),Jt=n.n(Kt);function Zt(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 $t(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Zt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Zt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var te=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"__getSpace",D()((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?Gt.ConstraintSpace.create(i).clone({edges:E}):Gt.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),className:"positionlines"});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(lt,{x:u,y:p},e)),P.a.createElement(lt,{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.createComposed2Parent(),n=new T.ReactQuery(e).findFirstAndParents(".positionlines"),r=n.first,i=Jt()(n.parents),o=(i[0],i.slice(1)),a=[].concat(o,[r.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});return{x:a.x,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)}),a.y)}}var s=this.columns.find((function(e){return e.lines.includes(t)}))||this.currentColumn,c=s.y,u=void 0===c?0:c,l=s.x,p=void 0===l?0:l,h=s.lines;return{x:p,y:h.slice(0,h.indexOf(t)).reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),u)}}},{key:"columnIndexOf",value:function(t){return this.cols&&1!=this.cols.length?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($t({},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}(Gt.Block);p()(te,"displayName",N(T.dom.Frame).displayName);var ee=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",D()((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}(Qt(te,{stoppable:!0,continuable:!0}));function ne(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 re=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()(re,"displayName","template.use"),p()(re,"contextTypes",{getComposedTemplate:j.a.func.isRequired}),p()(re,"childContextTypes",{editable:j.a.any});var ie=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}(ee);p()(ie,"Use",re),p()(ie,"defaultProps",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ne(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ne(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},ee.defaultProps,{isTop:!0}));var oe=n(21),ae=n.n(oe),se=n(26);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;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?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}({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;ae()(this.props);var s=function(t){return t.stopPropagation()},c=P.a.createElement(lt,{innerRef:function(e){return t.el=e},x:r,y:o,onMouseDown:s,onMouseMove:s,onMouseUp:s},this.props.children);return a?Object(se.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),le=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(ue,{x:0,y:0},P.a.createElement("rect",it()({width:"100%",height:"100%",fill:"transparent"},n))))}}]),e}(C.Component);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}var he=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(le,{cursor:"default",onMouseUp:function(e){return t.onEndMove(e)},onMouseMove:function(e){return t.moving(e)}},!s&&P.a.createElement(ye,{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?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}({},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()(he,"propTypes",{around:j.a.func,onMove:j.a.func,isAnchor:j.a.bool}),p()(he,"contextTypes",{positioning:j.a.object});var fe,de,ye=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(ue,null,P.a.createElement(lt,{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"})))},me=Object(T.whenSelectionChange)((function(t){var e=t.selection;return e?{selection:e,rects:e.getRangeRects()}:{}}),void 0,void 0,{withRef:!0})((de=fe=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;ae()(this.props);var i=this.context.editable,o=P.a.createElement(ge,{rects:n,innerRef:this.area});return r?P.a.cloneElement(o,{onMouseMove:this.onShrink}):i?P.a.createElement(he,{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()(fe,"contextTypes",{editable:j.a.any}),de)),ge=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)}}))},ve=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)),be=n(15);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}var xe=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",D()((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",D()((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",D()((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",D()((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?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}({},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),Oe=Object(be.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 xe(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)),ke=n(17),Ce=n.n(ke),Pe=n(22),Ee=n.n(Pe),je=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 Se(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 Ae(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Se(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Se(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(je,"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 Te,Ie,Fe=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=Ae({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,h=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,f=this.getFrameOffsetGrandFrame(s,h),d=h.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(Ae({},h.lineXY(t),{width:r,height:o}),f,c)}));if(!d){var y=0==h.lines.length;if(!y&&o<h.lineXY(h.lines[0]).y+f.y+c.y)d=h.lines[0];else{if(y||(p=h.lines[h.lines.length-1],!(o>h.lineXY(p).y+p.props.height+f.y+c.y)))return{id:h.props.id,at:1};d=h.lines[h.lines.length-1]}}var m=h.lineXY(d),g=d.props,v=g.pagination,b=v.id,w=v.i,x=g.paragraph,O=void 0===x?this.getComposer(b):x;return this.aroundInInline(O.computed.lastComposed[w-1],i-c.x-f.x-m.x)}},{key:"getRangeRects",value:function(t,e){var n=[],r=this.getOrderedPosition(t,e),i=r.p0,o=r.p1,a=Ee.a.mark((function t(e,n){var r,a,s,c=this;return Ee.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 Ae({},l,{x:l.x+d,width:m-d,height:s})}return Ae({},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"===Ce()(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"===Ce()(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}(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=void 0===a?Number.MAX_SAFE_INTEGER:a,c=o.height,u=void 0===c?Number.MAX_SAFE_INTEGER:c,l=o.I,p=void 0===l?0:l;return n=r.pageXY(p),t>=n.x&&t<=n.x+s&&e>=n.y&&e<=n.y+u})),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}),Ae({},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}),Ae({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}(je)),De=Object(be.compose)(Object(be.setDisplayName)("ComposeMoreTrigger"),Object(T.connect)((function(t){return{selection:Object(T.getSelection)(t)}})))((Ie=Te=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(lt,{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()(Te,"propTypes",{selection:j.a.object,getComposedY:j.a.func,isSelectionComposed:j.a.func,compose4Scroll:j.a.func,compose4Selection:j.a.func}),p()(Te,"contextTypes",{debug:j.a.bool}),Ie)),Me=function(){return P.a.createElement(C.Fragment,null,P.a.createElement("defs",null,P.a.createElement(Le,null),P.a.createElement(Re,null)))},Le=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"})},Re=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 _e(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 Ne(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_e(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_e(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var ze=function(t){function e(){var t;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));var n=t.constructor.Positioning,r=n.makeSafe(n);return t.positioning=new r(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 Ne({},ft.getDerivedStateFromProps.apply(ft,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(Me,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(ve,{scrollNodeIntoView:function(e){return t.scrollNodeIntoView(e)}})),P.a.createElement(T.Selection,null,P.a.createElement(me,{ref:"selecting"})),P.a.createElement(Oe,{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 Ne({},s()(t,["cursorAt"])[e])}}]),e}(C.Component);p()(ze,"displayName","responsible-composed-document-default-canvas"),p()(ze,"Canvas",ft),p()(ze,"ComposeMoreTrigger",De),p()(ze,"Positioning",Fe),p()(ze,"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()(ze,"defaultProps",{pageGap:12,screenBuffer:1,scale:1}),p()(ze,"contextTypes",{onContextMenu:j.a.func,activeDocStore:j.a.any}),p()(ze,"childContextTypes",{positioning:j.a.object});var We=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}(ze);function Be(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 Ue(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Be(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Be(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var qe=G.Locatorize(R(T.dom.Document)),Ge=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getMeasure",D()((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(ft,{document:this})}},{key:"getChildContext",value:function(){var t=this;return Ue({},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){ie.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}(qe);p()(Ge,"propTypes",Ue({},qe.prototype,{canvas:j.a.node})),p()(Ge,"defaultProps",Ue({},qe.defaultProps,{canvas:P.a.createElement(ft,null)})),p()(Ge,"contextTypes",Ue({},qe.contextTypes,{Measure:j.a.func})),p()(Ge,"childContextTypes",Ue({},qe.childContextTypes,{Measure:j.a.func,getComposedTemplate:j.a.func,prevLayout:j.a.func,editable:j.a.any}));var Xe,Ye,He=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state=Ue({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 Ue({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(Ue({},t.props,{document:this}));return n.state=e.getDerivedStateFromProps(n.props,n.state),n}}]),e}(Qt(Ge,{continuable:!0}));function Qe(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 Ve(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Qe(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Qe(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(He,"defaultProps",Ue({},Ge.defaultProps,{canvas:P.a.createElement(We,null)})),p()(He,"contextTypes",Ue({},Ge.contextTypes,{activeDocStore:j.a.any}));var Ke=N(T.dom.Section),Je=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 Ve({},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],Ve({},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,Ve({},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:ee.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}(Ke);p()(Je,"defaultProps",Ve({},Ke.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,[Ve({},this.props.layout,{},t)].concat(n))}})),p()(Je,"childContextTypes",Ve({},Ke.childContextTypes,{prevLayout:j.a.func})),p()(Je,"Layout",(Ye=Xe=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}(ee),p()(Xe,"displayName","frame-section"),Ye));var Ze=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}(Qt(Je,{stoppable:!0})),$e=n(23),tn=n.n($e);function en(t){for(var e,n=new tn.a(t),r=0,i=[];e=n.nextBreak();)i.push(t.slice(r,e.position)),e.required,r=e.position;return i}function nn(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 rn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?nn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):nn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var on=N(T.dom.Paragraph),an=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getDefaultMeasure",D()((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=en("".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(lt,{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==Gt.IMMEDIATE_STOP)return Gt.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)==Gt.IMMEDIATE_STOP)return Gt.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==ee.IMMEDIATE_STOP)return ee.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(lt,{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(lt,{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}(on);p()(an,"contextTypes",rn({},on.contextTypes,{Measure:j.a.func,numbering:j.a.func})),p()(an,"propTypes",rn({},on.propTypes,{defaultStyle:j.a.object.isRequired})),p()(an,"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}(Gt.Inline));var sn=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}(Qt(an,{stoppable:!0}));function cn(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 un(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?cn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):cn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var ln=z(T.dom.Text),pn=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",D()((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 en(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(un({},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 un({},this.measure.defaultStyle,{color:e,highlight:n,border:r,underline:i,strike:o})}}]),e}(ln);p()(pn,"contextTypes",un({},ln.contextTypes,{Measure:j.a.func}));var hn=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(be.shallowEqual)(t,this.props)}},{key:"render",value:function(){return 0==this.text.length?(this.appendComposed(un({},this.defaultStyle,{width:0,minWidth:0,"data-endat":0,children:""})),this.onAllChildrenComposed(),null):x()(b()(e.prototype),"render",this).call(this)}}]),e}(Qt(pn)),fn=n(27),dn=n.n(fn),yn=n(28),mn=n.n(yn),gn=n(29),vn=n.n(gn),bn=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(),D()((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 D()((function(e,n){return vn()(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 mn()(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(wn(f.x,n,r)&&wn(f.y,a,s)&&wn(f.x,i,o)&&wn(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}(dn.a),wn=function(t,e,n){return t>=e&&t<=n||t>=n&&t<=e};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 On(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 kn=j.a.oneOf("ew,ns,nwse,nesw".split(",").reduce((function(t,e){return t.splice(0,0,e,"-"+e),t}),[])),Cn=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(le,{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(jn,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(jn,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()(Cn,"propTypes",{direction:kn,onResize:j.a.func.isRequired,spots:j.a.arrayOf(j.a.shape({x:j.a.number.isRequired,y:j.a.number.isRequired,direction:kn,width:j.a.number,height:j.a.number}))}),p()(Cn,"ColResizer",(function(t){return P.a.createElement(Sn,it()({},t,{direction:"ew",cursor:"col-resize"}))})),p()(Cn,"RowResizer",(function(t){return P.a.createElement(Sn,it()({},t,{direction:"-ns",cursor:"row-resize"}))}));var Pn,En,jn=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",On({},p,{width:n,height:i,x:o-n/2,y:a-i/2,style:On({fill:"white",stroke:"lightgray",strokeWidth:1,cursor:"".concat(c.replace("-",""),"-resize")},l)}))},Sn=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(Cn,{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(ue,null,P.a.createElement("line",it()({},On({},l,(t={},p()(t,c+"1","-100%"),p()(t,c+"2","100%"),t)),{stroke:"lightgray",strokeWidth:1,strokeDasharray:"5,5"}))))}}]),e}(C.Component),An=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(le,{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 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}p()(An,"propTypes",{x:j.a.number.isRequired,r:j.a.number,degree:j.a.number});var Fn=Object(be.compose)(Object(T.whenSelectionChange)(),Object(be.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)})))((En=Pn=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(lt,In({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,F=this.state,D=F.type,M=F.isAnchor,L=F.isEditableCursor,R=P.a.createElement(C.Fragment,null,P.a.createElement(lt,{"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(lt,{"data-nocontent":!0},P.a.createElement(he,{isAnchor:M,onMove:function(t){return m(T.ACTION.Selection.MOVE(In({},t,{id:d,type:D})))}},P.a.createElement("path",{d:w,fill:"white",fillOpacity:.01,cursor:"move"}))),S&&h):h,P.a.createElement(lt,{"data-nocontent":!0},E&&P.a.createElement(An,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:D,rotate:s<0?s+360:s}))}})),O&&P.a.createElement(Cn,{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:D,size:r}))}})));return P.a.createElement(lt,L?{}:In({scale:i,rotate:r},o),p.replace(h,R).get(0))}}]),e}(C.Component),p()(Pn,"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()(Pn,"contextTypes",{editable:j.a.any}),En));function Dn(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 Mn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Dn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Dn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Ln=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(lt,{width:w,height:x,geometry:C},P.a.createElement(Fn,Mn({width:w,height:x,scale:g,rotate:O,translate:k,degree:m,id:v},e),P.a.createElement(lt,this.outlineBox,P.a.createElement(lt,{x:this.strokeWidth/2,y:this.strokeWidth/2},P.a.createElement(lt,{"data-nocontent":!0},P.a.createElement("path",it()({d:this.getPath().toString(),strokeWidth:this.strokeWidth,stroke:f.solidFill},y)),p&&P.a.createElement("image",Mn({},this.contentBox,{x:o,y:s,xlinkHref:p,preserveAspectRatio:"none"}))),P.a.createElement(lt,{x:this.strokeWidth/2+o,y:this.strokeWidth/2+s,className:"content"},t)))))}},{key:"getPath",value:function(){return D()((function(t){return new bn(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),Rn=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 bn("M0 0h".concat(e,"v").concat(n,"h").concat(-e,"z"))}}]),e}(Ln),_n=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 bn("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}(Ln),Nn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return k()(e,t),e}(_n);function zn(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 Wn=Qt(N(T.dom.Shape)),Bn=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",D()((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",D()((function(t){var e=t.availableSpace(),r=e.width,i=e.height;return Gt.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",className:"positionlines"})].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}(ee);function Un(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 qn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Un(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Un(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Bn,"displayName",Wn.displayName),p()(Bn,"propTypes",Wn.propTypes),p()(Bn,"defaultProps",Wn.defaultProps),p()(Bn,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?zn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):zn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},ee.contextTypes,{editable:j.a.any})),p()(Bn,"custom",Ln),p()(Bn,"rect",Rn),p()(Bn,"ellipse",_n),p()(Bn,"circle",Nn);var Gn=Qt(z(T.dom.Image)),Xn=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 Bn(qn({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(mt,{width:n,height:r,xlinkHref:i,preserveAspectRatio:"none"});return t.createComposedShape(o,{focusableContent:!1,composedUUID:this.computed.composedUUID})}}]),e}(Gn);p()(Xn,"contextTypes",qn({},Gn.contextTypes,{editable:j.a.any}));var Yn,Hn,Qn=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(lt,{width:n,height:t.props.height},P.a.cloneElement(t,{x:r}))}}]),e}(N(T.dom.Table));function Vn(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 Kn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Vn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Vn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Jn=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getColumns",D()((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()(Jn,"Rank",(Hn=Yn=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(Kn({},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(lt,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(),Kn({},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()(Yn,"displayName","rank"),Hn));var Zn,$n,tr,er,nr=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}(Qt(Jn,{stoppable:!0,continuable:!0})),rr=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),ir=function(t){return P.a.createElement(rr,it()({},t,{cursor:"e-resize"}))},or=function(t){return P.a.createElement(rr,it()({},t,{cursor:"s-resize"}))},ar=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))},sr=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(lt,c,P.a.createElement(ar,it()({},e,{y1:0,y2:0,x1:0,x2:o})),P.a.createElement(ar,it()({},i,{y1:a,y2:a,x1:0,x2:o})),P.a.createElement(ar,it()({},r,{x1:o,x2:o,y1:0,y2:a})),P.a.createElement(ar,it()({},n,{x1:0,x2:0,y1:0,y2:a})))},cr=Cn.ColResizer,ur=Cn.RowResizer,lr=Object(T.connect)()(($n=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.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(sr,this.props),e&&P.a.createElement(or,null),n&&P.a.createElement(ur,{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(ir,{x1:0,x2:0,y1:0,y2:c,onSelect:function(){return u(T.ACTION.Selection.SELECT(i))}}),P.a.createElement(cr,{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(sr,this.props)}}]),e}(C.Component),p()(Zn,"contextTypes",{editable:j.a.any}),$n));function pr(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 hr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?pr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):pr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var fr,dr=N(T.dom.Cell),yr=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(hr({},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,hr({},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}(Ze);function mr(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 gr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?mr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):mr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(yr,"displayName",((fr=Ze.displayName.split("-")).splice(-1,1,dr.displayName.split("-").pop()),fr.join("-"))),p()(yr,"defaultProps",hr({},dr.defaultProps,{createLayout:Ze.defaultProps.createLayout})),p()(yr,"Layout",(er=tr=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}(Ze.Layout),p()(tr,"displayName","frame-cell"),er)),p()(yr,"Edges",lr);var vr=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(lt,{children:t,anchor:function(n){var a={width:e.width,height:e.height},s=n.anchor(gr({align:"left"},g),a,n),c=n.anchor(gr({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(lt,{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(lt,{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)),br=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(lt,{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}(H(N(T.dom.Container),!1)),wr=G.enable(N.enable(T.dom,{Document:He,Section:Ze,Paragraph:sn,Text:hn,Image:Xn,Table:Qn,Row:nr,Cell:yr,Frame:ee,Shape:Bn,Anchor:vr,Container:br,Template:ie}),{Group:lt}),xr=Qt.enable(wr,{Group:lt}),Or=n(18),kr=n.n(Or);function Cr(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 Pr=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?Cr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Cr(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}()),Er={get:function(){return Pr.get.apply(Pr,arguments)},get names(){return Pr.names().sort()},release:function(){return this.iterateLocal((function(t){return URL.releaseObjectURL(t.src)})),Pr.families={},this},iterateLocal:function(t){Pr.names().forEach((function(e){Pr.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=kr.a.create(Buffer.from(r));i?i.fonts?e(Array.from(i.fonts).map((function(t){return Pr.put(t,{src:n})}))):e(Pr.put(i,{src:n})):e()}catch(t){e()}},onerror:function(t){return e()}}).readAsArrayBuffer(t)}))}))).then((function(e){return t.value="",Sr(e)})).finally(Tr)},fromPath:function(t){var e=function(t){return new Promise((function(e){kr.a.open(t,(function(n,r){n?e():r.fonts?e(Array.from(r.fonts).map((function(e){return Pr.put(e,{src:t})}))):e(Pr.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(Sr(t))}),i)})):n(31)().then((function(t){return Promise.all(t.map(e).filter((function(t){return!!t})))})).then((function(t){return r(Sr(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 Pr.put(kr.a.create(Buffer.from(t)),{src:n})}))}))})))})).finally(Tr)},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 Pr.put(kr.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=Er.fromBrowser;Er.fromBrowser=function(){return r.call.apply(r,[Er].concat(Array.prototype.slice.call(arguments))).finally((function(){return Er.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)}))}}},jr=Er;function Sr(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 Ar=null;function Tr(){Ar||((Ar=document.createElement("style")).id="we_edit_web_fonts",document.body.appendChild(Ar));var t=Array.from(Ar.sheet.rules).map((function(t){return t.style.fontFamily}));Pr.names().filter((function(e){return!t.includes(e)})).forEach((function(t){var e=Pr.get(t),n=e.familyName,r=e.src;r&&n&&Ar.sheet.addRule("@font-face",'font-family:"'.concat(n,'";src: local("').concat(n,'"), url("').concat(r,'");'))}))}var Ir=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}(),Fr=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(!Fr){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>'),(Fr=t.querySelector("text")).setStyle=D()((function(t){return Fr.style=t}))}Fr.setStyle(this.cssStyle()),Fr.firstChild.data="Ä";var e=Fr.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 Fr.setStyle(this.cssStyle()),Fr.firstChild.data=t,Fr.getBBox().width}}]),e}(Ir),Mr=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 jr.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!jr.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&&!!jr.get(e)}),!0))return Promise.resolve(r());if(A.a&&"string"==typeof t&&n(24).existsSync(t))return jr.fromPath(t).finally(r);switch(Ce()(t)){case"string":return jr.fromRemote(t).finally(r);case"function":return Promise.all(e.map((function(e){return jr.load(t,e)}))).finally(r);default:return Promise.resolve(r())}}}]),e}(Ir),Lr=n(30),Rr=n.n(Lr);function _r(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=/translate\((.*)\s+(.*)\)/,zr=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 Rr.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(Nr),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()(zr,"defaultProps",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_r(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_r(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},T.Emitter.Format.Base.defaultProps,{representation:"pagination"}));var Br=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}(zr);function Ur(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()(Br,"displayName","SVG"),p()(Br,"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}({},zr.propTypes,{pageGap:j.a.number,pgColor:j.a.string})),p()(Br,"defaultProps",{type:"svg",name:"SVG Document",ext:"svg",representation:"pagination",pageGap:24,pgColor:"white"}),n.d(e,"default",(function(){return Yr})),n.d(e,"Viewers",(function(){return wr})),n.d(e,"Editors",(function(){return xr})),n.d(e,"FontManager",(function(){return jr})),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 Qt})),n.d(e,"Resizable",(function(){return Cn})),n.d(e,"Movable",(function(){return he})),n.d(e,"Rotatable",(function(){return An})),n.d(e,"Top",(function(){return ue}));var qr=Mr,Gr=Dr,Xr=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)||jr.get(t)}}]),n}(qr)},Yr=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?qr:Gr),this.Measure){case qr:this.Measure=Xr(n);var o=this.context.doc.getFontList(),a=function(e){var r=jr.names;r&&r.length&&(jr.get(n)||(console.warn("default font[".concat(n,"] can't be loaded, set ").concat(r[0]," as default")),t.Measure=Xr(r[0]))),e&&console.error(e.message),t.setState({fontsLoaded:!0})};qr.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?wr:e,r=t.EditorTypes,i=void 0===r?xr: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?Ur(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ur(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()(Yr,"displayName","pagination"),p()(Yr,"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()(Yr,"defaultProps",{type:"pagination",defaultFont:"Arial"}),p()(Yr,"childContextTypes",{Measure:j.a.func}),p()(Yr,"contextTypes",{doc:j.a.object}),p()(Yr,"Output",zr),function(t){var e=t.install.bind(t);t.install=function(){e.apply(void 0,arguments),Br.install()};var n=t.uninstall.bind(t);t.uninstall=function(){n.apply(void 0,arguments),Br.uninstall()}}(Yr),Yr.install()}]);
2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInByb3AtdHlwZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3ZS1lZGl0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJtZW1vaXplLW9uZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlY29tcG9zZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY29uc3RydWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJmb250a2l0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaXMtbm9kZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LXdheXBvaW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcImxpbmVicmVha1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0FycmF5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic3ZncGF0aFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInNpbXBsaWZ5LXBhdGhcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJzdmctcGF0aC1jb250b3Vyc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImh0bWxwYXJzZXIyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZ2V0LXN5c3RlbS1mb250c1wiIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb21wb3NlZC1hbGwtdHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvaGFzQ2hpbGQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2hhc1BhcmVudEFuZENoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9ub0NoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9yZWNvbXBvc2FibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xvY2F0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvc3RvcHBhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb250aW51YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9sYXllci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL2dyb3VwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvY2FudmFzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2NvbnN0cmFpbnQtc3BhY2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy90b29sL2dlb21ldHJ5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2Jsb2NrL2FuY2hvcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9vcnBoYW4tY29udHJvbGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9jb2x1bW5hYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svYmFsYW5jZWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvbG5saW5lLXNwYWNlLXNlZ21lbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL21lcmdlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL3N0b3J5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2ZyYW1lLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9vdmVybGF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvc2VsZWN0aW9uLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL2N1cnNvci1zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9zZWxlY3Rpb24tc3R5bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvd2hlbi1zZWxlY3Rpb24tY2hhbmdlLW5vdGlmaWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Bvc2l0aW9uaW5nL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvcmVhY3QtcG9zaXRpb25pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvY29tcG9zZS1tb3JlLXRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvZGVmaW5lLXNoYXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9kb2N1bWVudC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvd29yZHdyYXAvbGluZS1icmVhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9wYXJhZ3JhcGguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL3Rvb2wvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL2ZvY3VzLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL3NoYXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zaGFwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9pbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vY2VsbC9zZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9jZWxsL2VkZ2VzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NlbGwvZWRpdGFibGUtZWRnZXMuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vY2VsbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9hbmNob3IuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vY29udGFpbmVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2VkaXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9mb250cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL21lYXN1cmUvYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL21lYXN1cmUvc3ZnLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvbWVhc3VyZS9mb250LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvb3V0cHV0L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvb3V0cHV0L3N2Zy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2luZGV4LmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImhvc3QiLCJvbkFsbENoaWxkcmVuQ29tcG9zZWQiLCJBIiwiYWxyZWFkeSIsImFyZ3VtZW50cyIsIm1lbW9pemUiLCJjaGlsZHJlbiIsInByb3BzIiwiQ2hpbGRyZW4iLCJ0b0FycmF5IiwiY29tcHV0ZWQiLCJjb21wb3NlZCIsImFsbENvbXBvc2VkIiwidW5kZWZpbmVkIiwiZGVidWciLCJzdGF0ZSIsInBhcmVudCIsInRoaXMiLCJjaGlsZHJlbkFycmF5IiwibGluZSIsImN1cnJlbnQiLCJjb250ZXh0IiwiY29udGVudCIsInR5cGUiLCJmbiIsImEiLCJnZXRDb21wb3NlVHlwZSIsImRpc3BsYXlOYW1lIiwiY2FwYWJsZSIsInNwbGl0IiwiaW5jbHVkZXMiLCJjb250ZXh0VHlwZXMiLCJQcm9wVHlwZXMiLCJib29sIiwiTW9kZWxUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwiU3VwZXIiLCJIYXNDaGlsZCIsIm5leHRBdmFpbGFibGVTcGFjZSIsImFwcGVuZENvbXBvc2VkIiwiY3JlYXRlQ29tcG9zZWQyUGFyZW50IiwiaGFzaCIsImNoYW5nZWQiLCJIYXNQYXJlbnRBbmRDaGlsZCIsIlJlY29tcG9zYWJsZSIsImIiLCJuZXh0IiwiY2hhbmdlZEluZGV4IiwiZmluZEluZGV4IiwiXyIsIiQiLCJpZCIsInNsaWNlIiwibWFwIiwibGFzdENvbXBvc2VkIiwicmVjb21wb3NhYmxlX2NyZWF0ZUNvbXBvc2VkMlBhcmVudCIsInB1c2giLCJjb21wb3NlZFVVSUQiLCJEYXRlIiwibm93IiwiaXNBbGxDaGlsZHJlbkNvbXBvc2VkIiwic2hvdWxkQ29udGludWVDb21wb3NlIiwiY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQiLCJpc0F0b21Db2xsZWN0b3IiLCJpc0F0b21DaGFuZ2VkIiwiZm9yRWFjaCIsImxlbmd0aCIsImFwcGVuZGVkIiwiYXBwZW5kTGFzdENvbXBvc2VkIiwiY29uc29sZSIsImV4dHJhY3QiLCJpc0F0b20iLCJpc0lubGluZUNvbnRhaW5lciIsIkxvY2F0YWJsZSIsIm1vdW50IiwiZWxlbWVudCIsIlJlYWN0IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJwcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJudW1iZXIiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInVubW91bnQiLCJnZXRDb21wb3NlciIsIkxvY2F0b3JpemUiLCJjb21wb3NlcnMiLCJNYXAiLCJzZXQiLCJhbHdheXMiLCJzdG9wcGFibGUiLCJFcnJvciIsIlRleHQiLCJmaWxsIiwid2hpdGVTcGFjZSIsImNvbG9yIiwiaGlnaGxpZ2h0IiwiYm9yZGVyIiwidW5kZXJsaW5lIiwic3RyaWtlIiwiZGVzY2VudCIsImhlaWdodCIsIm1pbldpZHRoIiwid2lkdGgiLCJ5IiwiYmxvY2tPZmZzZXQiLCJtZXJnZU9wcG9ydHVuaXR5Iiwib3RoZXJzIiwiYmFja2dyb3VuZCIsIk1hdGgiLCJjZWlsIiwieCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwiZGVjb3JhdGlvbiIsInkxIiwieDIiLCJ5MiIsInN0cmlrZWxpbmUiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJDb21wb25lbnQiLCJMYXllciIsImFjdGl2ZSIsImFyZWFzIiwiSWdub3JlIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImlnbm9yZUV2ZW50cyIsInJlZHVjZSIsImsiLCJvbkRvdWJsZUNsaWNrIiwiY2xpY2siLCJNb3VzZUV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldCIsInZpZXdwb3J0RWxlbWVudCIsImRpc3BhdGNoRXZlbnQiLCJ6Iiwid2hlblNlbGVjdGlvbkNoYW5nZSIsInNlbGVjdGlvbiIsImxheWVyIiwiZWRpdGFibGUiLCJhY3RpdmVTdHlsZSIsImluYWN0aXZlU3R5bGUiLCJmaWx0ZXIiLCJzb3J0IiwiaW5hY3RpdmVMYXllcnMiLCJhY3RpdmVMYXllciIsImZpbmQiLCJhbnkiLCJHcm91cCIsImlubmVyUmVmIiwicm90YXRlIiwibWFyZ2luIiwiaW5kZXgiLCJjaGlsZEluZGV4IiwiZ2VvbWV0cnkiLCJiYXNlbGluZSIsImxpbmVEZXNjZW50IiwiaXNMYXN0UmFua09mUm93IiwiaXNGaXJzdFJvd0luUGFnZSIsImNvbnRlbnRXaWR0aCIsIndyYXAiLCJwYWdpbmF0aW9uIiwiYW5jaG9yIiwibmFtZWQiLCJzcGFjZUhlaWdodCIsImRpc3BhdGNoIiwiSSIsInJlZiIsInRyYW5zZm9ybSIsInBhcnNlSW50Iiwia2V5cyIsIngxIiwiY29uc3RydWN0b3IiLCJDb250YWluZXIiLCJDb21wb3NlZERvY3VtZW50Q2FudmFzIiwiZG9jdW1lbnQiLCJtZSIsInBhZ2VzIiwic2NhbGUiLCJwYWdlR2FwIiwicHJlY2lzaW9uIiwicGFnZSIsInNpemUiLCJhc3NpZ24iLCJtYXgiLCJwYXBlciIsIl9fc2VxdWVudGlhbENvbXBvc2UiLCJnZXRDb21wb3NlZCIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ2aWV3Qm94IiwicG9zaXRpb25QYWdlcyIsImNhbnZhc1dpZHRoIiwibWVkaWEiLCJwb3NpdGlvbmVkIiwiY2xhc3NOYW1lIiwibGFzdCIsImhlaWdodE9mTGFzdCIsImNvbXBvc2VkSGVpZ2h0IiwidyIsInN2ZyIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJhcnJheU9mIiwiU21hcnRTaG93IiwiZGlzcGxheSIsImZpcmVPblJhcGlkU2Nyb2xsIiwib25FbnRlciIsInNldFN0YXRlIiwib25MZWF2ZSIsIlBhcGVyIiwibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwibWFyZ2luV2lkdGgiLCJtaW4iLCJJbWFnZSIsIlNoYXBlIiwiU3BhY2UiLCJzb3VyY2UiLCJtb2RpZmllciIsImVkZ2VzIiwiYmFzZSIsIm9mZnNldCIsImFsaWduIiwidiIsInRoYXQiLCJjb2xzIiwiaXNJbmxpbmVTaXplRGlmZmVyZW50IiwiUG9pbnQiLCJSZWN0IiwiaCIsImNsb25lIiwiZXF1YWxzIiwidG9TdHJpbmciLCJmIiwiYWRkIiwic3VidHJhY3QiLCJpc1plcm8iLCJ0YWtlUG9pbnRPckFyZ3MiLCJhcmcxIiwiYXJnMiIsImZyb21SZWN0IiwiZGlmZiIsImlzRW1wdHkiLCJzZXRSZWN0Iiwic2V0Qm91bmRzIiwib3RoZXIiLCJjZW50ZXIiLCJjb3B5RnJvbSIsInRyYW5zbGF0ZSIsInVuaW9uIiwiZXhwYW5kVG9Db250YWluIiwiY29udGFpbnMiLCJpbnRlcnNlY3QiLCJyZXN0cmljdFRvIiwiaW50ZXJzZWN0cyIsImV4cGFuZFRvSW50ZWdlcnMiLCJmbG9vciIsInhzY2wiLCJ5c2NsIiwidHJhbnNsYXRlSW5zaWRlIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXN1bHQiLCJibGVuZCIsInJlY3QiLCJzY2FsYXIiLCJpbmZsYXRlIiwieEFkaiIsInlBZGoiLCJpbmZsYXRlRml4ZWQiLCJmaXhlZCIsIkZsb3ciLCJhbmNob3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImZpcnN0TGluZSIsImNvbmZpZ3VyYWJsZSIsImxpbmVzIiwibGFzdExpbmUiLCJ2YWx1ZXMiLCJ0b3RhbExpbmVzIiwiZ2V0U3BhY2UiLCJjb250ZW50SGVpZ2h0IiwiYXZhaWxhYmxlQmxvY2tTaXplIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIndyYXBwZWVzIiwiSCIsInNwYWNlIiwiY3R4IiwicmVxdWlyZWRCbG9ja1NpemUiLCJhbGxvd092ZXJmbG93IiwiQ29uc3RyYWludFNwYWNlIiwiZnJhbWUiLCJmaW5kSW5saW5lU2VnbWVudHMiLCJleGNsdXNpdmUiLCJzZWdtZW50cyIsIm9wcyIsInNwbGljZSIsImlzQW5jaG9yZWQiLCJleGNsdWRlcyIsImNvbGxlY3RlZCIsImJsb2NrcyIsIkFycmF5IiwiaXNBcnJheSIsImNsZWFycyIsIndyYXBlZXMiLCJpbml0IiwicmVjb21wb3NlIiwiZGVhZExvb3AiLCJsYXN0TGluZXMiLCJsYXN0QW5jaG9ycyIsImxhc3RDb2x1bW5zIiwiY29sdW1ucyIsInJvbGxiYWNrIiwicmVjb21wb3NpbmciLCJnZXRQYXJhZ3JhcGhJZCIsIlJlYWN0UXVlcnkiLCJmaW5kRmlyc3QiLCJhdHRyIiwiY3VycmVudFBhcmFncmFwaCIsImN1cnJlbnRQYXJhZ3JhcGhMaW5lcyIsInBhcmFncmFwaE9mTGluZSIsInJlY29tbWl0IiwiZXJyb3IiLCJCIiwiZG9tIiwiYmFsYW5jZSIsImJhbGFuY2VUaHJlc2hvbGQiLCJzaGFwZSIsImluaGVyaXRFeGNsdXNpdmVzIiwiQW5jaG9yYWJsZSIsIklNTUVESUFURV9TVE9QIiwiYW5jaG9yUGxhY2VkIiwiYW5jaG9ySWQiLCJmaXJzdCIsInBhcmVudHMiLCJhbmNob3JlZCIsInBhcmFncmFwaCIsIl9fbGluZVhZIiwiY2hhcmFjdGVyIiwiZmluZEZpcnN0QW5kUGFyZW50cyIsIlgiLCJfX2lzRGlydHlJbiIsInJlY29tcG9zaW5nTGluZXMiLCJwb3AiLCJyZW1vdmluZ0FuY2hvcklkcyIsInJlbW92ZWRMaW5lcyIsInJlbW92ZWRBbmNob3JzIiwiZmxhdCIsImluZGV4T2YiLCJyZW1vdmVkV3JhcHBlZXNBZmZlY3RlZExheW91dGVkU3BhY2UiLCJpc0ludGVyc2VjdCIsImN1cnJlbnRDb2x1bW4iLCJZIiwieTAiLCJPcnBoYW5Db250cm9sYWJsZSIsInByZXYiLCJwcmV2TGF5b3V0IiwicGlkIiwiZ2V0TGluZVBhcmFncmFwaElkIiwiZmluZExhc3RJbmRleCIsIndpZG93Iiwib3JwaGFuIiwia2VlcExpbmVzIiwic2hvdWxkS2VlcExpbmVzV2l0aCIsImxpbmVDb3VudCIsIm9ycGhhbkNvdW50Iiwicm9sbGJhY2tMaW5lcyIsInNob3VsZEtlZXBXaXRoTmV4dCIsImtlZXBXaXRoTmV4dCIsIkNvbHVtbmFibGUiLCJjcmVhdGVDb2x1bW4iLCJjb2x1bW4iLCJDb2x1bW5DaGlsZHJlbiIsIm1heEhlaWdodCIsIkNvbnRyYWludFNwYWNlIiwiaGFzTW9yZUNvbHVtbiIsInN0YXJ0SW5kZXgiLCJtc2ciLCJlbmRJbmRleCIsImoiLCJuZXh0Q29sdW1uIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiaXRlbXMiLCJ1bnN1cHBvcnQiLCJCYWxhbmNlYWJsZSIsImJhbGFuY2VhYmxlIiwiYWJzIiwiYW55QmFsYW5jZSIsImVxdWFsQmFsYW5jZSIsImNvbEhlaWdodCIsInRvdGFsV2lkdGgiLCJ0b3RhbEhlaWdodCIsIklubGluZVNlZ21lbnRzIiwiSW5saW5lU2VnbWVudCIsImJTYW1lIiwicmVsYXlvdXQiLCJhdG9tcyIsImxlbiIsInNlZ21lbnQiLCJpdGVtIiwiaXNUZXh0IiwiYWxsIiwiZmluZExhc3QiLCJhdG9tIiwibXVzdCIsImF2YWlsYWJsZVdpZHRoIiwibG9jYXRlZCIsIk1lcmdlIiwicGllY2UiLCJwaWVjZVBhdGgiLCJwYXRoIiwiYlRleHQiLCJqb2luIiwidHJ1bmtQYXRoIiwidHJ1bmsiLCJtZXJnZVRydW5rIiwicGllY2VzIiwidGV4dHMiLCJtZXJnZWQiLCJyZWR1Y2VSaWdodCIsImNoaWxkIiwiZ2V0TWVyZ2VkIiwiaW5mbyIsInRlc3QiLCJpZHMiLCJvbmx5IiwiU3RvcnkiLCJhbGlnbmVkIiwiZ3JvdXBzIiwid29yZHMiLCJncm91cCIsIl9pIiwiX2EiLCJpc0xhc3QiLCJmcm9tIiwicmV2ZXJzZSIsImlzV2hpdGVzcGFjZSIsImVuZGluZ1doaXRlc3BhY2VzIiwicmVuZGVyIiwid29yZHNXaWR0aCIsImp1c3RpZmllZCIsInN0YXR1cyIsIndoaXRlc3BhY2VzIiwid2hpdGVzcGFjZVdpZHRoIiwid29yZCIsImp1c3RpZnkiLCJCbG9jayIsIklubGluZSIsInRvcFRvQmxvY2tPZmZzZXQiLCJpbmxpbmVTZWdtZW50cyIsImZpcnN0QXRvbSIsIiRhdG9tIiwiJGFuY2hvciIsInBsYWNlaG9sZGVyIiwicmVwbGFjZSIsImFwcGVuZEFuY2hvckF0b20iLCJuZXdIZWlnaHQiLCJzaG91bGRSZWxheW91dCIsInJlbGF5b3V0ZWQiLCJnZXRMaW5lSGVpZ2h0IiwibGluZUhlaWdodCIsInRleHRIZWlnaHQiLCJiTGFzdExpbmUiLCJsaW5lVG9wIiwiY29tcG9zYWJsZSIsImxvY2F0YWJsZSIsImNvbnRpbnVhYmxlIiwicmVjb21wb3NhYmxlIiwiU3RvcHBhYmxlIiwiQ29udGludWFibGUiLCJlbmFibGlmeSIsInRhcmdldHMiLCJlbmFibGVkIiwiTm9DaGlsZCIsImVuYWJsZSIsIkZyYW1lIiwiTGF5b3V0IiwidXVpZCIsIl9fZ2V0U3BhY2UiLCJwb3NpdGlvbkxpbmVzIiwidmVydEFsaWduIiwiYWxpZ25ZIiwiejEiLCJsaW5lSW5kZXgiLCJpc1RvcCIsIkVkaXRhYmxlRnJhbWUiLCJfX19jcmVhdGVDb21wb3NlZDJQYXJlbnQiLCJuZXh0UHJvcHMiLCJpc0lubGluZVNpemVDaGFuZ2VkIiwiX2NhbmNlbENoYW5nZWRQYXJ0IiwiX2NhbmNlbFVudGlsTGFzdEFsbENoaWxkcmVuQ29tcG9zZWQiLCJjaGlsZHJlbk5lZWRSZWNvbXBvc2UiLCJmaXJzdExpbmVOZWVkUmVjb21wb3NlIiwiY2hpbGRJZE9mIiwicmVtb3ZlRnJvbSIsImxhc3RMaW5lT2ZBbGxDaGlsZHJlbkNvbXBvc2VkIiwiY29tcG9zZXIiLCJsYXN0SWQiLCJyZW1vdmVkIiwiVXNlIiwidGVtcGxhdGUiLCJnZXRDb21wb3NlZFRlbXBsYXRlIiwieGhyZWYiLCJtYXN0ZXIiLCJUZW1wbGF0ZSIsImlzVGVtcGxhdGUiLCJkZWZhdWx0UHJvcHMiLCJUb3AiLCJpZ25vcmVFdmVudCIsImVsIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VVcCIsImNyZWF0ZVBvcnRhbCIsInVzZVJlbGF0aXZlUG9zaXRpb24iLCJjcmVhdGVTVkdQb2ludCIsIm1hdHJpeFRyYW5zZm9ybSIsImdldENUTSIsIk92ZXJsYXkiLCJNb3ZhYmxlIiwibW92aW5nIiwiaXNBbmNob3IiLCJvbkVuZE1vdmUiLCJidXR0b25zIiwicG9zaXRpb25pbmciLCJhc0NhbnZhc1BvaW50Iiwib25Nb3ZlIiwiZGVzdCIsImR4IiwiZHkiLCJhcm91bmQiLCJhdCIsInBvc2l0aW9uIiwiTW92aW5nUGxhY2Vob2xkZXIiLCJyZWN0cyIsImdldFJhbmdlUmVjdHMiLCJ3aXRoUmVmIiwiYXJlYSIsImNyZWF0ZVJlZiIsIm9uU2hyaW5rIiwic2VsZWN0aW5nIiwicmFuZ2UiLCJuZXdSZWN0cyIsIkFDVElPTiIsIlNlbGVjdGlvbiIsIk1PVkUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJpc1JhbmdlIiwiaXNTZWxlY3Rpb25DaGFuZ2VkIiwic2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCIsInNjcm9sbEludG9WaWV3IiwiQXJlYSIsImZpbGxPcGFjaXR5Iiwib25DbGljayIsImxvZyIsImlzQ3Vyc29yIiwiaXNGb2N1c2FibGUiLCJQYWdpbmF0aW9uU2VsZWN0aW9uU3R5bGUiLCJzdGFydCIsImVuZCIsImdldEZyb21Db250ZW50IiwidG9Mb3dlckNhc2UiLCJfcGFnZVByb3BzIiwiX2xheW91dFByb3BzIiwicmVhZHkiLCJsYXlvdXRPZiIsInBhZ2VYWSIsImNvbHVtbkluZGV4T2YiLCJnZXRDb250ZW50IiwiZm9yd2FyZEZpcnN0IiwiZm9jdXNhYmxlIiwiX19nZXRSYW5nZVJlY3RzIiwiU2VsZWN0aW9uU3R5bGUiLCJjb21wb3NlIiwiY29ubmVjdCIsImNvbXBvc2VkQ29udGVudCIsImNhbnZhcyIsInRvSlMiLCJjdXJzb3JBdCIsIlNUWUxFIiwiUG9zaXRpb25pbmciLCJyZXNwb25zaWJsZSIsImFzVmlld3BvcnRQb2ludCIsIm5leHRGcmFtZSIsInByZXZGcmFtZSIsImFyZ3MiLCJ3YXJuIiwiUmVhY3RQb3NpdGlvbmluZyIsIl9fcmV0dXJuRXZlcnl0aGluZyIsInBvc2l0aW9uVG9MZWFmRnJhbWVMaW5lIiwibGVhZkZyYW1lIiwidG9wRnJhbWUiLCJnZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUiLCJ0b3BGcmFtZU9mZnNldCIsImdldFRvcEZyYW1lWFkiLCJsZWFmRnJhbWVPZmZzZXQiLCJnZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUiLCJsaW5lT2Zmc2V0IiwibGluZVhZIiwiaW5GcmFtZSIsImlubGluZSIsImxpbmVJbmRleE9mUGFyYWdyYXBoIiwibGluZUluZGV4SW5MZWFmRnJhbWUiLCJwb3MiLCIkcCIsImxhc3RBdG9tIiwibm9kZSIsImlzQ29udGVudCIsImdldFRvcEZyYW1lQnlQb3NpdGlvbiIsInBvaW50SXNJbnNpZGUiLCJ4MCIsIm9mZnNldHMiLCJnZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlIiwiaXNGcmFtZSIsImxheW91dGVkRnJhbWVOb2RlIiwiZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlIiwiYXJvdW5kSW5JbmxpbmUiLCJnZXRPcmRlcmVkUG9zaXRpb24iLCJwMCIsInAxIiwic2NvcGUiLCJmcmFtZTAiLCJmcmFtZTEiLCJtYWtlUmVjdHMiLCJ0byIsIl8xIiwiaXNQYXJhZ3JhcGhMaW5lIiwieHkiLCJzdG9yeSIsImZpbmRMYXN0QW5kUGFyZW50cyIsImZyYW1lcyIsImJvdW5kcyIsIm5leHRMaW5lIiwibmV4dExpbmVCZWxvdyIsInBvaW50IiwiZm91bmQiLCJmcmFtZUlzQmVsb3dQb2ludEFuZENvbnRhaW5Qb2ludFgiLCJsYXlvdXRlZFRvcEZyYW1lIiwiZmlyc3RMaW5lSW5jbHVkZVgiLCJsaW5lSW5MZWFmRnJhbWUiLCJhcm91bmRJbkJsb2NrTGluZSIsImxlYWZGcmFtZUNvbnRhaW5lZEJ5IiwiX3RhcmdldEZyYW1lQ29udGFpbnNGcmFtZSIsInBhcmVudEZyYW1lIiwicHJldkxpbmUiLCJwcmV2TGluZUFib3ZlIiwiaXNGaXJzdCIsImZyYW1lSXNBYm92ZVBvaW50QW5kQ29udGFpblBvaW50WCIsImxhc3RMaW5lSW5jbHVkZVgiLCJjbG9zZXN0IiwieGlkIiwidGFyZ2V0RnJhbWUiLCJnZXRHcmFuZEJsb2NrQ29udGVudHMiLCJpc1NlY3Rpb24iLCJibG9ja3NBIiwiYmxvY2tzQiIsIm5vcm1hbGl6ZVNlbGVjdGlvbiIsInJldmVydGVkIiwiZ3JhbmRGcmFtZSIsImdyYW5kRnJhbWVMYXlvdXRlZCIsImNoZWNrIiwiZnJhbWVDb250YWluZWRCeSIsImdyYW5kTWF5YmUiLCJmb3JtYXROb2RlIiwibm9kZXMiLCJib3VuZCIsImFsbFBhcmVudHMiLCJibG9ja0ZyYW1lIiwiYmxvY2tGcmFtZU9mZnNldCIsIiRwYXJhZ3JhcGgiLCJpc0luY2x1ZGVYIiwiYm91bmFyeSIsImlubGluZU9mZnNldCIsInBvc3NpYmxlUGFyYWdyYXBoIiwiaXNJbmxpbmVOb2RlIiwiY29tcG9zZWRMaW5lIiwiJG5vZGUiLCJ0ZXh0Tm9kZSIsInRleHQiLCJlbmRhdCIsIm1lYXN1cmUiLCJ3aWR0aFN0cmluZyIsIndyYXBwZXIiLCIkbGluZSIsImdldFBhcmFncmFwaEluQ2VsbCIsInBhcmFncmFwaEluQ2VsbCIsInBhcmFncmFwaERpcmVjdCIsImxpbmVJbkZyYW1lIiwiJGZpbmQiLCJ0YXJnZXRIYXNQYXJhZ3JhcGgiLCJfX2ZpbmRGaXJzdFBhcmFncmFwaEluVGFyZ2V0IiwicG9zaXRpb25JbklubGluZSIsImZpcnN0UGFyYWdyYXBoIiwiZGVmYXVsdFN0eWxlIiwiZ2V0RGVmYXVsdE1lYXN1cmUiLCJpc1BhcmFncmFwaFNlbGYiLCJzdHJpbmdXaWR0aCIsInN1YnN0cmluZyIsImZyYW1lSWQiLCJzZXREaXNwbGF5TmFtZSIsImdldFNlbGVjdGlvbiIsImlzU2VsZWN0aW9uQ29tcG9zZWQiLCJjb21wb3NlNFNlbGVjdGlvbiIsImNvbXBvc2U0U2Nyb2xsIiwiZ2V0Q29tcG9zZWRZIiwiVGFibGVBZGRlciIsIlJvdGF0b3IiLCJjeCIsImN5IiwiUmVzcG9uc2libGUiLCJTYWZlUG9zaXRpb25pbmciLCJtYWtlU2FmZSIsImNhbnZhc0lkIiwidmlld3BvcnQiLCJzY3JlZW5CdWZmZXIiLCJDYW52YXMiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJjb21wb3NlZDRZIiwiQ29udGVudFF1ZXJ5IiwiZnJvbUNvbnRlbnQiLCJnZXRTY3JlZW5DVE0iLCJpbnZlcnNlIiwibG9jYXRpb24iLCJwYWdlUmVjdCIsImNvbXBvc2VkWSIsInNjcm9sbFRvcCIsIl9fY29tcG9zZWRZIiwiZXZlbnRIYW5kbGVycyIsIm5vdGlmeVNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIiwiY2FsbGJhY2siLCJzZWxlY3Rpb25DaGFuZ2VOb3RpZmllciIsIkNvbXBvc2VNb3JlVHJpZ2dlciIsIjM3Iiwib25LZXlBcnJvd0xlZnQiLCIzOSIsIm9uS2V5QXJyb3dSaWdodCIsIjM4Iiwib25LZXlBcnJvd1VwIiwiNDAiLCJvbktleUFycm93RG93biIsInNjcm9sbE5vZGVJbnRvVmlldyIsIlN0YXRpc3RpY3MiLCJfX3N0YXRpc3RpY3MiLCJDdXJzb3IiLCJBQ1RJVkUiLCJhY3RpdmVEb2NTdG9yZSIsInJlZnMiLCJnZXRXcmFwcGVkSW5zdGFuY2UiLCJnZXRTdGF0ZSIsImluc3RhbmNlT2YiLCJFbGVtZW50Iiwib25Db250ZXh0TWVudSIsIkV2ZW50UmVzcG9uc2libGUiLCJoYW5kbGVycyIsIl9fbW91c2VEb3duRmxhZyIsInNoaWZ0S2V5IiwiZG91YmxlQ2xpY2tlZCIsIlNFTEVDVCIsImxlZnQxIiwidG9wMSIsIlNUQVJUX0FUIiwiZXh0ZW5kV29yZCIsIkFUIiwic2VsZWN0ZWQiLCJfX29uQ2xpY2siLCJfX3Nob3VsZElnbm9yZU1vdXNlRG93bkV2ZW50IiwiX19vbktleUFycm93IiwibWV0YUtleSIsImN0cmxLZXkiLCJwb3NpdGlvblRvTGluZVN0YXJ0IiwiQkFDS1dBUkQiLCJwb3NpdGlvblRvTGluZUVuZCIsIkZPUldBUkQiLCJEb2N1bWVudCIsIk1lYXN1cmUiLCJ0ZW1wbGF0ZXMiLCJzZWxmIiwiZ2V0TWVhc3VyZSIsIm5vdGlmeU5vdEFsbENvbXBvc2VkIiwic2hvdWxkIiwiaGFzIiwiVHlwZSIsIlNlY3Rpb24iLCJhbGxQcm9wcyIsInRvcEluZGV4IiwiY3JlYXRlTGF5b3V0IiwicmVxdWlyZWQiLCJsYXlvdXQiLCJpc0ludGVnZXIiLCJjbG9uZWQiLCJFZGl0YWJsZVNlY3Rpb24iLCJzcGFjZUNoYW5nZWRBdCIsImZpc3Npb24iLCJjbG9uZTRTcGFjZSIsImZpc3Npb25JbmRleCIsIl9rZWVwTGFzdENvbXBvc2VkVW50aWwiLCJvcHBvcnR1bml0aWVzIiwic3RyIiwiYmsiLCJicmVha2VyIiwiTGluZUJyZWFrZXIiLCJvcCIsIm5leHRCcmVhayIsIlBhcmFncmFwaCIsImxhc3RUZXh0IiwiYnJlYWtPcHBvcnR1bml0aWVzIiwiaXNSYXdBdG9tIiwiRW5kIiwiY29tbWl0Iiwicm9sbGJhY2tUb0xpbmVXaXRoRmlyc3RBdG9tSW5kZXgiLCJhcHBlbmRDb21wb3NlZExpbmUiLCJjdXJyZW50TGluZSIsImZyZWV6ZSIsImF0b21JbmRleE9mTGFzdE50aExpbmUiLCJsYXN0TnRoTGluZSIsImNyZWF0ZUFuZEFwcGVuZExpbmUiLCJjcmVhdGVMaW5lIiwiREVBRCIsIm5lc3RlZCIsImNvbW1pdEZyb20iLCJ0aW1lcyIsImFwcGVuZEF0b20iLCJudW1iZXJpbmciLCJpbmRlbnQiLCJEeW5hbWljIiwiaW5kZW50TGVmdCIsImluZGVudFJpZ2h0IiwiYkZpcnN0TGluZSIsInNwYWNpbmciLCJMaW5lIiwiZ2V0TnVtYmVyaW5nQXRvbSIsImN1cnJlbnRYIiwiRWRpdGFibGVQYXJhZ3JhcGgiLCJuZXdMaW5lIiwiaXNGaXRUbyIsImZvbnRzIiwiYm9sZCIsIml0YWxpYyIsIl9zdHJpbmdXaWR0aCIsImNhY2hlIiwidmFuaXNoIiwiXzIiLCJqTGFzdCIsIiQxIiwiJDIiLCJpTGFzdCIsImVuZGluZyIsImVuZHNXaXRoIiwiY3JlYXRlTWVhc3VyZSIsIkVkaXRhYmxlVGV4dCIsInNoYWxsb3dFcXVhbCIsIl9fJDEiLCJfX2V2YWx1YXRlU3RhY2siLCJjb250b3VyIiwiTUlOX1NBRkVfSU5URUdFUiIsInRvbGVyYW5jZSIsImNvbnRvdXJzIiwic2ltcGxpZnkiLCJwb2ludHMiLCJsaW5lMSIsImxpbmUyIiwieDMiLCJ4NCIsInkzIiwieTQiLCJwdF9kZW5vbSIsInB0X3hfbnVtIiwicHRfeV9udW0iLCJwdCIsImJldHdlZW4iLCJsaW5lX2xpbmVfaW50ZXJzZWN0IiwiUGF0aCIsImIxIiwiYjIiLCJkaXJlY3Rpb24iLCJvbmVPZiIsIlJlc2l6YWJsZSIsInJlc2l6aW5nIiwic3BvdHMiLCJvbkVuZCIsInJlc2l6ZSIsInN0YXJ0UmVzaXplIiwib25TdGFydCIsIm9uUmVzaXplIiwiU3BvdCIsIlJlc2l6ZXIiLCJzdHJva2VEYXNoYXJyYXkiLCJSb3RhdGFibGUiLCJyb3RhdGluZyIsImRlZ3JlZSIsIm9uUm90YXRlIiwicm90YXRvciIsInhsaW5rSHJlZiIsInNob3VsZFVwZGF0ZSIsInRhcmdldENoYW5nZWQiLCJpc1NlbGZPckdyYW5kIiwic2hhcGVSZWNvbXBvc2VkIiwiaXNBR3JhbmQiLCJpc0JHcmFuZCIsImlzUGFyYWdyYXBoIiwiZ3JhbmQiLCJzaG93Rm9jdXMiLCJpc0VkaXRhYmxlQ3Vyc29yIiwib3V0bGluZSIsIiRvdXRsaW5lIiwicmVzaXphYmxlIiwicm90YXRhYmxlIiwiZm9jdXNhYmxlQ29udGVudCIsIm1vdmFibGUiLCJlZHRhYmxlQ29udGVudCIsImF0YW4yIiwiUEkiLCJFbnRpdHkiLCJVUERBVEUiLCJjdXN0b20iLCJjb250ZW50Qm94Iiwic29saWRGaWxsIiwiYmxpcEZpbGwiLCJ1cmwiLCJnZXRQYXRoIiwib3V0bGluZUJveCIsIm9yaWdpbiIsImVsbGlwc2UiLCJyeCIsInJ5IiwiY2lyY2xlIiwiYXZhaWxhYmxlU3BhY2UiLCJjcmVhdGVDb21wb3NlZFNoYXBlIiwiX19nZXRHZW9tZXRyeSIsImdldFNoYXBlIiwic3JjIiwiaW1hZ2UiLCJUYWJsZSIsInJvdyIsIlJvdyIsImNvbCIsInJhbmtzIiwic2xvdHMiLCJtaW5IZWlnaHQiLCJyYW5rIiwiY3VycmVudFJhbmsiLCJSYW5rIiwiZ2V0Q29sdW1ucyIsImNlbGxJZCIsImZpbmRPckNyZWF0ZVJhbmtGb3JDb2x1bW4iLCJzbG90RnJhbWUiLCJnZXRIZWlnaHQiLCJpbnNlcnRBdCIsImRlbGF5b3V0IiwiZmlyc3RTbG90IiwiY2xvbmVBc0VtcHR5Iiwic2xvdEhlaWdodCIsImxheW91dGVkIiwiZGV0YWNoIiwiZGVsdGEiLCJjb3VudCIsImNoYW5nZUhlaWdodFVwIiwidGFibGUiLCJyZXBsYWNlV2l0aCIsInNsb3QiLCJjb2xJbmRleCIsInJlcGxhY2VtZW50IiwiRWRpdGFibGVSb3ciLCJTZWxlY3RvciIsIm9uU2VsZWN0IiwiUm93U2VsZWN0b3IiLCJDb2xTZWxlY3RvciIsIkVkZ2UiLCJzeiIsInZhbCIsIkNvbFJlc2l6ZXIiLCJSb3dSZXNpemVyIiwiY2VsbCIsInBhcnRzIiwiQ2VsbCIsImJvcmRlcnMiLCJFZGdlcyIsIkVkaXRhYmxlRWRnZXMiLCJBbmNob3IiLCJ3cmFwRnVuYyIsIndyYXBUZXh0IiwibXIiLCJtbCIsImFwcGx5V3JhcFRleHQiLCJ3cmFwVGlnaHQiLCJ3cmFwQ2xlYXIiLCJjcmVhdGVFbGVtZW50IiwiZmFtaWxpZXMiLCJmYW1pbHkiLCJib2xkcyIsIml0YWxpY3MiLCJiaSIsImZvbnQiLCJmYW1pbHlOYW1lIiwiZnVsbE5hbWUiLCJmb250U2l6ZSIsInVuaXRzUGVyRW0iLCJhc2NlbnQiLCJsaW5lR2FwIiwiYWR2YW5jZVdpZHRoIiwiZXh0ZW5kIiwic3ViZmFtaWx5TmFtZSIsIkZvbnRNYW5hZ2VyIiwibmFtZXMiLCJyZWxlYXNlIiwiaXRlcmF0ZUxvY2FsIiwiVVJMIiwicmVsZWFzZU9iamVjdFVSTCIsInN0YXJ0c1dpdGgiLCJmcm9tQnJvd3NlciIsImxvYWRlciIsIlByb21pc2UiLCJmaWxlcyIsImZpbGUiLCJyZXNvbHZlIiwiY3JlYXRlT2JqZWN0VVJMIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImRhdGEiLCJGb250S2l0IiwiQnVmZmVyIiwicHV0Iiwib25lcnJvciIsInJlYWRBc0FycmF5QnVmZmVyIiwidGhlbiIsIm1ha2VXZWJGb250IiwiZnJvbVBhdGgiLCJsb2FkMSIsIm9wZW4iLCJlcnIiLCJyZWplY3QiLCJyZWFkZGlyIiwiZnJvbVJlbW90ZSIsInNlcnZpY2UiLCJmZXRjaCIsInJlcyIsImxpc3QiLCJKU09OIiwicGFyc2UiLCJ0cmltIiwib2siLCJhcnJheUJ1ZmZlciIsImJ1ZmZlciIsImxvYWQiLCJzdGF0dXNUZXh0IiwiYXNTZXJ2aWNlIiwic3ciLCJuYXZpZ2F0b3IiLCJfZnJvbUJyb3dzZXIiLCJwb3N0TWVzc2FnZSIsInNlcnZpY2VXb3JrZXIiLCJyZWdpc3RlciIsInJlZyIsImNsdCIsIndlYkZvbnRzIiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZGVkIiwic2hlZXQiLCJydWxlcyIsImZvbnRGYW1pbHkiLCJhZGRSdWxlIiwiZm9udEZhbWlseXMiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwiZG9uZSIsImFXaWR0aCIsInRlc3RlciIsIlNWR01lYXN1cmUiLCJjb250YWluZXIiLCJpbm5lckhUTUwiLCJzZXRTdHlsZSIsImNzc1N0eWxlIiwiZmlyc3RDaGlsZCIsImdldEJCb3giLCJGb250TWVhc3VyZSIsImdldEZvbnQiLCJpbnB1dCIsInVubG9hZGVkIiwiaXNOb2RlIiwiZXhpc3RzU3luYyIsIlJFX1RSQU5TTEFURSIsIk91dHB1dCIsInBpcGUiLCJQYXJzZXIiLCJXcml0YWJsZVN0cmVhbSIsInhtbE1vZGUiLCJhdHRycyIsIm9ucmVzZXQiLCJvbkRvY3VtZW50Iiwib25QYWdlIiwib25Hcm91cCIsIl9jdXJyZW50VGV4dCIsIm9uQ29udGVudCIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwib25Hcm91cEVuZCIsIm9uVGV4dCIsIl9vZmZzZXRzIiwiX2FzeW5jSm9icyIsIm9uRG9jdW1lbnRFbmQiLCJtYXRjaCIsIkVtaXR0ZXIiLCJGb3JtYXQiLCJCYXNlIiwicmVwcmVzZW50YXRpb24iLCJTVkciLCJkZXB0aCIsImRlZnMiLCJTZXQiLCJzdHJlYW0iLCJ3cml0ZSIsInBnQ29sb3IiLCJocmVmIiwiYnRvYSIsImpvYiIsInZpZXciLCJzcHJlYWQiLCJVaW50OEFycmF5IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYnl0ZUxlbmd0aCIsImFkZEFzeW5jSm9iIiwiZXh0IiwiY3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdCIsImRlZmF1bHRGb250IiwiUGFnaW5hdGlvbiIsImZvbnRzTG9hZGVkIiwicmVxdWlyZWRGb250cyIsImRvYyIsImdldEZvbnRMaXN0IiwibWVzc2FnZSIsInJlcXVpcmVGb250cyIsIlZpZXdlclR5cGVzIiwiVmlld2VycyIsIkVkaXRvclR5cGVzIiwiRWRpdG9ycyIsIlJlcHJlc2VudGF0aW9uIiwiaW5zdGFsbCIsInVuaW5zdGFsbCJdLCJtYXBwaW5ncyI6IjJCQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQTBEZixPQXJEQUYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxl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QixJQUFVZ0QsVUFBVSxDQUFDaEQsSUFBVWlELE9BQU9qRCxJQUFVb0QsT0FDdkRnaUMsWUFBYXBsQyxJQUFVaUQsUyxJQU5Kb2lDLEcsZUFTQSxDQUNuQjlsQyxLQUFLLGFBQ0w2bEMsWUFBWSxVLElBWE9DLEcsb0JBY0ssQ0FDeEJoVyxRQUFTcnZCLElBQVVvRCxPLElBZkFpaUMsRyxlQWtCQSxDQUNuQkcsSUFBS3hsQyxJQUFVdkMsUyxJQW5CSTRuQyxHLFNBc0JONUMsSUF1RGYsU0FBVXZrQyxHQUNULElBQU0rbkMsRUFBUS9uQyxFQUFFK25DLFFBQVExb0MsS0FBS1csR0FDN0JBLEVBQUUrbkMsUUFBUSxXQUNUQSxFQUFPLFdBQVAsRUFBVzduQyxXQUNYNmxDLEdBQUlnQyxXQUdMLElBQU1DLEVBQVVob0MsRUFBRWdvQyxVQUFVM29DLEtBQUtXLEdBQ2pDQSxFQUFFZ29DLFVBQVUsV0FDWEEsRUFBUyxXQUFULEVBQWE5bkMsV0FDYjZsQyxHQUFJaUMsYUFWTixDQVlHYixJQUVIQSxHQUFXWSIsImZpbGUiOiJyZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMyKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY3JlYXRlQ2xhc3NcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm5cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ3ZS1lZGl0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXNzZXJ0VGhpc0luaXRpYWxpemVkXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1lbW9pemUtb25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWNvbXBvc2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jb25zdHJ1Y3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZm9udGtpdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpcy1ub2RlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXdheXBvaW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxpbmVicmVha1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJmc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN2Z3BhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2ltcGxpZnktcGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdmctcGF0aC1jb250b3Vyc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodG1scGFyc2VyMlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJnZXQtc3lzdGVtLWZvbnRzXCIpOyIsIlxuLyoqXG4gKiBpdCdzIHRvIG1ha2Ugc2VxdWVudGlhbCByZW5kZXIsIGNoZWNrIGhhc0NoaWxkcmVuLnJlbmRlclxuICogSXQncyBhIEtFWSBmb3Igd2hvbGUgY29tcG9zYWJsZSBcbiAqICoqKipldmVyeSBjdXN0b21pemVkIHJlbmRlciBzaG91bGQgdXNlIHRoaXMgY29tcG9uZW50IGFzIGxhc3Qgb25lKioqXG4gKi9cbmV4cG9ydCBkZWZhdWx0ICh7aG9zdH0pPT4oaG9zdC5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKSxudWxsKVxuIiwiXG5pbXBvcnQgUmVhY3QsIHtDaGlsZHJlbixGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IENvbXBvc2VkQWxsVHJpZ2dlciBmcm9tIFwiLi9jb21wb3NlZC1hbGwtdHJpZ2dlclwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuZXhwb3J0IGRlZmF1bHQgQT0+e1xuICAgIGlmKEEuYWxyZWFkeSlcbiAgICAgICAgcmV0dXJuIEFcbiAgICByZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEF7XG4gICAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gY29tcG9zYWJsZS0ke0EuZGlzcGxheU5hbWV9YFxuICAgICAgICBzdGF0aWMgYWxyZWFkeT1mdW5jdGlvbihjYXBhYmxlKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlOYW1lLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhjYXBhYmxlKVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAgICAgLi4uQS5jb250ZXh0VHlwZXMsXG4gICAgICAgICAgICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICBNb2RlbFR5cGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzID0ge1xuICAgICAgICAgICAgLi4uKEEuY2hpbGRDb250ZXh0VHlwZXN8fHt9KSxcbiAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLm9iamVjdFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSB7Y29tcG9zZWQ6IFtdICwgYWxsQ29tcG9zZWQ6dW5kZWZpbmVkfVxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1Zyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZT17Y29tcHV0ZWQ6dGhpcy5jb21wdXRlZH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICBsZXQgc3VwZXJDaGlsZENvbnRleHQ9c3VwZXIuZ2V0Q2hpbGRDb250ZXh0ID8gc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCkgOiB7fVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdXBlckNoaWxkQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB1c3VhbGx5IE5vQ2hpbGQgY29udGVudCBzaG91bGQgYmUgY29tcG9zZWQgYWNjb3JkaW5nIHRvIG5leHRBdmFpbGFibGVTcGFjZSxcbiAgICAgICAgICogYW5kIHRoZW4gYXBwZW5kIHRvIGl0c2VsZi5jb21wb3NlZFtdIGFuZCBwYXJlbnQuYXBwZW5kQ29tcG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikvKioqKk1VU1QgdXNlIHRvQXJyYXkoY2hpbGRyZW4pLCBzaW5jZSByZWNvbXBvc2UgdXNlIHRoaXMgd2F5IHRvIGNvbXBvc2UgcGFydCBvZiBjaGlsZHJlbiovfVxuICAgICAgICAgICAgICAgICAgICA8Q29tcG9zZWRBbGxUcmlnZ2VyIGhvc3Q9e3RoaXN9Lz5cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoaWxkcmVuIHNob3VsZCBjYWxsIGFmdGVyIGEgbGluZSBjb21wb3NlZCBvdXRcbiAgICAgICAgICogYSBjaGFuY2UgdG8gYWRkIHRvIHNlbGYncyBjb21wb3NlZFxuICAgICAgICAgKi9cbiAgICAgICAgYXBwZW5kQ29tcG9zZWQobGluZSkge1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hpbGRyZW4gc2hvdWxkIGNhbGwgYmVmb3JlIGNvbXBvc2luZyBsaW5lLFxuICAgICAgICAgKiByZXR1cm4gbmV4dCBsaW5lIHJlY3Qgeyp3aWR0aCwgW2hlaWdodF19XG4gICAgICAgICAqL1xuICAgICAgICBuZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSkge1xuXG4gICAgICAgIH1cblxuICAgICAgICBpc0FsbENoaWxkcmVuQ29tcG9zZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZFxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFsbENvbXBvc2VkIGlzIHZlcnkgaW1wb3J0YW50XG4gICAgICAgICAqIGlmIGNvbnRlbnQgaXMgc2tpcHBlZCBjb21wb3NlZCwgaXRzZWxmIGFuZCBncmFuZCBjb250ZW50IHNob3VsZCBiZSBzZXQgYXMgZmFsc2UsIFxuICAgICAgICAgKiB0aGVuIHRoaXMgZXZlbnQgb2YgZ3JhbmQgY29udGVudCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgICAgICogQGNoZWNrIHRoaXMubm90aWZ5Tm90QWxsQ29tcG9zZWRcbiAgICAgICAgICogXG4gICAgICAgICAqIEBjaGVjayBSZWNvbXBvc2FibGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlOiByZXNldCBhbGxDb21wb3NlZCB3aGVuIG5vdCBpc0FsbENoaWxkcmVuQ29tcG9zZWQsXG4gICAgICAgICAqIHNvIHRoaXMgZXZlbnQgY2FuIHdvcmtzIGFnYWluIFxuICAgICAgICAgKi9cbiAgICAgICAgb25BbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuICAgICAgICAgICAgaWYodGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZCE9PWZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9dHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5Tm90QWxsQ29tcG9zZWQoY3VycmVudCl7XG4gICAgICAgICAgICBjdXJyZW50LmNvbXB1dGVkLmFsbENvbXBvc2VkPWZhbHNlXG4gICAgICAgICAgICB3aGlsZShjdXJyZW50PWN1cnJlbnQuY29udGV4dC5wYXJlbnQpe1xuICAgICAgICAgICAgICAgIGN1cnJlbnQuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9ZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0ZUNvbXBvc2VkMlBhcmVudChjb250ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudFxuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGRlYnVnKCl7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRleHQuZGVidWd8fHRoaXMucHJvcHMuZGVidWdcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2xvc2VzdCh0eXBlKXtcbiAgICAgICAgICAgIHZhciBmbj10eXBlXG4gICAgICAgICAgICBpZih0eXBlb2YodHlwZSk9PVwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgZm49YT0+YS5nZXRDb21wb3NlVHlwZSgpPT10eXBlXG5cbiAgICAgICAgICAgIHZhciBjdXJyZW50PXRoaXNcbiAgICAgICAgICAgIHdoaWxlKGN1cnJlbnQpe1xuICAgICAgICAgICAgICAgIGlmKCEhZm4oY3VycmVudCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50XG4gICAgICAgICAgICAgICAgaWYoY3VycmVudC5jb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50PWN1cnJlbnQuY29udGV4dC5wYXJlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2hpbGRyZW5BcnJheT1tZW1vaXplKChjaGlsZHJlbj10aGlzLnByb3BzLmNoaWxkcmVuKT0+Q2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikpXG4gICAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgSGFzQ2hpbGQgZnJvbSBcIi4vaGFzQ2hpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCBBPT57XG5cdGNvbnN0IFN1cGVyPUhhc0NoaWxkKEEpXG4gICAgcmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBTdXBlcntcbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcyA9IHtcbiAgICAgICAgICAgIC4uLlN1cGVyLmNvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLm9iamVjdFxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGlsZHJlbiBzaG91bGQgY2FsbCBiZWZvcmUgY29tcG9zaW5nIGxpbmUsXG4gICAgICAgICAqIHJldHVybiBuZXh0IGxpbmUgcmVjdCB7KndpZHRoLCBbaGVpZ2h0XSwgW2dyZWVkeSh0ZXh0KT10cnVlXSwgW3dvcmR5KHRleHQpPXRydWVdfVxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dEF2YWlsYWJsZVNwYWNlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5wYXJlbnQubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGlsZHJlbiBzaG91bGQgY2FsbCBhZnRlciBhIGxpbmUgY29tcG9zZWQgb3V0XG4gICAgICAgICAqIGEgY2hhbmNlIHRvIGFkZCB0byBzZWxmJ3MgY29tcG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIGFwcGVuZENvbXBvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQoLi4uYXJndW1lbnRzKSlcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IEhhc1BhcmVudEFuZENoaWxkIGZyb20gXCIuL2hhc1BhcmVudEFuZENoaWxkXCJcbmV4cG9ydCBkZWZhdWx0IEE9PntcbiAgICBjb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChBKVxuICAgIHJldHVybiBjbGFzcyBfXyQxIGV4dGVuZHMgU3VwZXJ7XG4gICAgICAgIGdldCBpc0F0b20oKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpc0F0b21DaGFuZ2VkKHtoYXNoLGNoYW5nZWQ9aGFzaD09dGhpcy5wcm9wcy5oYXNofSl7XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZENvbXBvc2VkKClcbiAgICAgICAgICAgIHRoaXMub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50LENoaWxkcmVufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcbmltcG9ydCBDb21wb3NlZEFsbFRyaWdnZXIgZnJvbSBcIi4vY29tcG9zZWQtYWxsLXRyaWdnZXJcIlxuLyoqXG4gKiBtYWtlIGNvbXBvbmVudCBhbHdheXMgdXBkYXRlIChieSBjYWxsaW5nIC5yZW5kZXIpLCBzbyBBbGxDb21wb3NlZFRyaWdnZXIgd291bGQgYmUgdHJpZ2dlcmVkIHRvIGNvcnJlY3RseSBzZXQgYWxsQ29tcG9zZWRcbiAqIGJ1dCBhdCBmaXJzdCBjbGVhciBsYXN0IGNvbXBvc2VkIFxuICogXG4gKiBSZWNvbXBvc2U6XG4gKiAxLiBjYW5jZWwgYW5kIGtlZXAgbGFzdCBjb21wb3NlZCBhY2NvcmRpbmcgdG8gcHJvcHMvc3RhdGUvY29tcHV0ZWQvY29udGV4dFxuICogaW4gcmVuZGVyOlxuICogMi4gYXBwZW5kIGxhc3QgY29tcG9zZWRcbiAqIDMuIGNvbXBvc2Ugbm90IGNvbXBvc2VkXG5cbiAqIFRvIG1ha2UgZXZlcnl0aGluZyBjYWNoZWFibGUsIGNvbXBvbmVudCBjYW4gY3VzdG9taXplIGFwcGVuZExhc3RDb21wb3NlZCB0byBkZWZpbmUgaXRzZWxmIGNhY2hlIHBvbGljeVxuICogc2hvdWwgbGFzdENvbXBvc2VkIGJlIGNsZWFyZWRcbiAqIFxuICogQXRvbUNvbGxlY3RvcjogaXMgaW5saW5lIGNvbmFpbmVyIGFuZCBOb0NoaWxkIGluIFBhcmFncmFwaCwgUGFyYWdyYXBoLm5leHRBdmFpbGFibGVTcGFjZSB3b3VsZCBnaXZlIG51bGwgZm9yIEF0b21Db2xsZWN0b3IgdGVzdC5cbiAqIEF0b21Db2xsZWN0b3IgaXMganVzdCB0byBjb2xsZWN0IGF0b20gd2l0aG91dCBlaXRoZXIgYmxvY2sgb3IgaW5saW5lIGxheW91dCwgc28gdGhlIGNhY2hlIHBvbGljeSBpcyBzdXJlIGFzXG4gKiAqKiBpZiBub3QgY2hhbmdlLCBjYWNoZSBjYW4gYWx3YXlzIGJlIGFwcGxpY2FibGVcbiAqICoqIEF0b21Db2xsZWN0b3Igc2hvdWxkIGJlIGVpdGhlciBhbGwgY29tcG9zZWQsIG9yIG5vdGhpbmcgY29tcG9zZWRcbiAqICoqIE5vQ2hpbGQgYWxzbyB3b3JrcyBsaWtlIEF0b21Db2xsZWN0b3IgZnJvbSBjYWNoZSBwZXJzcGVjdGl2ZVxuICovXG5leHBvcnQgZGVmYXVsdCBBPT57XG4gICAgY2xhc3MgUmVjb21wb3NhYmxlIGV4dGVuZHMgQXtcbiAgICAgICAgc3RhdGljIGRpc3BsYXlOYW1lPWByZWNvbXBvc2FibGUtJHtBLmRpc3BsYXlOYW1lfWBcblxuICAgICAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29tcG9zYWJsZV9jcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVDb21wb3NlZDJQYXJlbnQoLi4uYXJndW1lbnRzKVxuICAgICAgICB9XG5cbiAgICAgICAgLy9jYWNoZSBsYXN0IGNvbXBvc2VkIGZvciBuZXh0IHRpbWVcbiAgICAgICAgY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG4gICAgICAgICAgICBjb25zdCBjb21wb3NlZD10aGlzLnJlY29tcG9zYWJsZV9jcmVhdGVDb21wb3NlZDJQYXJlbnQoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQucHVzaChjb21wb3NlZClcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFxuICAgICAgICB9XG5cbiAgICAgICAgLy9hbHdheXMgY2FsbCByZW5kZXIgdG8gY29tcG9zZSB0byBzeW5jIG9uQWxsQ2hpbGRyZW5Db21wb3NlZFxuICAgICAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dCl7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGNvbXBvc2VkVVVJRCB0byBpZGVudGlmeSBlYWNoIGNvbXBvc2UsIHNvIGNyZWF0ZUNvbXBvc2VkMlBhcmVudCBjYW4gYmUgY2FjaGVkLlxuICAgICAgICAgICAgICovICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEPURhdGUubm93KClcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcbiAgICAgICAgICAgICAgICAvL2NsZWFyIGxhc3QgYWxsQ29tcG9zZWQsIHNvIGl0IGNhbiBiZSByZXNldFxuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9dW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLmNvbnRleHQuc2hvdWxkQ29udGludWVDb21wb3NlICYmICF0aGlzLmNvbnRleHQuc2hvdWxkQ29udGludWVDb21wb3NlKHRoaXMpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0byByZW1vdmUgdW51c2FibGUgY29tcG9zZWQsIGFuZCBrZWVwIHVzYWJsZSwgdGhlbiBhcHBlbmQgdXNhYmxlIHRvIHBhcmVudCBpbiByZW5kZXIgXG4gICAgICAgICAqIGFsbCBjb21wdXRlZCBzaG91bGQgYmUgc3luY2VkIGhlcmVcbiAgICAgICAgICogQHBhcmFtIHsqfSBuZXh0UHJvcHMgXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbmV4dFN0YXRlIFxuICAgICAgICAgKi9cbiAgICAgICAgY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQocHJvcHMpe1xuICAgICAgICAgICAgaWYodGhpcy5pc0F0b21Db2xsZWN0b3IoKSAmJiAhdGhpcy5pc0F0b21DaGFuZ2VkKC4uLmFyZ3VtZW50cykpe1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkPVtdXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZD1bXVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZD11bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAqIGFsbCBjb21wdXRlZCBzaG91bGQgYmUgc3luY2VkIGhlcmUgYWdhaW4gYmFzZWQgb24gY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWRcbiAgICAgICAgICogQHJldHVyblxuICAgICAgICAgKiBudW1iZXI6IG5lZWQgcmVuZGVyIGZyb20gdGhlIGluZGV4XG4gICAgICAgICAqIHRydWU6IHN1Y2Nlc3MsIHJlbmRlciBub3RoaW5nLFxuICAgICAgICAgKiBvdGhlcnM6IGZhaWwsIHJlbmRlciBhbGxcbiAgICAgICAgICovXG4gICAgICAgIGFwcGVuZExhc3RDb21wb3NlZCgpe1xuICAgICAgICAgICAgaWYodGhpcy5pc0F0b21Db2xsZWN0b3IoKSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuZm9yRWFjaChhPT50aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKGEpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvL2xhc3QgY29tcG9zZWQgKyBsZWZ0XG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgaWYodGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQubGVuZ3RoPjApe1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwcGVuZGVkPXRoaXMuYXBwZW5kTGFzdENvbXBvc2VkKClcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YoYXBwZW5kZWQpPT1cIm51bWJlclwiICYmIGFwcGVuZGVkPi0xKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmdldENvbXBvc2VUeXBlKCl9WyR7dGhpcy5wcm9wcy5pZH1dIHVzZWQgJHthcHBlbmRlZCsxfSBjaGlsZHJlbiBjYWNoZXNgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikuc2xpY2UoYXBwZW5kZWQrMSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbXBvc2VkQWxsVHJpZ2dlciBob3N0PXt0aGlzfS8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoYXBwZW5kZWQ9PT10cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmdldENvbXBvc2VUeXBlKCl9WyR7dGhpcy5wcm9wcy5pZH1dIHVzZWQgYWxsIGNoaWxkcmVuIGNhY2hlc2ApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmdldENvbXBvc2VUeXBlKCl9WyR7dGhpcy5wcm9wcy5pZH1dIHVzZWQgMCBjaGlsZHJlbiBjYWNoZXNgKVxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpXG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZElkT2YoY29tcG9zZWQsaWQpe1xuICAgICAgICAgICAgY29uc3QgZXh0cmFjdD0oe3Byb3BzOntcImRhdGEtY29udGVudFwiOmEsY2hpbGRyZW59fSk9PihpZD1hKSE9dW5kZWZpbmVkID8gXG4gICAgICAgICAgICAgICAgdHJ1ZSA6ICBDaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKS5maW5kSW5kZXgoZXh0cmFjdCkhPS0xO1xuICAgICAgICAgICAgZXh0cmFjdChjb21wb3NlZClcbiAgICAgICAgICAgIGlmKHRoaXMuY2hpbGRyZW5BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5maW5kSW5kZXgoYT0+YSAmJiBhLnByb3BzLmlkPT1pZCkhPS0xKVxuICAgICAgICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW5OZWVkUmVjb21wb3NlPW1lbW9pemUoKGIsYSk9PntcbiAgICAgICAgICAgIGNvbnN0IG5leHQ9Q2hpbGRyZW4udG9BcnJheShiLmNoaWxkcmVuKVxuICAgICAgICAgICAgY29uc3QgY3VycmVudD10aGlzLmNoaWxkcmVuQXJyYXkoYS5jaGlsZHJlbilcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRJbmRleD1jdXJyZW50LmZpbmRJbmRleCgoe3Byb3BzOntpZCxoYXNofX0saSxfLCQsYj1uZXh0W2ldKT0+IShiICYmIGIucHJvcHMuaWQ9PWlkICYmIGIucHJvcHMuaGFzaD09aGFzaCkpXG4gICAgICAgICAgICByZXR1cm4gY3VycmVudC5zbGljZShjaGFuZ2VkSW5kZXgpLm1hcChhPT5hICYmIGEucHJvcHMuaWQpXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGJhc2VkIG9uIFBhcmFncmFwaCdzIG5leHRBdmFpbGFibGVTcGFjZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgaXNBdG9tQ29sbGVjdG9yKCl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0F0b20gfHwgdGhpcy5wcm9wcy5pc0lubGluZUNvbnRhaW5lclxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlY29tcG9zYWJsZVxufVxuIiwiXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG4vKipJdCB0byBtYWtlIGNvbXBvc2VkIHJlc3VsdCBsb2NhdGFibGUgdGhyb3VnaCBpZCBhbmQgdHlwZSAqL1xuZnVuY3Rpb24gTG9jYXRhYmxlKEEpe1xuXHRyZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEF7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPWBsb2NhdGFibGUtJHtBLmRpc3BsYXlOYW1lfWBcblx0XHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHRcdC4uLkEucHJvcFR5cGVzLFxuXHRcdFx0aWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuXHRcdH1cblxuICAgICAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgICAgIC4uLkEuY29udGV4dFR5cGVzLFxuICAgICAgICAgICAgbW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICAgICAgdW5tb3VudDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0XHRnZXRDb21wb3NlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0Lm1vdW50ICYmIHRoaXMucHJvcHMuaWQgJiYgdGhpcy5jb250ZXh0Lm1vdW50KHRoaXMpXG4gICAgICAgIH1cblxuICAgICAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xuICAgICAgICAgICAgLy90aGlzLmNvbnRleHQudW5tb3VudCAmJiB0aGlzLmNvbnRleHQudW5tb3VudCh0aGlzKVxuICAgICAgICB9XG5cblx0XHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcblx0XHRcdGNvbnN0IGVsZW1lbnQ9c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcblx0XHRcdGlmKFJlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpICYmIHRoaXMucHJvcHMuaWQpe1xuXHRcdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGVsZW1lbnQse1xuXHRcdFx0XHRcdFx0XCJkYXRhLWNvbnRlbnRcIjp0aGlzLnByb3BzLmlkLFxuXHRcdFx0XHRcdFx0XCJkYXRhLXR5cGVcIjp0aGlzLmdldENvbXBvc2VUeXBlKClcblx0XHRcdFx0XHR9KVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIExvY2F0b3JpemUoQSl7XG5cdHJldHVybiBjbGFzcyBfXyQxIGV4dGVuZHMgQXtcblx0XHRzdGF0aWMgZGlzcGxheU5hbWU9YGxvY2F0b3ItJHtBLmRpc3BsYXlOYW1lfWBcblx0XHRzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuXHRcdFx0Li4uQS5jaGlsZENvbnRleHRUeXBlcyxcblx0XHRcdG1vdW50OiBQcm9wVHlwZXMuZnVuYyxcblx0XHRcdHVubW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRcdFx0Z2V0Q29tcG9zZXI6IFByb3BUeXBlcy5mdW5jLFxuXHRcdH1cblxuXHRcdGNvbnN0cnVjdG9yKCl7XG5cdFx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0XHRjb25zdCBjb21wb3NlcnM9dGhpcy5jb21wb3NlcnM9bmV3IE1hcChbW3RoaXMucHJvcHMuaWQsdGhpc11dKVxuXHRcdFx0dGhpcy5tb3VudD1hPT5jb21wb3NlcnMuc2V0KGEucHJvcHMuaWQsYSlcblx0XHRcdHRoaXMudW5tb3VudD1hPT57XG5cdFx0XHRcdGlmKGNvbXBvc2Vycy5nZXQoYS5wcm9wcy5pZCk9PWEpe1xuXHRcdFx0XHRcdGNvbXBvc2Vycy5kZWxldGUoYS5wcm9wcy5pZClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRDb21wb3Nlcj1pZD0+Y29tcG9zZXJzLmdldChpZClcblx0XHR9XG5cblx0XHRnZXRDaGlsZENvbnRleHQoKXtcblx0XHRcdGNvbnN0IHttb3VudCx1bm1vdW50LGdldENvbXBvc2VyfT10aGlzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHQuLi5zdXBlci5nZXRDaGlsZENvbnRleHQoKSxcblx0XHRcdFx0bW91bnQsdW5tb3VudCxnZXRDb21wb3NlclxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5Mb2NhdGFibGUuTG9jYXRvcml6ZT1Mb2NhdG9yaXplXG5cbmV4cG9ydCBkZWZhdWx0IExvY2F0YWJsZVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5leHBvcnQgZGVmYXVsdCAoQSxhbHdheXM9dHJ1ZSk9PmNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gc3RvcHBhYmxlLSR7QS5kaXNwbGF5TmFtZX1gXG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIC4uLkEuY29udGV4dFR5cGVzLFxuICAgICAgICBzaG91bGRDb250aW51ZUNvbXBvc2U6IFByb3BUeXBlcy5mdW5jXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGlmKHRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2Upe1xuICAgICAgICAgICAgaWYoYWx3YXlzIHx8IHRoaXMucHJvcHMuc3RvcHBhYmxlKXtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5jb250ZXh0LnNob3VsZENvbnRpbnVlQ29tcG9zZSh0aGlzKSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSBza2lwIGNvbXBvc2VkYClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKClcbiAgICB9XG59XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuZXhwb3J0IGRlZmF1bHQgQT0+Y2xhc3MgX18kMSBleHRlbmRzIEF7XG4gICAgc3RhdGljIGRpc3BsYXlOYW1lPWBjb250aW51YWJsZS0ke0EuZGlzcGxheU5hbWV9YFxuXG4gICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcblx0XHQuLi5BLmNoaWxkQ29udGV4dFR5cGVzLFxuXHRcdHNob3VsZENvbnRpbnVlQ29tcG9zZTogUHJvcFR5cGVzLmZ1bmNcblx0fVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5nZXRDaGlsZENvbnRleHQoKSxcbiAgICAgICAgICAgIHNob3VsZENvbnRpbnVlQ29tcG9zZTp0aGlzLnNob3VsZENvbnRpbnVlQ29tcG9zZS5iaW5kKHRoaXMpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG91bGRDb250aW51ZUNvbXBvc2UoY3VycmVudCl7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNob3VsZENvbnRpbnVlQ29tcG9zZSBtdXN0IGJlIGltcGxlbWVudGVkLCBhbmQgbm90aWZ5Tm90QWxsQ29tcG9zZWQgd2hlbiBmYWxzZVwiKVxuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0ZyYWdtZW50LCBQdXJlQ29tcG9uZW50IGFzIENvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRleHQgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtcblx0XHRcdGNoaWxkcmVuLCB3aGl0ZVNwYWNlLCBjb2xvcjpmaWxsLCBoaWdobGlnaHQsYm9yZGVyLHVuZGVybGluZSxzdHJpa2UsXG5cdFx0XHRkZXNjZW50LG1pbldpZHRoLCBoZWlnaHQsIHdpZHRoLCBibG9ja09mZnNldCxtZXJnZU9wcG9ydHVuaXR5LC8vaWdub3JlXG5cdFx0XHR5LFxuXHRcdFx0Li4ub3RoZXJzfT10aGlzLnByb3BzXG5cblx0XHRsZXQgYmFja2dyb3VuZD1udWxsXG5cdFx0aWYoaGlnaGxpZ2h0IHx8IGJvcmRlcil7XG5cdFx0XHRsZXQgcHJvcHM9e1xuXHRcdFx0XHRcdHdpZHRoOk1hdGguY2VpbCh3aWR0aCksXG5cdFx0XHRcdFx0aGVpZ2h0Ok1hdGguY2VpbChoZWlnaHQpLFxuXHRcdFx0XHRcdGZpbGw6aGlnaGxpZ2h0fHxcIm5vbmVcIixcblx0XHRcdFx0XHR4OjAseTp5LWhlaWdodCtkZXNjZW50XG5cdFx0XHRcdH1cblx0XHRcdGlmKGJvcmRlcil7XG5cdFx0XHRcdHByb3BzLnN0cm9rZT1cImJsYWNrXCJcblx0XHRcdFx0cHJvcHMuc3Ryb2tlV2lkdGg9MC41XG5cdFx0XHR9XG5cdFx0XHRiYWNrZ3JvdW5kPSg8cmVjdCB7Li4ucHJvcHN9Lz4pXG5cdFx0fVxuXHRcdGxldCBkZWNvcmF0aW9uPW51bGxcblx0XHRpZih1bmRlcmxpbmUpe1xuXHRcdFx0bGV0IHk9TWF0aC5jZWlsKGRlc2NlbnQvMilcblx0XHRcdGxldCBzdHJva2VXaWR0aD0oYT0+e1xuXHRcdFx0XHRcdHN3aXRjaCh1bmRlcmxpbmUpe1xuXHRcdFx0XHRcdFx0Y2FzZSBcImRvdWJsZVwiOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYSoyO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pKDAuNSlcblx0XHRcdGRlY29yYXRpb249KDxsaW5lIHkxPXt5fSB4Mj17d2lkdGh9IHkyPXt5fSBzdHJva2U9XCJibGFja1wiIHN0cm9rZVdpZHRoPXtzdHJva2VXaWR0aH0vPilcblx0XHR9XG5cblx0XHRsZXQgc3RyaWtlbGluZT1udWxsXG5cdFx0aWYoc3RyaWtlKXtcblx0XHRcdGxldCB5PS1kZXNjZW50XG5cdFx0XHRzdHJpa2VsaW5lPSg8bGluZSB5MT17eX0geDI9e3dpZHRofSB5Mj17eX0gc3Ryb2tlPVwiYmxhY2tcIiBzdHJva2VXaWR0aD17MC41fS8+KVxuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7YmFja2dyb3VuZH1cblx0XHRcdFx0e3N0cmlrZWxpbmV9XG5cdFx0XHRcdHtkZWNvcmF0aW9ufVxuXHRcdFx0XHQ8dGV4dCBzdHlsZT17e3VzZXJTZWxlY3Q6XCJub25lXCIsd2hpdGVTcGFjZTpcInByZVwiLGN1cnNvcjpcInRleHRcIn19XG5cdFx0XHRcdFx0eT17eXx8MH1cblx0XHRcdFx0XHR7Li4ub3RoZXJzfVxuXHRcdFx0XHRcdGZpbGw9e2ZpbGx9PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC90ZXh0PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdH1cblxuXHRzdGF0aWMgRHluYW1pYz0oe2NoaWxkcmVuLCAuLi5wcm9wc30pPT48VGV4dCB7Li4ucHJvcHN9IGNoaWxkcmVuPXtjaGlsZHJlbigpfS8+XG59IiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudCwgQ2hpbGRyZW59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuL2dyb3VwXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGF5ZXIgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgc3RhdGljIGRpc3BsYXlOYW1lPVwibGF5ZXJcIlxuICAgIHN0YXRpYyBwcm9wVHlwZXM9e1xuICAgICAgICB6OlByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHthY3RpdmU9dHJ1ZSxzdHlsZSwgY2hpbGRyZW4sIGFyZWFzPVtdfT10aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IElnbm9yZT1lPT5lLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGNvbnN0IGlnbm9yZUV2ZW50cz1cIm9uQ2xpY2ssb25Nb3VzZURvd24sb25Nb3VzZU1vdmUsb25Nb3VzZVVwLG9uQ29udGV4dE1lbnVcIi5zcGxpdChcIixcIikucmVkdWNlKChvLGspPT4ob1trXT1JZ25vcmUsbykse30pXG4gICAgICAgIGlmKCFhY3RpdmUpe1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8R3JvdXAgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICB7YXJlYXMubWFwKGE9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoYSx7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaWdub3JlRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRG91YmxlQ2xpY2s6ZT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWNrPW5ldyBNb3VzZUV2ZW50KCdjbGljaycse2J1YmJsZXM6dHJ1ZSxjYW5jZWxhYmxlOnRydWUsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFl9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldC52aWV3cG9ydEVsZW1lbnQuZGlzcGF0Y2hFdmVudChjbGljaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICg8R3JvdXA+e2NoaWxkcmVufTwvR3JvdXA+KVxuICAgIH1cblxuICAgIHN0YXRpYyBDb250YWluZXI9d2hlblNlbGVjdGlvbkNoYW5nZSgoe3NlbGVjdGlvbn0pPT57XG4gICAgICAgIGlmKCFzZWxlY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgY29uc3QgcHJvcHM9c2VsZWN0aW9uLnByb3BzKFwicGFnZVwiKVxuICAgICAgICBjb25zdCBhY3RpdmU9cHJvcHMgPyBwcm9wcy5sYXllciA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge2FjdGl2ZX1cbiAgICB9KShjbGFzcyBMYXllckNvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudHtcbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgICAgICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dC5lZGl0YWJsZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57dGhpcy5wcm9wcy5jaGlsZHJlbn08L0ZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qge2FjdGl2ZSwgYWN0aXZlU3R5bGUsIGluYWN0aXZlU3R5bGV9PXRoaXMucHJvcHNcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuPUNoaWxkcmVuLnRvQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikuZmlsdGVyKGE9PiEhYSkuc29ydCgoe3Byb3BzOmF9LHtwcm9wczpifSk9PmEuei1iLnopXG4gICAgICAgICAgICBjb25zdCBpbmFjdGl2ZUxheWVycz1jaGlsZHJlbi5maWx0ZXIoYT0+YS5wcm9wcy56IT1hY3RpdmUpLm1hcChhPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSwge2FjdGl2ZTpmYWxzZSxzdHlsZTppbmFjdGl2ZVN0eWxlfSkpXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVMYXllcj1jaGlsZHJlbi5maW5kKGE9PmEucHJvcHMuej09YWN0aXZlKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHtbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbmFjdGl2ZUxheWVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUxheWVyJiZhY3RpdmVTdHlsZSA/IFJlYWN0LmNsb25lRWxlbWVudChhY3RpdmVMYXllcix7c3R5bGU6YWN0aXZlU3R5bGV9KSA6IGFjdGl2ZUxheWVyXG4gICAgICAgICAgICAgICAgICAgIF0uZmlsdGVyKGE9PiEhYSl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH0pXG59IiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBDaGlsZHJlbiwgRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuL3RleHRcIlxuaW1wb3J0IExheWVyIGZyb20gXCIuL2xheWVyXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JvdXAgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdGhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHR4OlByb3BUeXBlcy5udW1iZXIsXG5cdFx0eTpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHo6UHJvcFR5cGVzLm51bWJlcixcblx0fVxuXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdGRlYnVnOiBQcm9wVHlwZXMuYm9vbFxuXHR9XG5cblx0c3RhdGljIExheWVyPUxheWVyXG5cdHN0YXRpYyBMYXllcnM9TGF5ZXIuQ29udGFpbmVyXG5cbiAgICByZW5kZXIoKXtcblx0XHRsZXQge1xuXHRcdFx0aW5uZXJSZWYsIC8vZm9yIHdheXBvaW50XG5cdFx0XHRyb3RhdGUsXG5cdFx0XHR4PTAseT0wLFxuXHRcdFx0Y2hpbGRyZW4sXG5cdFx0XHRiYWNrZ3JvdW5kLFxuXHRcdFx0bWFyZ2luLG1pbldpZHRoLCB3aWR0aCwgaGVpZ2h0LCBpbmRleCwgY2hpbGRJbmRleCxnZW9tZXRyeSxiYXNlbGluZSxsaW5lRGVzY2VudCxpc0xhc3RSYW5rT2ZSb3csaXNGaXJzdFJvd0luUGFnZSxcblx0XHRcdGNvbnRlbnRXaWR0aCx3cmFwLHBhZ2luYXRpb24sYW5jaG9yLGJsb2NrT2Zmc2V0LG5hbWVkLGRlc2NlbnQsbWVyZ2VPcHBvcnR1bml0eSwgc3BhY2VIZWlnaHQsZWRpdGFibGUsZGlzcGF0Y2gsXG5cdFx0XHQvL2NsYXNzTmFtZSxpZCxcblx0XHRcdEksXG5cdFx0XHQuLi5vdGhlcnN9PXRoaXMucHJvcHNcblx0XHRjb25zdCBwcm9wcz17fVxuXG5cdFx0aWYoaW5uZXJSZWYpe1xuXHRcdFx0cHJvcHMucmVmPWlubmVyUmVmXG5cdFx0fVxuXG5cdFx0bGV0IHRyYW5zZm9ybT1cIlwiXG5cblx0XHRpZih4fHx5KXtcblx0XHRcdHRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7cGFyc2VJbnQoeHx8MCl9ICR7cGFyc2VJbnQoeXx8MCl9KWBcblx0XHR9XG5cblx0XHRpZihyb3RhdGUpe1xuXHRcdFx0dHJhbnNmb3JtPWAke3RyYW5zZm9ybX0gcm90YXRlKCR7cm90YXRlfSlgXG5cdFx0fVxuXG5cdFx0aWYodHJhbnNmb3JtLmxlbmd0aD4wKXtcblx0XHRcdHByb3BzLnRyYW5zZm9ybT10cmFuc2Zvcm1cblx0XHR9XG5cblx0XHRjb25zdCBjb250ZW50PVtcblx0XHRcdGJhY2tncm91bmQmJmJhY2tncm91bmQhPVwidHJhbnNwYXJlbnRcIiYmICg8cmVjdCB3aWR0aD17d2lkdGh9IGhlaWdodD17aGVpZ2h0fSBmaWxsPXtiYWNrZ3JvdW5kfSBrZXk9XCJiYWNrZ3JvdW5kXCIvPiksXG5cdFx0XHQuLi5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKS5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXk6aX0pKVxuXHRcdF0uZmlsdGVyKGE9PmEpXG5cblx0XHRpZih0aGlzLmNvbnRleHQuZGVidWcpe1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PGcgey4uLm90aGVyc30gey4uLnByb3BzfT5cblx0XHRcdFx0XHR7Y29udGVudH1cblx0XHRcdFx0PC9nPlxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdGNvbnN0IGtleXM9T2JqZWN0LmtleXMocHJvcHMpXG5cdFx0aWYoa2V5cy5sZW5ndGg9PTApe1xuXHRcdFx0cmV0dXJuIDxGcmFnbWVudD57Y29udGVudH08L0ZyYWdtZW50PlxuXHRcdH1lbHNlIGlmKGNvbnRlbnQubGVuZ3RoPT0xICYmIGtleXMubGVuZ3RoPT0xICYmIGtleXNbMF09PVwidHJhbnNmb3JtXCIgJiYgIXJvdGF0ZSl7XG5cdFx0XHRjb25zdCB7cHJvcHM6e3g6eDE9MCx5OnkxPTB9LHR5cGV9PWNvbnRlbnRbMF1cdFxuXHRcdFx0c3dpdGNoKHR5cGUpe1xuXHRcdFx0XHRjYXNlIFRleHQ6XG5cdFx0XHRcdGNhc2UgdGhpcy5jb25zdHJ1Y3Rvcjpcblx0XHRcdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNvbnRlbnRbMF0se3g6eDEreCx5OnkxK3l9KVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZyB7Li4ucHJvcHN9PlxuXHRcdFx0XHR7Y29udGVudH1cblx0XHRcdDwvZz5cblx0XHQpXG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQgV2F5cG9pbnQgZnJvbSBcInJlYWN0LXdheXBvaW50XCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi9ncm91cFwiXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcG9zZWREb2N1bWVudENhbnZhcyBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIGRpc3BsYXlOYW1lPVwiY29tcG9zZWQtZG9jdW1lbnQtZGVmYXVsdC1jYW52YXNcIlxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRtZWRpYTogUHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHRwYWdlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG5cdFx0cGFnZUdhcDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRzY2FsZTogUHJvcFR5cGVzLm51bWJlcixcblx0XHRkb2N1bWVudDogUHJvcFR5cGVzLm9iamVjdCxcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHBhZ2VHYXA6MjQsXG5cdFx0c2NhbGU6MSxcblx0fVxuXG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2RvY3VtZW50LC4uLm1lfSl7XG4gICAgICAgIGNvbnN0IHtwYWdlcyxwcm9wczp7c2NhbGU9bWUuc2NhbGUscGFnZUdhcD1tZS5wYWdlR2FwLHByZWNpc2lvbj1tZS5wcmVjaXNpb259fT1kb2N1bWVudFxuICAgICAgICByZXR1cm4ge3BhZ2VzLHByZWNpc2lvbixzY2FsZSxwYWdlR2FwfVxuXHR9XG5cdFxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cdH1cblxuXHRnZXRDb21wb3NlZChwYWdlcyxwYWdlR2FwKXtcblx0XHRjb25zdCBjb250ZW50PXBhZ2VzLm1hcChwYWdlPT5wYWdlLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKVxuXHRcdHJldHVybiBjb250ZW50LnJlZHVjZSgoc2l6ZSx7cHJvcHM6e3dpZHRoLGhlaWdodH19KT0+e1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihzaXplLHtcblx0XHRcdFx0XHR3aWR0aDpNYXRoLm1heChzaXplLndpZHRoLHdpZHRoKSxcblx0XHRcdFx0XHRoZWlnaHQ6c2l6ZS5oZWlnaHQraGVpZ2h0K3BhZ2VHYXAsXG5cdFx0XHRcdH0pXG5cdFx0XHR9LHt3aWR0aDowLGhlaWdodDpwYWdlR2FwLGNvbXBvc2VkOmNvbnRlbnR9KVxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge1xuXHRcdFx0c3RhdGU6e3BhZ2VzLCBwYWdlR2FwLCBzY2FsZSxwcmVjaXNpb249MX0sIFxuXHRcdFx0cHJvcHM6e3N0eWxlLGNoaWxkcmVuLGlubmVyUmVmLGRvY3VtZW50LHBhZ2VzOl8xLHBhZ2VHYXA6XzIsc2NhbGU6XzMscHJlY2lzaW9uOl80LHBhcGVyLF9fc2VxdWVudGlhbENvbXBvc2UsIC4uLnByb3BzfVxuXHRcdH09dGhpc1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsY29tcG9zZWR9PXRoaXMuZ2V0Q29tcG9zZWQocGFnZXMsIHBhZ2VHYXApXG5cdFx0cmV0dXJuICAgKFxuXHRcdFx0PHN2Z1xuXHRcdFx0XHR7Li4ucHJvcHN9XG5cdFx0XHRcdHJlZj17aW5uZXJSZWZ9XG5cdFx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pblwiXG5cdFx0XHRcdHZpZXdCb3g9e2AwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YH1cblx0XHRcdFx0c3R5bGU9e3tiYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIiwgd2lkdGg6d2lkdGgqc2NhbGUqcHJlY2lzaW9uLCBoZWlnaHQ6aGVpZ2h0KnNjYWxlKnByZWNpc2lvbiwgLi4uc3R5bGV9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdHt0aGlzLnBvc2l0aW9uUGFnZXMoY29tcG9zZWQsIHdpZHRoKX1cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PC9zdmc+XG5cdFx0KVxuXHR9XG5cblx0cG9zaXRpb25QYWdlcyhwYWdlcyxjYW52YXNXaWR0aCl7XG5cdFx0Y29uc3Qge3N0YXRlOntwYWdlR2FwLCBwcmVjaXNpb259LCBwcm9wczp7cGFwZXJ9LGNvbnRleHQ6e21lZGlhfX09dGhpc1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgeT17cGFnZUdhcH0geD17MH0+XG5cdFx0XHRcdHtwYWdlcy5yZWR1Y2UoKHBvc2l0aW9uZWQsIHBhZ2UpPT57XG5cdFx0XHRcdFx0Y29uc3Qge3dpZHRoLGhlaWdodCxtYXJnaW4sSX09cGFnZS5wcm9wc1xuXHRcdFx0XHRcdHBvc2l0aW9uZWQucHVzaCgvL3VzZSBnIHRvIG1ha2UgR3JvdXAgaWdub3JlIGNsYXNzTmFtZSBhbmQgaWQgZm9yIGJldHRlciBtZXJnZVxuXHRcdFx0XHRcdFx0PGcga2V5PXtJfSBjbGFzc05hbWU9e1wicGFnZVwifSBpZD17YHBhZ2Uke0l9YH0+XG5cdFx0XHRcdFx0XHRcdDxHcm91cCB7Li4ue3k6cG9zaXRpb25lZC55LHg6KGNhbnZhc1dpZHRoLXdpZHRoKS8yfX0+XG5cdFx0XHRcdFx0XHRcdFx0e21lZGlhPT1cImZpbGVcIiA/IHBhZ2UgOlxuXHRcdFx0XHRcdFx0XHRcdDxTbWFydFNob3cgey4uLntcblx0XHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOnBhZ2UsXG5cdFx0XHRcdFx0XHRcdFx0XHR3aWR0aCxoZWlnaHQsbWFyZ2luLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJlY2lzaW9uLHBhcGVyLFxuXHRcdFx0XHRcdFx0XHRcdH19Lz59XG5cdFx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0XHQ8L2c+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHRcdHBvc2l0aW9uZWQueSs9KGhlaWdodCtwYWdlR2FwKVxuXHRcdFx0XHRcdHJldHVybiBwb3NpdGlvbmVkXG5cdFx0XHRcdH0sT2JqZWN0LmFzc2lnbihbXSx7eTowfSkpfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblx0Ly9mb2xsb3cgc2FtZSBsYXlvdXQgb2YgcG9zaXRpb25QYWdlc1xuXHRzdGF0aWMgY29tcG9zZWRZKHBhZ2VzLCBwYWdlR2FwKXtcbiAgICAgICAgY29uc3QgbGFzdD1wYWdlc1twYWdlcy5sZW5ndGgtMV1cbiAgICAgICAgaWYoIWxhc3QpXG4gICAgICAgICAgICByZXR1cm4gMFxuICAgICAgICBjb25zdCBoZWlnaHRPZkxhc3Q9bGFzdC5jb250ZXh0LnBhcmVudC5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSA/IGxhc3QucHJvcHMuaGVpZ2h0IDogbGFzdC5jb21wb3NlZEhlaWdodFxuICAgICAgICByZXR1cm4gcGFnZXMuc2xpY2UoMCxwYWdlcy5sZW5ndGgtMSkucmVkdWNlKCh3LHBhZ2UpPT53K3BhZ2UucHJvcHMuaGVpZ2h0K3BhZ2VHYXAsaGVpZ2h0T2ZMYXN0KVxuXHR9XG5cblx0c3RhdGljIHBhZ2VSZWN0KEksIHN2Zyl7XG5cdFx0Y29uc3QgcGFnZT1zdmcucXVlcnlTZWxlY3RvcihcIiNwYWdlXCIrSSlcbiAgICAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXHR9XG59XG5cblxuY2xhc3MgU21hcnRTaG93IGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0ZT17ZGlzcGxheTpmYWxzZX1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2Rpc3BsYXl9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7Y2hpbGRyZW4sd2lkdGgsaGVpZ2h0LG1hcmdpbixwcmVjaXNpb24scGFwZXJ9PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFdheXBvaW50IGZpcmVPblJhcGlkU2Nyb2xsPXtmYWxzZX1cblx0XHRcdFx0b25FbnRlcj17ZT0+e3RoaXMuc2V0U3RhdGUoe2Rpc3BsYXk6dHJ1ZX0pfX1cblx0XHRcdFx0b25MZWF2ZT17ZT0+dGhpcy5zZXRTdGF0ZSh7ZGlzcGxheTpmYWxzZX0pfT5cblx0XHRcdFx0PGc+XG5cdFx0XHRcdFx0e3BhcGVyICYmIDxQYXBlciB7Li4ue3dpZHRoLGhlaWdodCxtYXJnaW4sZmlsbDpcIndoaXRlXCIsIHByZWNpc2lvbiwuLi5wYXBlcn19Lz59XG5cdFx0XHRcdFx0e2Rpc3BsYXkgPyBjaGlsZHJlbiA6IG51bGx9XG5cdFx0XHRcdDwvZz5cblx0XHRcdDwvV2F5cG9pbnQ+XG5cdFx0KVxuXHR9XG59XG5cbmNvbnN0IFBhcGVyPSh7d2lkdGgsaGVpZ2h0LCBtYXJnaW46e2xlZnQ9MCxyaWdodD0wLHRvcD0wLGJvdHRvbT0wfT17fSwgcHJlY2lzaW9uLCBib3JkZXI9dHJ1ZSxcblx0c3Ryb2tlV2lkdGg9MSpwcmVjaXNpb24sIG1hcmdpbldpZHRoPTIwKnByZWNpc2lvbiwgLi4ucHJvcHN9KT0+KFxuICAgPGcgY2xhc3NOYW1lPVwicGFwZXJcIj5cblx0ICAgPHJlY3Qgey4uLnByb3BzfSB7Li4ue3dpZHRoLGhlaWdodH19Lz5cblx0ICAge2JvcmRlciAmJiA8cGF0aCBzdHJva2VXaWR0aD17c3Ryb2tlV2lkdGh9IHN0cm9rZT1cImxpZ2h0Z3JheVwiIGZpbGw9XCJub25lXCIgZD17YFxuXHRcdCAgIFx0XHRNMCAwIGgke3dpZHRofSB2JHtoZWlnaHR9IGgkey13aWR0aH16XG5cdFx0XHRcdE0ke2xlZnQtTWF0aC5taW4obGVmdCxtYXJnaW5XaWR0aCl9ICR7dG9wfSBoJHtNYXRoLm1pbihsZWZ0LG1hcmdpbldpZHRoKX0gdiR7LU1hdGgubWluKHRvcCxtYXJnaW5XaWR0aCl9XG5cdFx0XHRcdE0ke2xlZnQtTWF0aC5taW4obGVmdCxtYXJnaW5XaWR0aCl9ICR7aGVpZ2h0LWJvdHRvbX0gaCR7TWF0aC5taW4obGVmdCxtYXJnaW5XaWR0aCl9IHYke01hdGgubWluKGJvdHRvbSxtYXJnaW5XaWR0aCl9XG5cdFx0XHRcdE0ke3dpZHRoLXJpZ2h0K01hdGgubWluKHJpZ2h0LG1hcmdpbldpZHRoKX0gJHtoZWlnaHQtYm90dG9tfSBoJHstTWF0aC5taW4ocmlnaHQsbWFyZ2luV2lkdGgpfSB2JHtNYXRoLm1pbihib3R0b20sbWFyZ2luV2lkdGgpfVxuXHRcdFx0XHRNJHt3aWR0aC1yaWdodCtNYXRoLm1pbihyaWdodCxtYXJnaW5XaWR0aCl9ICR7dG9wfSBoJHstTWF0aC5taW4ocmlnaHQsbWFyZ2luV2lkdGgpfSB2JHstTWF0aC5taW4odG9wLG1hcmdpbldpZHRoKX1cblx0XHRcdGB9Lz5cblx0XHR9XG4gICA8L2c+XG4pXG4iLCJpbXBvcnQgUmVhY3Qse1B1cmVDb21wb25lbnQgYXMgQ29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5cblxuZXhwb3J0IGNsYXNzIEltYWdlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRyZW5kZXIoKXtcblx0XHRyZXR1cm4gPGltYWdlIHsuLi50aGlzLnByb3BzfSAvPlxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlXG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYXBlIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHJlbmRlcigpe1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbn1cbiIsIi8qKlxuICogaXQncyB0byBkZXNjcmliZSBzcGFjZSB0aGF0IGxheW91dCBlbmdpbmUgdXNlXG4gKiBsZWZ0IDwtLT4gcmlnaHQ6IGlubGluZSBzaXplXG4gKiBibG9ja09mZnNldDogY3VycmVudCBibG9jayBvZmZzZXRcbiAqIGhlaWdodDogYXZhaWxhYmxlIGJsb2NrIHNpemUsIGJsb2NrT2Zmc2V0IDwtLS0+bGFzdCBibG9jayBsYXlvdXQgb3Bwb3J0dW5pdGllc1xuICogd3JhcHBlZXM6IGV4Y2x1ZGVkIGFyZWFzIGluIGEgc3BhY2VcbiAqL1xuXG4vKipcbiAqIHNwYWNlIGNhbiBiZSBjb25zdHJhaW5lZCBieSBpbmxpbmUgc2l6ZSwgYmxvY2sgc2l6ZSwgb3IgYm90aCwgXG4gKiBhbmQgZXhjbHVzaXZlIHdyYXBwZWVzXG4gKi9cbiBleHBvcnQgZGVmYXVsdCBjbGFzcyBTcGFjZXtcbiAgICBzdGF0aWMgY3JlYXRlKHNvdXJjZSl7XG4gICAgICAgIGlmKHNvdXJjZSBpbnN0YW5jZW9mIFNwYWNlKVxuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVxuICAgICAgICByZXR1cm4gbmV3IFNwYWNlKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICAgY29uc3RydWN0b3Ioe3dpZHRoLGxlZnQ9MCxyaWdodCwuLi5wcm9wc309e30pe1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMscHJvcHMpXG4gICAgICAgIHRoaXMucHJvcHM9YXJndW1lbnRzWzBdfHx7fVxuICAgICB9XG5cbiAgICAgZ2V0IHdpZHRoKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LXRoaXMubGVmdFxuICAgICB9XG5cbiAgICAgZ2V0IGxlZnQoKXtcbiAgICAgICAgIGNvbnN0IHtsZWZ0PTB9PXRoaXMucHJvcHNcbiAgICAgICAgIHJldHVybiBsZWZ0XG4gICAgIH1cblxuICAgICBnZXQgcmlnaHQoKXtcbiAgICAgICAgIGNvbnN0IHt3aWR0aCxyaWdodD13aWR0aH09dGhpcy5wcm9wc1xuICAgICAgICAgcmV0dXJuIHJpZ2h0XG4gICAgIH1cblxuICAgICBjbG9uZShtb2RpZmllcil7XG4gICAgICAgICBpZihtb2RpZmllciBpbnN0YW5jZW9mIFNwYWNlKXtcbiAgICAgICAgICAgIG1vZGlmaWVyPW1vZGlmaWVyLnByb3BzXG4gICAgICAgICB9XG4gICAgICAgICByZXR1cm4gbmV3IFNwYWNlKHsuLi50aGlzLnByb3BzLCAuLi5tb2RpZmllcixlZGdlczp7Li4udGhpcy5wcm9wcy5lZGdlcywgLi4ubW9kaWZpZXIuZWRnZXMsfX0pXG4gICAgIH1cblxuICAgICBhbmNob3Ioe2Jhc2UsIG9mZnNldD0wLCBhbGlnbn0se3dpZHRoPTAsaGVpZ2h0PTB9PXt9KXtcbiAgICAgICAgY29uc3Qge2VkZ2VzfT10aGlzLnByb3BzXG4gICAgICAgIGlmKCFlZGdlcyB8fCAhZWRnZXNbYmFzZV0gfHwgIShhbGlnbiBpbiBlZGdlc1tiYXNlXSkpXG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0XG4gICAgICAgIFxuICAgICAgICBjb25zdCB7W2Jhc2VdOntbYWxpZ25dOnY9MH09e319PWVkZ2VzXG4gICAgICAgIHN3aXRjaChhbGlnbil7XG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjogXG4gICAgICAgICAgICAgICAgcmV0dXJuIHYtb2Zmc2V0LXdpZHRoXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6IFxuICAgICAgICAgICAgICAgIHJldHVybiB2LW9mZnNldC1oZWlnaHRcbiAgICAgICAgICAgIGRlZmF1bHQ6IFxuICAgICAgICAgICAgICAgIHJldHVybiB2K29mZnNldCBcbiAgICAgICAgfVxuICAgICB9XG5cbiAgICAgaXNJbmxpbmVTaXplRGlmZmVyZW50KHRoYXQpe1xuICAgICAgICBpZighIXRoaXMuY29scyE9PSEhdGhhdC5jb2xzKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgY29uc3Qge3dpZHRoLGNvbHN9PXRoYXRcbiAgICAgICAgaWYoIWNvbHMpXG4gICAgICAgICAgICByZXR1cm4gd2lkdGghPXRoaXMud2lkdGhcbiAgICAgICAgaWYoY29scy5sZW5ndGghPXRoaXMuY29scy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICBpZih0aGlzLmNvbHMuZmluZCgoYSxpLF8sJCxiPWNvbHNbaV0pPT5hLndpZHRoIT1iLndpZHRoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgIH1cblxuICAgICBlcXVhbHModGhhdCl7XG4gICAgICAgICBpZighdGhpcy5pc0lubGluZVNpemVEaWZmZXJlbnQodGhhdCkpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0PT10aGF0LmhlaWdodFxuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgIH1cbiB9XG4gXG4iLCIvKipcbiAqIFNpbXBsZSBQb2ludCBjbGFzcy5cbiAqXG4gKiBBbnkgbWV0aG9kIHRoYXQgdGFrZXMgYW4geCBhbmQgeSBtYXkgYWxzbyB0YWtlIGEgcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgdGhpcy5zZXQoeCwgeSk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcbiAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24gc2V0KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMoeCwgeSkge1xuICAgIHJldHVybiB0aGlzLnggPT0geCAmJiB0aGlzLnkgPT0geTtcbiAgfSxcblxuICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFwiKFwiICsgdGhpcy54ICsgXCIsXCIgKyB0aGlzLnkgKyBcIilcIjtcbiAgfSxcblxuICBtYXA6IGZ1bmN0aW9uIG1hcChmKSB7XG4gICAgdGhpcy54ID0gZi5jYWxsKHRoaXMsIHRoaXMueCk7XG4gICAgdGhpcy55ID0gZi5jYWxsKHRoaXMsIHRoaXMueSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgYWRkOiBmdW5jdGlvbiBhZGQoeCwgeSkge1xuICAgIHRoaXMueCArPSB4O1xuICAgIHRoaXMueSArPSB5O1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdCh4LCB5KSB7XG4gICAgdGhpcy54IC09IHg7XG4gICAgdGhpcy55IC09IHk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgc2NhbGU6IGZ1bmN0aW9uIHNjYWxlKHMpIHtcbiAgICB0aGlzLnggKj0gcztcbiAgICB0aGlzLnkgKj0gcztcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBpc1plcm8oKSB7XG4gICAgcmV0dXJuIHRoaXMueCA9PSAwICYmIHRoaXMueSA9PSAwO1xuICB9LFxufTtcblxuKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0YWtlUG9pbnRPckFyZ3MoZikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcmcxLCBhcmcyKSB7XG4gICAgICBpZiAoYXJnMiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gZi5jYWxsKHRoaXMsIGFyZzEueCwgYXJnMS55KTtcbiAgICAgIHJldHVybiBmLmNhbGwodGhpcywgYXJnMSwgYXJnMik7XG4gICAgfTtcbiAgfVxuXG4gIGZvciAobGV0IGYgb2YgW1wiYWRkXCIsIFwic3VidHJhY3RcIiwgXCJlcXVhbHNcIiwgXCJzZXRcIl0pXG4gICAgUG9pbnQucHJvdG90eXBlW2ZdID0gdGFrZVBvaW50T3JBcmdzKFBvaW50LnByb3RvdHlwZVtmXSk7XG59KSgpO1xuXG5cbi8qKlxuICogUmVjdCBpcyBhIHNpbXBsZSBkYXRhIHN0cnVjdHVyZSBmb3IgcmVwcmVzZW50YXRpb24gb2YgYSByZWN0YW5nbGUgc3VwcG9ydGluZ1xuICogbWFueSBiYXNpYyBnZW9tZXRyaWMgb3BlcmF0aW9ucy5cbiAqXG4gKiBOT1RFOiBTaW5jZSBpdHMgb3BlcmF0aW9ucyBhcmUgY2xvc2VkLCByZWN0YW5nbGVzIG1heSBiZSBlbXB0eSBhbmQgd2lsbCByZXBvcnRcbiAqIG5vbi1wb3NpdGl2ZSB3aWR0aHMgYW5kIGhlaWdodHMgaW4gdGhhdCBjYXNlLlxuICovXG5cbmZ1bmN0aW9uIFJlY3QoeCwgeSwgdywgaCkge1xuICB0aGlzLmxlZnQgPSB4O1xuICB0aGlzLnRvcCA9IHk7XG4gIHRoaXMucmlnaHQgPSB4ICsgdztcbiAgdGhpcy5ib3R0b20gPSB5ICsgaDtcbn1cblxuUmVjdC5mcm9tUmVjdCA9IGZ1bmN0aW9uIGZyb21SZWN0KHIpIHtcbiAgcmV0dXJuIG5ldyBSZWN0KHIubGVmdCwgci50b3AsIHIucmlnaHQgLSByLmxlZnQsIHIuYm90dG9tIC0gci50b3ApO1xufTtcblxuUmVjdC5wcm90b3R5cGUgPSB7XG4gIGdldCB4KCkgeyByZXR1cm4gdGhpcy5sZWZ0OyB9LFxuICBnZXQgeSgpIHsgcmV0dXJuIHRoaXMudG9wOyB9LFxuICBnZXQgd2lkdGgoKSB7IHJldHVybiB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0OyB9LFxuICBnZXQgaGVpZ2h0KCkgeyByZXR1cm4gdGhpcy5ib3R0b20gLSB0aGlzLnRvcDsgfSxcbiAgc2V0IHgodikge1xuICAgIGxldCBkaWZmID0gdGhpcy5sZWZ0IC0gdjtcbiAgICB0aGlzLmxlZnQgPSB2O1xuICAgIHRoaXMucmlnaHQgLT0gZGlmZjtcbiAgfSxcbiAgc2V0IHkodikge1xuICAgIGxldCBkaWZmID0gdGhpcy50b3AgLSB2O1xuICAgIHRoaXMudG9wID0gdjtcbiAgICB0aGlzLmJvdHRvbSAtPSBkaWZmO1xuICB9LFxuICBzZXQgd2lkdGgodikgeyB0aGlzLnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdjsgfSxcbiAgc2V0IGhlaWdodCh2KSB7IHRoaXMuYm90dG9tID0gdGhpcy50b3AgKyB2OyB9LFxuXG4gIGlzRW1wdHk6IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdCA+PSB0aGlzLnJpZ2h0IHx8IHRoaXMudG9wID49IHRoaXMuYm90dG9tO1xuICB9LFxuXG4gIHNldFJlY3QoeCwgeSwgdywgaCkge1xuICAgIHRoaXMubGVmdCA9IHg7XG4gICAgdGhpcy50b3AgPSB5O1xuICAgIHRoaXMucmlnaHQgPSB4ICsgdztcbiAgICB0aGlzLmJvdHRvbSA9IHkgKyBoO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgc2V0Qm91bmRzKGwsIHQsIHIsIGIpIHtcbiAgICB0aGlzLnRvcCA9IHQ7XG4gICAgdGhpcy5sZWZ0ID0gbDtcbiAgICB0aGlzLmJvdHRvbSA9IGI7XG4gICAgdGhpcy5yaWdodCA9IHI7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBlcXVhbHM6IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiBvdGhlciAhPSBudWxsICYmXG4gICAgICAgICAgICAodGhpcy5pc0VtcHR5KCkgJiYgb3RoZXIuaXNFbXB0eSgpIHx8XG4gICAgICAgICAgICB0aGlzLnRvcCA9PSBvdGhlci50b3AgJiZcbiAgICAgICAgICAgIHRoaXMubGVmdCA9PSBvdGhlci5sZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLmJvdHRvbSA9PSBvdGhlci5ib3R0b20gJiZcbiAgICAgICAgICAgIHRoaXMucmlnaHQgPT0gb3RoZXIucmlnaHQpO1xuICB9LFxuXG4gIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFJlY3QodGhpcy5sZWZ0LCB0aGlzLnRvcCwgdGhpcy5yaWdodCAtIHRoaXMubGVmdCwgdGhpcy5ib3R0b20gLSB0aGlzLnRvcCk7XG4gIH0sXG5cbiAgY2VudGVyOiBmdW5jdGlvbiBjZW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKVxuICAgICAgdGhyb3cgXCJFbXB0eSByZWN0YW5nbGVzIGRvIG5vdCBoYXZlIGNlbnRlcnNcIjtcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMubGVmdCArICh0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0KSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wICsgKHRoaXMuYm90dG9tIC0gdGhpcy50b3ApIC8gMik7XG4gIH0sXG5cbiAgY29weUZyb20ob3RoZXIpIHtcbiAgICB0aGlzLnRvcCA9IG90aGVyLnRvcDtcbiAgICB0aGlzLmxlZnQgPSBvdGhlci5sZWZ0O1xuICAgIHRoaXMuYm90dG9tID0gb3RoZXIuYm90dG9tO1xuICAgIHRoaXMucmlnaHQgPSBvdGhlci5yaWdodDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgdGhpcy5sZWZ0ICs9IHg7XG4gICAgdGhpcy5yaWdodCArPSB4O1xuICAgIHRoaXMudG9wICs9IHk7XG4gICAgdGhpcy5ib3R0b20gKz0geTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBcIltcIiArIHRoaXMueCArIFwiLFwiICsgdGhpcy55ICsgXCIsXCIgKyB0aGlzLndpZHRoICsgXCIsXCIgKyB0aGlzLmhlaWdodCArIFwiXVwiO1xuICB9LFxuXG4gIC8qKiByZXR1cm4gYSBuZXcgcmVjdCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGF0IG9uZSBhbmQgdGhpcyBvbmUgKi9cbiAgdW5pb24ob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmV4cGFuZFRvQ29udGFpbihvdGhlcik7XG4gIH0sXG5cbiAgY29udGFpbnMob3RoZXIpIHtcbiAgICBpZiAob3RoZXIuaXNFbXB0eSgpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiAob3RoZXIubGVmdCA+PSB0aGlzLmxlZnQgJiZcbiAgICAgICAgICAgIG90aGVyLnJpZ2h0IDw9IHRoaXMucmlnaHQgJiZcbiAgICAgICAgICAgIG90aGVyLnRvcCA+PSB0aGlzLnRvcCAmJlxuICAgICAgICAgICAgb3RoZXIuYm90dG9tIDw9IHRoaXMuYm90dG9tKTtcbiAgfSxcblxuICBpbnRlcnNlY3Qob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpLnJlc3RyaWN0VG8ob3RoZXIpO1xuICB9LFxuXG4gIGludGVyc2VjdHMob3RoZXIpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkgfHwgb3RoZXIuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgbGV0IHgxID0gTWF0aC5tYXgodGhpcy5sZWZ0LCBvdGhlci5sZWZ0KTtcbiAgICBsZXQgeDIgPSBNYXRoLm1pbih0aGlzLnJpZ2h0LCBvdGhlci5yaWdodCk7XG4gICAgbGV0IHkxID0gTWF0aC5tYXgodGhpcy50b3AsIG90aGVyLnRvcCk7XG4gICAgbGV0IHkyID0gTWF0aC5taW4odGhpcy5ib3R0b20sIG90aGVyLmJvdHRvbSk7XG4gICAgcmV0dXJuIHgxIDwgeDIgJiYgeTEgPCB5MjtcbiAgfSxcblxuICAvKiogUmVzdHJpY3QgYXJlYSBvZiB0aGlzIHJlY3RhbmdsZSB0byB0aGUgaW50ZXJzZWN0aW9uIG9mIGJvdGggcmVjdGFuZ2xlcy4gKi9cbiAgcmVzdHJpY3RUbzogZnVuY3Rpb24gcmVzdHJpY3RUbyhvdGhlcikge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSB8fCBvdGhlci5pc0VtcHR5KCkpXG4gICAgICByZXR1cm4gdGhpcy5zZXRSZWN0KDAsIDAsIDAsIDApO1xuXG4gICAgbGV0IHgxID0gTWF0aC5tYXgodGhpcy5sZWZ0LCBvdGhlci5sZWZ0KTtcbiAgICBsZXQgeDIgPSBNYXRoLm1pbih0aGlzLnJpZ2h0LCBvdGhlci5yaWdodCk7XG4gICAgbGV0IHkxID0gTWF0aC5tYXgodGhpcy50b3AsIG90aGVyLnRvcCk7XG4gICAgbGV0IHkyID0gTWF0aC5taW4odGhpcy5ib3R0b20sIG90aGVyLmJvdHRvbSk7XG4gICAgLy8gSWYgd2lkdGggb3IgaGVpZ2h0IGlzIDAsIHRoZSBpbnRlcnNlY3Rpb24gd2FzIGVtcHR5LlxuICAgIHJldHVybiB0aGlzLnNldFJlY3QoeDEsIHkxLCBNYXRoLm1heCgwLCB4MiAtIHgxKSwgTWF0aC5tYXgoMCwgeTIgLSB5MSkpO1xuICB9LFxuXG4gIC8qKiBFeHBhbmQgdGhpcyByZWN0YW5nbGUgdG8gdGhlIHVuaW9uIG9mIGJvdGggcmVjdGFuZ2xlcy4gKi9cbiAgZXhwYW5kVG9Db250YWluOiBmdW5jdGlvbiBleHBhbmRUb0NvbnRhaW4ob3RoZXIpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiB0aGlzLmNvcHlGcm9tKG90aGVyKTtcbiAgICBpZiAob3RoZXIuaXNFbXB0eSgpKSByZXR1cm4gdGhpcztcblxuICAgIGxldCBsID0gTWF0aC5taW4odGhpcy5sZWZ0LCBvdGhlci5sZWZ0KTtcbiAgICBsZXQgciA9IE1hdGgubWF4KHRoaXMucmlnaHQsIG90aGVyLnJpZ2h0KTtcbiAgICBsZXQgdCA9IE1hdGgubWluKHRoaXMudG9wLCBvdGhlci50b3ApO1xuICAgIGxldCBiID0gTWF0aC5tYXgodGhpcy5ib3R0b20sIG90aGVyLmJvdHRvbSk7XG4gICAgcmV0dXJuIHRoaXMuc2V0UmVjdChsLCB0LCByIC0gbCwgYiAtIHQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIHRvIHRoZSBzbWFsbGVzdCByZWN0YW5nbGUgdGhhdCBjb250YWlucyBvcmlnaW5hbCByZWN0YW5nbGUgYW5kIGlzIGJvdW5kZWRcbiAgICogYnkgbGluZXMgd2l0aCBpbnRlZ2VyIGNvZWZmaWNpZW50cy5cbiAgICovXG4gIGV4cGFuZFRvSW50ZWdlcnM6IGZ1bmN0aW9uIHJvdW5kKCkge1xuICAgIHRoaXMubGVmdCA9IE1hdGguZmxvb3IodGhpcy5sZWZ0KTtcbiAgICB0aGlzLnRvcCA9IE1hdGguZmxvb3IodGhpcy50b3ApO1xuICAgIHRoaXMucmlnaHQgPSBNYXRoLmNlaWwodGhpcy5yaWdodCk7XG4gICAgdGhpcy5ib3R0b20gPSBNYXRoLmNlaWwodGhpcy5ib3R0b20pO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHNjYWxlOiBmdW5jdGlvbiBzY2FsZSh4c2NsLCB5c2NsKSB7XG4gICAgdGhpcy5sZWZ0ICo9IHhzY2w7XG4gICAgdGhpcy5yaWdodCAqPSB4c2NsO1xuICAgIHRoaXMudG9wICo9IHlzY2w7XG4gICAgdGhpcy5ib3R0b20gKj0geXNjbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBtYXA6IGZ1bmN0aW9uIG1hcChmKSB7XG4gICAgdGhpcy5sZWZ0ID0gZi5jYWxsKHRoaXMsIHRoaXMubGVmdCk7XG4gICAgdGhpcy50b3AgPSBmLmNhbGwodGhpcywgdGhpcy50b3ApO1xuICAgIHRoaXMucmlnaHQgPSBmLmNhbGwodGhpcywgdGhpcy5yaWdodCk7XG4gICAgdGhpcy5ib3R0b20gPSBmLmNhbGwodGhpcywgdGhpcy5ib3R0b20pO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIC8qKiBFbnN1cmUgdGhpcyByZWN0YW5nbGUgaXMgaW5zaWRlIHRoZSBvdGhlciwgaWYgcG9zc2libGUuIFByZXNlcnZlcyB3LCBoLiAqL1xuICB0cmFuc2xhdGVJbnNpZGU6IGZ1bmN0aW9uIHRyYW5zbGF0ZUluc2lkZShvdGhlcikge1xuICAgIGxldCBvZmZzZXRYID0gMDtcbiAgICBpZiAodGhpcy5sZWZ0IDw9IG90aGVyLmxlZnQpXG4gICAgICBvZmZzZXRYID0gb3RoZXIubGVmdCAtIHRoaXMubGVmdDtcbiAgICBlbHNlIGlmICh0aGlzLnJpZ2h0ID4gb3RoZXIucmlnaHQpXG4gICAgICBvZmZzZXRYID0gb3RoZXIucmlnaHQgLSB0aGlzLnJpZ2h0O1xuXG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGlmICh0aGlzLnRvcCA8PSBvdGhlci50b3ApXG4gICAgICBvZmZzZXRZID0gb3RoZXIudG9wIC0gdGhpcy50b3A7XG4gICAgZWxzZSBpZiAodGhpcy5ib3R0b20gPiBvdGhlci5ib3R0b20pXG4gICAgICBvZmZzZXRZID0gb3RoZXIuYm90dG9tIC0gdGhpcy5ib3R0b207XG5cbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSk7XG4gIH0sXG5cbiAgLyoqIFN1YnRyYWN0IG90aGVyIGFyZWEgZnJvbSB0aGlzLiBSZXR1cm5zIGFycmF5IG9mIHJlY3RzIHdob3NlIHVuaW9uIGlzIHRoaXMtb3RoZXIuICovXG4gIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdChvdGhlcikge1xuICAgIGxldCByID0gbmV3IFJlY3QoMCwgMCwgMCwgMCk7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIG90aGVyID0gb3RoZXIuaW50ZXJzZWN0KHRoaXMpO1xuICAgIGlmIChvdGhlci5pc0VtcHR5KCkpXG4gICAgICByZXR1cm4gW3RoaXMuY2xvbmUoKV07XG5cbiAgICAvLyBsZWZ0IHN0cmlwXG4gICAgci5zZXRCb3VuZHModGhpcy5sZWZ0LCB0aGlzLnRvcCwgb3RoZXIubGVmdCwgdGhpcy5ib3R0b20pO1xuICAgIGlmICghci5pc0VtcHR5KCkpXG4gICAgICByZXN1bHQucHVzaChyLmNsb25lKCkpO1xuICAgIC8vIGluc2lkZSBzdHJpcFxuICAgIHIuc2V0Qm91bmRzKG90aGVyLmxlZnQsIHRoaXMudG9wLCBvdGhlci5yaWdodCwgb3RoZXIudG9wKTtcbiAgICBpZiAoIXIuaXNFbXB0eSgpKVxuICAgICAgcmVzdWx0LnB1c2goci5jbG9uZSgpKTtcbiAgICByLnNldEJvdW5kcyhvdGhlci5sZWZ0LCBvdGhlci5ib3R0b20sIG90aGVyLnJpZ2h0LCB0aGlzLmJvdHRvbSk7XG4gICAgaWYgKCFyLmlzRW1wdHkoKSlcbiAgICAgIHJlc3VsdC5wdXNoKHIuY2xvbmUoKSk7XG4gICAgLy8gcmlnaHQgc3RyaXBcbiAgICByLnNldEJvdW5kcyhvdGhlci5yaWdodCwgdGhpcy50b3AsIHRoaXMucmlnaHQsIHRoaXMuYm90dG9tKTtcbiAgICBpZiAoIXIuaXNFbXB0eSgpKVxuICAgICAgcmVzdWx0LnB1c2goci5jbG9uZSgpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEJsZW5kcyB0d28gcmVjdGFuZ2xlcyB0b2dldGhlci5cbiAgICogQHBhcmFtIHJlY3QgUmVjdGFuZ2xlIHRvIGJsZW5kIHRoaXMgb25lIHdpdGhcbiAgICogQHBhcmFtIHNjYWxhciBSYXRpbyBmcm9tIDAgKHJldHVybnMgYSBjbG9uZSBvZiB0aGlzIHJlY3QpIHRvIDEgKGNsb25lIG9mIHJlY3QpLlxuICAgKiBAcmV0dXJuIE5ldyBibGVuZGVkIHJlY3RhbmdsZS5cbiAgICovXG4gIGJsZW5kOiBmdW5jdGlvbiBibGVuZChyZWN0LCBzY2FsYXIpIHtcbiAgICByZXR1cm4gbmV3IFJlY3QoXG4gICAgICB0aGlzLmxlZnQgKyAocmVjdC5sZWZ0IC0gdGhpcy5sZWZ0ICkgKiBzY2FsYXIsXG4gICAgICB0aGlzLnRvcCArIChyZWN0LnRvcCAtIHRoaXMudG9wICkgKiBzY2FsYXIsXG4gICAgICB0aGlzLndpZHRoICsgKHJlY3Qud2lkdGggLSB0aGlzLndpZHRoICkgKiBzY2FsYXIsXG4gICAgICB0aGlzLmhlaWdodCArIChyZWN0LmhlaWdodCAtIHRoaXMuaGVpZ2h0KSAqIHNjYWxhcik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdyb3dzIG9yIHNocmlua3MgdGhlIHJlY3RhbmdsZSB3aGlsZSBrZWVwaW5nIHRoZSBjZW50ZXIgcG9pbnQuXG4gICAqIEFjY2VwdHMgc2luZ2xlIG11bHRpcGxlciwgb3Igc2VwYXJhdGUgZm9yIGJvdGggYXhlcy5cbiAgICovXG4gIGluZmxhdGU6IGZ1bmN0aW9uIGluZmxhdGUoeHNjbCwgeXNjbCkge1xuICAgIGxldCB4QWRqID0gKHRoaXMud2lkdGggKiB4c2NsIC0gdGhpcy53aWR0aCkgLyAyO1xuICAgIGxldCBzID0gKGFyZ3VtZW50cy5sZW5ndGggPiAxKSA/IHlzY2wgOiB4c2NsO1xuICAgIGxldCB5QWRqID0gKHRoaXMuaGVpZ2h0ICogcyAtIHRoaXMuaGVpZ2h0KSAvIDI7XG4gICAgdGhpcy5sZWZ0IC09IHhBZGo7XG4gICAgdGhpcy5yaWdodCArPSB4QWRqO1xuICAgIHRoaXMudG9wIC09IHlBZGo7XG4gICAgdGhpcy5ib3R0b20gKz0geUFkajtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICAvKipcbiAgICogR3Jvd3Mgb3Igc2hyaW5rcyB0aGUgcmVjdGFuZ2xlIGJ5IGZpeGVkIGFtb3VudCB3aGlsZSBrZWVwaW5nIHRoZSBjZW50ZXIgcG9pbnQuXG4gICAqIEFjY2VwdHMgc2luZ2xlIGZpeGVkIGFtb3VudFxuICAgKi9cbiAgaW5mbGF0ZUZpeGVkOiBmdW5jdGlvbiBpbmZsYXRlRml4ZWQoZml4ZWQpIHtcbiAgICB0aGlzLmxlZnQgLT0gZml4ZWQ7XG4gICAgdGhpcy5yaWdodCArPSBmaXhlZDtcbiAgICB0aGlzLnRvcCAtPSBmaXhlZDtcbiAgICB0aGlzLmJvdHRvbSArPSBmaXhlZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbn07XG5cbmV4cG9ydCAge1BvaW50LFJlY3R9XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHsgZG9tLCBSZWFjdFF1ZXJ5IH0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHsgSGFzUGFyZW50QW5kQ2hpbGQgfSBmcm9tIFwiLi4vLi5cIlxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWRcIlxuaW1wb3J0IENvbnN0cmFpbnRTcGFjZSBmcm9tIFwiLi4vY29uc3RyYWludC1zcGFjZVwiXG5pbXBvcnQge1JlY3R9IGZyb20gXCIuLi8uLi8uLi90b29sL2dlb21ldHJ5XCJcbi8qKlxuICogTGF5b3V0IGVuZ2luZSBpcyBob3cgdG8gbGF5b3V0IGNvbnRlbnQgaW4gYSBjb25zdHJhaW50IHNwYWNlXG4gKiBzbyBpdCBpbmNsdWRlczogYSBjb25zdHJhaW50IHNwYWNlICsgbGF5b3V0IGFsZ29yaXRobSArIGNvbnRlbnRcbiAqIExheW91dCBhbGdvcml0aG0gaW5jbHVkZXMgQmxvY2sgYWxnb3JpdGhtIGFuZCBJbmxpbmUgYWxnb3JpdGhtXG4gKiBCbG9jayBhbGdvcml0aG0gaXMgdG8gbGF5b3V0IGluIGJsb2NrIGRpcmVjdGlvbiwgbW92ZSBieSBibG9jayBzaXplLFxuICogXHRcdFx0ZWFjaCBibG9jayBlbGVtZW50IHNob3VsZCBhdCBmaXJzdCBkZWNpZGUgYmxvY2sgb2Zmc2V0IGluIHNwYWNlLCB0aGVuIGxheW91dCBjb250ZW50XG4gKiBJbmxpbmUgYWxnb3JpdGhtIGlzIHRvIGxheW91dCBjb250ZW50IGluIGlubGluZSBkaXJlY3Rpb24sIG1vdmUgYnkgaW5saW5lIHNpemUsXG4gKiBcdFx0XHRlYWNoIGxheW91dCBlbGVtZW50IHNob3VsZCBoYXZlIGFuIGlubGluZSBvZmZzZXRcbiAqL1xuLyoqXG4gKiBzcGFjZSBpcyBpbW11dGFibGUsIGFuZCBzaG91bGQgTk9UIHByb3ZpZGUgYW55IGxheW91dCBmdW5jdGlvbixcbiAqIGJ1dCBjYW4gaGVscCBkZWNpZGUgb24gZ2VvbWV0cnkgZnVuY3Rpb25zLCBzdWNoIGFzIGludGVyc2VjdGlvblxuICovXG4vKipcbiAqIGxheW91dCBjb250ZW50IGluIGEgc3BhY2Ugd2l0aCBleGNsdWRhYmxlIGFyZWFzXG4gKiBpbmxpbmUgZXhjbHVkYWJsZSAmIGJsb2NrIGV4Y2x1ZGFibGVcbiAqIGV4Y2x1ZGFibGUgYXJlYXMgaXMgY2hhbmdpbmcgYWxvbmcgd2l0aCBjb250ZW50IGFwcGVuZGVkLCB0aGVuXG4gKiBpbmxpbmUgcmUtbGF5b3V0IGFuZC9vciBibG9jayByZS1sYXlvdXRcbiAqIGV4Y2x1ZGFibGUgc3BhY2UgY2FuIGFuc3dlciBpZiBjb250ZW50IGNhbiBsYXlvdXQgd2l0aG91dC93aXRoIHNwYWNlIGNoYW5nZVxuICogbGF5b3V0IGFsZ29yaXRobSBpdHNlbGYoc3VjaCBhcyBsaW5lLCBwYWdlLCBhbmQgZXRjKSBkZWNpZGUgaG93IHRvIHJlLWxheW91dFxuICogY29uc3RyYWludCBzcGFjZTp7bGVmdCxyaWdodCwgaGVpZ2h0LCBibG9ja09mZnNldH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvdyBleHRlbmRzIEhhc1BhcmVudEFuZENoaWxkKGRvbS5Db250YWluZXIpIHtcblx0c3RhdGljIElNTUVESUFURV9TVE9QID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cdHN0YXRpYyBwcm9wVHlwZXMgPSB7XG5cdFx0YmFsYW5jZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmJvb2wsIFByb3BUeXBlcy5mdW5jXSksXG5cdFx0YmFsYW5jZVRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRzcGFjZTogUHJvcFR5cGVzLnNoYXBlKHtcblx0XHRcdGxlZnQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRyaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdGJsb2NrT2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0d3JhcHBlZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpXG5cdFx0fSksXG5cdFx0Y29sczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcblx0XHRcdHg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHR5OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0d2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0fSkpLFxuXHRcdGluaGVyaXRFeGNsdXNpdmVzOiBQcm9wVHlwZXMuYm9vbCxcblx0XHRhbGxvd092ZXJmbG93OiBQcm9wVHlwZXMuYm9vbCxcblx0fTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKTtcblx0XHR0aGlzLmNvbXB1dGVkLmFuY2hvcnMgPSBbXTtcblx0XHR0aGlzLmRlZmluZVByb3BlcnRpZXMoKTtcblx0fVxuXHRkZWZpbmVQcm9wZXJ0aWVzKCkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdGZpcnN0TGluZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5saW5lc1swXTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8qKml0IHByb3ZpZGVzIHJlcGxhY2VXaXRoIGFuZCBkZXRhY2ggKi9cblx0XHRcdGxhc3RMaW5lOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcztcblx0XHRcdFx0XHRyZXR1cm4gbGluZXNbbGluZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGxpbmVzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodmFsdWVzKSB7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZCA9IHZhbHVlcztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRvdGFsTGluZXM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXMubGVuZ3RoO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YmxvY2tPZmZzZXQ6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdGNvbnN0IHsgYmxvY2tPZmZzZXQgPSAwIH0gPSB0aGlzLmdldFNwYWNlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGJsb2NrT2Zmc2V0ICsgdGhpcy5jb250ZW50SGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YXZhaWxhYmxlQmxvY2tTaXplOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdGNvbnN0IHsgaGVpZ2h0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSIH0gPSB0aGlzLmdldFNwYWNlKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGhlaWdodCAtIHRoaXMuY29udGVudEhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFuY2hvcnM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmFuY2hvcnM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2YWx1ZXMpIHtcblx0XHRcdFx0XHR0aGlzLmNvbXB1dGVkLmFuY2hvcnMgPSB2YWx1ZXM7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR3cmFwcGVlczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5hbmNob3JzLmZpbHRlcigoeyBwcm9wczogeyB3cmFwIH0gfSkgPT4gISF3cmFwKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXMucmVkdWNlKChILCB7IHByb3BzOiB7IGhlaWdodDogaCA9IDAgfSB9KSA9PiBoICsgSCwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKSB7XG5cdFx0Y29uc3QgY29udGVudCA9IHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCk7XG5cdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZChjb250ZW50KTtcblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKTtcblx0fVxuXHRhcHBlbmRDb21wb3NlZChsaW5lKSB7XG5cdFx0Y29uc3QgeyBwcm9wczogeyB5OiBwb3NpdGlvbmVkIH0gfSA9IGxpbmU7XG5cdFx0aWYgKHBvc2l0aW9uZWQgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLmFuY2hvcnMucHVzaChsaW5lKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmxpbmVzLnB1c2gobGluZSk7XG5cdFx0fVxuXHR9XG5cdC8vZGVmYXVsdCB1c2UgcHJvcHMuc3BhY2Vcblx0Z2V0U3BhY2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJvcHMuc3BhY2Vcblx0fVxuXG5cdHBvc2l0aW9uTGluZXMobGluZXMpIHtcblx0XHR2YXIgeSA9IDA7XG5cdFx0Y29uc3QgY29udGVudCA9IGxpbmVzLm1hcCgoYSwgaSwgbWUsIGN0eCwgeyBwcm9wczogeyBoZWlnaHQgPSAwIH0gfSA9IGEpID0+IHtcblx0XHRcdGNvbnN0IGIgPSBSZWFjdC5jbG9uZUVsZW1lbnQoYSwgeyBrZXk6IGksIHkgfSk7XG5cdFx0XHR5ICs9IGhlaWdodDtcblx0XHRcdHJldHVybiBiO1xuXHRcdH0pO1xuXHRcdHJldHVybiAoPEdyb3VwIGhlaWdodD17eX0+e2NvbnRlbnR9PC9Hcm91cD4pO1xuXHR9XG4gICAgLyoqXG4gICAgICogb25seSB3aGVuIHRoZXJlIGFyZSBhdmFpYWxhYmxlIGJsb2NrXG4gICAgICogTm90IGFsbG93IGVtcHR5IGZyYW1lXG4gICAgICogQHBhcmFtIHsqfSBwYXJhbTBcbiAgICAgKi9cblx0bmV4dEF2YWlsYWJsZVNwYWNlKHsgaGVpZ2h0OiByZXF1aXJlZEJsb2NrU2l6ZSA9IDEgfSA9IHt9KSB7XG5cdFx0Y29uc3QgeyBhbGxvd092ZXJmbG93ID0gZmFsc2UgfSA9IHRoaXMucHJvcHM7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpXG5cdFx0XHR8fCB0aGlzLmF2YWlsYWJsZUJsb2NrU2l6ZSA+PSByZXF1aXJlZEJsb2NrU2l6ZSkge1xuXHRcdFx0Y29uc3Qgc3BhY2U9dGhpcy5nZXRTcGFjZSgpXG5cdFx0XHRyZXR1cm4gQ29uc3RyYWludFNwYWNlLmNyZWF0ZShzcGFjZXx8e30pLmNsb25lKHtcblx0XHRcdFx0YmxvY2tPZmZzZXQ6IHRoaXMuYmxvY2tPZmZzZXQsXG5cdFx0XHRcdGhlaWdodDogIWFsbG93T3ZlcmZsb3cgPyB0aGlzLmF2YWlsYWJsZUJsb2NrU2l6ZSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuXHRcdFx0XHRmcmFtZTogdGhpcyxcblx0XHRcdFx0ZmluZElubGluZVNlZ21lbnRzOiAocmVxdWlyZWRCbG9ja1NpemUsIGxlZnQsIHJpZ2h0KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgYmxvY2tPZmZzZXQgPSB0aGlzLmJsb2NrT2Zmc2V0O1xuXHRcdFx0XHRcdHZhciB3cmFwcGVlcyA9IHRoaXMuZXhjbHVzaXZlKGJsb2NrT2Zmc2V0LCBibG9ja09mZnNldCArIHJlcXVpcmVkQmxvY2tTaXplLCBsZWZ0LCByaWdodCk7XG5cdFx0XHRcdFx0dmFyIHRvcCA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKHR5cGVvZiAod3JhcHBlZXMpID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdHRvcCA9IHdyYXBwZWVzO1xuXHRcdFx0XHRcdFx0d3JhcHBlZXMgPSB0aGlzLmV4Y2x1c2l2ZSh0b3AsIHRvcCArIHJlcXVpcmVkQmxvY2tTaXplLCBsZWZ0LCByaWdodCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNwYWNlID0gdGhpcy5uZXh0QXZhaWxhYmxlU3BhY2UoeyBoZWlnaHQ6IHRvcCAtIGJsb2NrT2Zmc2V0ICsgcmVxdWlyZWRCbG9ja1NpemUgfSk7XG5cdFx0XHRcdFx0aWYgKHNwYWNlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHR0b3AsXG5cdFx0XHRcdFx0XHRcdHNlZ21lbnRzOiB3cmFwcGVlcy5yZWR1Y2UoKG9wcywgeyB4LCB3aWR0aCB9KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgW2xhc3RdID0gb3BzLnNwbGljZSgtMSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFsuLi5vcHMsIHsgeDogbGFzdC54LCB3aWR0aDogeCAtIGxhc3QueCB9LCB7IHg6IHggKyB3aWR0aCwgd2lkdGg6IHJpZ2h0IC0geCAtIHdpZHRoIH1dO1xuXHRcdFx0XHRcdFx0XHR9LCBbeyB4OiBsZWZ0LCB3aWR0aDogcmlnaHQgLSBsZWZ0IH1dKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHNwYWNlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRpc0FuY2hvcmVkOiBpZCA9PiB0aGlzLmlzQW5jaG9yZWQoaWQpXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG4gICAgLyoqXG4gICAgICogZXhjbHVkZSBhcmVhIGluIHJlY3Qge3gxLHkxLCB4Mix5Mn1cbiAgICAgKiBAcGFyYW0geyp9IHkxXG4gICAgICogQHBhcmFtIHsqfSB5MlxuICAgICAqIEBwYXJhbSB7Kn0geDFcbiAgICAgKiBAcGFyYW0geyp9IHgyXG4gICAgICogQHJldHVybnNcbiAgICAgKiBcdFt7eCx3aWR0aH0sLi4uXTogZXhjbHVkZSBhcmVhc1xuICAgICAqIFx0bnVtYmVyOiB0aGVyZSdzIG9wcG9ydHVuaXR5IHVudGlsIHRoZSB2YWx1ZVxuICAgICAqL1xuXHRleGNsdXNpdmUoeTEsIHkyLCB4MSwgeDIpIHtcblx0XHRjb25zdCBsaW5lID0geyB4MSwgeDIsIHkxLCB5MiB9O1xuXHRcdHZhciBleGNsdWRlcyA9IHRoaXMud3JhcHBlZXMucmVkdWNlKChjb2xsZWN0ZWQsIHsgcHJvcHM6IHsgd3JhcCB9IH0pID0+IHtcblx0XHRcdGNvbnN0IGJsb2NrcyA9IHdyYXAobGluZSk7XG5cdFx0XHRjb2xsZWN0ZWQuc3BsaWNlKGNvbGxlY3RlZC5sZW5ndGgsIDAsIC4uLihBcnJheS5pc0FycmF5KGJsb2NrcykgPyBibG9ja3MgOiBbYmxvY2tzXSkpO1xuXHRcdFx0cmV0dXJuIGNvbGxlY3RlZDtcblx0XHR9LCBbXSlcblx0XHRcdC5maWx0ZXIoYSA9PiAhIWEpXG5cdFx0XHQuZmlsdGVyKGEgPT4gYS53aWR0aCA+IDApXG5cdFx0XHQuc29ydCgoYSwgYikgPT4gYS54IC0gYi54KTtcblx0XHRjb25zdCBjbGVhcnMgPSBleGNsdWRlcy5maWx0ZXIoYSA9PiBhLnR5cGUgPT0gXCJjbGVhclwiKTtcblx0XHRpZiAoY2xlYXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBNYXRoLm1heCguLi5jbGVhcnMubWFwKGEgPT4gYS55KSk7XG5cdFx0fVxuXHRcdGlmIChleGNsdWRlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvL21lcmdlIHN1Y2ggYXMgW3t4OjMsd2lkdGg6NX0se3g6NCx3aWR0aDo2fV09Plt7eDozLHdpZHRoOjd9XVxuXHRcdFx0ZXhjbHVkZXMuZm9yRWFjaChhID0+IGEueDIgPSBhLnggKyBhLndpZHRoKTtcblx0XHRcdGV4Y2x1ZGVzID0gZXhjbHVkZXMucmVkdWNlKCh3cmFwZWVzLCBhKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGIgPSB3cmFwZWVzW3dyYXBlZXMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdGlmIChhLngyID4gYi54Mikge1xuXHRcdFx0XHRcdGlmIChhLnggPiBiLngyKSB7IC8vc2VwZXJhdGVkXG5cdFx0XHRcdFx0XHR3cmFwZWVzLnB1c2goYSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgeyAvL2ludGVyc2VjdFxuXHRcdFx0XHRcdFx0Yi54MiA9IGEueDI7XG5cdFx0XHRcdFx0XHRiLndpZHRoID0gYi54MiAtIGIueDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHdyYXBlZXM7XG5cdFx0XHR9LCBbZXhjbHVkZXNbMF1dKTtcblx0XHRcdGV4Y2x1ZGVzLmZvckVhY2goYSA9PiBkZWxldGUgYS54Mik7XG5cdFx0fVxuXHRcdHJldHVybiBleGNsdWRlcztcblx0fVxuICAgIC8qKlxuICAgICAqIHJlY29tcG9zZSBmb3Igc3BhY2Ugc2luY2UgbGF5b3V0ZWQgc3BhY2Ugd2lsbCBiZSBjaGFuZ2VkLCBzdWNoIGFzIHdyYXAgYW5kIGJhbGFuY2Vcblx0ICogbGF5b3V0IGFmdGVyIHByZSgpIGZvciBvbmx5IGFscmVhZHkgbGF5b3V0ZWQgbGluZXNcbiAgICAgKiBJdCdzIHByZXN1bWVkOiAqKiogYWxsIGNvbnRlbnQgYXJlIGluIHBhcmFncmFwaHMsIG90aGVyd2lzZSBqdXN0IGFwcGVuZCBpdCBkaXJlY3RseSoqKlxuICAgICAqIHNvIGl0IHNob3VsZCB3b3JrIHRvIHJlY29tbWl0IGFscmVheSBsYXlvdXRlZCBwYXJhZ3JhcGhzXG4gICAgICogQHJldHVybnM6IGZ1bmN0aW9uIHRvIHJvbGxiYWNrL3JlY292ZXIgdG8gbGFzdCBzdGF0ZVxuICAgICAqL1xuXHRyZWNvbXBvc2UoaW5pdCA9IGEgPT4gYSkge1xuXHRcdGlmKCF0aGlzLnJlY29tcG9zZS5kZWFkTG9vcClcblx0XHRcdHRoaXMucmVjb21wb3NlLmRlYWRMb29wPTFcblx0XHRpZigrK3RoaXMucmVjb21wb3NlLmRlYWRMb29wPjEwMDAwKXtcblx0XHRcdGRlYnVnZ2VyXG5cdFx0fVxuXHRcdC8qKlxuICAgICAgICAgKiBpZiBpdCdzIGVtcHR5IGZyYW1lLCByZWNvbXBvc2Ugd291bGQgbm90IGhhcHBlblxuICAgICAgICAgKi9cblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdGluaXQoW10sW10pO1xuXHRcdFx0cmV0dXJuIGEgPT4gYTtcblx0XHR9XG5cdFx0Y29uc3QgbGFzdExpbmVzID0gWy4uLnRoaXMubGluZXNdO1xuXHRcdGNvbnN0IGxhc3RBbmNob3JzID0gWy4uLnRoaXMuYW5jaG9yc107XG5cdFx0Y29uc3QgbGFzdENvbHVtbnMgPSB0aGlzLmNvbHMgPyBbLi4udGhpcy5jb2x1bW5zXSA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCByb2xsYmFjayA9ICgpID0+IHtcblx0XHRcdHRoaXMubGluZXMgPSBsYXN0TGluZXM7XG5cdFx0XHR0aGlzLmFuY2hvcnMgPSBsYXN0QW5jaG9ycztcblx0XHRcdGlmIChsYXN0Q29sdW1ucylcblx0XHRcdFx0dGhpcy5jb2x1bW5zID0gbGFzdENvbHVtbnM7XG5cdFx0fTtcblx0XHR0cnkge1xuXHRcdFx0Ly9yZXNldCBjb21wb3NlZFxuXHRcdFx0dGhpcy5saW5lcyA9IFtdO1xuXHRcdFx0dGhpcy5hbmNob3JzID0gW107XG5cdFx0XHR0aGlzLmNvbHVtbnM9W11cblxuXHRcdFx0Ly9pbml0aWFsaXplIGZvciByZWNvbXBvc2Vcblx0XHRcdGNvbnN0IGxpbmVzID0gWy4uLmxhc3RMaW5lc11cblx0XHRcdHRoaXMuY29tcHV0ZWQucmVjb21wb3NpbmcgPSBpbml0KGxpbmVzLCBbLi4ubGFzdEFuY2hvcnNdKTtcblxuXHRcdFx0Y29uc3QgZ2V0UGFyYWdyYXBoSWQ9bGluZT0+bmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwicGFyYWdyYXBoXCJdYCkuYXR0cihcImRhdGEtY29udGVudFwiKVxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUbyByZWNvbW1pdCBlYWNoIHBhcmFncmFwaCdzIGxpbmVzIGluIHRoaXMgYmxvY2sgZnJvbSB0b3AgdG8gYm90dG9tXG5cdFx0XHQgKiBFdmVyeSB0aW1lIGxpbmUgcGFyYWdyYXBoIGNoYW5nZWQsIGxhc3QgcGFyYWdyYXBoIHdvdWxkIHJlY29tbWl0IFxuXHRcdFx0ICovXG5cdFx0XHR2YXIgY3VycmVudFBhcmFncmFwaCA9IG51bGw7XG5cdFx0XHR2YXIgY3VycmVudFBhcmFncmFwaExpbmVzID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbGluZTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGxpbmUgPSBsaW5lc1tpXTtcblx0XHRcdFx0Y29uc3QgcGFyYWdyYXBoT2ZMaW5lID0gZ2V0UGFyYWdyYXBoSWQobGluZSlcblx0XHRcdFx0aWYgKCFwYXJhZ3JhcGhPZkxpbmUpIHsgLy9ub3QgcGFyYWdyYXBoLCB0aGVuIGFwcGVuZCBkaXJlY3RseVxuXHRcdFx0XHRcdGlmIChjdXJyZW50UGFyYWdyYXBoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRleHQuZ2V0Q29tcG9zZXIoY3VycmVudFBhcmFncmFwaCkucmVjb21taXQoY3VycmVudFBhcmFncmFwaExpbmVzKTtcblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGggPSBudWxsO1xuXHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaExpbmVzID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYXBwZW5kQ29tcG9zZWQobGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0aWYgKCFjdXJyZW50UGFyYWdyYXBoKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYWdyYXBoID0gcGFyYWdyYXBoT2ZMaW5lO1xuXHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaExpbmVzLnB1c2gobGluZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFncmFwaE9mTGluZSAhPT0gY3VycmVudFBhcmFncmFwaCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRleHQuZ2V0Q29tcG9zZXIoY3VycmVudFBhcmFncmFwaCkucmVjb21taXQoY3VycmVudFBhcmFncmFwaExpbmVzKTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaCA9IHBhcmFncmFwaE9mTGluZTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaExpbmVzID0gW2xpbmVdO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50UGFyYWdyYXBoTGluZXMucHVzaChsaW5lKTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL2xhc3QgcGFyYWdyYXBoIFxuXHRcdFx0aWYgKGN1cnJlbnRQYXJhZ3JhcGgpIHtcblx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGN1cnJlbnRQYXJhZ3JhcGgpLnJlY29tbWl0KGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNhdGNoIChlKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xuXHRcdH1cblx0XHRmaW5hbGx5IHtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nO1xuXHRcdFx0cmV0dXJuIHJvbGxiYWNrO1xuXHRcdH1cblx0fVxuICAgIC8qKlxuICAgICAqIHRvIHJlLWxheW91dCBsYXN0IG4gbGluZXNcbiAgICAgKiBhbmNob3JzIGluIGxpbmUgc2hvdWxkIGJlIHJlbW92ZWQgdG9vXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICAgKiBAcmV0dXJucyBbLi4ucmVtb3ZlZCBsaW5lXS5hbmNocm9zPVsuLi5yZW1vdmVkIGFuY2hvciBpZF1cbiAgICAgKi9cblx0cm9sbGJhY2tMaW5lcyhuKSB7XG5cdFx0cmV0dXJuIG49PTAgPyBbXSA6IHRoaXMubGluZXMuc3BsaWNlKC1uKTtcblx0fVxuXG5cdGlzRW1wdHkoKXtcblx0XHRyZXR1cm4gKHRoaXMubGluZXMubGVuZ3RoK3RoaXMuYW5jaG9ycy5sZW5ndGgpPT0wXG5cdH1cblx0XG5cdGlzQW5jaG9yZWQoaWQpe1xuXHRcdHJldHVybiAhIXRoaXMuYW5jaG9ycy5maW5kKGE9Pm5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdChgW2RhdGEtY29udGVudD1cIiR7aWR9XCJdYCkubGVuZ3RoPT0xKVxuXHR9XG5cblx0X2lzSW50ZXJzZWN0KEEsQil7XG5cdFx0cmV0dXJuIG5ldyBSZWN0KEEueCwgQS55LCBBLndpZHRoLCBBLmhlaWdodCkuaW50ZXJzZWN0cyhuZXcgUmVjdChCLngsIEIueSwgQi53aWR0aCwgQi5oZWlnaHQpKVxuXHR9XG59XG4iLCJpbXBvcnQgeyBSZWFjdFF1ZXJ5IH0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IEZsb3cgZnJvbSBcIi4vZmxvd1wiXG5pbXBvcnQge1JlY3R9IGZyb20gXCIuLi8uLi8uLi90b29sL2dlb21ldHJ5XCJcblxuLyoqXG4gKiBhbmNob3JhYmxlIGNhbiBsYXlvdXQgcG9zaXRpb25lZCBjb250ZW50LCBhbmQgKioqTUFZIGNoYW5nZSBzcGFjZSBpZiBzdXBwb3J0aW5nIHdyYXAqKipcbiAqIGRhdGEtYW5jaG9yOiBjaGVjayBpbmxpbmUuYXBwZW5kQW5jaG9yQXRvbSwgdG8gaWRlbnRpZnkgYW5jaG9yIHBsYWNlaG9sZGVyIGluIHBhcmFncmFwaFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmNob3JhYmxlIGV4dGVuZHMgRmxvdyB7XG5cdC8qKlxuICAgICAqIGxpbmUgd2l0aC93aXRob3V0IGFuY2hvcnNcbiAgICAgKiBhbmNob3JzIHdpdGggd3JhcCBjYW4gYWZmZWN0IGV4Y2x1c2l2ZXMsIHNvIGl0IG5lZWQgcmUtbGF5b3V0XG4gICAgICogYW5jaG9yIG5lZWQga25vdyBhbmNob3IgaG9zdCB0byBwb3NpdGlvbiBpdHNlbGZcbiAgICAgKiBhbmNob3IgaG9zdFxuICAgICAqL1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gbGluZVxuICAgICAqIEByZXR1cm5zXG4gICAgICogaW50OiByb2xsYmFjayBuIHVucG9zaXRpb25lZCBsaW5lc1xuICAgICAqIGZhbHNlOiBzcGFjZSBjYW4ndCBmbG93IG1vcmUgY29udGVudFxuICAgICAqIE51bWJlci5TQUZFX01BWF9JTlRFR0VSOiBsZXQgZGVzY2VuZGFudCBzdG9wIGxheW91dFxuICAgICAqIGVsc2U6IGdvb2RcbiAgICAgKi9cblx0YXBwZW5kQ29tcG9zZWQobGluZSkge1xuICAgICAgICBjb25zdCB7IHByb3BzOiB7IGFuY2hvciwgeTpwb3NpdGlvbmVkLCBoZWlnaHQ6IHJlcXVpcmVkQmxvY2tTaXplID0gMCB9IH0gPSBsaW5lO1xuICAgICAgICBpZihwb3NpdGlvbmVkIT11bmRlZmluZWQpe1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmFwcGVuZENvbXBvc2VkKGxpbmUpXG4gICAgICAgIH1cbiAgICAgICAgXG5cdFx0Y29uc3Qgc3BhY2UgPSB0aGlzLm5leHRBdmFpbGFibGVTcGFjZSh7IGhlaWdodDogcmVxdWlyZWRCbG9ja1NpemUgfSk7XG5cdFx0aWYgKHNwYWNlID09IGZhbHNlKSB7XG5cdFx0XHRpZiAodGhpcy5jb21wdXRlZC5yZWNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIHdoZW4gc3BhY2UgaW5mZWFzaWJsZSBhbmQgcmVjb21wb3NpbmdcbiAgICAgICAgICAgICAgICAgKiBwYXJhZ3JhcGggbXVzdCBpbW1lZGlhdGUgc3RvcCwgc28gdG8gcmV0dXJuIGJhY2sgdG8gb3V0ZXIgbGF5b3V0XG4gICAgICAgICAgICAgICAgICovXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLklNTUVESUFURV9TVE9QO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFxuXHRcdC8vZGF0YS1hbmNob3IgaXMgcGxhY2Vob2xkZXIgc3BlY2lmaWNhdGlvbiBpbiBpbmxpbmUgbGF5b3V0XG4gICAgICAgIGNvbnN0IGFuY2hvclBsYWNlZCA9IChhbmNob3JJZCwgbGluZSkgPT4gbmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0KGBbZGF0YS1hbmNob3I9XCIke2FuY2hvcklkfV1gKS5sZW5ndGggPT0gMTtcblx0XHRpZiAoIWFuY2hvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29tcHV0ZWQucmVjb21wb3NpbmcpIHtcblx0XHRcdFx0aWYgKGFuY2hvclBsYWNlZCh0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nLCBsaW5lKSkge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogYW5jaG9yIGFuZCBwbGFjZWhvbGRlciBiZSBpbiBzYW1lIGZyYW1lLCBzbyBzdG9wIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAgICAqICoqIHRoZSBwbGFjZWhvbGRlciBsaW5lIHNob3VsZCBiZSBhcHBlbmRlZCwgc2luY2UgbGF0ZXIgXG4gICAgICAgICAgICAgICAgICAgICAqIGJ5IGNoZWNraW5nIHRoaXMgcGxhY2Vob2xkZXIgZXhpc3RlbmNlIHRvIGRlY2lkZSBpZiByZWNvbXBvc2Ugc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgKiBidXQgdGhpcyBsaW5lIHdpbGwgYmUgcm9sbGJhY2tlZFxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuYXBwZW5kQ29tcG9zZWQoLi4uYXJndW1lbnRzKVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLklNTUVESUFURV9TVE9QO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3VwZXIuYXBwZW5kQ29tcG9zZWQoLi4uYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogaXQncyBvbmx5IHRvIGFwcGVuZCBhbmNob3JlZCBjb250ZW50LFxuICAgICAgICAgKiBhbmNob3IgcGxhY2Vob2xkZXIgaW4gbGluZSB3aWxsIGJlIHJlbGF5b3V0ZWQgbGF0ZXIsXG4gICAgICAgICAqIHNvIGZyb20gaGVyZVxuICAgICAgICAgKiByZXR1cm4gMSB0byBpZ25vcmUgYW5kIHJlbGF5b3V0IGN1cnJlbnQgbGluZSBvclxuICAgICAgICAgKiByZXR1cm4gZmFsc2UgdG8gbm90aWZ5IGluZmVhc2libGUgc3BhY2UsIGFuZCBpZ25vcmUgYW5kIHJlLWxheW91dCBjdXJyZW50IGxpbmUgYW5kIGFuY2hvclxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgYW5jaG9yZWQgPSBhbmNob3Ioc3BhY2UuY2xvbmUoe1xuICAgICAgICAgICAgZWRnZXM6e1xuICAgICAgICAgICAgICAgIHBhcmFncmFwaDp7XG4gICAgICAgICAgICAgICAgICAgIHRvcDooaWQ9PnRoaXMuX19saW5lWFkodGhpcy5saW5lcy5maW5kKGE9PmEucHJvcHMucGFnaW5hdGlvbi5pZD09aWQpKS55KShsaW5lLnByb3BzLnBhZ2luYXRpb24uaWQpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsaW5lOnt0b3A6c3BhY2UuYmxvY2tPZmZzZXR9LFxuICAgICAgICAgICAgICAgIGNoYXJhY3Rlcjp7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6c3BhY2UubGVmdCsoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmaXJzdCxwYXJlbnRzfT1uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3RBbmRQYXJlbnRzKGBbZGF0YS1hbmNob3JdYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucGFyZW50cyxmaXJzdC5nZXQoMCldLnJlZHVjZSgoWCx7cHJvcHM6e3g9MH19KT0+WCt4LDApXG4gICAgICAgICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgICAgY29uc3QgeyB3cmFwLCBnZW9tZXRyeSwgXCJkYXRhLWNvbnRlbnRcIjogYW5jaG9ySWQgfSA9IGFuY2hvcmVkLnByb3BzO1xuICAgICAgICAvKipcbiAgICAgICAgICogQFRPRE86IHdyYXAgZWFjaCBvdGhlciB3aXRoIGFscmVhZHkgYW5jaG9yZWQgd3JhcHBlZXMsIGFuZCB0aGlzIHdyYXBwZWVzXG4gICAgICAgICAqL1xuXHRcdGlmICghKHdyYXAgJiYgdGhpcy5fX2lzRGlydHlJbihnZW9tZXRyeSkpKSB7XG5cdFx0XHRzdXBlci5hcHBlbmRDb21wb3NlZChhbmNob3JlZCk7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGUgYXJlYSBhYm92ZSBjdXJyZW50IGJsb2NrIG9mZnNldCBpcyBhZmZlY3RlZCBieSB0aGlzIHdyYXAgYXJlYVxuICAgICAgICAgKiB0ZW1wb3JhcmlseSBhbmNob3IgaXQgdG8gZXhjbHVkZSB0aGUgd3JhcCBhcmVhLCBhbmQgcmVsYXlvdXQgd2hvbGUgdG8gc2VlOlxuICAgICAgICAgKiBpZiB0aGUgYW5jaG9yIGNhbiBiZSBsYXlvdXRlZCB3aXRoaW4gdGhlIHNwYWNlLCBrZWVwIHJlbGF5b3V0ZWQsIHJlbGF5b3V0IGxhc3QgbGluZVxuICAgICAgICAgKiBpZiBub3QsIHJvbGxiYWNrIHRvIGxhc3QgbGF5b3V0IHJlc3VsdCwgYW5kIHJldHVybiBmYWxzZVxuICAgICAgICAgKi9cblx0XHRjb25zdCByb2xsYmFjayA9IHRoaXMucmVjb21wb3NlKChyZWNvbXBvc2luZ0xpbmVzLCBhbmNob3JzKSA9PiB7XG4gICAgICAgICAgICAvL2tlZXAgYWxsIGFuY2hvcnMsIEBUT0RPOiBpdCdzIHN1cHBvc2VkOiBsYXRlciBhbmNob3IgY2FuJ3QgYWZmZWN0IHByZXZpb3VzIGFuY2hvcnMgbGF5b3V0Pz8/P1xuICAgICAgICAgICAgdGhpcy5hbmNob3JzPWFuY2hvcnNcbiAgICAgICAgICAgIHN1cGVyLmFwcGVuZENvbXBvc2VkKGFuY2hvcmVkKVxuICAgICAgICAgICAgLy9yZWNvbXBvc2UgdW50aWwgdGhpcyBhbmNob3JcbiAgICAgICAgICAgIHJlY29tcG9zaW5nTGluZXMucHVzaChsaW5lKVxuXHRcdFx0cmV0dXJuIGFuY2hvcklkO1xuXHRcdH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogdGhlbiBjaGVjayBpZiB0aGlzIGFuY2hvciBpcyBpbiB0aGlzIGJsb2NrLCBzcGVjaWZpY2FsbHkgaW4gbGFzdCBsaW5lXG4gICAgICAgICAqICovXG5cdFx0aWYgKGFuY2hvclBsYWNlZChhbmNob3JJZCwgdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aC0xXSkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYW5jaG9yIGFuZCBwbGFjZWhvbGRlciBjYW4gYmUgb24gc2FtZSBibG9jaywgXG4gICAgICAgICAgICAgKiBzbyBrZWVwIHJlY29tcG9zZWQgbGluZXMgYW5kIGFuY2hvcnMgKGluY2x1ZGluZyBhcHBlbmRpbmcgYW5jaG9yKSxcbiAgICAgICAgICAgICAqIGFuZCByZS1sYXlvdXQgbGFzdCBsaW5lIHRoYXQgY29udGFpbnMgYW5jaG9yIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgKioqIHRoZSBsYXN0IGxpbmUgaW4gcGFyYWdyYXBoIE1BWSBub3QgZXF1YWwgdG8gYXBwZW5kaW5nIGxpbmUgc2luY2UgcmVjb21wb3NlIGNoYW5nZXMgaXRcbiAgICAgICAgICAgICAqKiogd2hpbGUgcGFyYWdyYXBoIHNob3VsZCBhbHJlYWR5IGJlIHN5bmNlZCB3aXRoIHJlY29tcG9zZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmxpbmVzLnBvcCgpLy9yb2xsYmFjayBsYXN0IGxpbmUgZGVmaW5pdGVseSBpbiB0aGlzIGJsb2NrXG5cdFx0XHRyZXR1cm4gMCArIDE7Ly9yb2xsYmFjayBsYXN0IGxpbmUgb2YgcGFyYWdycGFoIGFjY29yZGluZ2x5XG5cdFx0fVxuXHRcdGVsc2Uge1xuICAgICAgICAgICAgLy9hbmNob3IgYW5kIHBsYWNlaG9sZGVyIGNhbiBOT1QgYmUgb24gc2FtZSBmcmFtZSwgc28gdGhyb3cgdG8gcGFyZW50XG5cdFx0XHRyb2xsYmFjaygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cbiAgICB9XG4gICAgXG4gICAgcm9sbGJhY2tMaW5lcygpe1xuICAgICAgICBjb25zdCByZW1vdmVkTGluZXM9c3VwZXIucm9sbGJhY2tMaW5lcyguLi5hcmd1bWVudHMpXG4gICAgICAgIGNvbnN0IHJlbW92ZWRBbmNob3JzID0gKGxpbmVzID0+IHtcblx0XHRcdGNvbnN0IHJlbW92ZSA9IGEgPT4gdGhpcy5hbmNob3JzLnNwbGljZSh0aGlzLmFuY2hvcnMuaW5kZXhPZihhKSwgMSlbMF07XG4gICAgICAgICAgICBjb25zdCBhbmNob3JJZCA9IGE9Pm5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cImFuY2hvclwiXWApLmF0dHIoJ2RhdGEtY29udGVudCcpXG4gICAgICAgICAgICBjb25zdCBhbmNob3JzSW5MaW5lPWxpbmU9PiBuZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kKCdbZGF0YS1hbmNob3JdJykudG9BcnJheSgpLm1hcChhPT5hLnByb3BzW1wiZGF0YS1hbmNob3JcIl0pXG5cdFx0XHRjb25zdCByZW1vdmluZ0FuY2hvcklkcyA9IGxpbmVzLm1hcChhPT5hbmNob3JzSW5MaW5lKGEpKS5mbGF0KClcblx0XHRcdHJldHVybiB0aGlzLmFuY2hvcnMuZmlsdGVyKGEgPT4gcmVtb3ZpbmdBbmNob3JJZHMuaW5jbHVkZXMoYW5jaG9ySWQoYSkpKS5tYXAocmVtb3ZlKTtcbiAgICAgICAgfSkocmVtb3ZlZExpbmVzKTtcblxuICAgICAgICAvL2lmIHJlbW92ZWQgYW5jaG9ycyBhZmZlY3Qgd3JhcCBhcmVhcyBhYm92ZSByZW1vdmVkIGxpbmVzLFxuICAgICAgICBjb25zdCBibG9ja09mZnNldD10aGlzLmJsb2NrT2Zmc2V0XG4gICAgICAgIGNvbnN0IHJlbW92ZWRXcmFwcGVlc0FmZmVjdGVkTGF5b3V0ZWRTcGFjZT10aGlzLndyYXBwZWVzLmZpbHRlcihhPT5yZW1vdmVkQW5jaG9ycy5pbmNsdWRlcyhhKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHtwcm9wczp7Z2VvbWV0cnk6e3k9MCxoZWlnaHQ9MH19fSk9PnkraGVpZ2h0PGJsb2NrT2Zmc2V0KVxuICAgICAgICBpZihyZW1vdmVkV3JhcHBlZXNBZmZlY3RlZExheW91dGVkU3BhY2UubGVuZ3RoPjApe1xuICAgICAgICAgICAgdGhpcy5yZWNvbXBvc2UoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZW1vdmVkTGluZXMsIHthbmNob3JzOnJlbW92ZWRBbmNob3JzfSlcbiAgICB9XG5cblxuXHRfX2lzRGlydHlJbihyZWN0KXtcbiAgICAgICAgY29uc3QgaXNJbnRlcnNlY3Q9KEEsQik9Pm5ldyBSZWN0KEEueCwgQS55LCBBLndpZHRoLCBBLmhlaWdodCkuaW50ZXJzZWN0cyhuZXcgUmVjdChCLngsIEIueSwgQi53aWR0aCwgQi5oZWlnaHQpKVxuXHRcdC8vd3JhcHBlZSBhbHJlYWR5IHRha2UgdXBcblx0XHRpZih0aGlzLndyYXBwZWVzLmZpbmQoKHtwcm9wczp7eCx5LHdpZHRoLGhlaWdodH19KT0+aXNJbnRlcnNlY3QocmVjdCx7eCx5LHdpZHRoLGhlaWdodH0pKSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vY29udGVudCBhbHJlYWR5IHRha2UgdXBcblx0XHRpZihpc0ludGVyc2VjdChyZWN0LHt4OjAseTowLHdpZHRoOnRoaXMucHJvcHMud2lkdGgsaGVpZ2h0OnRoaXMuYmxvY2tPZmZzZXR9KSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdGlmKHRoaXMuY29scyl7XG5cdFx0XHQvL2lmIGFueSBub24tY3VycmVudCBjb2x1bW4gY29udGVudCBhbHJlYWR5IHRha2UgdXBcblx0XHRcdHJldHVybiAhIXRoaXMuY29sdW1uc1xuXHRcdFx0XHQuZmlsdGVyKGE9PmEhPXRoaXMuY3VycmVudENvbHVtbikvL2N1cnJlbnQgYmxvY2sgaGFzIGFscmVhZHkgY2hlY2tlZCBpbiBzdXBlciBhcyBub3JtYWwgc3BhY2Vcblx0XHRcdFx0LmZpbmQoKHt4PTAseT0wLHdpZHRoLGJsb2NrT2Zmc2V0OmhlaWdodH0pPT5pc0ludGVyc2VjdChyZWN0LHt4LHksd2lkdGgsaGVpZ2h0fSkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLyoqXG5cdCAqIGl0IHNob3VsZCBiZSBpbiBhY2NvcmRhbmNlIHdpdGggY3JlYXRlQ29tcG9zZWQyUGFyZW50LCBcbiAgICAgKiBidXQgZHVyaW5nIGNvbXBvc2luZywgaXQncyBub3QgcG9zc2libGUgdG8gZ2V0IHBvc2l0aW9uIHdoZW4gdmVydEFsaWduIGlzIGFueSBvZiBtaWRkbGUvY2VudGVyL2JvdHRvbVxuICAgICAqIHNvIGl0IG9ubHkgc3VwcG9ydCBkZWZhdWx0IHZlcnRBbGlnbj10b3BcbiAgICAgKiBzbyBJdCBjYW4ndCBiZSB1c2VkIGJ5IG5vcm1hbCBmcmFtZVxuXHQgKiBAcGFyYW0geyp9IGxpbmUgOiBjb21wb3NlZCBsaW5lIG9iamVjdFxuXHQgKi9cblx0X19saW5lWFkobGluZSl7XG5cdFx0aWYoIXRoaXMuY29scyl7XG5cdFx0XHRjb25zdCB7bWFyZ2luOnt0b3A9MCxsZWZ0PTB9PXt9fT10aGlzLnByb3BzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OmxlZnQsXG5cdFx0XHRcdHk6dGhpcy5saW5lcy5zbGljZSgwLHRoaXMubGluZXMuaW5kZXhPZihsaW5lKSkucmVkdWNlKChZLHtwcm9wczp7aGVpZ2h0PTB9fSk9PlkraGVpZ2h0LHRvcClcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly9tYWtlIGNvbHVtbnMgc2ltcGxlIHRvIGlnbm9yZSBtYXJnaW4sIHZlcnRBbGlnbiwgb3Igc2F5IG5vdCBzdXBwb3J0aW5nIG1hcmdpbiBhbmQgdmVydEFsaWduIGluIGNvbHVtbnMgZnJhbWVcblx0XHRjb25zdCB7eTp5MD0wLHg9MCxsaW5lc309dGhpcy5jb2x1bW5zLmZpbmQoYT0+YS5saW5lcy5pbmNsdWRlcyhsaW5lKSl8fHRoaXMuY3VycmVudENvbHVtblxuXHRcdHJldHVybiB7XG5cdFx0XHR4LFxuXHRcdFx0eTpsaW5lcy5zbGljZSgwLGxpbmVzLmluZGV4T2YobGluZSkpLnJlZHVjZSgoWSx7cHJvcHM6e2hlaWdodD0wfX0pPT5ZK2hlaWdodCx5MClcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IEFuY2hvcmFibGUgZnJvbSBcIi4vYW5jaG9yYWJsZVwiXG4vKipcbiAqIHdpZG93IGFuZCBvcnBhaG4gY29udHJvbCBsYXlvdXRcbiAqIHRoZXJlIG11c3QgYmUgcHJldkxheW91dCwgb3RoZXJ3aXNlIGl0J3Mgbm90IHN1cHBvcnRlZFxuICogaXQgc3VwcG9ydCBsaW5lLnByb3BzLnBhZ2luYXRpb249e1xuICogd2lkb3csIGJvb2xlYW4sIGlkZW50aWZ5IGlmIHdpZG93IGlzIHN1cHBvcnRlZFxuICogb3JwaGFuLCBib29sZWFuLCBpZGVudGlmeSBpZiBvcnBoYW4gaXMgc3VwcG9ydGVkXG4gKiBrZWVwTGluZXMsIGJvb2xlYW4sIGlkZW50aWZ5IGlmIGFsbCBsaW5lcyBzaG91bGQgYmUgbGF5b3V0ZWQgdG9nZXRoZXJcbiAqXG4gKiAvL3RoaXMgbGF5b3V0IGFsc28gZGVwZW5kcyBvbiBmb2xsb3dpbmcgbGluZSBpbmRpY2F0b3I6XG4gKiBsYXN0LCBib29sZWFuLCBpZGVudGlmeSBpZiBpdCdzIGxhc3QgbGluZSBvZiBwYXJhZ3JhcGhcbiAqIGk6IG51bWJlcltzdGFydCBmcm9tIGldLCBpZGVudGlmeSBpZiBpdCdzIG50aCBsaW5lIG9mIHBhcmFncmFwaFxuICogfVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcnBoYW5Db250cm9sYWJsZSBleHRlbmRzIEFuY2hvcmFibGUge1xuXHRzdGF0aWMgY29udGV4dFR5cGVzID0ge1xuXHRcdC4uLkFuY2hvcmFibGUuY29udGV4dFR5cGVzLFxuXHRcdHByZXZMYXlvdXQ6IFByb3BUeXBlcy5mdW5jLFxuXHR9O1xuXHRkZWZpbmVQcm9wZXJ0aWVzKCkge1xuXHRcdHN1cGVyLmRlZmluZVByb3BlcnRpZXMoKTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRwcmV2OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHR2YXIgeyBwYXJlbnQsIHByZXZMYXlvdXQgfSA9IHRoaXMuY29udGV4dDtcblx0XHRcdFx0XHRwcmV2TGF5b3V0ID0gcHJldkxheW91dCB8fCAocGFyZW50ICYmIHBhcmVudC5jb250ZXh0ICYmIHBhcmVudC5jb250ZXh0LnByZXZMYXlvdXQpIHx8IChhID0+IG51bGwpO1xuXHRcdFx0XHRcdHJldHVybiBwcmV2TGF5b3V0KHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuICAgIC8qKlxuICAgICAqIGhvdyBtYW55IGxhc3QgbGluZXMgZnJvbSBzYW1lIHBhcmFncmFwaCBvZiBpbnB1dCBsaW5lXG4gICAgICogQHBhcmFtIHsqfSBsaW5lXG4gICAgICovXG5cdG9ycGhhbkNvdW50KGxpbmUgPSB0aGlzLmxhc3RMaW5lKSB7XG5cdFx0Y29uc3QgcGlkID0gZ2V0TGluZVBhcmFncmFwaElkKGxpbmUsICdbZGF0YS10eXBlPVwicGFyYWdyYXBoXCJdJyk7XG5cdFx0aWYgKCFwaWQpXG5cdFx0XHRyZXR1cm4gMDtcblx0XHRjb25zdCBsaW5lcyA9IHRoaXMubGluZXM7XG5cdFx0Y29uc3QgaSA9IGxpbmVzLmZpbmRMYXN0SW5kZXgoYSA9PiBnZXRMaW5lUGFyYWdyYXBoSWQoYSkgIT09IHBpZCk7XG5cdFx0cmV0dXJuIGkgPT0gLTEgPyBsaW5lcy5sZW5ndGggOiBpICsgMTtcblx0fVxuICAgIC8qKlxuICAgICAqIHN0YXJ0IGZyb20gbmV3IGxheW91dFxuICAgICAqIEBwYXJhbSB7fSBsaW5lXG4gICAgICovXG5cdGFwcGVuZENvbXBvc2VkKGxpbmUpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkgJiYgdGhpcy5wcmV2KSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGN1cnJlbnQgbGluZSBtdXN0IGJlIHJlY29tcG9zZWQgaWYgYW55IHJvbGxiYWNrIGhhcHBlbnNcbiAgICAgICAgICAgICAqL1xuXHRcdFx0Y29uc3QgeyBwYWdpbmF0aW9uID0ge30gfSA9IGxpbmUucHJvcHM7XG5cdFx0XHRjb25zdCB7IHdpZG93LCBvcnBoYW4sIGtlZXBMaW5lcywgbGFzdCB9ID0gcGFnaW5hdGlvbjtcblx0XHRcdGlmIChrZWVwTGluZXMpIHtcblx0XHRcdFx0aWYgKHRoaXMucHJldi5zaG91bGRLZWVwTGluZXNXaXRoKGxpbmUpKSB7IC8vaSE9MVxuXHRcdFx0XHRcdGxldCBsaW5lQ291bnQgPSB0aGlzLnByZXYub3JwaGFuQ291bnQoKTtcblx0XHRcdFx0XHR0aGlzLnByZXYucm9sbGJhY2tMaW5lcyhsaW5lQ291bnQpO1xuXHRcdFx0XHRcdHJldHVybiBsaW5lQ291bnQgKyAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKG9ycGhhbikge1xuXHRcdFx0XHRcdGlmICh0aGlzLnByZXYub3JwaGFuQ291bnQobGluZSkgPT0gMSAmJiB0aGlzLnByZXYubGluZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdFx0dGhpcy5wcmV2LnJvbGxiYWNrTGluZXMoMSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMSArIDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh3aWRvdykge1xuXHRcdFx0XHRcdGlmIChsYXN0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvcnBoYW5Db3VudCA9IHRoaXMucHJldi5vcnBoYW5Db3VudChsaW5lKTtcblx0XHRcdFx0XHRcdGlmIChvcnBoYW5Db3VudCA+IDAgJiYgdGhpcy5wcmV2LmxpbmVzLmxlbmd0aCA+IG9ycGhhbkNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldi5yb2xsYmFja0xpbmVzKDEpO1xuXHRcdFx0XHRcdFx0XHRpZiAob3JwaGFuKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9ycGhhbkNvdW50ID09IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMucHJldi5yb2xsYmFja0xpbmVzKDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIDIgKyAxO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMSArIDE7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5wcmV2LnNob3VsZEtlZXBXaXRoTmV4dChsaW5lKSkge1xuXHRcdFx0XHRsZXQgcmVtb3ZlZExpbmVzID0gdGhpcy5wcmV2LnJvbGxiYWNrTGluZXModGhpcy5wcmV2Lm9ycGhhbkNvdW50KCkpO1xuXHRcdFx0XHQvL3JlLXN1Ym1pdCBsYXN0IHBhcmFncmFwaFxuXHRcdFx0XHRjb25zdCBwaWQgPSBnZXRMaW5lUGFyYWdyYXBoSWQocmVtb3ZlZExpbmVzWzBdKTtcblx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKHBpZCkucmVjb21taXQoKTtcblx0XHRcdFx0cmV0dXJuIDAgKyAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3VwZXIuYXBwZW5kQ29tcG9zZWQoLi4uYXJndW1lbnRzKTtcblx0fVxuXHRzaG91bGRLZWVwTGluZXNXaXRoKGxpbmUpIHtcblx0XHRjb25zdCBwaWQgPSBnZXRMaW5lUGFyYWdyYXBoSWQobGluZSk7XG5cdFx0cmV0dXJuIGdldExpbmVQYXJhZ3JhcGhJZCh0aGlzLmxhc3RMaW5lKSA9PSBwaWQgJiZcblx0XHRcdGdldExpbmVQYXJhZ3JhcGhJZCh0aGlzLmZpcnN0TGluZSkgIT0gcGlkO1xuXHR9XG5cdHNob3VsZEtlZXBXaXRoTmV4dChsaW5lKSB7XG5cdFx0Y29uc3Qgc2hvdWxkID0gKHRoaXMubGFzdExpbmUucHJvcHMucGFnaW5hdGlvbiB8fCB7fSkua2VlcFdpdGhOZXh0ICYmXG5cdFx0XHR0aGlzLm9ycGhhbkNvdW50KGxpbmUpID09IDAgJiZcblx0XHRcdGdldExpbmVQYXJhZ3JhcGhJZCh0aGlzLmZpcnN0TGluZSkgIT09IGdldExpbmVQYXJhZ3JhcGhJZCh0aGlzLmxhc3RMaW5lKTtcblx0XHRyZXR1cm4gc2hvdWxkO1xuXHR9XG5cdHN0YXRpYyBGaXhlZCA9IE9ycGhhbkNvbnRyb2xhYmxlO1xufVxuXG5jb25zdCBnZXRMaW5lUGFyYWdyYXBoSWQ9bGluZT0+bmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwicGFyYWdyYXBoXCJdYCkuYXR0cihcImRhdGEtY29udGVudFwiKVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgT3JwaGFuQ29udHJvbGFibGUgZnJvbSBcIi4vb3JwaGFuLWNvbnRyb2xhYmxlXCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi8uLi8uLi9jb21wb3NlZFwiXG5pbXBvcnQgQ29udHJhaW50U3BhY2UgZnJvbSBcIi4uL2NvbnN0cmFpbnQtc3BhY2VcIlxuLyoqXG4gKiB7cHJvcHM6e3NwYWNlLCBjb2xzPVt7eCx3aWR0aCxbeSxoZWlnaHRdfSwgLi4uXX19XG4gKiBzcGFjZSBpcyBzaGFyZWQgYnkgY29scywgaW5jbHVkaW5nIHdyYXBwZWVzLCBsZWZ0LHJpZ2h0LCBibG9ja09mZnNldCwgYW5kIGhlaWdodFxuICogZWFjaCBjb2wgaXMgYSByZWN0IHJlbGF0aXZlIHRvIHNwYWNlKGxlZnQsIHRoaXMuYmxvY2tPZmZzZXQpIGlmIHNwYWNlIGV4aXN0XG4gKiBvdGhlcndpc2UgZWFjaCBjb2wgc2hhcGUgYSBzcGFjZSB7eCBhcyBsZWZ0LCByaWdodDp4K3dpZHRoLCBoZWlnaHQsIHkgYXMgYmxvY2tPZmZzZXR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbHVtbmFibGUgZXh0ZW5kcyBPcnBoYW5Db250cm9sYWJsZSB7XG5cdGRlZmluZVByb3BlcnRpZXMoKSB7XG5cdFx0c3VwZXIuZGVmaW5lUHJvcGVydGllcygpO1xuXHRcdGlmICghdGhpcy5wcm9wcy5jb2xzKVxuXHRcdFx0cmV0dXJuO1xuXHRcdHRoaXMuY29tcHV0ZWQuY29sdW1ucyA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdGJsb2NrT2Zmc2V0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jdXJyZW50Q29sdW1uLmJsb2NrT2Zmc2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YXZhaWxhYmxlQmxvY2tTaXplOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmN1cnJlbnRDb2x1bW4uYXZhaWxhYmxlQmxvY2tTaXplO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29udGVudEhlaWdodDoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuY29sdW1ucy5tYXAoYSA9PiBhLmhlaWdodCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudENvbHVtbjoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuXHRcdFx0XHRcdGlmIChjb2x1bW5zLmxlbmd0aCA9PSAwKVxuXHRcdFx0XHRcdFx0dGhpcy5jcmVhdGVDb2x1bW4oKTtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29sczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jb2xzO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Y29sdW1uczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb2x1bW5zO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodmFsdWVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuY29sdW1ucyA9IHZhbHVlcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNyZWF0ZUNvbHVtbigpIHtcblx0XHRjb25zdCBjb2x1bW4gPSB7XG5cdFx0XHQuLi50aGlzLmNvbHNbdGhpcy5jb2x1bW5zLmxlbmd0aF0sXG5cdFx0XHRsaW5lczogQ29sdW1uQ2hpbGRyZW4uY3JlYXRlKHRoaXMsIC4uLmFyZ3VtZW50cyksXG5cdFx0XHRnZXQgaXNFbXB0eSgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXMubGVuZ3RoID09IDA7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0IGF2YWlsYWJsZUJsb2NrU2l6ZSgpIHtcblx0XHRcdFx0Y29uc3Qge21heEhlaWdodD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgaGVpZ2h0ID0gbWF4SGVpZ2h0LCB5ID0gMCB9ID0gdGhpcztcblx0XHRcdFx0cmV0dXJuIGhlaWdodCAtICh0aGlzLmJsb2NrT2Zmc2V0IC0geSk7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0IGJsb2NrT2Zmc2V0KCkge1xuXHRcdFx0XHRjb25zdCB7IHkgPSAwIH0gPSB0aGlzO1xuXHRcdFx0XHRyZXR1cm4geSt0aGlzLmNvbnRlbnRIZWlnaHQ7XG5cdFx0XHR9LFxuXHRcdFx0Z2V0IGNvbnRlbnRIZWlnaHQoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLnJlZHVjZSgoSCwgeyBwcm9wczogeyBoZWlnaHQ6IGggPSAwIH0gfSkgPT4gaCArIEgsIDApO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5jb2x1bW5zLnB1c2goY29sdW1uKTtcblx0XHRyZXR1cm4gY29sdW1uO1xuXHR9XG5cblx0LyoqY2hlY2sgY2xhc3MgZXhwbGFpbmF0aW9uICovXG5cdGdldFNwYWNlKGNvbHVtbikge1xuXHRcdHZhciBzcGFjZSA9IHN1cGVyLmdldFNwYWNlKC4uLmFyZ3VtZW50cyk7XG5cdFx0aWYgKCF0aGlzLmNvbHMpXG5cdFx0XHRyZXR1cm4gc3BhY2U7XG5cdFx0aWYoIXNwYWNlKVxuXHRcdFx0c3BhY2U9Q29udHJhaW50U3BhY2UuY3JlYXRlKHt9KVxuXHRcdGNvbnN0IHsgbGVmdCA9IDAsIHJpZ2h0ID0gMCwgYmxvY2tPZmZzZXQgPSAwLCBoZWlnaHQ6IEggfSA9IHNwYWNlO1xuXHRcdGNvbnN0IHsgd2lkdGggPSByaWdodCAtIGxlZnQsIHggPSBsZWZ0LCBoZWlnaHQgPSBILCB5ID0gYmxvY2tPZmZzZXQgfSA9IGNvbHVtbnx8dGhpcy5jdXJyZW50Q29sdW1uO1xuXHRcdHJldHVybiBzcGFjZS5jbG9uZSh7XG5cdFx0XHRsZWZ0OiB4LFxuXHRcdFx0cmlnaHQ6IHggKyB3aWR0aCxcblx0XHRcdGJsb2NrT2Zmc2V0OiB5LFxuXHRcdFx0aGVpZ2h0LFxuXHRcdFx0ZWRnZXM6e1xuXHRcdFx0XHRjb2x1bW46e2xlZnQ6eCx0b3A6eSxyaWdodDp4K3dpZHRoLGJvdHRvbTp5K2hlaWdodH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cdG5leHRBdmFpbGFibGVTcGFjZSgpIHtcblx0XHRjb25zdCBzcGFjZSA9IHN1cGVyLm5leHRBdmFpbGFibGVTcGFjZSguLi5hcmd1bWVudHMpO1xuXHRcdGlmIChzcGFjZSA9PSBmYWxzZSAmJiB0aGlzLmNvbHMpIHtcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRDb2x1bW4uaXNFbXB0eSkge1xuXHRcdFx0XHQvKiogbm90IGFsbG93IGVtcHR5IGNvbHVtbiwgc28gaWdub3JlIHJlcXVpcmVkKi9cblx0XHRcdFx0cmV0dXJuIHN1cGVyLm5leHRBdmFpbGFibGVTcGFjZSgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzTW9yZUNvbHVtbiA9IHRoaXMuY29scy5sZW5ndGggPiB0aGlzLmNvbHVtbnMubGVuZ3RoO1xuXHRcdFx0aWYgKGhhc01vcmVDb2x1bW4pIHtcblx0XHRcdFx0dGhpcy5jcmVhdGVDb2x1bW4oKTtcblx0XHRcdFx0LyoqIGlnbm9yZSByZXF1aXJlZCBmb3IgYSBuZXcgY29sdW1uKi9cblx0XHRcdFx0cmV0dXJuIHN1cGVyLm5leHRBdmFpbGFibGVTcGFjZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3BhY2U7XG5cdH1cblxuXHRwb3NpdGlvbkxpbmVzKCkge1xuXHRcdGlmKCF0aGlzLmNvbHMpXG5cdFx0XHRyZXR1cm4gc3VwZXIucG9zaXRpb25MaW5lcyguLi5hcmd1bWVudHMpXG5cdFx0Y29uc3QgaGVpZ2h0PU1hdGgubWF4KC4uLnRoaXMuY29sdW1ucy5tYXAoKHtjb250ZW50SGVpZ2h0LCBoZWlnaHQ9Y29udGVudEhlaWdodH0pPT5oZWlnaHQpKVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgaGVpZ2h0PXtoZWlnaHR9PlxuXHRcdFx0XHR7dGhpcy5jb2x1bW5zLm1hcCgoe3gseSx3aWR0aCxjb250ZW50SGVpZ2h0LCBoZWlnaHQ9Y29udGVudEhlaWdodCxsaW5lc30saSk9Pntcblx0XHRcdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KHN1cGVyLnBvc2l0aW9uTGluZXMobGluZXMpLHt4LHksd2lkdGgsaGVpZ2h0LGtleTppfSlcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L0dyb3VwPlxuXHRcdClcblx0fVxuXG5cdHJvbGxiYWNrTGluZXMoKXtcblx0XHRjb25zdCByZW1vdmVkTGluZXM9c3VwZXIucm9sbGJhY2tMaW5lcyguLi5hcmd1bWVudHMpXG5cdFx0aWYodGhpcy5jb2xzICYmIHRoaXMuY29sdW1ucy5sZW5ndGg+MSl7XG5cdFx0XHRjb25zdCBtYXg9dGhpcy5saW5lcy5sZW5ndGgtMVxuXHRcdFx0Y29uc3QgaT10aGlzLmNvbHVtbnMuZmluZEluZGV4KGE9PmEubGluZXMuc3RhcnRJbmRleD5tYXgpXG5cdFx0XHRpZihpIT0tMSl7XG5cdFx0XHRcdHRoaXMuY29sdW1ucy5zcGxpY2UoaSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVtb3ZlZExpbmVzXG5cdH1cbn1cblxuY2xhc3MgQ29sdW1uQ2hpbGRyZW57XG4gICAgY29uc3RydWN0b3IoZnJhbWUsc3RhcnRJbmRleD1mcmFtZS5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGgpe1xuXHRcdHRoaXMuZnJhbWU9ZnJhbWVcbiAgICAgICAgdGhpcy5zdGFydEluZGV4PXN0YXJ0SW5kZXhcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGNyZWF0ZSgpe1xuICAgICAgICByZXR1cm4gbmV3IFByb3h5KG5ldyBDb2x1bW5DaGlsZHJlbiguLi5hcmd1bWVudHMpLHtcbiAgICAgICAgICAgIGdldChvYmosIHByb3Ape1xuICAgICAgICAgICAgICAgIHN3aXRjaChwcm9wKXtcbiAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlIFxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YXJnZXRcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmKHByb3AgaW4gb2JqKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialtwcm9wXVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcz1vYmouaXRlbXNcbiAgICAgICAgICAgICAgICAgICAgaWYocHJvcCBpbiBpdGVtcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmPWl0ZW1zW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoZik9PVwiZnVuY3Rpb25cIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYuYmluZChpdGVtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpPT5vYmoudW5zdXBwb3J0KGBub3Qgc3VwcG9ydGVkIENvbHVtbkNoaWxkcmVuWyR7cHJvcH1dYClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG5cdGdldCBlbmRJbmRleCgpe1xuXHRcdGNvbnN0IGNvbHVtbnM9dGhpcy5mcmFtZS5jb2x1bW5zXG5cdFx0Y29uc3QgaT1jb2x1bW5zLmZpbmRJbmRleChhPT5hLmxpbmVzLnRhcmdldD09dGhpcylcblx0XHRjb25zdCBuZXh0Q29sdW1uPWNvbHVtbnNbaSsxXVxuXHRcdHJldHVybiBuZXh0Q29sdW1uID8gbmV4dENvbHVtbi5saW5lcy5zdGFydEluZGV4IDogdGhpcy5mcmFtZS5saW5lcy5sZW5ndGhcbiAgICB9XG4gICAgXG4gICAgZ2V0IGl0ZW1zKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lLmxpbmVzLnNsaWNlKHRoaXMuc3RhcnRJbmRleCx0aGlzLmVuZEluZGV4KVxuICAgIH1cblxuICAgIGdldCBsZW5ndGgoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kSW5kZXgtdGhpcy5zdGFydEluZGV4XG4gICAgfVxuXG4gICAgdW5zdXBwb3J0KG1zZyl7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKVxuICAgIH1cblxuICAgIHB1c2goKXtcblx0XHR0aGlzLmZyYW1lLmxpbmVzLnNwbGljZSh0aGlzLmVuZEluZGV4LDAsLi4uYXJndW1lbnRzKVxuICAgIH1cbiAgICBcbiAgICBzcGxpY2UoaSxqLC4uLmFzKXtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZFwiKVxuICAgIH1cbn0iLCJpbXBvcnQgQ29sdW1uYWJsZSBmcm9tIFwiLi9jb2x1bW5hYmxlXCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhbGFuY2VhYmxlIGV4dGVuZHMgQ29sdW1uYWJsZSB7XG5cdGRlZmluZVByb3BlcnRpZXMoKSB7XG5cdFx0c3VwZXIuZGVmaW5lUHJvcGVydGllcygpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHRiYWxhbmNlYWJsZTp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbHMgJiYgdGhpcy5jb2xzLmxlbmd0aCA+IDEgJiYgdGhpcy5wcm9wcy5iYWxhbmNlICYmIHRoaXMubGluZXMubGVuZ3RoPjFcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKSB7XG5cdFx0aWYgKHRoaXMuYmFsYW5jZWFibGUpIHtcblx0XHRcdHRoaXMuYmFsYW5jZSgpO1xuXHRcdH1cblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoLi4uYXJndW1lbnRzKTtcblx0fVxuXHRcblx0YmFsYW5jZSgpIHtcblx0XHRjb25zdCB7IGJhbGFuY2UgfSA9IHRoaXMucHJvcHM7XG5cdFx0aWYgKHR5cGVvZiAoYmFsYW5jZSkgPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gYmFsYW5jZS5jYWxsKHRoaXMpO1xuXHRcdH1cblx0XHRjb25zdCB7IGJhbGFuY2VUaHJlc2hvbGQgPSAxIH0gPSB0aGlzLnByb3BzO1xuXHRcdGNvbnN0IHdpZHRoID0gdGhpcy5jb2xzWzBdLndpZHRoO1xuXHRcdGlmICghdGhpcy5jb2xzLmZpbmQoYSA9PiBNYXRoLmFicyh3aWR0aCAtIGEud2lkdGgpID4gYmFsYW5jZVRocmVzaG9sZCkpIHtcblx0XHRcdHRoaXMuZXF1YWxCYWxhbmNlKCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5hbnlCYWxhbmNlKCk7XG5cdFx0fVxuXHR9XG4gICAgLyoqXG4gICAgKmp1c3QgcmVsb2NhdGUgbGluZXMgYmV0d2VlbiBhbGwgY29sdW1uc1xuICAgICovXG5cdGVxdWFsQmFsYW5jZSgpIHtcblx0XHRjb25zdCB0b3RhbEhlaWdodCA9IHRoaXMubGluZXMucmVkdWNlKChoLCB7IHByb3BzOntoZWlnaHQ9MH0gfSkgPT4gaCArIGhlaWdodCwgMCk7XG5cdFx0Y29uc3QgY29sSGVpZ2h0ID0gdG90YWxIZWlnaHQgLyB0aGlzLmNvbHMubGVuZ3RoO1xuXHRcdHRoaXMuY29sdW1ucyA9IFtdO1xuXHRcdGNvbnN0IHNlZ21lbnRzPXRoaXMubGluZXMucmVkdWNlKChzdGF0ZSwgeyBwcm9wczogeyBoZWlnaHQgPSAwIH0gfSwgaSkgPT4ge1xuXHRcdFx0aWYgKHN0YXRlLmggPCBjb2xIZWlnaHQpIHtcblx0XHRcdFx0c3RhdGUuaCArPSBoZWlnaHQ7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c3RhdGUuY29sdW1ucy5wdXNoKGkpO1xuXHRcdFx0XHRzdGF0ZS5oID0gaGVpZ2h0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdH0sIHsgY29sdW1uczogWzBdLCBoOiAwIH0pLmNvbHVtbnMuc2xpY2UoMCx0aGlzLmNvbHMubGVuZ3RoKVxuXHRcdFxuXHRcdHJldHVybiBzZWdtZW50cy5mb3JFYWNoKHN0YXJ0SW5kZXggPT4gdGhpcy5jcmVhdGVDb2x1bW4oc3RhcnRJbmRleCkpO1xuXHR9XG4gICAgLyoqXG4gICAgICogcmUtbGF5b3V0IGJ5IHRvdGFsIGNvbHMnIHdpZHRoIHRvIGdldCBsYXlvdXQgaGVpZ2h0XG4gICAgICogdGhlbiB1c2UgaXQgYXMgZWFjaCBibG9jayBoZWlnaHQgdG8gcmUtbGF5b3V0IGFnYWluXG4gICAgICovXG5cdGFueUJhbGFuY2UoKSB7XG5cdFx0Y29uc3QgY3JlYXRlQ29sdW1uID0gdGhpcy5jcmVhdGVDb2x1bW47XG5cdFx0dHJ5IHtcblx0XHRcdC8vcmVjb21wb3NlIGludG8gY29sIHdpdGggdG90YWxXaWR0aCB0byBnZXQgdG90YWwgaGVpZ2h0XG5cdFx0XHRjb25zdCB0b3RhbFdpZHRoID0gdGhpcy5jb2xzLnJlZHVjZSgodywgYSkgPT4gdyArIGEud2lkdGgsIDApO1xuXHRcdFx0dGhpcy5jcmVhdGVDb2x1bW4gPSAoKSA9PiBPYmplY3QuYXNzaWduKGNyZWF0ZUNvbHVtbi5jYWxsKHRoaXMpLCB7IHdpZHRoOiB0b3RhbFdpZHRoLCBoZWlnaHQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIH0pO1xuXHRcdFx0dGhpcy5yZWNvbXBvc2UoKTtcblx0XHRcdGNvbnN0IHRvdGFsSGVpZ2h0ID0gdGhpcy5ibG9ja09mZnNldDtcblx0XHRcdHRoaXMuY3JlYXRlQ29sdW1uID0gKCkgPT4gT2JqZWN0LmFzc2lnbihjcmVhdGVDb2x1bW4uY2FsbCh0aGlzKSwgeyBoZWlnaHQ6IHRvdGFsSGVpZ2h0IH0pO1xuXHRcdFx0dGhpcy5yZWNvbXBvc2UoKTtcblx0XHR9XG5cdFx0ZmluYWxseSB7XG5cdFx0XHRkZWxldGUgdGhpcy5jcmVhdGVDb2x1bW47XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi8uLi9jb21wb3NlZC9ncm91cFwiXG5pbXBvcnQgeyBSZWFjdFF1ZXJ5IH0gZnJvbSBcIndlLWVkaXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lU2VnbWVudHMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIGxlZnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHNlZ21lbnRzOiBQcm9wVHlwZXMuYXJyYXlPZihJbmxpbmVTZWdtZW50KVxuICAgIH07XG4gICAgc3RhdGljIGNyZWF0ZSh7IHNlZ21lbnRzID0gW10sIC4uLnByb3BzIH0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmxpbmVTZWdtZW50cyh7IHNlZ21lbnRzOiBzZWdtZW50cy5tYXAoYSA9PiBuZXcgSW5saW5lU2VnbWVudChhKSksIC4uLnByb3BzIH0pO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih7IHNlZ21lbnRzID0gW10gfSA9IHsgc2VnbWVudHM6IFtdIH0pIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IHNlZ21lbnRzO1xuICAgIH1cbiAgICBnZXQgaXRlbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZ21lbnRzLnJlZHVjZSgoYWxsLCBzZWdtZW50KSA9PiBbLi4uYWxsLCAuLi5zZWdtZW50Lml0ZW1zXSwgW10pO1xuICAgIH1cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHMuZmluZExhc3QoKGEsIGkpID0+IGEuaXRlbXMubGVuZ3RoID4gMCB8fCBpID09IDApO1xuICAgIH1cbiAgICBnZXQgY3VycmVudFgoKSB7XG4gICAgICAgIGNvbnN0IHsgeCA9IDAsIGl0ZW1zIH0gPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKFgsIHsgcHJvcHM6IHsgd2lkdGggPSAwIH0gfSkgPT4gWCArIHdpZHRoLCB4KTtcbiAgICB9XG4gICAgc2hvdWxkUmVsYXlvdXQoeyBzZWdtZW50cyB9KSB7XG4gICAgICAgIGNvbnN0IGJTYW1lID0gc2VnbWVudHNcbiAgICAgICAgICAgICYmIHRoaXMuc2VnbWVudHMubGVuZ3RoID09IHNlZ21lbnRzLmxlbmd0aFxuICAgICAgICAgICAgJiYgIXRoaXMuc2VnbWVudHMuZmluZCgoeyBwcm9wczogYSB9LCBpLCBjLCBiID0gc2VnbWVudHNbaV0pID0+ICEoYiAmJiBhLnggPT0gYi54ICYmIGEud2lkdGggPT0gYi53aWR0aCkpO1xuICAgICAgICByZXR1cm4gc2VnbWVudHMgJiYgIWJTYW1lO1xuICAgIH1cbiAgICByZWxheW91dChwcm9wcywgLi4uYXRvbXMpIHtcbiAgICAgICAgY29uc3QgcmVsYXlvdXQgPSB0aGlzLmNvbnN0cnVjdG9yLmNyZWF0ZSh7IC4uLnRoaXMucHJvcHMsIC4uLnByb3BzIH0pO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi50aGlzLml0ZW1zLCAuLi5hdG9tc107XG4gICAgICAgIGxldCBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMCwgbCA9IHJlbGF5b3V0LnNlZ21lbnRzLmxlbmd0aDsgaiA8IGw7IGorKykge1xuICAgICAgICAgICAgbGV0IHNlZ21lbnQgPSByZWxheW91dC5zZWdtZW50c1tqXTtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGlmIChzZWdtZW50LnB1c2goaXRlbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpIDwgbGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbGF5b3V0O1xuICAgIH1cbiAgICBwdXNoKCkge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5zZWdtZW50cy5maW5kTGFzdEluZGV4KChhLCBpKSA9PiBhLml0ZW1zLmxlbmd0aCA+IDAgfHwgaSA9PSAwKTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWdtZW50cy5zbGljZShpKS5maW5kKGEgPT4ge1xuICAgICAgICAgICAgaWYgKGEucHVzaCguLi5hcmd1bWVudHMpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVzaEF0b21pYygpIHtcbiAgICB9XG4gICAgcHVzaFRhYigpIHtcbiAgICB9XG4gICAgcHVzaExpbmVicmVhaygpIHtcbiAgICB9XG4gICAgcHVzaEh5cGhlbigpIHtcbiAgICB9XG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGxlZnQgPSAwIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IGZsYXQgfSA9IHRoaXMuc2VnbWVudHNcbiAgICAgICAgICAgIC5yZWR1Y2UoKHsgWCwgZmxhdCB9LCB7IGl0ZW1zLCBwcm9wczogeyB4ID0gMCwgd2lkdGggPSAwIH0gfSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIC8qKm5vbiB0ZXh0IGF0b20gc2V0IHk9LWhlaWdodCwgc28gbGluZSBiYXNlZCBiYXNlbGluZSBpbiBAc3RvcnkgY2FuIGJlIGltcGxlbWVudGVkLCAgICovXG4gICAgICAgICAgICAgICAgaXRlbXM9aXRlbXMubWFwKGE9PmEucHJvcHMuaGVpZ2h0ICYmICFpc1RleHQoYSkgPyAgUmVhY3QuY2xvbmVFbGVtZW50KGEse3k6LWEucHJvcHMuaGVpZ2h0fSkgOiBhKVxuICAgICAgICAgICAgICAgIGZsYXQuc3BsaWNlKGZsYXQubGVuZ3RoLCAwLCAuLi4oWCAhPSB4ID8gWzxHcm91cCB4PXtYIC0gbGVmdH0gd2lkdGg9e3ggLSBYfSAvPiwgLi4uaXRlbXNdIDogaXRlbXMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBYOiB4ICsgd2lkdGgsIGZsYXQgfTtcbiAgICAgICAgICAgIH0sIHsgZmxhdDogW10sIFg6IGxlZnQgfSk7XG4gICAgICAgIHJldHVybiA8R3JvdXAgey4uLnsgeDogbGVmdCwgY2hpbGRyZW46IGZsYXQgfX0gLz47XG4gICAgfVxufVxuXG5jbGFzcyBJbmxpbmVTZWdtZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICB4OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICB3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9O1xuICAgIGNvbnN0cnVjdG9yKHsgeCwgd2lkdGggfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLml0ZW1zID0gW107XG4gICAgfVxuICAgIGdldCBjb250ZW50V2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgoWCwgYSkgPT4gWCArIGEucHJvcHMud2lkdGgsIDApO1xuICAgIH1cbiAgICBnZXQgYXZhaWxhYmxlV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLndpZHRoIC0gdGhpcy5jb250ZW50V2lkdGg7XG4gICAgfVxuICAgIHB1c2goYXRvbSwgbXVzdCkge1xuICAgICAgICBpZiAobXVzdCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGF0b20pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2lkdGggPSAwLCBtaW5XaWR0aCA9IHdpZHRoIH0gPSBhdG9tLnByb3BzO1xuICAgICAgICBpZiAobWluV2lkdGggPT0gMCB8fCB0aGlzLmF2YWlsYWJsZVdpZHRoID49IG1pbldpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goYXRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8qKioqSW5saW5lU2VnbWVudHMgZG9lc24ndCB1c2UgaXRcbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgeCA9IDAsIHdpZHRoIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgWCA9IHg7XG4gICAgICAgIHJldHVybiAoPEdyb3VwIHg9e3h9IHdpZHRoPXt3aWR0aH0+XG4gICAgICAgICAgICB7dGhpcy5pdGVtcy5tYXAoYSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYXRlZCA9IFJlYWN0LmNsb25lRWxlbWVudChhLCB7IHg6IFggfSk7XG4gICAgICAgICAgICAgICAgWCArPSAoYS5wcm9wcy53aWR0aCB8fCAwKTtcbiAgICAgICAgICAgICAgICBpZighaXNUZXh0KGEpICYmIGEucHJvcHMuaGVpZ2h0KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChsb2NhdGVkLHt5Oi1hLnByb3BzLmhlaWdodH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGVkO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgIDwvR3JvdXA+KTtcbiAgICB9XG59XG5cbmNvbnN0IGlzVGV4dD1hPT5hLnByb3BzLmRlc2NlbnQhPT11bmRlZmluZWRcbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi8uLi8uLi9jb21wb3NlZFwiXG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVyZ2UgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtjaGlsZHJlbix4fT10aGlzLnByb3BzXG5cdFx0Y29uc3QgbWVyZ2VkPXRoaXMuZ2V0TWVyZ2VkKGNoaWxkcmVuKVxuXHRcdGlmKG1lcmdlZC5sZW5ndGg9PTEpe1xuXHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChtZXJnZWRbMF0se3h9KVxuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIHg9e3h9PlxuXHRcdFx0XHR7dGhpcy5nZXRNZXJnZWQoY2hpbGRyZW4pfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblx0Z2V0TWVyZ2VkPW1lbW9pemUoKGNoaWxkcmVuKT0+e1xuXHRcdHJldHVybiBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVxuXHRcdC5yZWR1Y2UoKHN0YXRlLHBpZWNlLGtleSk9Pntcblx0XHRcdGNvbnN0IHBpZWNlUGF0aD1wYXRoKHBpZWNlKVxuXHRcdFx0aWYoIXBpZWNlUGF0aC5iVGV4dCl7XG5cdFx0XHRcdHN0YXRlLm1lcmdlVHJ1bmsoa2V5KVxuXHRcdFx0XHRzdGF0ZS5waWVjZXMucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQocGllY2Use3g6c3RhdGUueCxrZXl9KSlcblx0XHRcdFx0c3RhdGUueCs9cGllY2UucHJvcHMud2lkdGhcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRpZihwaWVjZVBhdGguam9pbihcIixcIik9PXN0YXRlLnRydW5rUGF0aCl7XG5cdFx0XHRcdFx0c3RhdGUudHJ1bmsucHVzaChwaWVjZSlcblx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdHN0YXRlLm1lcmdlVHJ1bmsoa2V5KVxuXHRcdFx0XHRcdHN0YXRlLnRydW5rLnB1c2gocGllY2UpXG5cdFx0XHRcdFx0c3RhdGUudHJ1bmtQYXRoPXBpZWNlUGF0aC5qb2luKFwiLFwiKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3RhdGVcblx0XHR9LHtcdHBpZWNlczpbXSxcblx0XHRcdHg6MCxcblx0XHRcdHRydW5rOltdLFxuXHRcdFx0dHJ1bmtQYXRoOm51bGwsXG5cdFx0XHRtZXJnZVRydW5rKGtleT0tMSl7XG5cdFx0XHRcdGlmKHRoaXMudHJ1bmsubGVuZ3RoPT0xKXtcblx0XHRcdFx0XHRjb25zdCBwaWVjZT10aGlzLnRydW5rWzBdXG5cdFx0XHRcdFx0dGhpcy5waWVjZXMucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQocGllY2Use3g6dGhpcy54LGtleX0pKVxuXHRcdFx0XHRcdHRoaXMueCs9cGllY2UucHJvcHMud2lkdGhcblx0XHRcdFx0fWVsc2UgaWYodGhpcy50cnVuay5sZW5ndGg+MSl7XG5cdFx0XHRcdFx0Y29uc3QgZXh0cmFjdD1hPT5wYXRoKGEsYj0+YikucG9wKClcblx0XHRcdFx0XHRjb25zdCB0ZXh0cz10aGlzLnRydW5rLm1hcChleHRyYWN0KVxuXHRcdFx0XHRcdGNvbnN0IHByb3BzPXRleHRzLnJlZHVjZSgocHJvcHMsYSk9Pntcblx0XHRcdFx0XHRcdFx0cHJvcHMud2lkdGgrPWEucHJvcHMud2lkdGhcblx0XHRcdFx0XHRcdFx0cHJvcHMuY2hpbGRyZW4rPWEucHJvcHMuY2hpbGRyZW5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHByb3BzXG5cdFx0XHRcdFx0XHR9LHtcblx0XHRcdFx0XHRcdFx0d2lkdGg6MCxcblx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46XCJcIixcblx0XHRcdFx0XHRcdFx0XCJkYXRhLWVuZGF0XCI6dGV4dHNbdGV4dHMubGVuZ3RoLTFdLnByb3BzW1wiZGF0YS1lbmRhdFwiXSxcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lOnVuZGVmaW5lZCxtaW5XaWR0aDp1bmRlZmluZWRcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50cz1wYXRoKHRoaXMudHJ1bmtbMF0sYT0+YSxhPT50cnVlKS5zbGljZSgwLC0xKVxuXHRcdFx0XHRcdGNvbnN0IG1lcmdlZD1wYXJlbnRzLnJlZHVjZVJpZ2h0KChjaGlsZCxhKT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse3dpZHRoOnByb3BzLndpZHRofSxjaGlsZCksUmVhY3QuY2xvbmVFbGVtZW50KHRleHRzWzBdLHByb3BzKSlcblx0XHRcdFx0XHR0aGlzLnBpZWNlcy5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChtZXJnZWQse3g6dGhpcy54LGtleX0pKVxuXHRcdFx0XHRcdHRoaXMueCs9cHJvcHMud2lkdGhcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnRydW5rPVtdXG5cdFx0XHRcdHRoaXMudHJ1bmtQYXRoPW51bGxcblx0XHRcdFx0cmV0dXJuIHRoaXNcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5tZXJnZVRydW5rKClcblx0XHQucGllY2VzXG5cdH0pXG59XG5cblxuZnVuY3Rpb24gcGF0aChhLGluZm89YT0+YS5wcm9wc1tcImRhdGEtY29udGVudFwiXSx0ZXN0PWE9PiEhYS5wcm9wc1tcImRhdGEtY29udGVudFwiXSxpZHM9W10pe1xuXHRpZihSZWFjdC5pc1ZhbGlkRWxlbWVudChhKSl7XG5cdFx0aWYodGVzdChhKSl7XG5cdFx0XHRpZHMucHVzaChpbmZvKGEpKVxuXHRcdFx0aWRzLmJUZXh0PWEucHJvcHNbXCJkYXRhLXR5cGVcIl09PVwidGV4dFwiXG5cdFx0fVxuXHRcdGlmKFJlYWN0LmlzVmFsaWRFbGVtZW50KGEucHJvcHMuY2hpbGRyZW4pKXtcblx0XHRcdHBhdGgoUmVhY3QuQ2hpbGRyZW4ub25seShhLnByb3BzLmNoaWxkcmVuKSxpbmZvLHRlc3QsaWRzKVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaWRzXG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1JlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IHtHcm91cCxUZXh0fSBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWRcIlxuXG5pbXBvcnQgTWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIlxuXG4vKipcbiAqIDEuIGFsaWduXG4gKiAyLiBzZXQgYmFzZWxpbmU6IGJhc2VsaW5lIHNldCBvbiBzdG9yeSBpcyBpbXBvcnRhbnQgZm9yIHJvdGF0aW9uXG4gKiAzLiBtZXJnZSB0byBzaW1wbGlmeSBkb20gc3RydWN0dXJlIGZvciBwZXJmb3JtYW5jZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdG9yeSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIGRpc3BsYXlOYW1lPVwic3RvcnlcIlxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7Y2hpbGRyZW4sIGFsaWduPVwibGVmdFwifT10aGlzLnByb3BzXG5cdFx0Y29uc3QgZGVzY2VudD1jaGlsZHJlbi5yZWR1Y2UoKGgse3Byb3BzOntkZXNjZW50PTB9fSk9Pk1hdGgubWF4KGgsZGVzY2VudCksMClcblx0XHRjb25zdCBiYXNlbGluZT1jaGlsZHJlbi5yZWR1Y2UoKGgse3Byb3BzOntoZWlnaHQ9MCxkZXNjZW50PTB9fSk9Pk1hdGgubWF4KGgsaGVpZ2h0LWRlc2NlbnQpLDApXG5cdFx0Y29uc3QgYWxpZ25lZD10aGlzW2FsaWduXSgpXG5cdFx0cmV0dXJuICg8R3JvdXAgY2xhc3NOYW1lPVwic3RvcnlcIiB5PXtiYXNlbGluZX0gbGluZURlc2NlbnQ9e2Rlc2NlbnR9IGNoaWxkcmVuPXthbGlnbmVkfS8+KVxuXHR9XG5cblx0LyoqXG5cdCAqIEdyb3VwIHVucG9zaXRpb25lZCBmb3IgZWFjaCBwb3NpdGlvbmVkXG5cdCAqICoqKiBsYXN0IGdyb3VwIHNob3VsZCBpZ25vcmUgbWluV2lkdGg9PTAgZWxlbWVudCBmb3IgYWxpZ25tZW50XG5cdCAqIEBwYXJhbSB7Kn0gcmlnaHQgXG5cdCAqL1xuXHRncm91cChyaWdodD1mYWxzZSl7XG5cdFx0cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cblx0XHRcdC5yZWR1Y2UoKGdyb3VwcyxhKT0+e1xuXHRcdFx0XHRpZihhLnByb3BzLnghPXVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0aWYocmlnaHQpe1xuXHRcdFx0XHRcdFx0Z3JvdXBzLnB1c2goe2xvY2F0ZWQ6YSx3b3JkczpbXX0pXG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRncm91cHNbZ3JvdXBzLmxlbmd0aC0xXS5sb2NhdGVkPWFcblx0XHRcdFx0XHRcdGdyb3Vwcy5wdXNoKHt3b3JkczpbXX0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRncm91cHNbZ3JvdXBzLmxlbmd0aC0xXS53b3Jkcy5wdXNoKGEpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdyb3Vwc1xuXHRcdFx0fSxbe3dvcmRzOltdfV0pXG5cdFx0XHQubWFwKChncm91cCxfaSxfYSxpc0xhc3Q9X2k9PV9hLmxlbmd0aC0xKT0+e1xuXHRcdFx0XHRsZXQgaT1ncm91cC53b3Jkcy5sZW5ndGgtXG5cdFx0XHRcdFx0XHRBcnJheS5mcm9tKGdyb3VwLndvcmRzKVxuXHRcdFx0XHRcdFx0XHQucmV2ZXJzZSgpXG5cdFx0XHRcdFx0XHRcdC5maW5kSW5kZXgoYT0+aXNMYXN0ID8gYS5wcm9wcy5taW5XaWR0aCE9PTAgOiAhaXNXaGl0ZXNwYWNlKGEpIClcblxuXHRcdFx0XHRncm91cC5lbmRpbmdXaGl0ZXNwYWNlcz1ncm91cC53b3Jkcy5zbGljZShpKVxuXHRcdFx0XHRncm91cC53b3Jkcz1ncm91cC53b3Jkcy5zbGljZSgwLGkpXG5cdFx0XHRcdHJldHVybiBncm91cFxuXHRcdFx0fSlcblx0fVxuXG5cdGxlZnQoKXtcblx0XHRyZXR1cm4gdGhpcy5ncm91cCgpXG5cdFx0XHQucmVkdWNlKChzdGF0ZSwge3dvcmRzLCBlbmRpbmdXaGl0ZXNwYWNlcyxsb2NhdGVkfSk9Pntcblx0XHRcdFx0aWYod29yZHMubGVuZ3RoK2VuZGluZ1doaXRlc3BhY2VzLmxlbmd0aCl7XG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFxuXHRcdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRuZXcgTWVyZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdHg6c3RhdGUueCxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpbLi4ud29yZHMsLi4uZW5kaW5nV2hpdGVzcGFjZXNdLm1hcCgoYSxrZXkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5fSkpXG5cdFx0XHRcdFx0XHRcdH0pLnJlbmRlcigpLFxuXHRcdFx0XHRcdFx0XHR7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihsb2NhdGVkKXtcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KGxvY2F0ZWQse2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH0pKVxuXHRcdFx0XHRcdHN0YXRlLng9bG9jYXRlZC5wcm9wcy54K2xvY2F0ZWQucHJvcHMud2lkdGhcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblx0XHRcdH0se3g6MCwgYWxpZ25lZDpbXX0pXG5cdFx0XHQuYWxpZ25lZFxuXHR9XG5cdHJpZ2h0KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ3JvdXAodHJ1ZSlcblx0XHRcdC5yZWR1Y2VSaWdodCgoc3RhdGUsIHtsb2NhdGVkLHdvcmRzLGVuZGluZ1doaXRlc3BhY2VzfSk9Pntcblx0XHRcdFx0aWYoZW5kaW5nV2hpdGVzcGFjZXMubGVuZ3RoPjApe1xuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChcblx0XHRcdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0bmV3IE1lcmdlKHtcblx0XHRcdFx0XHRcdFx0XHR4OnN0YXRlLngsXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46ZW5kaW5nV2hpdGVzcGFjZXMubWFwKChhLGtleSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXl9KSlcblx0XHRcdFx0XHRcdFx0fSkucmVuZGVyKCksXG5cdFx0XHRcdFx0XHRcdHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKHdvcmRzLmxlbmd0aCl7XG5cdFx0XHRcdFx0c3RhdGUueD13b3Jkcy5yZWR1Y2UoKHgsYSk9PngtYS5wcm9wcy53aWR0aCxzdGF0ZS54KVxuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChcblx0XHRcdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0bmV3IE1lcmdlKHtcblx0XHRcdFx0XHRcdFx0XHR4OnN0YXRlLngsXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46d29yZHMubWFwKChhLGtleSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXl9KSlcblx0XHRcdFx0XHRcdFx0fSkucmVuZGVyKCksXG5cdFx0XHRcdFx0XHRcdHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGxvY2F0ZWQpe1xuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQobG9jYXRlZCx7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofSkpXG5cdFx0XHRcdFx0c3RhdGUueD1sb2NhdGVkLnByb3BzLnhcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblx0XHRcdH0se3g6dGhpcy5wcm9wcy53aWR0aCxhbGlnbmVkOltdfSlcblx0XHRcdC5hbGlnbmVkXG5cdFx0XHQucmV2ZXJzZSgpXG5cdH1cblxuXHRjZW50ZXIoKXtcblx0XHRjb25zdCBjb250ZW50V2lkdGg9cGllY2VzPT5waWVjZXMucmVkdWNlKCh3LGEpPT53K2EucHJvcHMud2lkdGgsMClcblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lmdyb3VwKClcblx0XHRcdC5yZWR1Y2UoKHN0YXRlLCB7d29yZHMsIGVuZGluZ1doaXRlc3BhY2VzLGxvY2F0ZWR9KT0+e1xuXHRcdFx0XHRpZih3b3Jkcy5sZW5ndGgrZW5kaW5nV2hpdGVzcGFjZXMubGVuZ3RoKXtcblx0XHRcdFx0XHRjb25zdCB3aWR0aD0obG9jYXRlZCA/IGxvY2F0ZWQucHJvcHMueCA6IHRoaXMucHJvcHMud2lkdGgpLXN0YXRlLnhcblx0XHRcdFx0XHRjb25zdCB3b3Jkc1dpZHRoPWNvbnRlbnRXaWR0aCh3b3Jkcylcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goXG5cdFx0XHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG5ldyBNZXJnZSh7XG5cdFx0XHRcdFx0XHRcdFx0eDpzdGF0ZS54Kyh3aWR0aC13b3Jkc1dpZHRoKS8yLFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOlsuLi53b3JkcywuLi5lbmRpbmdXaGl0ZXNwYWNlc10ubWFwKChhLGtleSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXl9KSlcblx0XHRcdFx0XHRcdFx0fSkucmVuZGVyKCksXG5cdFx0XHRcdFx0XHRcdHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGxvY2F0ZWQpe1xuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQobG9jYXRlZCx7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofSkpXG5cdFx0XHRcdFx0c3RhdGUueD1sb2NhdGVkLnByb3BzLngrbG9jYXRlZC5wcm9wcy53aWR0aFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdFx0fSx7eDowLCBhbGlnbmVkOltdfSkuYWxpZ25lZFxuXHR9XG5cblx0anVzdGlmeSgpe1xuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQuZ3JvdXAoKVxuXHRcdFx0LnJlZHVjZSgoc3RhdGUse3dvcmRzLGVuZGluZ1doaXRlc3BhY2VzLGxvY2F0ZWR9KT0+e1xuXHRcdFx0XHRsZXQgbGVuPXN0YXRlLmp1c3RpZmllZC5sZW5ndGhcblx0XHRcdFx0Y29uc3Qgd2lkdGg9KGxvY2F0ZWQgPyBsb2NhdGVkLnByb3BzLnggOiB0aGlzLnByb3BzLndpZHRoKS1zdGF0ZS54XG5cdFx0XHRcdGNvbnN0IHt3aGl0ZXNwYWNlcyxjb250ZW50V2lkdGh9PXdvcmRzLnJlZHVjZSgoc3RhdHVzLGEsaSk9Pntcblx0XHRcdFx0XHRpZihpc1doaXRlc3BhY2UoYSkpe1xuXHRcdFx0XHRcdFx0c3RhdHVzLndoaXRlc3BhY2VzLnB1c2goaSlcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHN0YXR1cy5jb250ZW50V2lkdGgrPWEucHJvcHMud2lkdGhcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXR1c1xuXHRcdFx0XHR9LHtjb250ZW50V2lkdGg6MCx3aGl0ZXNwYWNlczpbXX0pXG5cdFx0XHRcdGNvbnN0IHdoaXRlc3BhY2VXaWR0aD13aGl0ZXNwYWNlcy5sZW5ndGg+MCA/ICh3aWR0aC1jb250ZW50V2lkdGgpL3doaXRlc3BhY2VzLmxlbmd0aCA6IDA7XG5cdFx0XHRcdFsuLi53b3JkcywuLi5lbmRpbmdXaGl0ZXNwYWNlc10ucmVkdWNlKCh4LHdvcmQsaSk9Pntcblx0XHRcdFx0XHRzdGF0ZS5qdXN0aWZpZWQucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQod29yZCx7eCxrZXk6bGVuKyt9KSlcblx0XHRcdFx0XHRyZXR1cm4geCsod2hpdGVzcGFjZXMuaW5jbHVkZXMoaSkgPyB3aGl0ZXNwYWNlV2lkdGggOiB3b3JkLnByb3BzLndpZHRoKVxuXHRcdFx0XHR9LHN0YXRlLngpXG5cblx0XHRcdFx0aWYobG9jYXRlZCl7XG5cdFx0XHRcdFx0c3RhdGUuanVzdGlmaWVkLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KGxvY2F0ZWQse2tleTpsZW4rK30pKVxuXHRcdFx0XHRcdHN0YXRlLng9bG9jYXRlZC5wcm9wcy54K2xvY2F0ZWQucHJvcHMud2lkdGhcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblx0XHRcdH0se3g6MCxqdXN0aWZpZWQ6W119KS5qdXN0aWZpZWRcblx0fVxuXG5cdGJvdGgoKXtcblx0XHRyZXR1cm4gdGhpcy5qdXN0aWZ5KClcblx0fVxufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoYSl7XG5cdHJldHVybiBuZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYC53aGl0ZXNwYWNlYCkubGVuZ3RoPjBcbn1cbiIsImltcG9ydCBCbG9jayBmcm9tIFwiLi9ibG9jay9iYWxhbmNlYWJsZVwiXG5pbXBvcnQgSW5saW5lIGZyb20gXCIuL2lubGluZVwiXG5pbXBvcnQgQ29uc3RyYWludFNwYWNlIGZyb20gXCIuL2NvbnN0cmFpbnQtc3BhY2VcIlxuXG5leHBvcnQgZGVmYXVsdCB7QmxvY2ssIElubGluZSwgQ29uc3RyYWludFNwYWNlLCBJTU1FRElBVEVfU1RPUDpCbG9jay5JTU1FRElBVEVfU1RPUH0iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1JlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBJbmxpbmVTZWdtZW50cyBmcm9tIFwiLi9sbmxpbmUtc3BhY2Utc2VnbWVudHNcIlxuaW1wb3J0IFN0b3J5IGZyb20gXCIuL3N0b3J5XCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vLi4vLi4vY29tcG9zZWQvZ3JvdXBcIlxuXG4vKipcbiAqIGhlaWdodDogbGluZSBib3ggaGVpZ2h0XG4gKiBjb250ZW50SGVpZ2h0OiBtYXggb2YgYWxsIGF0b21zJyBoZWlnaHRcbiAqIHRleHRIZWlnaHQ6IG1heCBvZiB0ZXh0IGF0b21zJyBoZWlnaHQsIHBlcmNlbnRhZ2UgbGluZSBib3ggaGVpZ2h0IHNob3VsZCBiZSBiYXNlZCBvbiB0ZXh0SGVpZ2h0XG4gKiBsaW5lIGJsb2NrIGhlaWdodDogdG9wVG9CbG9ja09mZnNldCArIGhlaWdodCAoY29udGVudCBoZWlnaHQpLCBwYXJlbnQgY2FuIGFkZCBpdHMgb3duIGxvZ2ljIHRvIGNoYW5nZSBsaW5lIGhlaWdodFxuICogXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZSBleHRlbmRzIENvbXBvbmVudHtcblx0Y29uc3RydWN0b3Ioe3NwYWNlOntsZWZ0LCByaWdodCwgZmluZElubGluZVNlZ21lbnRzfX0pe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLmZpbmRJbmxpbmVTZWdtZW50cz1maW5kSW5saW5lU2VnbWVudHNcblx0XHRcdHx8KCgpPT4oe3NlZ21lbnRzOlt7eDpsZWZ0LCB3aWR0aDp0aGlzLndpZHRofV19KSk7Ly9AVE9ETzogd2h5IGlzIHRoZXJlIG5vIGZpbmRJbmxpbmVTZWdtZW50cyBzb21lIHRpbWVzPyBURVNUID8/P1xuXHRcdGNvbnN0IHNlZ21lbnRzPXRoaXMuZmluZElubGluZVNlZ21lbnRzKHRoaXMudG9wVG9CbG9ja09mZnNldCxsZWZ0LHJpZ2h0KVxuXHRcdHRoaXMuaW5saW5lU2VnbWVudHM9SW5saW5lU2VnbWVudHMuY3JlYXRlKHtsZWZ0LC4uLnNlZ21lbnRzfSlcblx0fVxuXG5cdGdldCBzcGFjZSgpe1xuXHRcdHJldHVybiB0aGlzLnByb3BzLnNwYWNlXG5cdH1cblxuXHQvKiogaW5saW5lIGJveCBoZWlnaHQsIGNvbnNpZGVyaW5nIHByb3BzLmxpbmVIZWlnaHQsIGNvbnRlbnQvdGV4dCBoZWlnaHQgKi9cblx0Z2V0IGhlaWdodCgpe1xuXHRcdHJldHVybiB0aGlzLmdldExpbmVIZWlnaHQoKVxuXHR9XG5cdC8qKm1heCBvZiBhbGwgYXRvbXMnIGhlaWdodCAqL1xuXHRnZXQgY29udGVudEhlaWdodCgpIHtcblx0XHRyZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKEgsIHsgcHJvcHM6IHsgaGVpZ2h0ID0gMCB9IH0pID0+IE1hdGgubWF4KEgsIGhlaWdodCksIDApO1xuICAgIH1cblxuXHQvKiptYXggb2YgdGV4dCBhdG9tcycgaGVpZ2h0LCBwZXJjZW50YWdlIGxpbmUgYm94IGhlaWdodCBzaG91bGQgYmUgYmFzZWQgb24gdGV4dEhlaWdodCAqL1xuICAgIGdldCB0ZXh0SGVpZ2h0KCl7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgoSCwgeyBwcm9wczogeyBoZWlnaHQgPSAwLCBkZXNjZW50OmlzVGV4dCB9IH0pID0+IE1hdGgubWF4KEgsIGlzVGV4dCA/IGhlaWdodCA6IDApLCAwKTtcblx0fVx0XG5cblx0LyoqIGlubGluZSBsYXlvdXQgd2lkdGggKi9cblx0Z2V0IHdpZHRoKCl7XG5cdFx0Y29uc3Qge3NwYWNlOnt3aWR0aD0wLGxlZnQ9MCwgcmlnaHQ9d2lkdGh9fT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIHJpZ2h0LWxlZnRcblx0fVxuXHRcdFxuXHRnZXQgZmlyc3RBdG9tKCl7XG5cdFx0Y29uc3QgZmlyc3Q9dGhpcy5pbmxpbmVTZWdtZW50cy5pdGVtcy5maW5kKGE9PmEucHJvcHMueD09PXVuZGVmaW5lZClcblx0XHRpZihmaXJzdCAmJiBmaXJzdC5wcm9wcy5hdG9tKVxuXHRcdFx0cmV0dXJuIGZpcnN0LnByb3BzLmF0b21cblx0XHRpZihmaXJzdCAmJiBmaXJzdC5wcm9wcy5kZXNjZW50PT11bmRlZmluZWQpXG5cdFx0XHRyZXR1cm4gZmlyc3QucHJvcHMuY2hpbGRyZW5cblx0XHRyZXR1cm4gZmlyc3Rcblx0fVxuXG5cdGdldCBsYXN0QXRvbSgpe1xuXHRcdGNvbnN0IGxhc3Q9dGhpcy5pbmxpbmVTZWdtZW50cy5pdGVtcy5maW5kTGFzdChhPT5hLnByb3BzLng9PT11bmRlZmluZWQpXG5cdFx0aWYobGFzdCAmJiBsYXN0LnByb3BzLmF0b20pXG5cdFx0XHRyZXR1cm4gbGFzdC5wcm9wcy5hdG9tXG5cdFx0cmV0dXJuIGxhc3Rcblx0fVxuXG5cdGdldCBhdG9tcygpe1xuXHRcdHJldHVybiB0aGlzLmlubGluZVNlZ21lbnRzLml0ZW1zLm1hcChhPT5hICYmIGEucHJvcHMuYXRvbSB8fGEpXG5cdH1cblxuXHRnZXQgaXRlbXMoKXtcblx0XHRyZXR1cm4gWy4uLnRoaXMucHJvcHMucG9zaXRpb25lZCwuLi50aGlzLmlubGluZVNlZ21lbnRzLml0ZW1zXVxuXHR9XG5cblx0LyoqIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGxpbmUgYmxvY2tPZmZzZXQgIGFuZCBsaW5lIGNvbnRlbnQgdG9wKi9cblx0Z2V0IHRvcFRvQmxvY2tPZmZzZXQoKXtcblx0XHRjb25zdCB7cHJvcHM6e3RvcDpsaW5lVG9wPTB9LCBpbmxpbmVTZWdtZW50czp7cHJvcHM6e3RvcDpvcHBvcnR1bml0eVRvcD0wfX09e3Byb3BzOnt9fX09dGhpc1xuXHRcdHJldHVybiBvcHBvcnR1bml0eVRvcCtsaW5lVG9wXG5cdH1cblxuXHRpc0VtcHR5KCl7XG5cdFx0cmV0dXJuICEhIXRoaXMuZmlyc3RBdG9tXG5cdH1cblxuXHQvKipcblx0ICogYW5jaG9yIGNvbnRlbnQgbWF5IGFscmVheSBhbmNob3JlZCwgb3IgbWF5IG5vdFxuXHQgKiBpZiBhbHJlYWR5IGFuY2hvcmVkLCBjb250aW51ZSBuZXh0IGF0b21cblx0ICogaWYgbm90LCBsZXQgcGFyZW50IGJsb2NrIGxheW91dCBpdCBzaW5jZSBpdCBwb3NzaWJseSBhZmZlY3QgbGF5b3V0IHNwYWNlLCBibG9jayBvZmZzZXRcblx0ICovXG5cdGFwcGVuZEFuY2hvckF0b20oYXRvbSl7XG5cdFx0Y29uc3QgJGF0b209bmV3IFJlYWN0UXVlcnkoYXRvbSlcblx0XHRjb25zdCAkYW5jaG9yPSRhdG9tLmZpbmRGaXJzdCgnW2RhdGEtdHlwZT1cImFuY2hvclwiXScpXG5cdFx0Y29uc3QgYW5jaG9ySWQ9JGFuY2hvci5hdHRyKFwiZGF0YS1jb250ZW50XCIpXG5cdFx0Y29uc3QgcGxhY2Vob2xkZXI9UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0JGF0b20ucmVwbGFjZSgkYW5jaG9yLmdldCgwKSw8R3JvdXAvPikuZ2V0KDApLFxuXHRcdFx0e2F0b20sd2lkdGg6MCxcImRhdGEtYW5jaG9yXCI6YW5jaG9ySWR9XG5cdFx0KVxuXHRcdC8vUmVhY3QuY2xvbmVFbGVtZW50KCRhbmNob3IuZ2V0KDApLHthdG9tLHdpZHRoOjAsXCJkYXRhLWFuY2hvclwiOmFuY2hvcklkfSlcblx0XHR0aGlzLmlubGluZVNlZ21lbnRzLnB1c2gocGxhY2Vob2xkZXIpXG5cdFx0aWYoIXRoaXMuc3BhY2UuaXNBbmNob3JlZChhbmNob3JJZCkpey8vbGV0IGZyYW1lIGFuY2hvciB0aGlzIGF0b20gZmlyc3Rcblx0XHRcdC8qKlxuXHRcdFx0ICogYW5jaG9yIHBvc2l0aW9uIE1BWSBub3QgZGVjaWRlZCwgc28gaXQncyBOT1Qgc3VyZSBpZiBzcGFjZSBjYW4gaG9sZCBhbmNob3Jcblx0XHRcdCAqIHRvIExldCBpdCBzaW1wbHksIGxldCBibG9jay9wYXJlbnQgbGF5b3V0IGVuZ2luZSBsYXlvdXQgaXQgaW1tZWRpYXRseSBcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5hbmNob3I9YXRvbS5wcm9wcy5hbmNob3Jcblx0XHRcdC8vY29tbWl0IGZvciBhbmNob3IsIHRoaXMgbGluZSBzaG91bGQgYmUgcm9sbGJhY2tcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1lbHNle1xuXHRcdFx0Ly9ub3QgZnVsbCwgY29udGludWUgbmV4dCBhdG9tXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIGlubGluZSBsYXlvdXQgZG9lc24ndCBjb25zaWRlciBibG9jayBsYXlvdXQgY2FwYWNpdHksXG5cdCAqIGxlYXZlIGl0IHRvIGJsb2NrIGxheW91dCBlbmdpbmUgZGVjaWRlIGhvdyB0byBoYW5kbGUgb3ZlcmZsb3cgYmxvY2sgc2l6ZVxuXHQgKi9cblx0YXBwZW5kQXRvbShhdG9tKXtcblx0XHRpZihhdG9tLnByb3BzLmFuY2hvcil7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHBlbmRBbmNob3JBdG9tKGF0b20pXG5cdFx0fVxuXHRcdFxuXHRcdGNvbnN0IGFwcGVuZGVkPShuZXdIZWlnaHQ9Pntcblx0XHRcdGlmKChuZXdIZWlnaHQtdGhpcy5oZWlnaHQpPjEpe1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogbGluZSByZWN0IGNoYW5nZSBtYXkgbGVhZCB0byBkaWZmZXJlbnQgaW5saW5lIG9wcG9ydHVuaXRpZXMgYW5kIHRvcFxuXHRcdFx0XHQgKiBnZXQgb3Bwb3J0dW5pdGllcyBhZ2FpblxuXHRcdFx0XHQgKi9cblx0XHRcdFx0Y29uc3Qge3NwYWNlOntsZWZ0LHJpZ2h0fSx0b3A9MH09dGhpcy5wcm9wc1xuXHRcdFx0XHRjb25zdCBzZWdtZW50cz10aGlzLmZpbmRJbmxpbmVTZWdtZW50cyh0aGlzLnRvcFRvQmxvY2tPZmZzZXQrbmV3SGVpZ2h0LGxlZnQscmlnaHQpXG5cdFx0XHRcdGlmKHRoaXMuaW5saW5lU2VnbWVudHMuc2hvdWxkUmVsYXlvdXQoc2VnbWVudHMpKXtcblx0XHRcdFx0XHRjb25zdCByZWxheW91dGVkPXRoaXMuaW5saW5lU2VnbWVudHMucmVsYXlvdXQoc2VnbWVudHMsYXRvbSlcblx0XHRcdFx0XHRpZihyZWxheW91dGVkIT09ZmFsc2Upe1xuXHRcdFx0XHRcdFx0dGhpcy5pbmxpbmVTZWdtZW50cz1yZWxheW91dGVkXG5cdFx0XHRcdFx0XHQvL25ldyBpbmxpbmUgb3Bwb3J0dW5pdGllcyBjYW4gaG9sZCBsYXlvdXRlZCBhbmQgYXRvbSwgcmVwbGFjZSBpbmxpbmVTZWdtZW50cywgYW5kIHRvcFxuXHRcdFx0XHRcdFx0Ly9ub3QgZnVsbCwgY29udGludWUgbmV4dCBhdG9tXG5cdFx0XHRcdFx0XHRyZXR1cm4gXG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL25ldyBpbmxpbmUgb3Bwb3J0dW5pdGllcyBjYW4gTk9UIGhvbGQgYXRvbSwgY29tbWl0IHRvIGJsb2NrIGxheW91dFxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvL3NhbWUgaW5saW5lIG9wcG9ydHVuaXRpZXMsIGNvbnRpbnVlIG5vcm1hbCBpbmxpbmUgbGF5b3V0IGxhdGVyIFxuXHRcdFx0XHR9XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0Ly9saW5lIHJlY3QgZG9lc24ndCBjaGFuZ2UsIGNvbnRpbnVlIG5vcm1hbCBpbmxpbmUgbGF5b3V0IGxhdGVyIFxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRyZXR1cm4gdGhpcy5pbmxpbmVTZWdtZW50cy5wdXNoKGF0b20pXG5cdFx0fSkodGhpcy5nZXRMaW5lSGVpZ2h0KGF0b20ucHJvcHMuaGVpZ2h0KSk7XG5cblx0XHRpZihhcHBlbmRlZD09PWZhbHNlICYmIHRoaXMuaXNFbXB0eSgpKXtcblx0XHRcdC8vZW1wdHkgaW5saW5lIGxheW91dCBpcyBub3QgYWxsb3dlZFxuXHRcdFx0dGhpcy5pbmxpbmVTZWdtZW50cy5wdXNoKGF0b20sdHJ1ZS8qYXBwZW5kIGF0b20gd2l0aG91dCBjb25zaWRlcmluZyBpbmxpbmUgc2l6ZSovKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFwcGVuZGVkXG5cdH1cblx0XG5cdGdldExpbmVIZWlnaHQoY29udGVudEhlaWdodD10aGlzLmNvbnRlbnRIZWlnaHQpe1xuXHRcdGNvbnN0IHtsaW5lSGVpZ2h0fT10aGlzLnByb3BzXG5cdFx0aWYodHlwZW9mKGxpbmVIZWlnaHQpPT0nc3RyaW5nJyl7XG5cdFx0XHRyZXR1cm4gY29udGVudEhlaWdodCsodHlwZW9mKGxpbmVIZWlnaHQpPT0nc3RyaW5nJyA/IHRoaXMudGV4dEhlaWdodCoocGFyc2VJbnQobGluZUhlaWdodCktMTAwKS8xMDAuMDogMClcblx0XHR9ZWxzZSBpZih0eXBlb2YobGluZUhlaWdodCk9PVwibnVtYmVyXCIpe1xuXHRcdFx0cmV0dXJuIGxpbmVIZWlnaHRcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRlbnRIZWlnaHRcbiAgICAgICAgXG5cdH1cblxuXHRmcmVlemUoKXtcblx0XHRjb25zdCB7cHJvcHM6e2NoaWxkcmVufX09dGhpcy5pbmxpbmVTZWdtZW50cy5yZW5kZXIoKVxuXHRcdHRoaXMuY2hpbGRyZW49Wy4uLnRoaXMucHJvcHMucG9zaXRpb25lZCwuLi5jaGlsZHJlbl1cblx0XHRyZXR1cm4gdGhpc1xuXHR9XG5cblx0cmVuZGVyKGJMYXN0TGluZSl7XG5cdFx0Y29uc3Qge3Byb3BzOnthbGlnbn19PXRoaXNcblx0XHRjb25zdCBzdG9yeT1uZXcgU3Rvcnkoe1xuXHRcdFx0Y2hpbGRyZW46dGhpcy5jaGlsZHJlbiwgXG5cdFx0XHR3aWR0aDp0aGlzLndpZHRoLFxuXHRcdFx0YWxpZ246Ykxhc3RMaW5lICYmIFtcImp1c3RpZnlcIixcImJvdGhcIl0uaW5jbHVkZXMoYWxpZ24pID8gdW5kZWZpbmVkIDogYWxpZ24sXG5cdFx0fSlcblx0XHRyZXR1cm4gc3RvcnkucmVuZGVyKClcblx0fVxuXG5cdGlzRml0VG8oc3BhY2Upe1xuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGlmKHRoaXMuc3BhY2Uud2lkdGghPXNwYWNlLndpZHRoKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0Y29uc3Qge3NlZ21lbnRzfT1zcGFjZS5maW5kSW5saW5lU2VnbWVudHModGhpcy50b3BUb0Jsb2NrT2Zmc2V0K3RoaXMuaGVpZ2h0LHNwYWNlLmxlZnQsc3BhY2UucmlnaHQpXG5cblx0XHRyZXR1cm4gdGhpcy5pbmxpbmVTZWdtZW50cy5zZWdtZW50cy5sZW5ndGg9PXNlZ21lbnRzLmxlbmd0aCAmJlxuXHRcdFx0ISEhdGhpcy5pbmxpbmVTZWdtZW50cy5zZWdtZW50cy5maW5kKCh7cHJvcHM6e3gsd2lkdGh9fSxpLF8sJCxiPXNlZ21lbnRzW2ldKT0+Yi54IT14ICYmIGIud2lkdGghPXdpZHRoKVxuXHR9XG5cblx0Y2xvbmU0U3BhY2Uoc3BhY2Upe1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHsuLi50aGlzLnByb3BzLHNwYWNlfSkse2lubGluZVNlZ21lbnRzOnRoaXMuaW5saW5lU2VnbWVudHMsY2hpbGRyZW46dGhpcy5jaGlsZHJlbn0pXG5cdH1cbn1cbiIsImltcG9ydCBIYXNDaGlsZCBmcm9tIFwiLi9oYXNDaGlsZFwiXG5pbXBvcnQgSGFzUGFyZW50QW5kQ2hpbGQgZnJvbSBcIi4vaGFzUGFyZW50QW5kQ2hpbGRcIlxuaW1wb3J0IE5vQ2hpbGQgZnJvbSBcIi4vbm9DaGlsZFwiXG5cbmltcG9ydCBSZWNvbXBvc2FibGUgZnJvbSBcIi4vcmVjb21wb3NhYmxlXCJcbmltcG9ydCBMb2NhdGFibGUgZnJvbSBcIi4vbG9jYXRhYmxlXCJcbmltcG9ydCBTdG9wcGFibGUgZnJvbSBcIi4vc3RvcHBhYmxlXCJcbmltcG9ydCBDb250aW51YWJsZSBmcm9tIFwiLi9jb250aW51YWJsZVwiXG5pbXBvcnQgQ29tcG9zZWRBbGxUcmlnZ2VyIGZyb20gXCIuL2NvbXBvc2VkLWFsbC10cmlnZ2VyXCJcblxuaW1wb3J0IExheW91dCBmcm9tIFwiLi9sYXlvdXRcIlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wb3NhYmxlKEEse2xvY2F0YWJsZSxzdG9wcGFibGUsY29udGludWFibGUscmVjb21wb3NhYmxlfSl7XG5cdGlmKGxvY2F0YWJsZSAmJiAhQS5hbHJlYWR5KFwibG9jYXRhYmxlXCIpKXtcblx0XHRBPUxvY2F0YWJsZShBLGxvY2F0YWJsZSlcblx0fVxuXG5cdGlmKHJlY29tcG9zYWJsZSAmJiAhQS5hbHJlYWR5KFwicmVjb21wb3NhYmxlXCIpKXtcblx0XHRBPVJlY29tcG9zYWJsZShBLHJlY29tcG9zYWJsZSlcblx0fVxuXG5cdGlmKHN0b3BwYWJsZSAmJiAhQS5hbHJlYWR5KFwic3RvcHBhYmxlXCIpKXtcbiAgICAgICAgQT1TdG9wcGFibGUoQSxzdG9wcGFibGUpXG4gICAgfVxuXG5cdGlmKGNvbnRpbnVhYmxlICYmICFBLmFscmVhZHkoXCJjb250aW51YWJsZVwiKSl7XG4gICAgICAgIEE9Q29udGludWFibGUoQSxDb250aW51YWJsZSlcbiAgICB9XG5cbiAgICByZXR1cm4gQVxufVxuXG5cbi8qKlxuICogIGl0J3MgYSB2ZXJ5IGNvbXBsaWNhdGVkIGpvYiwgc28gd2UgbmVlZCBhIHZlcnkgc2ltcGxlIGRlc2lnbiwgb25lIHNlbnRlbmNlIGRlc2NyaWJlZCBzb2x1dGlvbi4gb3B0aW9uczpcbiAqICAxLiByZW1vdmUgYWxsIGNvbXBvc2VkLCBhbmQgcmUtY29tcG9zZSBhbGxcbiAqICBcdC0gbmVlZCBmaW5kIGEgdGltZSB0byByZWNvbXBvc2VcbiAqICBcdC0gbG9naWMgaXMgbW9zdCBzaW1wbGVcbiAqICBcdC0gcGVyZm9ybWFuY2UgaXMgbW9zdCBiYWRcbiAqXG4gKiAgMi4gcmVtb3ZlIGFsbCBjb21wb3NlZCBmcm9tIHRoaXMgY29udGVudCwgYW5kIHJlLWNvbXBvc2UgcmVtb3ZhbHNcbiAqICBcdC0gTmVlZCBsb2NhdGUgY29tcG9zZWQgb2YgdGhpcyBjb250ZW50IGluIHBhZ2VcbiAqICBcdC0gTmVlZCBmaW5kIGEgdGltZSB0byByZWNvbXBvc2VcbiAqICBcdFx0PiBjb21wb25lbnREaWRVcGRhdGVcbiAqICBcdFx0XHQuIGFueSBzdGF0ZSB1cGRhdGUsXG4gKiAgXHRcdFx0LiBhbmQgY2FyZWZ1bGx5IHR1bmVkIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpXG4gKiAgXHQtIHBlcmZvcm1hbmNlIGlzIGJldHRlciB0aGFuICMxXG4gKlxuICogIDMuIHJlY29tcG9zZSB0aGlzIGNvbnRlbnQsIGFuZCBjaGVjayBpZiBuZXcgY29tcG9zZWQgZml0cyBsYXN0IGNvbXBvc2VkIHNwYWNlIChoaXQgcmF0aW8gaXMgbG93KVxuICogIFx0LSBZZXM6IGp1c3QgcmVwbGFjZVxuICogIFx0LSBObzogIzEsIG9yICMyXG4gKiAgXHQtIGFuZCB0aGVuIGxvb3Agd2l0aCBhbGwgZm9sbG93aW5nIGNvbnRlbnQgd2l0aCB0aGUgc2FtZSBsb2dpY1xuICpcbiAqICBcdDMuYTogcmVjb21wb3NlIHRoaXMgY29udGVudCBsaW5lIGJ5IGxpbmUgLi4uLCBtdWNoIGxvZ2ljcyBoZXJlXG4gKi9cblxuZnVuY3Rpb24gZWRpdGFibGUoQSwgZW5hYmxlcz17fSl7XG5cdHJldHVybiBjb21wb3NhYmxlKEEse2xvY2F0YWJsZTp0cnVlLHJlY29tcG9zYWJsZTp0cnVlLC4uLmVuYWJsZXN9KVxufVxuXG5jb25zdCBlbmFibGlmeT1mdW5jPT4odGFyZ2V0cywgZXhjbHVkZXMpPT5PYmplY3Qua2V5cyh0YXJnZXRzKVxuXHQucmVkdWNlKChlbmFibGVkLCBrKT0+e1xuXHRcdGlmKCFlbmFibGVkW2tdKXtcblx0XHRcdGVuYWJsZWRba109ZnVuYyh0YXJnZXRzW2tdKVxuXHRcdH1cblx0XHRyZXR1cm4gZW5hYmxlZFxuXHR9LHsuLi5leGNsdWRlc30pO1xuXG5bSGFzQ2hpbGQsIEhhc1BhcmVudEFuZENoaWxkLCBOb0NoaWxkLFJlY29tcG9zYWJsZSwgTG9jYXRhYmxlLFN0b3BwYWJsZSxDb250aW51YWJsZSxlZGl0YWJsZV1cblx0LmZvckVhY2goYT0+YS5lbmFibGU9ZW5hYmxpZnkoYSkpXG5cbmV4cG9ydCB7ZW5hYmxpZnksIGVkaXRhYmxlLFxuXHRMYXlvdXQsXG5cdEhhc0NoaWxkLCBIYXNQYXJlbnRBbmRDaGlsZCwgTm9DaGlsZCwgQ29tcG9zZWRBbGxUcmlnZ2VyLFxuXHRSZWNvbXBvc2FibGUsTG9jYXRhYmxlLFN0b3BwYWJsZSxDb250aW51YWJsZVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbSwgUmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtMYXlvdXQsIEhhc1BhcmVudEFuZENoaWxkLCBlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuY2xhc3MgRnJhbWUgZXh0ZW5kcyBMYXlvdXQuQmxvY2t7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1IYXNQYXJlbnRBbmRDaGlsZChkb20uRnJhbWUpLmRpc3BsYXlOYW1lXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse1xuXHRcdFx0dXVpZDp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdGNvbnN0IHtwcm9wczp7aSxpZH19PXRoaXNcblx0XHRcdFx0XHRyZXR1cm4gYCR7aWR9JHtpIT11bmRlZmluZWQgPyBcIl9cIitpIDogXCJcIn1gXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Z2V0IGlzRnJhbWUoKXtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Z2V0U3BhY2UoKXtcblx0XHRyZXR1cm4gdGhpcy5fX2dldFNwYWNlKHRoaXMucHJvcHMpXG5cdH1cblxuXHRfX2dldFNwYWNlPW1lbW9pemUocHJvcHM9Pntcblx0XHRjb25zdCBzcGFjZT1zdXBlci5nZXRTcGFjZSgpXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtYXJnaW46e2xlZnQ9MCxyaWdodD0wLHRvcD0wLGJvdHRvbT0wfT17fSx4PTAseT0wfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgZWRnZXM9e1xuXHRcdFx0W3RoaXMuZ2V0Q29tcG9zZVR5cGUoKV06e2xlZnQ6eCx0b3A6eSxyaWdodDp4K3dpZHRoLGJvdHRvbTp5K2hlaWdodH0sXG5cdFx0XHRtYXJnaW46e2xlZnQ6eCtsZWZ0LHRvcDp5K3RvcCxyaWdodDp3aWR0aCt4LXJpZ2h0LGJvdHRvbTp5K2hlaWdodC1ib3R0b219XG5cdFx0fVxuXHRcdGlmKHRoaXMuY29scylcblx0XHRcdHJldHVybiBMYXlvdXQuQ29uc3RyYWludFNwYWNlLmNyZWF0ZShzcGFjZSkuY2xvbmUoe2VkZ2VzfSlcblxuXHRcdHJldHVybiBMYXlvdXQuQ29uc3RyYWludFNwYWNlLmNyZWF0ZShzcGFjZSkuY2xvbmUoe1xuXHRcdFx0bGVmdDp4K2xlZnQsXG5cdFx0XHRyaWdodDp4K3dpZHRoLXJpZ2h0LFxuXHRcdFx0YmxvY2tPZmZzZXQ6eSt0b3AsXG5cdFx0XHRoZWlnaHQ6aGVpZ2h0LXRvcC1ib3R0b20sXG5cdFx0XHRlZGdlc1xuXHRcdH0pXG5cdH0pXG5cblx0ZGVmaW5lUHJvcGVydGllcygpe1xuXHRcdHN1cGVyLmRlZmluZVByb3BlcnRpZXMoKVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse1xuXHRcdFx0Y29tcG9zZWRIZWlnaHQ6e1xuXHRcdFx0XHRlbnVtZXJhYmxlOnRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTp0cnVlLFxuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRpZih0aGlzLmNvbHMpXG5cdFx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5jb2x1bW5zLm1hcChhPT5hLmJsb2NrT2Zmc2V0KSlcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5ibG9ja09mZnNldFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXHRcblx0LyoqXG5cdCAqIGFsd2F5cyB1c2Ugc3BhY2UgdG8gbG9jYXRlIHNpbmNlIGxheW91dCB1c2luZyBpdCBcblx0ICoqKi5wb3NpdGlvbmxpbmVzIGlzIHVzZWQgdG8gZ2V0IGxpbmVYWShsaW5lKSwgc28gaXQgc2hvdWxkIGJlIGFkZGVkXG5cdCAqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcblx0XHRjb25zdCBhbGlnblk9Y29udGVudEhlaWdodD0+e1xuXHRcdFx0Y29uc3Qge2hlaWdodD1jb250ZW50SGVpZ2h0LCB2ZXJ0QWxpZ259PXRoaXMucHJvcHNcblx0XHRcdGlmKGNvbnRlbnRIZWlnaHQ9PXVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHRcdFx0c3dpdGNoKHZlcnRBbGlnbil7XG5cdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRyZXR1cm4gaGVpZ2h0LWNvbnRlbnRIZWlnaHRcblx0XHRcdFx0Y2FzZSBcImNlbnRlclwiOlxuXHRcdFx0XHRjYXNlIFwibWlkZGxlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIChoZWlnaHQtY29udGVudEhlaWdodCkvMlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHJldHVybiAwXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHZhciBjb250ZW50PXRoaXMucG9zaXRpb25MaW5lcyh0aGlzLmxpbmVzKVxuXHRcdGNvbnN0IGNvbnRlbnRIZWlnaHQ9Y29udGVudC5wcm9wcy5oZWlnaHRcblx0XHRjb250ZW50PVJlYWN0LmNsb25lRWxlbWVudChjb250ZW50LHt5OmFsaWduWShjb250ZW50SGVpZ2h0KSxjbGFzc05hbWU6XCJwb3NpdGlvbmxpbmVzXCJ9KVxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQ9Y29udGVudEhlaWdodCxtYXJnaW46e2xlZnQ9MCx0b3A9MH09e30sIHgseSx6LG5hbWVkfT10aGlzLnByb3BzXG5cdFx0aWYoIXRoaXMuY29scyAmJiAobGVmdHx8dG9wKSl7XG5cdFx0XHRjb250ZW50PSg8R3JvdXAgeD17bGVmdH0geT17dG9wfT57Y29udGVudH08L0dyb3VwPilcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB7Li4ue3dpZHRoLGhlaWdodCx4LHkseixuYW1lZCwgY2xhc3NOYW1lOlwiZnJhbWVcIiwgXCJkYXRhLWZyYW1lXCI6dGhpcy51dWlkfX0+XG5cdFx0XHRcdHtbXG5cdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KGNvbnRlbnQse2tleTpcImNvbnRlbnRcIn0pLFxuXHRcdFx0XHRcdC4uLnRoaXMuYW5jaG9ycy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXk6aX0pKSxcblx0XHRcdFx0XS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6e3o6ejE9MH19LHtwcm9wczp7ejp6Mj0wfX0sKT0+ejEtejIpfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblxuXHQvKipcblx0ICogaXQgc2hvdWxkIGJlIGluIGFjY29yZGFuY2Ugd2l0aCBjcmVhdGVDb21wb3NlZDJQYXJlbnQoKVxuXHQgKioqcG9zaXRpb25saW5lcyBpcyB1c2VkIHRvIGdldCB0aGUgb3JpZ2luXG5cdCAqIEBwYXJhbSB7Kn0gbGluZSA6IGNvbXBvc2VkIGxpbmUgb2JqZWN0XG5cdCAqL1xuXHRsaW5lWFkobGluZSl7XG5cdFx0aWYoIXRoaXMuY29scyl7XG5cdFx0XHRjb25zdCBjb21wb3NlZD10aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpXG5cdFx0XHRjb25zdCB7Zmlyc3QsIHBhcmVudHM6W18sLi4ucGFyZW50c119PW5ldyBSZWFjdFF1ZXJ5KGNvbXBvc2VkKS5maW5kRmlyc3RBbmRQYXJlbnRzKFwiLnBvc2l0aW9ubGluZXNcIilcblx0XHRcdGNvbnN0IG9mZnNldD1bLi4ucGFyZW50cywgZmlyc3QuZ2V0KDApXS5maWx0ZXIoYT0+ISFhKVxuXHRcdFx0XHQucmVkdWNlKChvLHtwcm9wczp7eD0wLHk9MH19KT0+KG8ueCs9eCxvLnkrPXksbykse3g6MCx5OjB9KVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDpvZmZzZXQueCxcblx0XHRcdFx0eTp0aGlzLmxpbmVzLnNsaWNlKDAsdGhpcy5saW5lcy5pbmRleE9mKGxpbmUpKS5yZWR1Y2UoKFkse3Byb3BzOntoZWlnaHQ9MH19KT0+WStoZWlnaHQsb2Zmc2V0LnkpXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vbWFrZSBjb2x1bW5zIHNpbXBsZSB0byBpZ25vcmUgbWFyZ2luLCB2ZXJ0QWxpZ24sIG9yIHNheSBub3Qgc3VwcG9ydGluZyBtYXJnaW4gYW5kIHZlcnRBbGlnbiBpbiBjb2x1bW5zIGZyYW1lXG5cdFx0Y29uc3Qge3k6eTA9MCx4PTAsbGluZXN9PXRoaXMuY29sdW1ucy5maW5kKGE9PmEubGluZXMuaW5jbHVkZXMobGluZSkpfHx0aGlzLmN1cnJlbnRDb2x1bW5cblx0XHRyZXR1cm4ge1xuXHRcdFx0eCxcblx0XHRcdHk6bGluZXMuc2xpY2UoMCxsaW5lcy5pbmRleE9mKGxpbmUpKS5yZWR1Y2UoKFkse3Byb3BzOntoZWlnaHQ9MH19KT0+WStoZWlnaHQseTApXG5cdFx0fVxufVx0XG5cblx0Y29sdW1uSW5kZXhPZihsaW5lSW5kZXgpe1xuXHRcdGlmKCF0aGlzLmNvbHMgfHwgdGhpcy5jb2xzLmxlbmd0aD09MSlcblx0XHRcdHJldHVybiAwXG5cdFx0cmV0dXJuIHRoaXMuY29sdW1ucy5maW5kSW5kZXgoYT0+YS5saW5lcy5zdGFydEluZGV4Pj1saW5lSW5kZXgpXG5cdH1cblxuXHRsYXlvdXRPZigpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsbWFyZ2lufT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIHt3aWR0aCxoZWlnaHQsbWFyZ2luLGNvbHM6dGhpcy5jb2xzfVxuXHR9XG5cblx0Y2xvbmUocHJvcHM9e30pe1xuXHRcdGNvbnN0IHtjb21wdXRlZH09dGhpc1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHsuLi50aGlzLnByb3BzLCAuLi5wcm9wc30sdGhpcy5jb250ZXh0KSx7Y29tcHV0ZWR9KVxuXHR9XG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG5cdFx0Y29uc3Qge2lzVG9wfT10aGlzLnByb3BzXG5cdFx0aWYoIWlzVG9wKXtcblx0XHRcdHN1cGVyLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0XHRyZXR1cm4gXG5cdFx0fVxuXHRcdFxuICAgICAgICB0cnl7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudD0oKT0+dGhpc1xuICAgICAgICAgICAgc3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnRcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGZyYW1lIHdvdWxkIGZpbmFsbHkgYXBwZW5kIGNvbXBvc2VkIHRvIHBhcmVudCBvbmNlLCBcbiAqIHNvIGxhc3RDb21wb3NlZCBzaG91bGQgaGF2ZSBvbmx5IG9uZSBpdGVtXG4gKiBGcmFtZSBjYWNoZSBrZXkgc2hvdWxkIGJhc2VkIG9uIFxuICogMS4gc3BhY2Uge3dpZHRoLGhlaWdodCwgd3JhcHBlZXMsY29sc306IHdpZHRoIG9yIGNvbHNbKl0ud2lkdGggaXMgY2hhbmdlZCwgdGhlIGNhY2hlIHVzdXNhbGx5IGNhbiBOT1QgYmUgdXNlZFxuICogMi4gY29udGVudDogc3BhY2UgaXMgbm90IGNoYW5nZSwgY29udGVudCBjYW4gcmVsYXlvdXQgZnJvbSBjaGFuZ2VkIGNvbnRlbnRcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZUZyYW1lIGV4dGVuZHMgZWRpdGFibGUoRnJhbWUse3N0b3BwYWJsZTp0cnVlLCBjb250aW51YWJsZTp0cnVlfSl7XG5cdF9fX2NyZWF0ZUNvbXBvc2VkMlBhcmVudD1tZW1vaXplKGNvbXBvc2VkVVVJRD0+c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdHJldHVybiB0aGlzLl9fX2NyZWF0ZUNvbXBvc2VkMlBhcmVudCh0aGlzLmNvbXB1dGVkLmNvbXBvc2VkVVVJRHx8dGhpcy5jb250ZXh0LnBhcmVudD8uY29tcHV0ZWQ/LmNvbXBvc2VkVVVJRClcblx0fVxuXHRcblx0LyoqXG5cdCAqIEBjb250aW51YWJsZVxuXHQgKiBtdWx0aXBsZSBjb2xzIG1vZGVsIHNob3VsZCBjaGVjayBvbiBsYXN0IGNvbHVtblxuXHQgKiBAcGFyYW0geyp9IGEgXG5cdCAqL1xuXHRzaG91bGRDb250aW51ZUNvbXBvc2UoKXtcblx0XHRpZighdGhpcy5jb2xzIHx8IC8vbm9uLWNvbHVtbiBtb2RlbFxuXHRcdFx0dGhpcy5jb2x1bW5zLmxlbmd0aD09dGhpcy5jb2xzLmxlbmd0aCl7Ly9sYXN0IGNvbHVtblxuXHRcdFx0aWYoIXRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2UoLi4uYXJndW1lbnRzKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZih0aGlzLmF2YWlsYWJsZUJsb2NrU2l6ZTw9MClcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvL25vbi1sYXN0IGNvbHVtbiBhbHdheXMgY29udGludWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0LyoqXG5cdCAqIGxhc3RDb21wb3NlZCBpcyB1c2VsZXNzIGZvciBmcmFtZSwgc2luY2UgaXQgb25seSBjb21taXQgb25jZVxuXHQgKiB0byBzeW5jIGxpbmVzLCBhbmNob3JzLCBcblx0ICovXG4gICAgY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2lkLC4uLm5leHRQcm9wc30pe1xuXHRcdC8vKipyZW1vdmUgaWQgdG8gYXZvaWQgcmVwbGFjZSB0aGlzIHJlYWwgY29tcG9zZXIgKi9cblx0XHRjb25zdCBzcGFjZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihuZXh0UHJvcHMsdGhpcy5jb250ZXh0KS5nZXRTcGFjZSgpXG5cdFx0XG5cdFx0Y29uc3QgaXNJbmxpbmVTaXplQ2hhbmdlZD10aGlzLmdldFNwYWNlKCkuaXNJbmxpbmVTaXplRGlmZmVyZW50KHNwYWNlKVxuXHRcdGlmKGlzSW5saW5lU2l6ZUNoYW5nZWQpe1xuXHRcdFx0Ly9pZiBpbmxpbmUgc2l6ZSBjaGFuZ2UsIGFsbCBoYXZlIHRvIGJlIHJlY29tcG9zZWRcblx0XHRcdHRoaXMuY29tcHV0ZWQuYW5jaG9ycz1bXVxuXHRcdFx0cmV0dXJuIHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0XHR9XG5cblx0XHQvL2xhc3QgY29tcG9zZWQgaXMgc3RpbGwgdmFsaWQgaWYgYmxvY2sgc2l6ZSBjaGFuZ2UgXG5cdFx0Ly9AVE9ETzogd3JhcHBlZXMgY2hhbmdlLCBidXQgb3VyIHdyYXBwZWVzIGFyZSBmdW5jdGlvbnMsIGhvdyB0byBjb21wYXJlPz8/XG5cblx0XHRjb25zdCBjaGFuZ2VkPW5leHRQcm9wcy5oYXNoIT10aGlzLnByb3BzLmhhc2hcblx0XHRpZihjaGFuZ2VkKXtcblx0XHRcdHRoaXMuX2NhbmNlbENoYW5nZWRQYXJ0KC4uLmFyZ3VtZW50cylcblx0XHR9XG5cdFx0dGhpcy5fY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCguLi5hcmd1bWVudHMpXG5cdH1cblxuXHRfY2FuY2VsQ2hhbmdlZFBhcnQobmV4dCl7XG5cdFx0Y29uc3QgY2hpbGRyZW5OZWVkUmVjb21wb3NlPXRoaXMuY2hpbGRyZW5OZWVkUmVjb21wb3NlKG5leHQsdGhpcy5wcm9wcylcblx0XHRjb25zdCBmaXJzdExpbmVOZWVkUmVjb21wb3NlPXRoaXMubGluZXMuZmluZEluZGV4KGE9PmNoaWxkcmVuTmVlZFJlY29tcG9zZS5pbmNsdWRlcyh0aGlzLmNoaWxkSWRPZihhKSkpXG5cdFx0dGhpcy5yZW1vdmVGcm9tKGZpcnN0TGluZU5lZWRSZWNvbXBvc2UpXG5cdH1cblx0XG5cdF9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG4gICAgICAgY29uc3QgbGFzdExpbmVPZkFsbENoaWxkcmVuQ29tcG9zZWQ9dGhpcy5saW5lcy5maW5kTGFzdEluZGV4KChhLGksXywkLGlkPXRoaXMuY2hpbGRJZE9mKGEpKT0+e1xuXHRcdFx0Y29uc3QgY29tcG9zZXI9dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGlkKVxuXHRcdFx0cmV0dXJuIGNvbXBvc2VyICYmIGNvbXBvc2VyLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0fSlcblx0XHR0aGlzLnJlbW92ZUZyb20obGFzdExpbmVPZkFsbENoaWxkcmVuQ29tcG9zZWQrMSlcblx0fVxuXG4gICAgYXBwZW5kTGFzdENvbXBvc2VkKCl7XG5cdFx0Ly9sYXN0Q29tcG9zZWQgaXMgdGhlIGZyYW1lIG9yIHRoZSByZXN1bHQgb2YgY3JlYXRlQ29tcG9zZWQyUGFyZW50LCBzbyBpdCBhbHdheXMgc2hvdWxkIGJlIHJlbW92ZWRcblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZD1bXVxuXHRcdGlmKCF0aGlzLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcblx0XHRcdGlmKHRoaXMubGFzdExpbmUpe1xuXHRcdFx0XHRjb25zdCBsYXN0SWQ9dGhpcy5sYXN0TGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLmZpbmRJbmRleChhPT5hICYmIGEucHJvcHMuaWQ9PWxhc3RJZClcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHQvL3RoaXMgZXZlbnQgc2hvdWxkIGJlIGNhbGxlZCB0byBhcHBlbmQgdG8gcGFyZW50XG5cdFx0dGhpcy5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRyZW1vdmVGcm9tKGxpbmVJbmRleCl7XG5cdFx0Y29uc3QgcmVtb3ZlZD1zdXBlci5yb2xsYmFja0xpbmVzKHRoaXMubGluZXMubGVuZ3RoLWxpbmVJbmRleClcblx0XHRpZihyZW1vdmVkLmxlbmd0aD4wKXtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkXG5cdFx0fVxuXHRcdHJldHVybiByZW1vdmVkXG5cdH1cbn1cbiIsIlxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LCBGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcblxuY2xhc3MgVXNlIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1cInRlbXBsYXRlLnVzZVwiXG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGdldENvbXBvc2VkVGVtcGxhdGU6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH1cbiAgICBzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuICAgICAgICBlZGl0YWJsZTpQcm9wVHlwZXMuYW55XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIHJldHVybiB7ZWRpdGFibGU6ZmFsc2V9XG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0OntnZXRDb21wb3NlZFRlbXBsYXRlfSxwcm9wczp7eGhyZWZ9fT10aGlzXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlPWdldENvbXBvc2VkVGVtcGxhdGUoeGhyZWYpXG4gICAgICAgIGlmKCF0ZW1wbGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIGNvbnN0IHtwcm9wczp7bWFzdGVyfX09dGVtcGxhdGVcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7bWFzdGVyICYmIDxVc2UgeGhyZWY9e21hc3Rlcn0vPn1cbiAgICAgICAgICAgICAgICB7dGVtcGxhdGUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl9XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApXG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZSBleHRlbmRzIEZyYW1le1xuICAgIHN0YXRpYyBVc2U9VXNlXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG4gICAgICAgIC4uLkZyYW1lLmRlZmF1bHRQcm9wcyxcbiAgICAgICAgaXNUb3A6dHJ1ZSxcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGlzVGVtcGxhdGUoYSl7XG4gICAgICAgIHJldHVybiBhPy5pc1RlbXBsYXRlPy4oKVxuICAgIH1cblxuICAgIGlzVGVtcGxhdGUoKXtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSBcInJlYWN0LWRvbVwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uL2dyb3VwXCJcblxuLyoqXG4gKiBkaXNwbGF5IGNoaWxkcmVuIHRvIG1vc3QgdG9wXG4gKiA+IHdoZW4geCwgeSBzcGVjaWZpZWQsIHRvcCBpcyBhdCBhYnNvbHV0ZSBwb3NpdGlvbiwgb3RoZXJ3aXNlIGl0IG5lZWQgZ2V0IHBvc2l0aW9uIGFzIGZvbGxvd2luZ1xuICogMS4gZ2V0IGl0c2VsZiBwb3NpdGlvbiB3aGVuIG1vdW50aW5nXG4gKiAyLiBjcmVhdGUgcG9ydGFsIGF0IHRoZSBwb3N0aW9pblxuICogXG4gKiBAVE9ETzogd2hhdCBpZiBwcm9wcy54L3kgY2hhbmdlZFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3AgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe3gseX0sc3RhdGUpe1xuXHRcdHJldHVybiB7eCx5LC4uLnN0YXRlfVxuXHR9XG5cblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHR9XG5cbiAgICByZW5kZXIoKXtcblx0XHRjb25zdCB7c3RhdGU6e3g9MCwgeT0wLCBzdmd9LCBwcm9wczp7fX09dGhpc1xuXHRcdGNvbnN0IGlnbm9yZUV2ZW50PWU9PmUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRjb25zdCBjb250ZW50PShcblx0XHRcdDxHcm91cCBpbm5lclJlZj17YT0+dGhpcy5lbD1hfSB4PXt4fSB5PXt5fSBcblx0XHRcdFx0b25Nb3VzZURvd249e2lnbm9yZUV2ZW50fVxuXHRcdFx0XHRvbk1vdXNlTW92ZT17aWdub3JlRXZlbnR9XG5cdFx0XHRcdG9uTW91c2VVcD17aWdub3JlRXZlbnR9XG5cdFx0XHRcdD5cbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvR3JvdXA+XG5cdFx0KVxuXG5cdFx0cmV0dXJuIHN2ZyA/IGNyZWF0ZVBvcnRhbChjb250ZW50LCAgc3ZnKSA6IGNvbnRlbnRcbiAgICB9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKXtcblx0XHRjb25zdCB7c3RhdGU6e3gseSwgdXNlUmVsYXRpdmVQb3NpdGlvbj14PT11bmRlZmluZWQgJiYgeT09dW5kZWZpbmVkfSxlbH09dGhpc1xuXHRcdGNvbnN0IHN2Zz1lbC52aWV3cG9ydEVsZW1lbnRcblx0XHRpZighdXNlUmVsYXRpdmVQb3NpdGlvbilcblx0XHRcdHJldHVybiB0aGlzLnNldFN0YXRlKHtzdmd9KVxuXHRcdFxuXHRcdGxldCBvPWVsLnZpZXdwb3J0RWxlbWVudC5jcmVhdGVTVkdQb2ludCgpXG5cdFx0by54PTAsby55PTBcblx0XHRvPW8ubWF0cml4VHJhbnNmb3JtKGVsLmdldENUTSgpKVxuXHRcdHRoaXMuc2V0U3RhdGUoe3N2ZywgeDpvLngsIHk6by55fSlcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi90b3BcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGF5IGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7Y2hpbGRyZW4sLi4ucHJvcHN9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICAgICAgPFRvcCB4PXswfSB5PXswfT5cblx0XHRcdFx0XHQ8cmVjdCB7Li4ue3dpZHRoOlwiMTAwJVwiLGhlaWdodDpcIjEwMCVcIixmaWxsOlwidHJhbnNwYXJlbnRcIn19IHsuLi5wcm9wc30vPlxuXHRcdFx0XHQ8L1RvcD5cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgIClcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IFRvcCBmcm9tIFwiLi90b3BcIlxuaW1wb3J0IE92ZXJsYXkgZnJvbSBcIi4vb3ZlcmxheVwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uL2dyb3VwXCJcblxuLyoqXG4gKiAxLiBhbmNob3IgbW92ZTogbW92ZSB0byBhcmJpdGFyeSB4LHksIHdoaWNoIGNhbiBiZSBjb21wb3NpbmcgZHVyaW5nIG1vdmluZywgd2l0aG91dCBwbGFjZWhvbGRlclxuICogMi4gZmxvdyBtb3ZlOiBtb3ZlIHRvIGEgZmxvd2FibGUgcG9zaXRpb24sIHdoaWNoIGNhbiB1c2UgcGxhY2Vob2xkZXIgdG8gaWRlbnRpZnkgdGhlIGRlc3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW92YWJsZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0YXJvdW5kOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRvbk1vdmU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGlzQW5jaG9yOiBQcm9wVHlwZXMuYm9vbCxcblx0fVxuXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdHBvc2l0aW9uaW5nOiBQcm9wVHlwZXMub2JqZWN0XG5cdH1cblxuXHRzdGF0ZT17bW92aW5nOmZhbHNlfVxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7bW92aW5nLCB4LCB5fT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge2NoaWxkcmVuLCBpc0FuY2hvcn09dGhpcy5wcm9wc1xuXHRcdGlmKCFtb3Zpbmcpe1xuXHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbix7XG5cdFx0XHRcdG9uTW91c2VEb3duOmU9Pntcblx0XHRcdFx0XHRpZihlLmJ1dHRvbnMmMHgxKXtcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGNvbnN0IHt4LHl9PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0OmUuY2xpZW50WCx0b3A6ZS5jbGllbnRZfSlcblx0XHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe21vdmluZzp0cnVlLHgseX0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PE92ZXJsYXkgY3Vyc29yPVwiZGVmYXVsdFwiXG5cdFx0XHRcdFx0b25Nb3VzZVVwPXtlPT50aGlzLm9uRW5kTW92ZShlKX1cblx0XHRcdFx0XHRvbk1vdXNlTW92ZT17ZT0+dGhpcy5tb3ZpbmcoZSl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdHshaXNBbmNob3IgJiYgPE1vdmluZ1BsYWNlaG9sZGVyIHsuLi57eCx5fX0vPn1cblx0XHRcdFx0PC9PdmVybGF5PlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdFx0XHRcblx0fVxuXG4gICAgb25FbmRNb3ZlKGUpe1xuXHRcdGlmKCF0aGlzLnN0YXRlLm1vdmluZylcblx0XHRcdHJldHVyblxuXHRcdGNvbnN0IHtjbGllbnRYOmxlZnQsIGNsaWVudFk6dG9wfT1lXG5cdFx0dGhpcy5zZXRTdGF0ZSh7bW92aW5nOmZhbHNlfSwoKT0+e1xuXHRcdFx0Y29uc3Qge3Byb3BzOntpc0FuY2hvcixvbk1vdmV9LCBzdGF0ZTp7eCx5fX09dGhpc1xuXHRcdFx0aWYoaXNBbmNob3Ipe1xuXHRcdFx0XHRjb25zdCBkZXN0PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0LCB0b3B9KVxuXHRcdFx0XHRvbk1vdmUoe2Rlc3Q6e2R4OmRlc3QueC14LCBkeTpkZXN0LnkteX19KVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdG9uTW92ZSh7ZGVzdDp0aGlzLmNvbnRleHQucG9zaXRpb25pbmcuYXJvdW5kKGxlZnQsdG9wKX0pXG5cdFx0XHR9XG5cdFx0fSlcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuXG4gICAgbW92aW5nKGUpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7bW92aW5nLHgseX0scHJvcHM6e29uTW92ZSxpc0FuY2hvcn19PXRoaXNcblx0XHRpZihtb3Zpbmcpe1xuXHRcdFx0Y29uc3Qge2NsaWVudFg6bGVmdCwgY2xpZW50WTp0b3B9PWVcblx0XHRcdGlmKGlzQW5jaG9yKXtcblx0XHRcdFx0Y29uc3QgZGVzdD10aGlzLmNvbnRleHQucG9zaXRpb25pbmcuYXNDYW52YXNQb2ludCh7bGVmdCwgdG9wfSlcblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7Li4uZGVzdH0sKCk9Pntcblx0XHRcdFx0XHRvbk1vdmUoe2Rlc3Q6e2R4OmRlc3QueC14LCBkeTpkZXN0LnkteX19KVxuXHRcdFx0XHR9KVxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdGNvbnN0IHtpZCxhdH09dGhpcy5jb250ZXh0LnBvc2l0aW9uaW5nLmFyb3VuZChsZWZ0LHRvcClcblx0XHRcdFx0aWYoaWQpe1xuXHRcdFx0XHRcdGNvbnN0IHt4LHl9PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5wb3NpdGlvbihpZCxhdClcblx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKHt4LHksaWQsYXR9KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG59XG5cbmNvbnN0IE1vdmluZ1BsYWNlaG9sZGVyPSh7eD0wLHk9MH0pPT4oXG5cdDxUb3A+XG5cdFx0PEdyb3VwICB4PXt4fSB5PXt5fT5cblx0XHRcdDxyZWN0IHg9ezV9IHk9ezIwfSB3aWR0aD17MTB9IGhlaWdodD17NX1cblx0XHRcdFx0XHRmaWxsPVwidHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdHN0cm9rZT17XCJncmF5XCJ9XG5cdFx0XHRcdFx0c3Ryb2tlV2lkdGg9XCIxXCIvPlxuXHRcdFx0PHJlY3Qgd2lkdGg9ezJ9IGhlaWdodD17MjB9IGZpbGw9e1wiYmxhY2tcIn0vPlxuXHRcdDwvR3JvdXA+XG5cdDwvVG9wPlxuKVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge3doZW5TZWxlY3Rpb25DaGFuZ2UsQUNUSU9OfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi9tb3ZhYmxlXCJcblxuZXhwb3J0IGRlZmF1bHQgd2hlblNlbGVjdGlvbkNoYW5nZSgoe3NlbGVjdGlvbn0pPT57XG5cdHJldHVybiBzZWxlY3Rpb24gPyB7c2VsZWN0aW9uLHJlY3RzOnNlbGVjdGlvbi5nZXRSYW5nZVJlY3RzKCl9IDoge31cbn0sdW5kZWZpbmVkLHVuZGVmaW5lZCx7d2l0aFJlZjp0cnVlfSkoY2xhc3MgU2VsZWN0aW9uU2hhcGUgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55XG5cdH1cblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5hcmVhPVJlYWN0LmNyZWF0ZVJlZigpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHRcdHRoaXMub25TaHJpbms9dGhpcy5vblNocmluay5iaW5kKHRoaXMpXG5cdFx0dGhpcy5vbk1vdmU9dGhpcy5vbk1vdmUuYmluZCh0aGlzKVxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3N0YXRlOntyZWN0cz1bXSwgc2VsZWN0aW5nfSwgcHJvcHM6e319PXRoaXNcblx0XHRjb25zdCB7ZWRpdGFibGV9PXRoaXMuY29udGV4dFxuXHRcdGNvbnN0IHJhbmdlPTxBcmVhIHJlY3RzPXtyZWN0c30gaW5uZXJSZWY9e3RoaXMuYXJlYX0vPlxuXHRcdGlmKHNlbGVjdGluZylcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQocmFuZ2Use29uTW91c2VNb3ZlOnRoaXMub25TaHJpbmt9KVxuXHRcdFxuXHRcdHJldHVybiBlZGl0YWJsZSA/IDxNb3ZhYmxlIGNoaWxkcmVuPXtyYW5nZX0gb25Nb3ZlPXt0aGlzLm9uTW92ZX0vPiA6IHJhbmdlXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtyZWN0c30se3NlbGVjdGluZ30pe1xuXHRcdGlmKCFzZWxlY3RpbmcpXG5cdFx0XHRyZXR1cm4ge3JlY3RzfVxuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRvblNocmluayh7YnV0dG9ucywgY2xpZW50WDpsZWZ0LCBjbGllbnRZOiB0b3B9KXtcblx0XHRpZighKGJ1dHRvbnMmMHgxKSlcblx0XHRcdHJldHVyblxuXHRcdGNvbnN0IHtzZWxlY3Rpb259PXRoaXMucHJvcHNcblx0XHRjb25zdCB7cmVjdHN9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7eCx5fT1zZWxlY3Rpb24ucG9zaXRpb25pbmcuYXNDYW52YXNQb2ludCh7bGVmdCx0b3B9KVxuXG5cdFx0bGV0IGk9cmVjdHMuZmluZEluZGV4KCh7bGVmdCx0b3AscmlnaHQsYm90dG9tfSk9Pnk8PWJvdHRvbSAmJiBsZWZ0PD14ICYmIHg8PXJpZ2h0KVxuXHRcdGxldCBuZXdSZWN0cz1yZWN0cy5zbGljZSgwLGkrMSlcblx0XHRpZihpIT0tMSl7XG5cdFx0XHRuZXdSZWN0c1tuZXdSZWN0cy5sZW5ndGgtMV0ucmlnaHQ9eC0yXG5cdFx0fVxuXHRcdHRoaXMuc2V0U3RhdGUoe3JlY3RzOm5ld1JlY3RzfSlcblx0fVxuXG5cdG9uTW92ZShlKXtcblx0XHR0aGlzLnByb3BzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uTU9WRShlKSlcblx0fVxuXG5cdGNvbXBvbmVudERpZE1vdW50KCl7XG5cdFx0dGhpcy5jb21wb25lbnREaWRVcGRhdGUoe30pXG5cdH1cblxuXHRjb21wb25lbnREaWRVcGRhdGUocHJldil7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uPXRoaXMucHJvcHMuc2VsZWN0aW9uXG5cdFx0aWYocHJldi5zZWxlY3Rpb24hPXNlbGVjdGlvbiAmJiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmlzUmFuZ2Upe1xuXHRcdFx0aWYoc2VsZWN0aW9uLmlzU2VsZWN0aW9uQ2hhbmdlZChwcmV2LnNlbGVjdGlvbikpe1xuXHRcdFx0XHRjb25zdCBzaGFwZT10aGlzLmFyZWEuY3VycmVudFxuXHRcdFx0XHRpZihzaGFwZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKVxuXHRcdFx0XHRcdHNoYXBlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSlcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHNoYXBlLnNjcm9sbEludG9WaWV3KClcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pXG5cbmV4cG9ydCBjb25zdCBBcmVhPSh7cmVjdHMsIGlubmVyUmVmLC4uLnByb3BzfSk9Pihcblx0PHBhdGhcblx0XHRyZWY9e2lubmVyUmVmfVxuXHRcdGZpbGw9XCIjMzI5N0ZEXCJcblx0XHRjbGFzc05hbWU9XCJzZWxlY3Rpb25TaGFwZVwiXG5cdFx0c3R5bGU9e3tmaWxsT3BhY2l0eTowLjV9fVxuXHRcdGQ9e1xuXHRcdFx0KHJlY3RzfHxbXSkubWFwKCh7bGVmdCx0b3AscmlnaHQsYm90dG9tfSk9PmBNJHtsZWZ0fSAke3RvcH0gTCR7cmlnaHR9ICR7dG9wfSBMJHtyaWdodH0gJHtib3R0b219IEwke2xlZnR9ICR7Ym90dG9tfSBaYCkuam9pbihcIiBcIilcblx0XHR9XG5cdFx0ey4uLnByb3BzfVxuXHRcdG9uQ2xpY2s9e2U9PmNvbnNvbGUubG9nKDEpfVxuXHRcdC8+XG4pXG4iLCJpbXBvcnQgUmVhY3Qse0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZX0gZnJvbSBcIndlLWVkaXRcIlxuXG5leHBvcnQgZGVmYXVsdCB3aGVuU2VsZWN0aW9uQ2hhbmdlKCkoXG4gICAgY2xhc3MgQ3Vyc29yU2hhcGUgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB0aGlzLnNoYXBlPVJlYWN0LmNyZWF0ZVJlZigpXG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCl7XG4gICAgICAgICAgICBjb25zdCB7c2VsZWN0aW9uLCBzdHlsZSB9PXRoaXMucHJvcHNcbiAgICAgICAgICAgIGNvbnN0IHtwb3NpdGlvbjp7eSA9IDAsIHggPSAwLCBoZWlnaHQgPSAwLCBjb2xvciA9IFwiYmxhY2tcIn0sIGlzQ3Vyc29yLCBpc0ZvY3VzYWJsZX09c2VsZWN0aW9ufHx7cG9zaXRpb246e319XG4gICAgICAgICAgICByZXR1cm4gKDxwYXRoIHJlZj17dGhpcy5zaGFwZX0gZD17YE0ke3h9ICR7eX0gdiR7aXNDdXJzb3ImJiFpc0ZvY3VzYWJsZSA/IGhlaWdodDogMH1gfSBzdHJva2VXaWR0aD17MX0gc3Ryb2tlPXtjb2xvcn0gc3R5bGU9e3N0eWxlfSAvPilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSh7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2KXtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbj10aGlzLnByb3BzLnNlbGVjdGlvblxuICAgICAgICAgICAgaWYocHJldi5zZWxlY3Rpb24hPXNlbGVjdGlvbiAmJiBzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmlzQ3Vyc29yKXtcbiAgICAgICAgICAgICAgICBpZihzZWxlY3Rpb24uaXNTZWxlY3Rpb25DaGFuZ2VkKHByZXYuc2VsZWN0aW9uKSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBlPXRoaXMuc2hhcGUuY3VycmVudFxuICAgICAgICAgICAgICAgICAgICBpZihzaGFwZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuKVxuIiwiaW1wb3J0IHtTZWxlY3Rpb25TdHlsZX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnaW5hdGlvblNlbGVjdGlvblN0eWxlIGV4dGVuZHMgU2VsZWN0aW9uU3R5bGV7XG4gICAgY29uc3RydWN0b3IocG9zaXRpb24sIHN0YXJ0LCBlbmQscG9zaXRpb25pbmcpIHtcbiAgICAgICAgc3VwZXIocG9zaXRpb24sIHN0YXJ0LCBlbmQpXG4gICAgICAgIHRoaXMucG9zaXRpb25pbmc9cG9zaXRpb25pbmdcbiAgICAgICAgaWYgKHN0YXJ0LmlkICE9IGVuZC5pZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udGVudChzdGFydC5pZCkuZm9yd2FyZEZpcnN0KGAjJHtlbmQuaWR9YCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gZW5kO1xuICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gc3RhcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzYWJsZT1zdGFydC5pZD09ZW5kLmlkICYmIHBvc2l0aW9uaW5nLmdldENvbXBvc2VyKHN0YXJ0LmlkKS5mb2N1c2FibGVcbiAgICAgICAgdGhpcy5pc1JhbmdlPSF0aGlzLmlzQ3Vyc29yICYmICF0aGlzLmlzRm9jdXNhYmxlXG4gICAgfVxuXG4gICAgaXNTZWxlY3Rpb25DaGFuZ2VkKGIpe1xuICAgICAgICByZXR1cm4gIWIgfHwgIShiLnN0YXJ0LmlkPT10aGlzLnN0YXJ0LmlkICYmIGIuc3RhcnQuYXQ9PXRoaXMuc3RhcnQuYXQgJiYgYi5lbmQuaWQ9PXRoaXMuZW5kLmlkICYmIGIuZW5kLmF0PT10aGlzLmVuZC5hdClcbiAgICB9XG5cbiAgICBnZXRDb21wb3Nlcigpe1xuICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uaW5nLmdldENvbXBvc2VyKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBnZXRDb250ZW50KCl7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uaW5nLmdldENvbnRlbnQoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGdldFJhbmdlUmVjdHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19nZXRSYW5nZVJlY3RzKHRoaXMuc3RhcnQsdGhpcy5lbmQpXG4gICAgfVxuXG4gICAgX19nZXRSYW5nZVJlY3RzPW1lbW9pemUoKHN0YXJ0LCBlbmQpPT57XG4gICAgICAgIGlmKHRoaXMuaXNSYW5nZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbmluZy5nZXRSYW5nZVJlY3RzKHN0YXJ0LCBlbmQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJhbmdlUmVjdHMoKVxuICAgIH0pXG5cbiAgICBwcm9wcz1tZW1vaXplKCh0eXBlLCBnZXRGcm9tQ29udGVudCA9IHRydWUpPT57XG4gICAgICAgIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJwYWdlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlUHJvcHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJsYXlvdXRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dFByb3BzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wcz1zdXBlci5wcm9wcyh0eXBlLGdldEZyb21Db250ZW50KVxuICAgICAgICBpZighcHJvcHMpXG4gICAgICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgICAgY29uc3Qge2hhc2gsaWQsY29udGVudCxjaGlsZHJlbiwuLi5hfT1wcm9wc1xuICAgICAgICByZXR1cm4gYVxuICAgIH0pXG5cbiAgICBfbGF5b3V0UHJvcHM9bWVtb2l6ZSgoKT0+e1xuICAgICAgICBpZiAoIXRoaXMucG9zaXRpb25pbmcucmVhZHkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucG9zaXRpb25pbmcucGFnZXMuZmluZChhID0+IGEucHJvcHMuSSA9PSB0aGlzLnBvc2l0aW9uLnBhZ2UpO1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcGFnZS5sYXlvdXRPZih0aGlzLnBvc2l0aW9uKVxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiB4LCB5IG9mIHBhZ2UsbGluZSxjb2x1bW5cbiAgICAgKiBzaXplLCBtYXJnaW5cbiAgICAgKi9cbiAgICBfcGFnZVByb3BzPW1lbW9pemUoKCk9PntcbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uaW5nLnJlYWR5KVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBvc2l0aW9uaW5nLnBhZ2VzLmZpbmQoYSA9PiBhLnByb3BzLkkgPT0gdGhpcy5wb3NpdGlvbi5wYWdlKTtcbiAgICAgICAgaWYgKCFwYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlWSA9ICgpID0+IHRoaXMucG9zaXRpb25pbmcucGFnZVhZKHRoaXMucG9zaXRpb24ucGFnZSkueTtcbiAgICAgICAgY29uc3QgbGluZSA9ICgpID0+IHRoaXMucG9zaXRpb24ubGluZVxuICAgICAgICBjb25zdCBjb2x1bW4gPSAoKSA9PiBwYWdlLmNvbHVtbkluZGV4T2YobGluZSgpLHRoaXMucG9zaXRpb24pO1xuICAgICAgICBjb25zdCBjb2xzID0gKCkgPT4gWy4uLnBhZ2UuY29sc107XG4gICAgICAgIGNvbnN0IHsgbWFyZ2luLCB3aWR0aCwgaGVpZ2h0IH0gPSBwYWdlLnByb3BzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5wb3NpdGlvbixcbiAgICAgICAgICAgIGdldCBwYWdlWSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZVkoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbGluZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjb2x1bW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBjb2xzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2xzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHNpemUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgd2lkdGgsIGhlaWdodCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBtYXJnaW4oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmdpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KVxufVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtjb25uZWN0LEFDVElPTn0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtjb21wb3NlfSBmcm9tIFwicmVjb21wb3NlXCJcbmltcG9ydCBTZWxlY3Rpb25TdHlsZSBmcm9tIFwiLi9zZWxlY3Rpb24tc3R5bGVcIlxuXG4vKipcbiAqIFRvIHVwZGF0ZSBjdXJzb3IsIHNlbGVjdGlvbiwgYW5kIGZvY3VzIHNoYXBlIG9ubHkgd2hlblxuICogY2FudmFzIGlzIHJlYWR5LCB3aGljaCBtZWFucyBkb2N1bWVudCBjb21wb3NlZCwgYW5kIGJlIHVwZGF0ZWQgaW4gY2FudmFzXG4gKiBcbiAqIHRoZXJlIGFyZSAzIHN0YXRlczogW25leHQsIGN1cnJlbnQsIGFuZCBsYXN0XVtjb250ZW50LHNlbGVjdGlvbl1cbiAqIGlmIGFueSBvZiBuZXh0IGlzIGRpZmZlcmVudCBmcm9tIGxhc3Qgb3IgY3VycmVudCwgc2hvdWxkIHVwZGF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjb21wb3NlKFxuICAgIGNvbm5lY3QoXG4gICAgICAgIHN0YXRlPT4oe1xuICAgICAgICAgICAgY29udGVudDpzdGF0ZS5nZXQoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgc2VsZWN0aW9uOnN0YXRlLmdldChcInNlbGVjdGlvblwiKSxcbiAgICAgICAgfSksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7d2l0aFJlZjp0cnVlfVxuICAgICksXG4pKGNsYXNzIFdoZW5TZWxlY3Rpb25DaGFuZ2VOb3RpZmllciBleHRlbmRzIENvbXBvbmVudHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuc3RhdGU9e2NvbXBvc2VkQ29udGVudDpudWxsfVxuICAgIH1cblxuXHRyZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUoe2NvbnRlbnQsc2VsZWN0aW9uLCBjYW52YXMsIHBvc2l0aW9uaW5nPWNhbnZhcy5wb3NpdGlvbmluZ30se2NvbXBvc2VkQ29udGVudH0pe1xuICAgICAgICBjb25zdCBjb21wb3NlZENvbnRlbnRJc1N5bmNlZD1jb250ZW50LmVxdWFscyhjb21wb3NlZENvbnRlbnQpXG4gICAgICAgIGlmKCFjb21wb3NlZENvbnRlbnRJc1N5bmNlZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRBbmRTZWxlY3Rpb25Jc05vdENoYW5nZWQ9XG4gICAgICAgICAgICBjb250ZW50LmVxdWFscyh0aGlzLnByb3BzLmNvbnRlbnQpICYmXG4gICAgICAgICAgICBzZWxlY3Rpb24uZXF1YWxzKHRoaXMucHJvcHMuc2VsZWN0aW9uKSAmJiBcbiAgICAgICAgICAgIGNvbnRlbnQuZXF1YWxzKHRoaXMubGFzdC5jb250ZW50KSAmJiBcbiAgICAgICAgICAgIHNlbGVjdGlvbi5lcXVhbHModGhpcy5sYXN0LnNlbGVjdGlvbilcblxuICAgICAgICBpZihjb250ZW50QW5kU2VsZWN0aW9uSXNOb3RDaGFuZ2VkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgLy9pbml0aWFsaXplXG4gICAgICAgIHRoaXMuc3R5bGU9bnVsbFxuXG4gICAgICAgIGNvbnN0IHtjdXJzb3JBdCwgLi4uYX09c2VsZWN0aW9uLnRvSlMoKVxuICAgICAgICBjb25zdCB7aWQsYXR9PWFbY3Vyc29yQXRdXG4gICAgICAgIGlmKCFpZClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIHRoaXMuc3R5bGU9bmV3IFNlbGVjdGlvblN0eWxlKHBvc2l0aW9uaW5nLnBvc2l0aW9uKGlkLCBhdCwgdHJ1ZSksIGEuc3RhcnQsIGEuZW5kLHBvc2l0aW9uaW5nKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2Rpc3BhdGNoLGNvbnRlbnQsc2VsZWN0aW9ufSwgc3R5bGV9PXRoaXNcbiAgICAgICAgZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TVFlMRShzdHlsZSkpXG4gICAgICAgIHRoaXMubGFzdD17Y29udGVudCwgc2VsZWN0aW9ufVxuICAgIH1cbn0pXG5cblxuIiwiLyoqXG4gKiBUZXJtczpcbiAqIFBvc2l0aW9uOiBvYmplY3QgbXVzdCB3aXRoIGNvb3JkaW5hdGUgZmlndXJlcyBsaWtlIHt4LHksbGVmdCx0b3AsIC4uLn0gb24gY2FudmFzXG4gKiBMb2NhdGlvbjoge2lkLCBhdH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zaXRpb25pbmd7XG4gICAgY29uc3RydWN0b3IocmVzcG9uc2libGUpe1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmxlPXJlc3BvbnNpYmxlXG4gICAgfVxuXG4gICAgZ2V0Q29tcG9zZXIoKXsgIFxuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5nZXRDb21wb3NlciguLi5hcmd1bWVudHMpXG4gICAgfVxuICAgIGdldENvbnRlbnQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuZ2V0Q29udGVudCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgYXNDYW52YXNQb2ludCh7bGVmdCx0b3B9KXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuYXNDYW52YXNQb2ludCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgYXNWaWV3cG9ydFBvaW50KHt4LHl9KXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUuYXNWaWV3cG9ydFBvaW50KC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBwYWdlWFkoST0wKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUucGFnZVhZKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBnZXQgcGFnZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2libGUucGFnZXNcbiAgICB9XG5cbiAgICBnZXQgZnJhbWVzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzXG4gICAgfVxuXG4gICAgZ2V0IHJlYWR5KCl7XG4gICAgICAgIHJldHVybiAhIXRoaXMucmVzcG9uc2libGUuY2FudmFzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gZ2V0IHBvc2l0aW9ue3BhZ2UsbGluZSwgeCx5LGxlZnQsdG9wLH0gZm9yIGEgbG9jYXRpb257aWQsYXR9XG4gICAgICogXG4gICAgICovXG4gICAgcG9zaXRpb24oaWQsYXQpe1xuICAgICAgICByZXR1cm4ge3BhZ2U6MH1cbiAgICB9XG5cbiAgICAvKipnZXQgYSBsb2NhdGlvbntpZCxhdH0gZnJvbSBhIHBvc2l0aW9ue2xlZnQsdG9wfSovXG4gICAgYXJvdW5kKGxlZnQsdG9wKXtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLyoqZ2V0IHJhbmdlIHJlY3RzIGZyb20gcG9zaXRpb24gc3RhcnQgdG8gcG9zaXRpb24gZW5kKi9cbiAgICBnZXRSYW5nZVJlY3RzKHN0YXJ0LGVuZCl7XG4gICAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIC8qKmdldCBsb2NhdGlvbiBvZiBuZXh0IGxpbmUgZm9yIGEgbG9jYXRpb24gXG4gICAgICogc2ltcGxlOiBmaW5kIGxvY2F0aW9uIGZyb20gMSBwaXhlbCBiZWxvdyB0aGUgbGluZSwgd2hhdCBhYm91dCBpZiBpdCdzIGxhc3QgbGluZSBvZiBmcmFtZVxuICAgICovXG4gICAgbmV4dExpbmUoaWQsYXQpe1xuICAgICAgICBjb25zdCBwb3NpdGlvbj10aGlzLnBvc2l0aW9uKGlkLGF0KVxuICAgICAgICBpZighcG9zaXRpb24gJiYgbmV4dEZyYW1lKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZChsZWZ0LG5leHRGcmFtZS5maXJzdExpbmUueSsxKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyb3VuZChsZWZ0LHRvcCtsaW5lSGVpZ2h0KzEpXG4gICAgfVxuICAgIC8qKmdldCBsb2NhdGlvbiBvZiBwcmV2IGxpbmUgZm9yIGEgbG9jYXRpb24gKi9cbiAgICBwcmV2TGluZShpZCxhdCl7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uPXRoaXMucG9zaXRpb24oaWQsYXQpXG4gICAgICAgIGlmKCFwb3NpdGlvbiAmJiBwcmV2RnJhbWUpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kKGxlZnQscHJldkZyYW1lLmxhc3RMaW5lLnktMSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcm91bmQobGVmdCx0b3AtMSlcbiAgICB9XG5cbiAgICBwb3NpdGlvbkF0TGluZUVuZChpZCxhdCl7XG4gICAgICAgIHJldHVybiB7aWQsYXR9XG4gICAgfVxuXG4gICAgcG9zaXRpb25BdExpbmVTdGFydChpZCxhdCl7XG4gICAgICAgIHJldHVybiB7aWQsYXR9XG4gICAgfVxuXG5cblxuICAgIC8qKmV4dGVuZCBzZWxlY3Rpb24gZnJvbSBsb2NhdGlvbiB0byB3b3JkIHJhbmdlKi9cbiAgICBleHRlbmRXb3JkKGlkLGF0KXtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgLyoqZXh0ZW5kIHNlbGVjdGlvbiBmcm9tIGxvY2F0aW9uIHRvIGxpbmUgcmFuZ2UqL1xuICAgIGV4dGVuZExpbmUoaWQsYXQpe1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBzdGF0aWMgbWFrZVNhZmU9QT0+Y2xhc3MgU2FmZVBvc2l0aW9uaW5nIGV4dGVuZHMgQXtcbiAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKVxuICAgICAgICAgICAgXCJwb3NpdGlvbixhcm91bmQsbmV4dExpbmUscHJldkxpbmUsZXh0ZW5kV29yZFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGs9PntcbiAgICAgICAgICAgICAgICB0aGlzW2tdPSguLi5hcmdzKT0+e1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXJba10oLi4uYXJncylcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pIFxuICAgICAgICB9XG4gICAgICAgIGdldFJhbmdlUmVjdHMoLi4uYXJncyl7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFJhbmdlUmVjdHMoLi4uYXJncylcbiAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gICAgXG59IiwiaW1wb3J0IFJlYWN0UG9zaXRpb25pbmcgZnJvbSBcIi4vcmVhY3QtcG9zaXRpb25pbmdcIlxuXG5leHBvcnQgZGVmYXVsdCBSZWFjdFBvc2l0aW9uaW5nIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge1JlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBQb3NpdGlvbmluZyBmcm9tIFwiLi9iYXNlXCJcblxuLyoqXG4gKiBsYXlvdXRlZCBpcyBhIGZyYW1lIHRyZWVcbiAqIHRvcCBmcmFtZSh0b3BGcmFtZSkgaXMgdGhlIHRvcCBmcmFtZVxuICogbGVhZkZyYW1lIGlzIGEgZnJhbWUgd2l0aG91dCBuZXN0ZWQgZnJhbWVcbiAqIGl0J3MgYmFzZWQgb24gc29tZSBrbm93bGVkZ2U6XG4gKiAxLiBkYXRhLWZyYW1lPWZyYW1lLnV1aWRcbiAqIDIuIGlubGluZSBsYXlvdXQgc3RvcnksIGFuZCBpdHMgYmFzZWxpbmVcbiAqIFxuICogdGhlIHBvc2l0aW9uaW5nIGJhc2ljIGlkZWEgaXMgdG8gcG9zaXRpb25pbmcgaW4gbGVhZkZyYW1lKHNvIHRoZSBjb250ZW50IGlzIGV4YWN0IGF0b21zLCBvciBtZXJnaW5nIHVwIHdpdGggYXRvbXMpLCBcbiAqIGFuZCB0aGVuIGNvbXB1dGVkIHdpdGggdG9wRnJhbWUub2Zmc2V0LCBhbmQgbGVhZkZyYW1lLm9mZnNldFxuICovXG5jbGFzcyBQb3NpdGlvbmluZ0hlbHBlciBleHRlbmRzIFBvc2l0aW9uaW5ne1xuICAgIGdldFRvcEZyYW1lWFkodG9wRnJhbWUpe1xuICAgICAgICBjb25zdCB7eCx5fT10aGlzLnBhZ2VYWSh0b3BGcmFtZS5wcm9wcy5JKVxuICAgICAgICByZXR1cm4ge3gseSx0b3A6eSxib3R0b206eSt0b3BGcmFtZS5wcm9wcy5oZWlnaHR9XG4gICAgfVxuXG4gICAgZ2V0VG9wRnJhbWVCeVBvc2l0aW9uKHgseSl7XG4gICAgICAgIHZhciB4eVxuICAgICAgICBjb25zdCB0b3BGcmFtZT10aGlzLmZyYW1lcy5maW5kKCh7IHByb3BzOiB7IHdpZHRoPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBoZWlnaHQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIEk9MCB9IH0pID0+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/Pz9cbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFjdFBvc2l0aW9uaW5nIGV4dGVuZHMgUG9zaXRpb25pbmdIZWxwZXIge1xuICAgIC8qKlxuICAgICAqIDIgb3B0aW9uczpcbiAgICAgKiA+PmEuIHBvc2l0aW9uaW5nIGZyb20gdXAgdG8gaWQsIHNjb3BlIGZyb20gYmlnIHRvIHNtYWxsXG4gICAgICogPj5iLiBwb3NpdGlvbmluZyBmcm9tIGlkIHVwLCBwZXJmb3JtYW5jZSBzaG91bGQgYmUgYmV0dGVyLCBjaG9zZW5cbiAgICAgKiB0aGUgbG9jYXRpb24gbWF5IGJlOlxuICAgICAqIElubGluZSBMZXZlbFxuICAgICAqL1xuICAgIHBvc2l0aW9uKGlkLGF0LCBfX3JldHVybkV2ZXJ5dGhpbmcpe1xuICAgICAgICAvLyNiICwgKGlkLGF0KS0+bGluZS0+ZnJhbWUtPnRvcEZyYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBtYXliZSBubyBsaW5lXG4gICAgICAgICAqID4gYW5jaG9yXG4gICAgICAgICAqID4gdG9wRnJhbWUgaXRzZWxmXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCB7bGVhZkZyYW1lLGxpbmUsIGFuY2hvcn09dGhpcy5wb3NpdGlvblRvTGVhZkZyYW1lTGluZShpZCxhdClcbiAgICAgICAgY29uc3QgdG9wRnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUobGVhZkZyYW1lKVxuICAgICAgICBjb25zdCB0b3BGcmFtZU9mZnNldD10aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXG4gICAgICAgIGNvbnN0IGxlYWZGcmFtZU9mZnNldD0hYW5jaG9yID8gdGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsbGVhZkZyYW1lKSA6IGFuY2hvci5vZmZzZXQodG9wRnJhbWUsbGVhZkZyYW1lKVxuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0PSghYW5jaG9yICYmIGxpbmUucGFyYWdyYXBoKSA/IGxlYWZGcmFtZS5saW5lWFkobGluZS5pbkZyYW1lKSA6IHt4OjAseTowfVxuICAgICAgICBjb25zdCBpbmxpbmU9IWFuY2hvciA/IGxpbmUucG9zaXRpb24oaWQsYXQpIDogYW5jaG9yLnBvc2l0aW9uKHRvcEZyYW1lLGlkLGF0KVxuXG4gICAgICAgIC8vZmluYWxseVxuICAgICAgICBjb25zdCB4PXRvcEZyYW1lT2Zmc2V0LngrbGVhZkZyYW1lT2Zmc2V0LngrbGluZU9mZnNldC54K2lubGluZS54XG4gICAgICAgIGNvbnN0IHk9dG9wRnJhbWVPZmZzZXQueStsZWFmRnJhbWVPZmZzZXQueStsaW5lT2Zmc2V0LnkraW5saW5lLnlcbiAgICAgICAgY29uc3QgcG9zaXRpb249e1xuICAgICAgICAgICAgaWQsYXQsXG4gICAgICAgICAgICAuLi5pbmxpbmUsXG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIC4uLnRoaXMuYXNWaWV3cG9ydFBvaW50KHsgeCx5IH0pLFxuICAgICAgICAgICAgcGFnZTp0b3BGcmFtZS5wcm9wcy5JLFxuICAgICAgICAgICAgcGFyYWdyYXBoOmxpbmUucGFyYWdyYXBoLFxuICAgICAgICAgICAgbGluZUluZGV4T2ZQYXJhZ3JhcGg6bGluZS5pLFxuICAgICAgICAgICAgbGluZUhlaWdodDpsaW5lLmhlaWdodFxuICAgICAgICB9XG5cbiAgICAgICAgaWYoIV9fcmV0dXJuRXZlcnl0aGluZylcbiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwb3NpdGlvbiwge1xuICAgICAgICAgICAgdG9wRnJhbWUsIFxuICAgICAgICAgICAgbGVhZkZyYW1lLCBcbiAgICAgICAgICAgIGdldCBsaW5lSW5kZXhJbkxlYWZGcmFtZSgpe1xuICAgICAgICAgICAgICAgIGlmKCFsaW5lLmluRnJhbWUgJiYgIWFuY2hvcil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdD09MCA/IDAgOiBsZWFmRnJhbWUubGluZXMubGVuZ3RoLTFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlYWZGcmFtZS5saW5lcy5pbmRleE9mKGxpbmUuaW5GcmFtZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgbGluZSgpe1xuICAgICAgICAgICAgICAgIGlmKHRvcEZyYW1lPT1sZWFmRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpbmVJbmRleEluTGVhZkZyYW1lXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvcEZyYW1lLmxpbmVzLmZpbmRJbmRleChhPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLWZyYW1lPVwiJHtsZWFmRnJhbWUudXVpZH1cIl1gKS5sZW5ndGg9PTEpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgbGF5ZXIoKXtcbiAgICAgICAgICAgICAgICBjb25zdCB7cGFyZW50c309bmV3IFJlYWN0UXVlcnkodG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpLmZpbmRGaXJzdEFuZFBhcmVudHMoYFtkYXRhLWNvbnRlbnQ9XCIke2lkfV1gKVxuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyPXBhcmVudHMuZmluZChhPT5hICYmIGEudHlwZS5kaXNwbGF5TmFtZT09XCJsYXllclwiKVxuICAgICAgICAgICAgICAgIGlmKGxheWVyKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLnByb3BzLnpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcG9zaXRpb25Ub0xpbmVFbmQoaWQsYXQpe1xuICAgICAgICBjb25zdCBwb3M9dGhpcy5wb3NpdGlvbihpZCxhdCx0cnVlKVxuICAgICAgICBjb25zdCB7cGFyYWdyYXBoLCBsaW5lSW5kZXhPZlBhcmFncmFwaH09cG9zXG4gICAgICAgIGlmKGxpbmVJbmRleE9mUGFyYWdyYXBoIT0tMSl7XG4gICAgICAgICAgICBjb25zdCAkcD10aGlzLmdldENvbXBvc2VyKHBhcmFncmFwaClcbiAgICAgICAgICAgIGNvbnN0IGF0b209JHAubGluZXNbbGluZUluZGV4T2ZQYXJhZ3JhcGhdLmxhc3RBdG9tXG4gICAgICAgICAgICBpZihhdG9tPT0kcC5hdG9tc1skcC5hdG9tcy5sZW5ndGgtMV0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpwYXJhZ3JhcGgsIGF0OjF9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGU9bmV3IFJlYWN0UXVlcnkoYXRvbSkuZmluZExhc3Qobm9kZT0+e1xuICAgICAgICAgICAgICAgIGlmKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlzQ29udGVudCwgXCJkYXRhLXR5cGVcIjp0eXBlLCBjaGlsZHJlbn19PW5vZGVcbiAgICAgICAgICAgICAgICBpZihpc0NvbnRlbnQgJiYgKHR5cGU9PVwidGV4dFwiIHx8ICFjaGlsZHJlbikpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihub2RlLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5hdHRyKFwiZGF0YS10eXBlXCIpPT1cInRleHRcIil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSwgYXQ6TWF0aC5tYXgoMCxub2RlLmF0dHIoXCJkYXRhLWVuZGF0XCIpLTEpfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOm5vZGUuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cbiAgICBwb3NpdGlvblRvTGluZVN0YXJ0KGlkLGF0KXtcbiAgICAgICAgY29uc3QgcG9zPXRoaXMucG9zaXRpb24oaWQsYXQsdHJ1ZSlcbiAgICAgICAgY29uc3Qge3BhcmFncmFwaCwgbGluZUluZGV4T2ZQYXJhZ3JhcGh9PXBvc1xuICAgICAgICBpZihsaW5lSW5kZXhPZlBhcmFncmFwaCE9LTEpe1xuICAgICAgICAgICAgY29uc3QgJHA9dGhpcy5nZXRDb21wb3NlcihwYXJhZ3JhcGgpXG4gICAgICAgICAgICBjb25zdCBhdG9tPSRwLmxpbmVzW2xpbmVJbmRleE9mUGFyYWdyYXBoXS5maXJzdEF0b21cbiAgICAgICAgICAgIGlmKGF0b209PSRwLmF0b21zWzBdKVxuICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6cGFyYWdyYXBoLCBhdDowfVxuICAgICAgICAgICAgY29uc3Qgbm9kZT1uZXcgUmVhY3RRdWVyeShhdG9tKS5maW5kRmlyc3Qobm9kZT0+e1xuICAgICAgICAgICAgICAgIGlmKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlzQ29udGVudCwgXCJkYXRhLXR5cGVcIjp0eXBlLCBjaGlsZHJlbn19PW5vZGVcbiAgICAgICAgICAgICAgICBpZihpc0NvbnRlbnQgJiYgKHR5cGU9PVwidGV4dFwiIHx8ICFjaGlsZHJlbikpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpZihub2RlLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgaWYobm9kZS5hdHRyKFwiZGF0YS10eXBlXCIpPT1cInRleHRcIil7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSwgYXQ6bm9kZS5hdHRyKFwiZGF0YS1lbmRhdFwiKS1ub2RlLmF0dHIoJ2NoaWxkcmVuJykubGVuZ3RofVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOm5vZGUuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cbiAgICBhcm91bmQobGVmdCx0b3Ape1xuICAgICAgICAvL2NvbnZlcnQgdG8gY2FudmFzIGNvLW9yZGluYXRlXG4gICAgICAgIHZhciB7IHgsIHkgfSA9IHRoaXMuYXNDYW52YXNQb2ludCh7IGxlZnQsIHRvcCB9KVxuICAgICAgICBcbiAgICAgICAgY29uc3Qge3RvcEZyYW1lLHRvcEZyYW1lT2Zmc2V0fT10aGlzLmdldFRvcEZyYW1lQnlQb3NpdGlvbih4LHkpXG4gICAgICAgIGlmKCF0b3BGcmFtZSlcbiAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcG9pbnRJc0luc2lkZT0oe3g6eDA9MCx5OnkwPTAsd2lkdGgsaGVpZ2h0fSwuLi5vZmZzZXRzKT0+e1xuICAgICAgICAgICAgY29uc3Qgbz1vZmZzZXRzLnJlZHVjZSgobyx7eCx5fSk9PihvLngtPXgsby55LT15LG8pLHt4LHl9KVxuICAgICAgICAgICAgcmV0dXJuIHgwPD1vLnggJiYgeTA8PW8ueSAmJiAoeDArd2lkdGgpPj1vLnggJiYgKHkwK2hlaWdodCk+PW8ueVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvL2ZpcnN0IGNoZWNrIGlmIGl0J3MgYW5jaG9yXG4gICAgICAgIGNvbnN0IGFuY2hvcj10b3BGcmFtZS5hbmNob3JzLmZpbmQoKHtwcm9wc30pPT57XG4gICAgICAgICAgICBjb25zdCB7eD0wLHk9MCx3aWR0aD0wLGhlaWdodD0wfT1wcm9wcy5nZW9tZXRyeXx8cHJvcHNcbiAgICAgICAgICAgIHJldHVybiBwb2ludElzSW5zaWRlKHt4LHksd2lkdGgsaGVpZ2h0fSx0b3BGcmFtZU9mZnNldClcbiAgICAgICAgfSlcbiAgICAgICAgaWYoYW5jaG9yKXtcbiAgICAgICAgICAgIGNvbnN0ICRhbmNob3I9bmV3IFJlYWN0UXVlcnkoYW5jaG9yKVxuICAgICAgICAgICAgY29uc3Qgbm90RnJhbWVBbmNob3I9JGFuY2hvci5maW5kRmlyc3QoYFtkYXRhLWZyYW1lXWApLmxlbmd0aD09MFxuICAgICAgICAgICAgaWYobm90RnJhbWVBbmNob3Ipe1xuICAgICAgICAgICAgICAgIGNvbnN0IHtub2RlfT10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvciwgXG4gICAgICAgICAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e3dpZHRoLGhlaWdodCwgXCJkYXRhLW5vY29udGVudFwiOm5vQ29udGVudH19PW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5vQ29udGVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpZHRoICYmIGhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRJc0luc2lkZShyZWN0KHt3aWR0aCxoZWlnaHR9KSx0b3BGcmFtZU9mZnNldCwgYW5jaG9yLnByb3BzLmdlb21ldHJ5KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAobm9kZSxwYXJlbnRzKT0+W25vZGUsLi4ucGFyZW50c10uZmluZChhPT5hICYmIGEucHJvcHMgJiYgXCJkYXRhLWNvbnRlbnRcIiBpbiBhLnByb3BzKVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5wcm9wc1tcImRhdGEtY29udGVudFwiXX1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vY29udGludWUgdXNlIGZyYW1lIHNlYXJjaFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdG8gZ2V0IGxlYWYgZnJhbWUgdGhhdCBpbmNsdWRlcyB0aGUgcG9pbnQsIGFuZCByZXR1cm4gdGhlIGZyYW1lXG4gICAgICAgIGNvbnN0IHtub2RlOmxlYWZGcmFtZX09dGhpcy5nZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKFxuICAgICAgICAgICAgdG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCksIFxuICAgICAgICAgICAgLy9vbmx5IGZyYW1lIHRoYXQgY29udGFpbiB0aGUgcG9pbnRcbiAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtZnJhbWVcIjppc0ZyYW1lLCB3aWR0aCxoZWlnaHR9fT1ub2RlXG4gICAgICAgICAgICAgICAgaWYoaXNGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50SXNJbnNpZGUocmVjdCh7d2lkdGgsaGVpZ2h0fSksdG9wRnJhbWVPZmZzZXQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy9nZXQgZnJhbWUgZnJvbSBkYXRhLWNvbnRlbnQgYW5kIGRhdGEtZnJhbWVcbiAgICAgICAgICAgIGxheW91dGVkRnJhbWVOb2RlPT50aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShsYXlvdXRlZEZyYW1lTm9kZSlcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBsZWFmRnJhbWVPZmZzZXQ9dGhpcy5nZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUodG9wRnJhbWUsbGVhZkZyYW1lKVxuXG4gICAgICAgIC8vbG9jYXRlIHRoZSBsaW5lIHRoYXQgY29udGFpbiB0aGUgcG9pbnRcbiAgICAgICAgdmFyIGxpbmU9bGVhZkZyYW1lLmxpbmVzLmZpbmQobGluZT0+e1xuICAgICAgICAgICAgY29uc3Qge3Byb3BzOnt3aWR0aD0wLCBoZWlnaHQ9MH19PWxpbmVcbiAgICAgICAgICAgIHJldHVybiBwb2ludElzSW5zaWRlKHsuLi5sZWFmRnJhbWUubGluZVhZKGxpbmUpLHdpZHRoLGhlaWdodH0sbGVhZkZyYW1lT2Zmc2V0LHRvcEZyYW1lT2Zmc2V0KVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKCFsaW5lKXtcbiAgICAgICAgICAgIGNvbnN0IGlzRW1wdHk9bGVhZkZyYW1lLmxpbmVzLmxlbmd0aD09MFxuICAgICAgICAgICAgY29uc3QgaXNBYm92ZUZpcnN0TGluZT0oKT0+e1xuICAgICAgICAgICAgICAgIHJldHVybiB5PGxlYWZGcmFtZS5saW5lWFkobGVhZkZyYW1lLmxpbmVzWzBdKS55K2xlYWZGcmFtZU9mZnNldC55K3RvcEZyYW1lT2Zmc2V0LnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzQmVsb3dMYXN0TGluZT0oKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3Q9bGVhZkZyYW1lLmxpbmVzW2xlYWZGcmFtZS5saW5lcy5sZW5ndGgtMV1cbiAgICAgICAgICAgICAgICByZXR1cm4geT5sZWFmRnJhbWUubGluZVhZKGxhc3QpLnkrbGFzdC5wcm9wcy5oZWlnaHQrbGVhZkZyYW1lT2Zmc2V0LnkrdG9wRnJhbWVPZmZzZXQueVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIWlzRW1wdHkgJiYgaXNBYm92ZUZpcnN0TGluZSgpKXtcbiAgICAgICAgICAgICAgICBsaW5lPWxlYWZGcmFtZS5saW5lc1swXVxuICAgICAgICAgICAgfWVsc2UgaWYoIWlzRW1wdHkgJiYgaXNCZWxvd0xhc3RMaW5lKCkpe1xuICAgICAgICAgICAgICAgIGxpbmU9bGVhZkZyYW1lLmxpbmVzW2xlYWZGcmFtZS5saW5lcy5sZW5ndGgtMV1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIC8vZW5kIG9mIGZyYW1lXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpsZWFmRnJhbWUucHJvcHMuaWQsYXQ6MX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgbGluZU9mZnNldD1sZWFmRnJhbWUubGluZVhZKGxpbmUpXG4gICAgICAgIC8vd2hhdCBpZiBsZWFmRnJhbWUgaXMgbm90IGxlYWYgbm9kZT8/Pz8/XG4gICAgICAgIGNvbnN0IHtwYWdpbmF0aW9uOntpZCxpfSwgcGFyYWdyYXBoPXRoaXMuZ2V0Q29tcG9zZXIoaWQpfT1saW5lLnByb3BzXG4gICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluSW5saW5lKHBhcmFncmFwaC5jb21wdXRlZC5sYXN0Q29tcG9zZWRbaS0xXSx4LXRvcEZyYW1lT2Zmc2V0LngtbGVhZkZyYW1lT2Zmc2V0LngtbGluZU9mZnNldC54KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDEuIHN0YXJ0IGFuZCBlbmQgbXVzdCBiZSBub3JtYWxpemVkIHRvIHNhbWUgbGF5b3V0IGJsb2NrXG4gICAgICogMi4gYXBwZW5kIHJlY3QgbGluZSBieSBsaW5lIHVwIHRvIFxuICAgICAqIDMuIHJlbW92ZSBsZWZ0IG9mIGZpcnN0IGxpbmUsIGFuZCByaWdodCBvZiBlbmQgbGluZVxuICAgICAqIEBwYXJhbSB7Kn0gc3RhcnQgXG4gICAgICogQHBhcmFtIHsqfSBlbmQgXG4gICAgICovXG4gICAgZ2V0UmFuZ2VSZWN0cyhzdGFydCxlbmQpe1xuICAgICAgICBjb25zdCByZWN0cz1bXVxuICAgICAgICBjb25zdCB7IHAwLCBwMSB9ID0gdGhpcy5nZXRPcmRlcmVkUG9zaXRpb24oc3RhcnQsIGVuZClcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHNjb3BlPShmdW5jdGlvbiogKGZyYW1lMCwgZnJhbWUxKXtcbiAgICAgICAgICAgIGNvbnN0IG1ha2VSZWN0cz0oZnJhbWUsZnJvbT0wLHRvPWZyYW1lLmxpbmVzLmxlbmd0aC0xKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcEZyYW1lPXRoaXMuZ2V0Q2hlY2tlZEdyYW5kRnJhbWVCeUZyYW1lKGZyYW1lKVxuICAgICAgICAgICAgICAgIGNvbnN0IG89dGhpcy5nZXRUb3BGcmFtZVhZKHRvcEZyYW1lKVxuICAgICAgICAgICAgICAgIGNvbnN0IHt4LHl9PXRoaXMuZ2V0RnJhbWVPZmZzZXRHcmFuZEZyYW1lKHRvcEZyYW1lLGZyYW1lKSBcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUubGluZXMuc2xpY2UoZnJvbSx0bysxKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChsaW5lLF8sXzEse3Byb3BzOnt3aWR0aCxoZWlnaHQscGFnaW5hdGlvbjp7aWQ6aXNQYXJhZ3JhcGhMaW5lfT17fX19PWxpbmUpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4eT1mcmFtZS5saW5lWFkobGluZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzUGFyYWdyYXBoTGluZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rvcnk9bmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0QW5kUGFyZW50cygnLnN0b3J5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4PVsuLi5zdG9yeS5wYXJlbnRzLHN0b3J5LmZpcnN0LmdldCgwKV0ucmVkdWNlKChYLHtwcm9wczp7eD0wfX0pPT5YK3gsMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdD1zdG9yeS5maXJzdC5maW5kRmlyc3RBbmRQYXJlbnRzKCdbZGF0YS1jb250ZW50XSwuZW5kZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHgwPVsuLi5maXJzdC5wYXJlbnRzLGZpcnN0LmZpcnN0LmdldCgwKV0ucmVkdWNlKChYLHtwcm9wczp7eD0wfX0pPT5YK3gseClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0PXN0b3J5LmZpcnN0LmZpbmRMYXN0QW5kUGFyZW50cygnW2RhdGEtY29udGVudF0sLmVuZGVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4MT1bLi4ubGFzdC5wYXJlbnRzLGxhc3QubGFzdC5nZXQoMCldLnJlZHVjZSgoWCx7cHJvcHM6e3g9MH19KT0+WCt4LHgrbGFzdC5sYXN0LmF0dHIoJ3dpZHRoJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsuLi54eSx4Onh5LngreDAsIHdpZHRoOngxLXgwLGhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4ueHksd2lkdGgsaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKGE9PihhLngrPSh4K28ueCksIGEueSs9KHkrby55KSwgYSkpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHt4OmxlZnQseTp0b3Asd2lkdGgsaGVpZ2h0fSk9Pih7bGVmdCx0b3AscmlnaHQ6bGVmdCt3aWR0aCxib3R0b206dG9wK2hlaWdodH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoZnJhbWUwPT1mcmFtZTEpe1xuICAgICAgICAgICAgICAgIHlpZWxkIG1ha2VSZWN0cyhmcmFtZTAsIHAwLmxpbmVJbmRleEluTGVhZkZyYW1lLCBwMS5saW5lSW5kZXhJbkxlYWZGcmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBtYWtlUmVjdHMoZnJhbWUwLCBwMC5saW5lSW5kZXhJbkxlYWZGcmFtZSlcbiAgICAgICAgICAgIGZvcihsZXQgZnJhbWVzPWZyYW1lMC5jb250ZXh0LnBhcmVudC5jb21wdXRlZC5jb21wb3NlZCxpPWZyYW1lMC5wcm9wcy5pKzE7aTxmcmFtZTEucHJvcHMuaTtpKyspe1xuICAgICAgICAgICAgICAgIHlpZWxkIG1ha2VSZWN0cyhmcmFtZXNbaV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5aWVsZCBtYWtlUmVjdHMoZnJhbWUxLCAwLHAwLmxpbmVJbmRleEluTGVhZkZyYW1lKVxuICAgICAgICB9KS5jYWxsKHRoaXMsIHAwLmxlYWZGcmFtZSwgcDEubGVhZkZyYW1lKTtcblxuICAgICAgICBmb3IoY29uc3QgYm91bmRzIG9mIHNjb3BlKXtcbiAgICAgICAgICAgIHJlY3RzLnNwbGljZShyZWN0cy5sZW5ndGgsIDAsIC4uLmJvdW5kcylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHJlY3RzLmxlbmd0aD09MClcbiAgICAgICAgICAgIHJldHVybiByZWN0c1xuICAgIFxuICAgICAgICBPYmplY3QuYXNzaWduKHJlY3RzWzBdLHtsZWZ0OnAwLnh9KVxuICAgICAgICBPYmplY3QuYXNzaWduKHJlY3RzW3JlY3RzLmxlbmd0aC0xXSwge3JpZ2h0OnAxLnh9KVxuXG4gICAgICAgIHJldHVybiByZWN0cy5maWx0ZXIoKHtsZWZ0LHJpZ2h0fSk9PihsZWZ0LXJpZ2h0KSE9MClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB1c2UgY29tcG9zZWQgdG8gbG9jYXRlLCBzbyBmcmFtZSB3b3VsZCBub3QgXG4gICAgICogQHBhcmFtIHsqfSBpZCBcbiAgICAgKiBAcGFyYW0geyp9IGF0IFxuICAgICAqL1xuICAgIG5leHRMaW5lKGlkLGF0KXtcbiAgICAgICAgLy90byBnZXQgbmV4dCBsaW5lIGJlbG93IGlucHV0IGxpbmUgaW4gdGhlIGZyYW1lXG4gICAgICAgIGNvbnN0IG5leHRMaW5lQmVsb3c9KGZyYW1lLGxpbmUsIG9mZnNldCk9PntcbiAgICAgICAgICAgIHZhciBuZXh0TGluZT0oKCk9PntcbiAgICAgICAgICAgICAgICBpZihmcmFtZS5sYXN0TGluZT09bGluZSkvL2dvIHRvIG5leHQgdG9wIGZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIGlmKGZyYW1lLmNvbHMgJiYgZnJhbWUuY29scy5sZW5ndGg+MSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sdW1uTGFzdExpbmU9ZnJhbWUuY29sdW1ucy5yZWR1Y2UoKGlzTGFzdCxhKT0+XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3QgfHwgKGEubGluZXMubGVuZ3RoPjAgJiYgYS5saW5lcy5sZW5ndGgtMT09YS5saW5lcy5pbmRleE9mKGxpbmUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ29sdW1uTGFzdExpbmUpey8vZ28gdG8gbmV4dCB0b3AgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUubGluZXNbZnJhbWUubGluZXMuaW5kZXhPZihsaW5lKSsxXVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGlmKG5leHRMaW5lKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0TGluZVxuXG4gICAgICAgICAgICAvL2ZyYW1lIGNhbiBiZSBjdXN0b21pemVkIHRvIGJyZWFrIEJsb2NrIExheW91dCBzdHJ1Y3R1cmUoc3VjaCBhcyBXb3JkIGNvbnRpbnVvdXMgc2VjdGlvbiksIFxuICAgICAgICAgICAgLy9zbyB0cnkgdG8gbG9jYXRlIGZyb20gbGF5b3V0ZWQgXG4gICAgICAgICAgICBjb25zdCBwb2ludD1bdGhpcy5nZXRUb3BGcmFtZVhZKHRvcEZyYW1lKV0ucmVkdWNlKChvLGEpPT4oe3g6by54LWEueCx5Om8ueS1hLnl9KSxvZmZzZXQpXG4gICAgICAgICAgICBjb25zdCBmcmFtZUlzQmVsb3dQb2ludEFuZENvbnRhaW5Qb2ludFg9KHt4LHksd2lkdGh9KT0+cG9pbnQueD49eCAmJiBwb2ludC54PD14K3dpZHRoICYmIHk+cG9pbnQueVxuICAgICAgICAgICAgLy90byBnZXQgbW9zdCBpbm5lciBmcmFtZSB0aGF0IHVuZGVyIG9mZnNldC55IGFuZCBpbmNsdWRlIG9mZnNldC54XG4gICAgICAgICAgICBjb25zdCBmb3VuZD10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICAgICAgdG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCksIFxuICAgICAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9wczp7XCJkYXRhLWZyYW1lXCI6aXNGcmFtZSwgd2lkdGgsaGVpZ2h0fX09bm9kZVxuICAgICAgICAgICAgICAgICAgICBpZihpc0ZyYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlKG5vZGUpPT1mcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZUlzQmVsb3dQb2ludEFuZENvbnRhaW5Qb2ludFgocmVjdCh7d2lkdGgsaGVpZ2h0fSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vZ2V0IGZyYW1lIGZyb20gZGF0YS1jb250ZW50IGFuZCBkYXRhLWZyYW1lXG4gICAgICAgICAgICAgICAgKGxheW91dGVkRnJhbWVOb2RlLFtsYXlvdXRlZFRvcEZyYW1lXSk9PlxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRlZEZyYW1lTm9kZSAmJiBsYXlvdXRlZFRvcEZyYW1lLypub3QgdG9wIGZyYW1lIG9yIGxheW91dGVkIG5vdCBzeW5jZWQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShsYXlvdXRlZEZyYW1lTm9kZSkgOiBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZihmb3VuZC5ub2RlKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMaW5lSW5jbHVkZVgobGVhZkZyYW1lPWZvdW5kLm5vZGUsIHBvaW50LngtZm91bmQueClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lSW5jbHVkZVg9KGZyYW1lLFgpPT57XG4gICAgICAgICAgICBpZighKGZyYW1lLmNvbHMgJiYgZnJhbWUuY29scy5sZW5ndGg+MSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmZpcnN0TGluZVxuICAgICAgICAgICAgY29uc3QgY29sdW1uPWZyYW1lLmNvbHVtbnMuZmluZCgoe3gsd2lkdGh9KT0+WD49eCAmJiBYPD14K3dpZHRoKVxuICAgICAgICAgICAgaWYoY29sdW1uKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubGluZXNbMF1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5leHRUb3BGcmFtZT1hPT50aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5pbmRleE9mKGEpKzFdXG5cblxuICAgICAgICB2YXIge3gseSwgbGVhZkZyYW1lLCBsaW5lSW5kZXhJbkxlYWZGcmFtZSwgdG9wRnJhbWV9PXRoaXMucG9zaXRpb24oaWQsYXQsdHJ1ZSlcbiAgICAgICAgdmFyIGxpbmVJbkxlYWZGcmFtZT1sZWFmRnJhbWUubGluZXNbbGluZUluZGV4SW5MZWFmRnJhbWVdXG4gICAgICAgIFxuICAgICAgICB2YXIgbmV4dExpbmVcbiAgICAgICAgLy9maW5kIG5leHQgbGluZSBpbiBjdXJyZW50IFRPUCBmcmFtZVxuICAgICAgICB3aGlsZShsZWFmRnJhbWUgJiYgbGluZUluTGVhZkZyYW1lKXtcbiAgICAgICAgICAgIGlmKG5leHRMaW5lPW5leHRMaW5lQmVsb3cobGVhZkZyYW1lLCBsaW5lSW5MZWFmRnJhbWUse3gseX0pKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbkJsb2NrTGluZSh7eCx5fSxuZXh0TGluZSwgdG9wRnJhbWUsIGxlYWZGcmFtZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZGlyZWN0IHBhcmVudCBmcmFtZVxuICAgICAgICAgICAgY29uc3QgbGVhZkZyYW1lQ29udGFpbmVkQnk9dGhpcy5fdGFyZ2V0RnJhbWVDb250YWluc0ZyYW1lKGxlYWZGcmFtZSlcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEZyYW1lPXRoaXMuZ2V0Q2hlY2tlZEdyYW5kRnJhbWVCeUZyYW1lKFxuICAgICAgICAgICAgICAgIGxlYWZGcmFtZSxcbiAgICAgICAgICAgICAgICBhPT5hIT1sZWFmRnJhbWUgJiYgbGVhZkZyYW1lQ29udGFpbmVkQnkoYSkvKiovLFxuICAgICAgICAgICAgICAgIHRydWUvKmZpcnN0Ki8pXG4gICAgICAgICAgICBpZihwYXJlbnRGcmFtZSl7XG4gICAgICAgICAgICAgICAgLy9sb2NhdGUgbGluZSBpbmNsdWRlcyBmcmFtZVxuICAgICAgICAgICAgICAgIGxpbmVJbkxlYWZGcmFtZT1wYXJlbnRGcmFtZS5saW5lcy5maW5kKGxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtZnJhbWU9JHtsZWFmRnJhbWUudXVpZH1dYCkubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgIGxlYWZGcmFtZT1wYXJlbnRGcmFtZVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL2ZpbmQgZmlyc3QgbGluZSBpbiBuZXh0IHNpYmxpbmdzIG9mIGN1cnJlbnQgdG9wIGZyYW1lXG4gICAgICAgIHdoaWxlKHRvcEZyYW1lICYmICFuZXh0TGluZSAmJiAodG9wRnJhbWU9bmV4dFRvcEZyYW1lKHRvcEZyYW1lKSkpe1xuICAgICAgICAgICAgaWYobmV4dExpbmU9Zmlyc3RMaW5lSW5jbHVkZVgodG9wRnJhbWUseCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluQmxvY2tMaW5lKHt4LHl9LCBuZXh0TGluZSwgdG9wRnJhbWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfVxuXG4gICAgcHJldkxpbmUoaWQsYXQpe1xuICAgICAgICAvL3RvIGdldCBwcmV2IGxpbmUgYWJvdmUgaW5wdXQgbGluZSBpbiB0aGUgZnJhbWVcbiAgICAgICAgY29uc3QgcHJldkxpbmVBYm92ZT0oZnJhbWUsbGluZSwgb2Zmc2V0KT0+e1xuICAgICAgICAgICAgY29uc3QgcHJldkxpbmU9KCgpPT57XG4gICAgICAgICAgICAgICAgaWYoZnJhbWUuZmlyc3RMaW5lPT1saW5lKS8vZ28gdG8gcHJldiB0b3AgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgaWYoZnJhbWUuY29scyAmJiBmcmFtZS5jb2xzLmxlbmd0aD4xKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDb2x1bW5GaXJzdExpbmU9ZnJhbWUuY29sdW1ucy5yZWR1Y2UoKGlzRmlyc3QsYSk9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdCB8fCBhLmxpbmVzLmluZGV4T2YobGluZSk9PTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBpZihpc0NvbHVtbkZpcnN0TGluZSl7Ly9nbyB0byBuZXh0IHRvcCBmcmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5saW5lc1tmcmFtZS5saW5lcy5pbmRleE9mKGxpbmUpLTFdXG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgaWYocHJldkxpbmUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZMaW5lXG5cbiAgICAgICAgICAgIC8vZnJhbWUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gYnJlYWsgQmxvY2sgTGF5b3V0IHN0cnVjdHVyZShzdWNoIGFzIFdvcmQgY29udGludW91cyBzZWN0aW9uKSwgXG4gICAgICAgICAgICAvL3NvIHRyeSB0byBsb2NhdGUgZnJvbSBsYXlvdXRlZCBcbiAgICAgICAgICAgIGNvbnN0IHBvaW50PVt0aGlzLmdldFRvcEZyYW1lWFkodG9wRnJhbWUpXS5yZWR1Y2UoKG8sYSk9Pih7eDpvLngtYS54LHk6by55LWEueX0pLG9mZnNldClcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lSXNBYm92ZVBvaW50QW5kQ29udGFpblBvaW50WD0oe3gseSx3aWR0aCxoZWlnaHR9KT0+cG9pbnQueD49eCAmJiBwb2ludC54PD14K3dpZHRoICYmIChwb2ludC55LXktaGVpZ2h0KT49MFxuICAgICAgICAgICAgLy90byBnZXQgbW9zdCBpbm5lciBmcmFtZSB0aGF0IHVuZGVyIG9mZnNldC55IGFuZCBpbmNsdWRlIG9mZnNldC54XG4gICAgICAgICAgICBjb25zdCBmb3VuZD10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICAgICAgdG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCksIFxuICAgICAgICAgICAgICAgIChyZWN0LG5vZGUpPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9wczp7XCJkYXRhLWZyYW1lXCI6aXNGcmFtZSwgd2lkdGgsaGVpZ2h0fX09bm9kZVxuICAgICAgICAgICAgICAgICAgICBpZihpc0ZyYW1lKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlKG5vZGUpPT1mcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZUlzQWJvdmVQb2ludEFuZENvbnRhaW5Qb2ludFgocmVjdCh7d2lkdGgsaGVpZ2h0fSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vZ2V0IGZyYW1lIGZyb20gZGF0YS1jb250ZW50IGFuZCBkYXRhLWZyYW1lXG4gICAgICAgICAgICAgICAgKGxheW91dGVkRnJhbWVOb2RlLFtsYXlvdXRlZFRvcEZyYW1lXSk9PlxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRlZEZyYW1lTm9kZSAmJiBsYXlvdXRlZFRvcEZyYW1lLypub3QgdG9wIGZyYW1lIG9yIGxheW91dGVkIG5vdCBzeW5jZWQqL1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShsYXlvdXRlZEZyYW1lTm9kZSkgOiBudWxsLFxuICAgICAgICAgICAgICAgIHRydWUvL2ZpbmRMYXN0XG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZihmb3VuZC5ub2RlKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdExpbmVJbmNsdWRlWChsZWFmRnJhbWU9Zm91bmQubm9kZSwgcG9pbnQueC1mb3VuZC54KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBsYXN0TGluZUluY2x1ZGVYPShmcmFtZSxYKT0+e1xuICAgICAgICAgICAgaWYoIShmcmFtZS5jb2xzICYmIGZyYW1lLmNvbHMubGVuZ3RoPjEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5sYXN0TGluZVxuICAgICAgICAgICAgY29uc3QgY29sdW1uPWZyYW1lLmNvbHVtbnMuZmluZCgoe3gsd2lkdGh9KT0+WD49eCAmJiBYPD14K3dpZHRoKVxuICAgICAgICAgICAgaWYoY29sdW1uKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubGluZXNbY29sdW1uLmxpbmVzLmxlbmd0aC0xXVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldlRvcEZyYW1lPWE9PnRoaXMuZnJhbWVzW3RoaXMuZnJhbWVzLmluZGV4T2YoYSktMV1cblxuXG4gICAgICAgIHZhciB7eCx5LCBsZWFmRnJhbWUsIGxpbmVJbmRleEluTGVhZkZyYW1lLCB0b3BGcmFtZX09dGhpcy5wb3NpdGlvbihpZCxhdCx0cnVlKVxuICAgICAgICB2YXIgbGluZUluTGVhZkZyYW1lPWxlYWZGcmFtZS5saW5lc1tsaW5lSW5kZXhJbkxlYWZGcmFtZV1cbiAgICAgICAgXG4gICAgICAgIHZhciBwcmV2TGluZVxuICAgICAgICAvL2ZpcnN0IHRyeSB0byBmaW5kIHByZXYgbGluZSBpbiBjdXJyZW50IHRvcCBmcmFtZVxuICAgICAgICB3aGlsZShsZWFmRnJhbWUgJiYgbGluZUluTGVhZkZyYW1lKXtcbiAgICAgICAgICAgIGlmKHByZXZMaW5lPXByZXZMaW5lQWJvdmUobGVhZkZyYW1lLCBsaW5lSW5MZWFmRnJhbWUse3gseX0pKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbkJsb2NrTGluZSh7eCx5fSxwcmV2TGluZSx0b3BGcmFtZSxsZWFmRnJhbWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2RpcmVjdCBwYXJlbnQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGxlYWZGcmFtZUNvbnRhaW5lZEJ5PXRoaXMuX3RhcmdldEZyYW1lQ29udGFpbnNGcmFtZShsZWFmRnJhbWUpXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGcmFtZT10aGlzLmdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZShcbiAgICAgICAgICAgICAgICBsZWFmRnJhbWUsXG4gICAgICAgICAgICAgICAgYT0+YSE9bGVhZkZyYW1lICYmIGxlYWZGcmFtZUNvbnRhaW5lZEJ5KGEpLyoqLyxcbiAgICAgICAgICAgICAgICB0cnVlLypmaXJzdCovKVxuICAgICAgICAgICAgaWYocGFyZW50RnJhbWUpe1xuICAgICAgICAgICAgICAgIC8vbG9jYXRlIGxpbmUgaW5jbHVkZXMgZnJhbWVcbiAgICAgICAgICAgICAgICBsaW5lSW5MZWFmRnJhbWU9cGFyZW50RnJhbWUubGluZXMuZmluZChsaW5lPT5uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3QoYFtkYXRhLWZyYW1lPSR7bGVhZkZyYW1lLnV1aWR9XWApLmxlbmd0aD09MSlcbiAgICAgICAgICAgICAgICBsZWFmRnJhbWU9cGFyZW50RnJhbWVcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9vdGhlcndpc2UgZmluZCBmaXJzdCBsaW5lIGluIG5leHQgc2libGluZ3Mgb2YgY3VycmVudCB0b3AgZnJhbWVcbiAgICAgICAgd2hpbGUodG9wRnJhbWUgJiYgIXByZXZMaW5lICYmICh0b3BGcmFtZT1wcmV2VG9wRnJhbWUodG9wRnJhbWUpKSl7XG4gICAgICAgICAgICBpZihwcmV2TGluZT1sYXN0TGluZUluY2x1ZGVYKHRvcEZyYW1lLHgpKXtcbiAgICAgICAgICAgICAgICAvL3RoZW4gYXJvdW5kIGluIHRoZSBsaW5lXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kSW5CbG9ja0xpbmUoe3gseX0scHJldkxpbmUsIHRvcEZyYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgXG5cdGV4dGVuZFdvcmQoaWQsYXQpe1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGg9dGhpcy5nZXRDb21wb3NlcihpZCkuY2xvc2VzdChcInBhcmFncmFwaFwiKVxuICAgICAgICBpZighcGFyYWdyYXBoKVxuICAgICAgICAgICAgcmV0dXJuIHt9XG5cdFx0Y29uc3QgYXRvbT1wYXJhZ3JhcGguYXRvbXMuZmluZChhPT57XG5cdFx0XHRjb25zdCBmb3VuZD1uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoKHtwcm9wczp7XCJkYXRhLWNvbnRlbnRcIjp4aWQsIFwiZGF0YS1lbmRhdFwiOmVuZD0wfX0pPT57XG5cdFx0XHRcdHJldHVybiAoeGlkPT1pZCAmJiBlbmQ+PWF0KXx8dW5kZWZpbmVkXG5cdFx0XHR9KVxuXHRcdFx0cmV0dXJuIGZvdW5kLmxlbmd0aD4wXG5cdFx0fSlcblx0XHRpZihhdG9tKXtcblx0XHRcdGNvbnN0IHRhcmdldD1uZXcgUmVhY3RRdWVyeShhdG9tKVxuXHRcdFx0Y29uc3QgZmlyc3Q9dGFyZ2V0LmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cInRleHRcIl1gKVxuXHRcdFx0aWYoZmlyc3QubGVuZ3RoKXtcblx0XHRcdFx0Y29uc3QgbGFzdD10YXJnZXQuZmluZExhc3QoYFtkYXRhLXR5cGU9XCJ0ZXh0XCJdYClcblx0XHRcdFx0aWYobGFzdC5sZW5ndGgpe1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRzdGFydDp7XG5cdFx0XHRcdFx0XHRcdGlkOmZpcnN0LmF0dHIoJ2RhdGEtY29udGVudCcpLFxuXHRcdFx0XHRcdFx0XHRhdDpwYXJzZUludChmaXJzdC5hdHRyKCdkYXRhLWVuZGF0JykpLWZpcnN0LmF0dHIoXCJjaGlsZHJlblwiKS5sZW5ndGhcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRlbmQ6e1xuXHRcdFx0XHRcdFx0XHRpZDpsYXN0LmF0dHIoJ2RhdGEtY29udGVudCcpLFxuXHRcdFx0XHRcdFx0XHRhdDpwYXJzZUludChsYXN0LmF0dHIoJ2RhdGEtZW5kYXQnKSlcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHt9XG5cdH1cbn0iLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHsgc2V0RGlzcGxheU5hbWUsIGNvbXBvc2UsIGdldENvbnRleHQgfSBmcm9tIFwicmVjb21wb3NlXCJcbmltcG9ydCBXYXlwb2ludCBmcm9tIFwicmVhY3Qtd2F5cG9pbnRcIlxuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBjb25uZWN0IH0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoXG4gICAgc2V0RGlzcGxheU5hbWUoXCJDb21wb3NlTW9yZVRyaWdnZXJcIiksIFxuICAgIGNvbm5lY3Qoc3RhdGUgPT4gKHsgc2VsZWN0aW9uOiBnZXRTZWxlY3Rpb24oc3RhdGUpIH0pKSxcbikoY2xhc3MgQ29tcG9zZU1vcmVUcmlnZ2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgICBzZWxlY3Rpb246IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICAgIGdldENvbXBvc2VkWTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGlzU2VsZWN0aW9uQ29tcG9zZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBjb21wb3NlNFNjcm9sbDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGNvbXBvc2U0U2VsZWN0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9XG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGRlYnVnOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB9XG4gICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKHsgc2VsZWN0aW9uLCBpc1NlbGVjdGlvbkNvbXBvc2VkLCBjb21wb3NlNFNlbGVjdGlvbiB9KSB7XG4gICAgICAgIGlmICghaXNTZWxlY3Rpb25Db21wb3NlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBjb21wb3NlNFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY29tcG9zZTRTY3JvbGwsIGdldENvbXBvc2VkWSwgZGVidWcgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHkgPSBnZXRDb21wb3NlZFkoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxXYXlwb2ludCBvbkVudGVyPXsoKSA9PiBjb21wb3NlNFNjcm9sbCh5KX0+XG4gICAgICAgICAgICAgICAgPEdyb3VwIHk9e3kgLSAxMDB9PlxuICAgICAgICAgICAgICAgICAgICA8bGluZSBjbGFzc05hbWU9XCJjb21wb3NlVHJpZ2dlclwiIHgxPVwiMFwiIHkxPVwiMFwiIHgyPVwiMlwiIHkyPVwiMFwiIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT17ZGVidWcgPyBcInJlZFwiIDogXCJ0cmFuc3BhcmVudFwifSAvPlxuICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICA8L1dheXBvaW50PlxuICAgICAgICApO1xuICAgIH1cbn0pXG4iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuXG5leHBvcnQgZGVmYXVsdCAoKT0+KFxuICAgIDxGcmFnbWVudD5cbiAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICA8VGFibGVBZGRlci8+XG4gICAgICAgICAgICA8Um90YXRvci8+XG4gICAgICAgIDwvZGVmcz5cbiAgICA8L0ZyYWdtZW50PlxuKVxuXG5jb25zdCBUYWJsZUFkZGVyPSgpPT4oXG4gICAgPHBhdGggaWQ9XCJ0YWJsZS5hZGRlclwiXG4gICAgICAgIHdpZHRoPXsxNH1cbiAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgc3Ryb2tlV2lkdGg9ezF9XG4gICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIGQ9XCJNOCw5aDhNMTIsNXY4IE0xMiwyQzguMTMsMiw1LDUuMTMsNSw5YzAsNS4yNSw3LDEzLDcsMTNzNy03Ljc1LDctMTNDMTksNS4xMywxNS44NywyLDEyLDJ6XCJcbiAgICAgICAgLz5cbilcblxuY29uc3QgUm90YXRvcj0oKT0+KFxuICAgIDxzdmcgaWQ9XCJyb3RhdG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0+XG4gICAgICAgIDxjaXJjbGUgY3g9ezEyfSBjeT17MTJ9IHI9ezE1fVxuICAgICAgICAgICAgc3Ryb2tlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmlsbE9wYWNpdHk9ezAuMDF9XG4gICAgICAgICAgICBjdXJzb3I9XCJwb2ludGVyXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwiLz5cbiAgICA8L3N2Zz5cbikiLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7QUNUSU9OLCBDdXJzb3IsIFNlbGVjdGlvbixDb250ZW50UXVlcnksIGdldFNlbGVjdGlvbn0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgQ2FudmFzIGZyb20gXCIuLi9jYW52YXNcIlxuaW1wb3J0IFNlbGVjdGlvblNoYXBlIGZyb20gXCIuL3NlbGVjdGlvbi1zaGFwZVwiXG5pbXBvcnQgQ3Vyc29yU2hhcGUgZnJvbSBcIi4vY3Vyc29yLXNoYXBlXCJcbmltcG9ydCBXaGVuU2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIgZnJvbSBcIi4vd2hlbi1zZWxlY3Rpb24tY2hhbmdlLW5vdGlmaWVyXCJcbmltcG9ydCBQb3NpdGlvbmluZyBmcm9tIFwiLi9wb3NpdGlvbmluZ1wiXG5pbXBvcnQgQ29tcG9zZU1vcmVUcmlnZ2VyIGZyb20gXCIuL2NvbXBvc2UtbW9yZS10cmlnZ2VyXCJcbmltcG9ydCBEZWZpbmVTaGFwZXMgZnJvbSBcIi4vZGVmaW5lLXNoYXBlc1wiXG5cbi8qKlxuICogbXVzdCBwcm92aWRlIHRoZSBmb2xsb3dpbmcgXG4gKiAxLiBmb3IgUG9zaXRpb25pbmc6IHBhZ2VzLCBnZXRDb21wb3NlciwgZ2V0Q29udGVudCwgYXNDYW52YXNQb2ludCwgYXNWaWV3cG9ydFBvaW50LCBwYWdlWFkoSSlcbiAqIDIuIGZvciBSZXNwb25zaWJsZSBFdmVudHM6IFxuICovXG5jbGFzcyBSZXNwb25zaWJsZSBleHRlbmRzIENvbXBvbmVudHtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWU9XCJyZXNwb25zaWJsZS1jb21wb3NlZC1kb2N1bWVudC1kZWZhdWx0LWNhbnZhc1wiXG4gICAgc3RhdGljIENhbnZhcz1DYW52YXNcbiAgICBzdGF0aWMgQ29tcG9zZU1vcmVUcmlnZ2VyPUNvbXBvc2VNb3JlVHJpZ2dlclxuICAgIHN0YXRpYyBQb3NpdGlvbmluZz1Qb3NpdGlvbmluZ1xuICAgIHN0YXRpYyBwcm9wVHlwZXM9e1xuICAgICAgICBwYWdlR2FwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBzY3JlZW5CdWZmZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHNjYWxlOiBQcm9wVHlwZXMubnVtYmVyLCAgXG5cdFx0dmlld3BvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBoZWlnaHQ6UHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAgICAgbm9kZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRWxlbWVudCksXG5cdFx0fSksICAgICAgICBcbiAgICAgICAgZG9jdW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0cGFnZUdhcDoxMixcbiAgICAgICAgc2NyZWVuQnVmZmVyOiAxLFxuICAgICAgICBzY2FsZToxLFxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGFjdGl2ZURvY1N0b3JlOiBQcm9wVHlwZXMuYW55LFxuICAgIH1cblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG4gICAgICAgIHBvc2l0aW9uaW5nOlByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2RvY3VtZW50LC4uLm1lfSl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7ZWRpdGFibGUsY2FudmFzSWQsY29udGVudCx2aWV3cG9ydD1tZS52aWV3cG9ydCxzY3JlZW5CdWZmZXI9bWUuc2NyZWVuQnVmZmVyLH0sc3RhdGU6e3k9MH19PWRvY3VtZW50XG4gICAgICAgIHJldHVybiB7Li4uQ2FudmFzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyguLi5hcmd1bWVudHMpLCBlZGl0YWJsZSxjYW52YXNJZCxjb250ZW50LHZpZXdwb3J0LHNjcmVlbkJ1ZmZlcixjb21wb3NlZDRZOnl9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlPXt9XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9zZXI9dGhpcy5nZXRDb21wb3Nlci5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0Q29udGVudD10aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKVxuICAgICAgICBjb25zdCBQb3NpdGlvbmluZz10aGlzLmNvbnN0cnVjdG9yLlBvc2l0aW9uaW5nXG4gICAgICAgIGNvbnN0IFNhZmVQb3NpdGlvbmluZz1Qb3NpdGlvbmluZy5tYWtlU2FmZShQb3NpdGlvbmluZylcbiAgICAgICAgdGhpcy5wb3NpdGlvbmluZz1uZXcgU2FmZVBvc2l0aW9uaW5nKHRoaXMpXG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3NpdGlvbmluZzp0aGlzLnBvc2l0aW9uaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKip0aGUgZm9sbG93aW5nIEFQSSBtdXN0IGJlIHByb3ZpZGVkIHRvIFBvc2l0aW9uaW5nICovXG4gICAgZ2V0IHBhZ2VzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnBhZ2VzXG4gICAgfVxuXG4gICAgZ2V0Q29tcG9zZXIoaWQpe1xuXHRcdHJldHVybiB0aGlzLnByb3BzLmRvY3VtZW50LmdldENvbXBvc2VyKGlkKVxuXHR9XG5cblx0Z2V0Q29udGVudChpZCl7XG4gICAgICAgIHJldHVybiBDb250ZW50UXVlcnkuZnJvbUNvbnRlbnQodGhpcy5zdGF0ZS5jb250ZW50LCAgaWQgPyBgIyR7aWR9YCAgOiB1bmRlZmluZWQpXG4gICAgfVxuICAgIFxuICAgIGFzQ2FudmFzUG9pbnQoe2xlZnQsdG9wfSl7XG4gICAgICAgIGNvbnN0IHBvaW50PXRoaXMuY2FudmFzLmNyZWF0ZVNWR1BvaW50KClcbiAgICAgICAgcG9pbnQueD1sZWZ0LHBvaW50Lnk9dG9wXG4gICAgICAgIGNvbnN0IHt4LHl9PXBvaW50Lm1hdHJpeFRyYW5zZm9ybSh0aGlzLmNhbnZhcy5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpXG4gICAgICAgIHJldHVybiB7eCwgeX1cbiAgICB9XG5cbiAgICBhc1ZpZXdwb3J0UG9pbnQoe3gseX0pe1xuICAgICAgICBsZXQgcG9pbnQ9dGhpcy5jYW52YXMuY3JlYXRlU1ZHUG9pbnQoKVxuICAgICAgICBwb2ludC54PXgscG9pbnQueT15XG4gICAgICAgIGxldCBsb2NhdGlvbj1wb2ludC5tYXRyaXhUcmFuc2Zvcm0odGhpcy5jYW52YXMuZ2V0U2NyZWVuQ1RNKCkpXG4gICAgICAgIHJldHVybiB7bGVmdDpsb2NhdGlvbi54LCB0b3A6bG9jYXRpb24ueX1cbiAgICB9XG4gICAgXG4gICAgcGFnZVhZKEk9MCl7XG4gICAgICAgIGNvbnN0IHJlY3Q9dGhpcy5jb25zdHJ1Y3Rvci5DYW52YXMucGFnZVJlY3QoSSx0aGlzLmNhbnZhcylcbiAgICAgICAgcmV0dXJuICFyZWN0ID8ge3g6MCx5OjB9IDogdGhpcy5hc0NhbnZhc1BvaW50KHJlY3QpXG4gICAgfVxuICAgIC8vLy9FbmQgUG9zaXRpb25pbmcgQVBJL1xuICAgIFxuICAgIGdldCBkaXNwYXRjaCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmFjdGl2ZURvY1N0b3JlLmRpc3BhdGNoXG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyKCl7XG4gICAgICAgIGlmKHRoaXMucmVmcy5zZWxlY3Rpb25DaGFuZ2VOb3RpZmllcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMuc2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIuZ2V0V3JhcHBlZEluc3RhbmNlKClcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW5nKCl7XG4gICAgICAgIGlmKHRoaXMucmVmcy5zZWxlY3RpbmcpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnNlbGVjdGluZy5nZXRXcmFwcGVkSW5zdGFuY2UoKVxuICAgIH1cblxuXHRnZXQgc2VsZWN0aW9uKCl7XG4gICAgICAgIHJldHVybiBnZXRTZWxlY3Rpb24odGhpcy5jb250ZXh0LmFjdGl2ZURvY1N0b3JlLmdldFN0YXRlKCkpXG5cdH1cblxuXHRnZXQgY3Vyc29yKCl7XG5cdFx0Y29uc3Qge2N1cnNvckF0LCAuLi5hfT10aGlzLnNlbGVjdGlvblxuICAgICAgICByZXR1cm4gey4uLmFbY3Vyc29yQXRdfVxuICAgIH1cblxuICAgIF9fY29tcG9zZWRZKCl7XG4gICAgICAgIGNvbnN0IHtwYWdlcywgcGFnZUdhcH09dGhpcy5zdGF0ZVxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5DYW52YXMuY29tcG9zZWRZKHBhZ2VzLCBwYWdlR2FwKVxuICAgIH1cbiAgICBcbiAgICAvL3Byb3ZpZGUgdG8gZG9jdW1lbnQgdG8gcXVlcnkgXG4gICAgYXZhaWxhYmxlQmxvY2tTaXplKCl7XG4gICAgICAgIGNvbnN0IHtzY2FsZSwgY29tcG9zZWQ0WT0wLHNjcmVlbkJ1ZmZlcix2aWV3cG9ydDp7aGVpZ2h0LG5vZGU6e3Njcm9sbFRvcH19fT10aGlzLnN0YXRlXG4gICAgICAgIGNvbnN0IGNvbXBvc2VkWT10aGlzLl9fY29tcG9zZWRZKCkgKiBzY2FsZVxuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwoTWF0aC5tYXgoc2Nyb2xsVG9wLGNvbXBvc2VkNFkpK2hlaWdodCtzY3JlZW5CdWZmZXIqaGVpZ2h0KS1jb21wb3NlZFkpXG4gICAgfVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7Y2hpbGRyZW4sZG9jdW1lbnR9LCBzdGF0ZTp7ZWRpdGFibGU9dHJ1ZSxzY2FsZSxwYWdlR2FwLHBhZ2VzLHByZWNpc2lvbn19PXRoaXNcbiAgICAgICAgY29uc3Qgbm9DdXJzb3I9ZWRpdGFibGUgJiYgZWRpdGFibGUuY3Vyc29yPT09ZmFsc2VcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVycz0hbm9DdXJzb3IgPyB0aGlzLmV2ZW50SGFuZGxlcnMgIDoge31cbiAgICAgICAgY29uc3Qgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlTm90aWZpZXI9Y2FsbGJhY2s9Pntcblx0XHRcdCF0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyID8gY2FsbGJhY2soKSA6IHRoaXMuc2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIuc2V0U3RhdGUoe2NvbXBvc2VkQ29udGVudDpudWxsfSxjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7Q2FudmFzLCBDb21wb3NlTW9yZVRyaWdnZXJ9PXRoaXMuY29uc3RydWN0b3JcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDYW52YXMgXG4gICAgICAgICAgICAgICAgey4uLntzY2FsZSxwYWdlR2FwLHBhZ2VzLHByZWNpc2lvbixkb2N1bWVudCxwYXBlcjp0cnVlfX1cbiAgICAgICAgICAgICAgICBpbm5lclJlZj17YT0+e3RoaXMuY2FudmFzPWF9fSBcbiAgICAgICAgICAgICAgICB7Li4uZXZlbnRIYW5kbGVyc30+XG4gICAgICAgICAgICAgICAgPENvbXBvc2VNb3JlVHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICBnZXRDb21wb3NlZFk9eygpPT50aGlzLl9fY29tcG9zZWRZKCl9XG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0aW9uQ29tcG9zZWQ9e3NlbGVjdGlvbj0+ZG9jdW1lbnQuaXNTZWxlY3Rpb25Db21wb3NlZChzZWxlY3Rpb24pfVxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlNFNlbGVjdGlvbj17YT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRvY3VtZW50LmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTZWxlY3Rpb25DaGFuZ2VOb3RpZmllcihzZWxlY3Rpb249PmRvY3VtZW50LmNvbXBvc2U0U2VsZWN0aW9uKHNlbGVjdGlvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2U0U2Nyb2xsPXt5PT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighZG9jdW1lbnQuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyKCgpPT5kb2N1bWVudC5jb21wb3NlNFNjcm9sbCh5KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPiAgICBcbiAgICAgICAgICAgICAgICA8RGVmaW5lU2hhcGVzLz5cblx0XHRcdFx0PEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG5cdFx0XHRcdFx0PEN1cnNvclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5cz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM3OmU9PnRoaXMub25LZXlBcnJvd0xlZnQoZSksLy9tb3ZlIGxlZnRcblx0XHRcdCAgICAgICAgICAgICAgICAzOTplPT50aGlzLm9uS2V5QXJyb3dSaWdodChlKSwvL21vdmUgcmlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzODplPT50aGlzLm9uS2V5QXJyb3dVcChlKSwvL21vdmUgdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDplPT50aGlzLm9uS2V5QXJyb3dEb3duKGUpLC8vbW92ZSBkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxDdXJzb3JTaGFwZSBzY3JvbGxOb2RlSW50b1ZpZXc9e25vZGU9PnRoaXMuc2Nyb2xsTm9kZUludG9WaWV3KG5vZGUpfS8+XG4gICAgICAgICAgICAgICAgICAgIDwvQ3Vyc29yPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0aW9uID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTZWxlY3Rpb25TaGFwZSByZWY9e1wic2VsZWN0aW5nXCJ9Lz5cbiAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3Rpb24+XG4gICAgICAgICAgICAgICAgICAgIDxXaGVuU2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIgY2FudmFzPXt0aGlzfSByZWY9XCJzZWxlY3Rpb25DaGFuZ2VOb3RpZmllclwiLz5cblx0XHRcdFx0PC9GcmFnbWVudD5cbiAgICAgICAgICAgIDwvQ2FudmFzPlxuICAgICAgICApXG4gICAgfVxuXG4gICAgX19zdGF0aXN0aWNzKCl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7ZG9jdW1lbnR9fT10aGlzXG4gICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLlN0YXRpc3RpY3Moe1xuXHRcdFx0cGFnZXM6dGhpcy5wYWdlcy5sZW5ndGgsXG5cdFx0XHRhbGxDb21wb3NlZDpkb2N1bWVudC5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSxcblx0XHRcdHdvcmRzOiBBcnJheS5mcm9tKGRvY3VtZW50LmNvbXBvc2Vycy52YWx1ZXMoKSkuZmlsdGVyKGE9PiEhYSlcblx0XHRcdFx0LnJlZHVjZSgod29yZHMsYSk9PndvcmRzKz0oYS5hdG9tcyA/IGEuYXRvbXMubGVuZ3RoIDogMCksMClcblx0XHR9KSlcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRVcGRhdGUoKXtcbiAgICAgICAgdGhpcy5fX3N0YXRpc3RpY3MoKVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyICYmIHRoaXMuc2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIuc2V0U3RhdGUoe2NvbXBvc2VkQ29udGVudDp0aGlzLnN0YXRlLmNvbnRlbnR9KVxuICAgIH1cblxuICAgIGNvbXBvbmVudERpZE1vdW50KCl7XG4gICAgICAgIHRoaXMuYWN0aXZlKClcbiAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUoKVxuICAgIH1cblxuICAgIGFjdGl2ZSgpe1xuXHRcdHRoaXMuZGlzcGF0Y2goQUNUSU9OLkN1cnNvci5BQ1RJVkUodGhpcy5zdGF0ZS5jYW52YXNJZCkpXG4gICAgfSAgICBcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRSZXNwb25zaWJsZSBleHRlbmRzIFJlc3BvbnNpYmxle1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzPVwib25DbGljayxvbkRvdWJsZUNsaWNrLG9uQ29udGV4dE1lbnUsb25Nb3VzZURvd24sb25Nb3VzZU1vdmUsb25Nb3VzZVVwXCIuc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAucmVkdWNlKChoYW5kbGVycyxrZXkpPT57XG4gICAgICAgICAgICAgICAgaWYoa2V5IGluIHRoaXMpe1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1trZXldPXRoaXNba2V5XT10aGlzW2tleV0uYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYHJlc3BvbnNpYmxlIGNhbnZhcyBkb2Vzbid0IGltcGxlbWVudGVkICR7a2V5fSBldmVudGApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1xuICAgICAgICAgICAgfSx7fSlcbiAgICAgICAgdGhpcy5fX21vdXNlRG93bkZsYWc9e31cbiAgICB9XG5cbiAgICBfX29uQ2xpY2soe3NoaWZ0S2V5OnNlbGVjdGluZywgY2xpZW50WDpsZWZ0LGNsaWVudFk6dG9wfSwgZG91YmxlQ2xpY2tlZD1mYWxzZSl7XG5cdFx0Y29uc3Qge2lkLGF0fT10aGlzLnBvc2l0aW9uaW5nLmFyb3VuZChsZWZ0LCB0b3ApXG5cdFx0aWYoaWQpe1xuICAgICAgICAgICAgaWYoYXQ9PXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChpZCwwLGlkLDEpKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgXHRcdFx0aWYoIXNlbGVjdGluZyl7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRvdWJsZUNsaWNrZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge3N0YXJ0LGVuZH09dGhpcy5wb3NpdGlvbmluZy5leHRlbmRXb3JkKGlkLGF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhcnQgJiYgZW5kKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKHN0YXJ0LmlkLHN0YXJ0LmF0LCBlbmQuaWQsIGVuZC5hdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQVQoaWQsYXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgXHRcdFx0XHR0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQVQoaWQsYXQpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgXHRcdFx0fWVsc2V7XG4gICAgXHRcdFx0XHRsZXQge2VuZH09dGhpcy5zZWxlY3Rpb25cbiAgICBcdFx0XHRcdGxldCB7bGVmdCx0b3B9PXRoaXMucG9zaXRpb25pbmcucG9zaXRpb24oaWQsYXQpXG4gICAgXHRcdFx0XHRsZXQge2xlZnQ6bGVmdDEsdG9wOnRvcDF9PXRoaXMucG9zaXRpb25pbmcucG9zaXRpb24oZW5kLmlkLGVuZC5hdClcbiAgICBcdFx0XHRcdGlmKHRvcDx0b3AxIHx8ICh0b3A9PXRvcDEgJiYgbGVmdDw9bGVmdDEpKXtcbiAgICBcdFx0XHRcdFx0dGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNUQVJUX0FUKGlkLGF0KSlcbiAgICBcdFx0XHRcdH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYT10aGlzLnBvc2l0aW9uaW5nLm5vcm1hbGl6ZVNlbGVjdGlvbihhLmVuZCx7aWQsYXR9KVxuICAgIFx0XHRcdFx0XHR0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKGEuc3RhcnQuaWQsYS5zdGFydC5hdCwgYS5lbmQuaWQsIGEuZW5kLmF0KSlcbiAgICBcdFx0XHRcdH1cbiAgICBcdFx0XHR9XG4gICAgICAgICAgICB9XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuYWN0aXZlKClcbiAgICB9XG5cbiAgICBfX29uS2V5QXJyb3coaWQsYXQsc2VsZWN0aW5nKXtcbiAgICAgICAgaWYoIXNlbGVjdGluZyl7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQVQoaWQsYXQpKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbnN0IHtjdXJzb3JBdCwuLi5hfT10aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgYVtjdXJzb3JBdF09e2lkLGF0fVxuICAgICAgICAgICAgY29uc3Qge3N0YXJ0LGVuZH09dGhpcy5wb3NpdGlvbmluZy5ub3JtYWxpemVTZWxlY3Rpb24oYS5zdGFydCxhLmVuZClcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TRUxFQ1Qoc3RhcnQuaWQsIHN0YXJ0LmF0LCBlbmQuaWQsZW5kLmF0KSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9fc2hvdWxkSWdub3JlTW91c2VEb3duRXZlbnQoe2NsaWVudFgsY2xpZW50WX0pe1xuICAgICAgICByZXR1cm4gY2xpZW50WD09dGhpcy5fX21vdXNlRG93bkZsYWcuY2xpZW50WCAmJiBjbGllbnRZPT10aGlzLl9fbW91c2VEb3duRmxhZy5jbGllbnRZXG4gICAgfVxuXG4gICAgb25DbGljayhlKXtcbiAgICAgICAgaWYoIXRoaXMuX19tb3VzZURvd25GbGFnLnNlbGVjdGVkKXtcbiAgICAgICAgICAgIHRoaXMuX19tb3VzZURvd25GbGFnLnNlbGVjdGVkPWZhbHNlXG4gICAgICAgICAgICB0aGlzLl9fb25DbGljayhlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db250ZXh0TWVudShlKXtcbiAgICAgICAgY29uc3Qge2NvbnRleHQ6e29uQ29udGV4dE1lbnV9fT10aGlzXG4gICAgICAgIHRoaXMuX19vbkNsaWNrKGUpXG4gICAgICAgIG9uQ29udGV4dE1lbnUgJiYgb25Db250ZXh0TWVudShlKVxuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZSl7XG4gICAgICAgIGlmKCF0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZCl7XG4gICAgICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZD1mYWxzZVxuICAgICAgICAgICAgdGhpcy5fX29uQ2xpY2soZSx0cnVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZURvd24oe2NsaWVudFgsY2xpZW50WX0pe1xuICAgICAgICBjb25zb2xlLmxvZyhcInN2ZyBtb3VzZSBkb3duXCIpXG4gICAgICAgIHRoaXMuX19tb3VzZURvd25GbGFnPXtjbGllbnRYLGNsaWVudFl9XG4gICAgfVxuXG4gICAgb25Nb3VzZU1vdmUoZSl7XG4gICAgICAgIGlmKCEoZS5idXR0b25zJjB4MSkpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5fX3Nob3VsZElnbm9yZU1vdXNlRG93bkV2ZW50KGUpKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge2lkLGF0fT10aGlzLnBvc2l0aW9uaW5nLmFyb3VuZChlLmNsaWVudFgsZS5jbGllbnRZKVxuICAgICAgICBpZihpZCl7XG4gICAgICAgICAgICBjb25zdCBlbmQ9e2lkLGF0fVxuICAgICAgICAgICAgbGV0IHtzdGFydD1lbmR9PXRoaXMuc2VsZWN0aW5nLnN0YXRlXG4gICAgICAgICAgICBjb25zdCByZWN0cz1zdGFydD09ZW5kID8gW10gOiB0aGlzLnBvc2l0aW9uaW5nLmdldFJhbmdlUmVjdHMoc3RhcnQsIGVuZClcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW5nLnNldFN0YXRlKHtzdGFydDpzdGFydHx8ZW5kLCBlbmQsIHJlY3RzLCBzZWxlY3Rpbmc6dHJ1ZX0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1vdXNlVXAoZSl7XG4gICAgICAgIGlmKHRoaXMuX19zaG91bGRJZ25vcmVNb3VzZURvd25FdmVudChlKSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIge3N0YXJ0LGVuZH09dGhpcy5zZWxlY3Rpbmcuc3RhdGVcbiAgICAgICAgaWYoc3RhcnQgJiYgZW5kKXtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW5nLnNldFN0YXRlKHtzdGFydDp1bmRlZmluZWQsIGVuZDp1bmRlZmluZWQsIHJlY3RzOnVuZGVmaW5lZCxzZWxlY3Rpbmc6ZmFsc2V9KVxuICAgICAgICAgICAgOyh7c3RhcnQsZW5kfT10aGlzLnBvc2l0aW9uaW5nLm5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydCxlbmQpKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TRUxFQ1Qoc3RhcnQuaWQsc3RhcnQuYXQsZW5kLmlkLGVuZC5hdCkpXG4gICAgICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZD10cnVlXG4gICAgICAgIH1cbiAgICB9XG5cblx0b25LZXlBcnJvd1VwKHtzaGlmdEtleTpzZWxlY3Rpbmd9KXtcbiAgICAgICAgY29uc3QgY3Vyc29yPXRoaXMuY3Vyc29yXG5cdFx0Y29uc3Qge2lkLCBhdH09dGhpcy5wb3NpdGlvbmluZy5wcmV2TGluZShjdXJzb3IuaWQsY3Vyc29yLmF0KVxuICAgICAgICBpZihpZCl7XG4gICAgXHRcdHRoaXMuX19vbktleUFycm93KGlkLGF0LHNlbGVjdGluZylcbiAgICAgICAgfVxuXHR9XG5cblx0b25LZXlBcnJvd0Rvd24oe3NoaWZ0S2V5OnNlbGVjdGluZ30pe1xuXHRcdGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuXHRcdGNvbnN0IHtpZCwgYXR9PXRoaXMucG9zaXRpb25pbmcubmV4dExpbmUoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgaWYoaWQpe1xuICAgICAgICAgICAgdGhpcy5fX29uS2V5QXJyb3coaWQsYXQsc2VsZWN0aW5nKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25LZXlBcnJvd0xlZnQoZSl7XG4gICAgICAgIGNvbnN0IHttZXRhS2V5LGN0cmxLZXksc2hpZnRLZXk6c2VsZWN0aW5nfT1lXG4gICAgICAgIGlmKG1ldGFLZXl8fGN0cmxLZXkpe1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yPXRoaXMuY3Vyc29yXG4gICAgICAgICAgICBjb25zdCBzdGFydD10aGlzLnBvc2l0aW9uaW5nLnBvc2l0aW9uVG9MaW5lU3RhcnQoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgICAgIGlmKGN1cnNvci5pZCE9c3RhcnQuaWQgfHwgY3Vyc29yLmF0IT1zdGFydC5hdCl7XG4gICAgICAgICAgICAgICAgdGhpcy5fX29uS2V5QXJyb3coc3RhcnQuaWQsIHN0YXJ0LmF0LCBzZWxlY3RpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLkN1cnNvci5CQUNLV0FSRChlKSlcbiAgICB9XG5cbiAgICBvbktleUFycm93UmlnaHQoZSl7XG4gICAgICAgIGNvbnN0IHttZXRhS2V5LGN0cmxLZXksc2hpZnRLZXk6c2VsZWN0aW5nfT1lXG4gICAgICAgIGlmKG1ldGFLZXl8fGN0cmxLZXkpe1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yPXRoaXMuY3Vyc29yXG4gICAgICAgICAgICBjb25zdCBlbmQ9dGhpcy5wb3NpdGlvbmluZy5wb3NpdGlvblRvTGluZUVuZChjdXJzb3IuaWQsY3Vyc29yLmF0KVxuICAgICAgICAgICAgaWYoY3Vyc29yLmlkIT1lbmQuaWQgfHwgY3Vyc29yLmF0IT1lbmQuYXQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX19vbktleUFycm93KGVuZC5pZCwgZW5kLmF0LCBzZWxlY3RpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLkN1cnNvci5GT1JXQVJEKGUpKVxuICAgIH1cbn1cblxuXG4iLCJpbXBvcnQgUmVhY3QsIHtGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtIYXNDaGlsZCwgTG9jYXRhYmxlLGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge2RvbSxnZXRTZWxlY3Rpb259IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBUZW1wbGF0ZSBmcm9tIFwiLi90ZW1wbGF0ZVwiXG5pbXBvcnQge0NhbnZhc30gZnJvbSBcIi4uL2NvbXBvc2VkXCJcbmltcG9ydCBSZXNwb25zaWJsZSBmcm9tIFwiLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzXCJcblxuXG5jb25zdCBTdXBlcj1Mb2NhdGFibGUuTG9jYXRvcml6ZShIYXNDaGlsZChkb20uRG9jdW1lbnQpKVxuXG5jbGFzcyBEb2N1bWVudCBleHRlbmRzIFN1cGVye1xuICAgIHN0YXRpYyBwcm9wVHlwZXM9e1xuICAgICAgICAuLi5TdXBlci5wcm90b3R5cGUsXG4gICAgICAgIGNhbnZhczogUHJvcFR5cGVzLm5vZGUsXG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuICAgICAgICAuLi5TdXBlci5kZWZhdWx0UHJvcHMsXG4gICAgICAgIGNhbnZhczo8Q2FudmFzLz4sXG4gICAgfVxuXG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIC4uLlN1cGVyLmNvbnRleHRUeXBlcyxcbiAgICAgICAgTWVhc3VyZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfVxuXG4gICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcbiAgICAgICAgLi4uU3VwZXIuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgIE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICBnZXRDb21wb3NlZFRlbXBsYXRlOlByb3BUeXBlcy5mdW5jLFxuICAgICAgICBwcmV2TGF5b3V0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZWRpdGFibGU6IFByb3BUeXBlcy5hbnksXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLmNvbXB1dGVkLnRlbXBsYXRlcz1bXVxuICAgIH1cblxuICAgIGdldCBwYWdlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZFxuICAgIH1cblxuICAgIGdldENvbXBvc2VkKCl7XG4gICAgICAgIHJldHVybiA8Q2FudmFzIGRvY3VtZW50PXt0aGlzfS8+XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIGNvbnN0IHNlbGY9dGhpc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG4gICAgICAgICAgICBNZWFzdXJlOiB0aGlzLmdldE1lYXN1cmUoKSxcbiAgICAgICAgICAgIGdldENvbXBvc2VkVGVtcGxhdGUoeGhyZWYpe1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbXB1dGVkLnRlbXBsYXRlcy5maW5kKGE9PmEucHJvcHMueGhyZWY9PT14aHJlZilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcmV2TGF5b3V0KHJlZil7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZXM9c2VsZi5jb21wdXRlZC5jb21wb3NlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGk9cGFnZXMuaW5kZXhPZihyZWYpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VzW2ktMV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlZGl0YWJsZTp0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLmVkaXRhYmxlLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TWVhc3VyZT1tZW1vaXplKCgpPT57XG4gICAgICAgIGNvbnN0IHtwcmVjaXNpb249MX09dGhpcy5wcm9wc1xuICAgICAgICBpZihwcmVjaXNpb249PTEpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lk1lYXN1cmVcblxuICAgICAgICByZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIHRoaXMuY29udGV4dC5NZWFzdXJle1xuICAgICAgICAgICAgbGluZUhlaWdodCguLi5hcmdzKXtcbiAgICAgICAgICAgICAgICBjb25zdCB7aGVpZ2h0LGRlc2NlbnR9PXN1cGVyLmxpbmVIZWlnaHQoLi4uYXJncylcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6aGVpZ2h0KnByZWNpc2lvbixcbiAgICAgICAgICAgICAgICAgICAgZGVzY2VudDpkZXNjZW50KnByZWNpc2lvblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RyaW5nV2lkdGgoLi4uYXJncyl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZWNpc2lvbipzdXBlci5zdHJpbmdXaWR0aCguLi5hcmdzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7Y2FudmFzfT10aGlzLnByb3BzXG4gICAgICAgIGlmKCFjYW52YXMpXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKClcbiAgICAgICAgY29uc3Qge3Byb3BzOntfX3NlcXVlbnRpYWxDb21wb3NlPXRydWV9fT1jYW52YXNcbiAgICAgICAgaWYoX19zZXF1ZW50aWFsQ29tcG9zZSl7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge3N1cGVyLnJlbmRlcigpfVxuICAgICAgICAgICAgICAgICAgICB7Y2FudmFzICYmIFJlYWN0LmNsb25lRWxlbWVudChjYW52YXMsIHtkb2N1bWVudDp0aGlzfSl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgIClcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNhbnZhcywge2RvY3VtZW50OnRoaXN9KVxuICAgICAgICB9XG4gICAgfVxuXG5cdGFwcGVuZENvbXBvc2VkKHBhZ2Upe1xuICAgICAgICBpZihUZW1wbGF0ZS5pc1RlbXBsYXRlKHBhZ2UpKXtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQudGVtcGxhdGVzLnB1c2gocGFnZSlcbiAgICAgICAgfWVsc2UgaWYodGhpcy5jb21wdXRlZC5jb21wb3NlZC5pbmRleE9mKHBhZ2UpPT0tMSl7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLnB1c2gocGFnZSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIGVkaXRhYmxlKERvY3VtZW50LHtjb250aW51YWJsZTp0cnVlfSl7XG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0Li4uRG9jdW1lbnQuZGVmYXVsdFByb3BzLFxuXHRcdGNhbnZhczo8UmVzcG9uc2libGUvPixcbiAgICB9XG4gICAgXG5cdHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdC4uLkRvY3VtZW50LmNvbnRleHRUeXBlcyxcbiAgICAgICAgYWN0aXZlRG9jU3RvcmU6IFByb3BUeXBlcy5hbnksXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtoYXNoLHZpZXdwb3J0LGVkaXRhYmxlPXRydWV9LHN0YXRlKXtcblx0XHRyZXR1cm4ge3ZpZXdwb3J0LGhhc2gsIGVkaXRhYmxlLCAuLi4oaGFzaCE9c3RhdGUuaGFzaCAmJiB7bW9kZTpcImNvbnRlbnRcIix5OjB9KX1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5zdGF0ZT17bW9kZTpcImNvbnRlbnRcIiwgLi4udGhpcy5zdGF0ZX1cbiAgICAgICAgdGhpcy5jb21wdXRlZC5zaG91bGRDb250aW51ZUNvbXBvc2U9dHJ1ZS8vY2FjaGUgZm9yIHNob3VsZENvbnRpbnVlQ29tcG9zZVxuXHR9XG4gICAgXG4gICAgZ2V0IGNhbnZhcygpe1xuICAgICAgICBjb25zdCB7Y2FudmFzOnt0eXBlOlR5cGUscHJvcHN9fT10aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IGNhbnZhcz1uZXcgVHlwZSh7Li4ucHJvcHMsZG9jdW1lbnQ6dGhpc30pXG4gICAgICAgIGNhbnZhcy5zdGF0ZT1UeXBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhjYW52YXMucHJvcHMsY2FudmFzLnN0YXRlKVxuICAgICAgICByZXR1cm4gY2FudmFzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnRpbnVhYmxlXG5cdCAqIDEuIHNlbGVjdGlvbiBlbmRcblx0ICogMi4gdmlld3BvcnQ6IHZpZXdwb3J0ZXIuc2Nyb2xsVG9wK3ZpZXdwb3J0ZXIuaGVpZ2h0XG4gICAgICogXG4gICAgICogY29tcHV0ZWQuc2hvdWxkQ29udGludWVDb21wb3NlIGFzIGNhY2hlLCBzaW5jZSBmcmVxdWVudGx5IGNhbGxlZFxuICAgICAqIFxuXHQgKiovXG5cdHNob3VsZENvbnRpbnVlQ29tcG9zZShjb21wb3Nlcil7XG4gICAgICAgIGlmKHRoaXMuY29tcHV0ZWQuc2hvdWxkQ29udGludWVDb21wb3NlPT09ZmFsc2Upe1xuICAgICAgICAgICAgY29tcG9zZXIgJiYgdGhpcy5ub3RpZnlOb3RBbGxDb21wb3NlZChjb21wb3NlcilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmKCF0aGlzLnN0YXRlLmVkaXRhYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uPWdldFNlbGVjdGlvbih0aGlzLmNvbnRleHQuYWN0aXZlRG9jU3RvcmUuZ2V0U3RhdGUoKSlcblx0XHRjb25zdCBzaG91bGQ9dGhpcy5jYW52YXMuYXZhaWxhYmxlQmxvY2tTaXplKCkgfHwgIXRoaXMuaXNTZWxlY3Rpb25Db21wb3NlZChzZWxlY3Rpb24pXG4gICAgICAgIGlmKCFzaG91bGQpe1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5zaG91bGRDb250aW51ZUNvbXBvc2U9ZmFsc2VcbiAgICAgICAgICAgIGNvbXBvc2VyICYmIHRoaXMubm90aWZ5Tm90QWxsQ29tcG9zZWQoY29tcG9zZXIpXG5cdFx0fVxuXHRcdHJldHVybiBzaG91bGRcbiAgICB9XG4gICAgXG4gICAgaXNBdG9tQ29sbGVjdG9yKCl7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBcbiAgICAvL25vIGNhY2hlIG9uIGRvY3VtZW50IGxldmVsXG4gICAgY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoKXtcbiAgICAgICAgdGhpcy5jb21wdXRlZC50ZW1wbGF0ZXM9W11cbiAgICAgICAgdGhpcy5jb21wdXRlZC5zaG91bGRDb250aW51ZUNvbXBvc2U9dHJ1ZVxuICAgICAgICBzdXBlci5jYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgaXNTZWxlY3Rpb25Db21wb3NlZCh7c3RhcnQsZW5kfSl7XG4gICAgICAgIGNvbnN0IGFsbENvbXBvc2VkPWlkPT4haWQgfHwgdGhpcy5jb21wb3NlcnMuaGFzKGlkKSAmJiB0aGlzLmdldENvbXBvc2VyKGlkKS5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHRcdHJldHVybiBhbGxDb21wb3NlZChzdGFydC5pZCkgJiYgYWxsQ29tcG9zZWQoZW5kLmlkKVxuICAgIH1cblxuXHRjb21wb3NlNFNjcm9sbCh5KXtcblx0XHR0aGlzLnNldFN0YXRlKHttb2RlOlwic2Nyb2xsXCIseX0pXG5cdH1cblxuXHRjb21wb3NlNFNlbGVjdGlvbihzZWxlY3Rpb24pe1xuXHRcdHRoaXMuc2V0U3RhdGUoe21vZGU6XCJzZWxlY3Rpb25cIixzZWxlY3Rpb259KVxuXHR9XG59XG5cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsIGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQgRnJhbWUgZnJvbSBcIi4vZnJhbWVcIlxuXG5cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5TZWN0aW9uKVxuY2xhc3MgU2VjdGlvbiBleHRlbmRzIFN1cGVye1xuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5TdXBlci5kZWZhdWx0UHJvcHMsXG5cdFx0Y3JlYXRlTGF5b3V0KHByb3BzLC4uLmFyZ3Mpe1xuXHRcdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yLkxheW91dCh7Li4udGhpcy5wcm9wcy5sYXlvdXQsIC4uLnByb3BzfSwuLi5hcmdzKVxuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG5cdFx0Li4uU3VwZXIuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgIHByZXZMYXlvdXQ6IFByb3BUeXBlcy5mdW5jLFxuXHR9XG5cblx0c3RhdGljIExheW91dD1jbGFzcyBMYXlvdXRTZWN0aW9uIGV4dGVuZHMgRnJhbWV7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPVwiZnJhbWUtc2VjdGlvblwiXG5cblx0XHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcblx0XHRcdGNvbnN0IHtwcm9wczp7aSxJLG1hcmdpbn19PXRoaXNcblx0XHRcdGNvbnN0IHByb3BzPXttYXJnaW4saSxrZXk6aX1cblx0XHRcdGlmKEkhPXVuZGVmaW5lZClcblx0XHRcdFx0cHJvcHMuST1JXG5cdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KHN1cGVyLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpLHByb3BzKVxuXHRcdH1cblxuXHRcdGNsb25lNFNwYWNlKGxheW91dCl7XG5cdFx0XHRpZihsYXlvdXQuY29udGV4dC5mcmFtZT09dGhpcy5jb250ZXh0LmZyYW1lKVxuXHRcdFx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Y29uc3QgY2xvbmVkPXRoaXMuY2xvbmUoe3NwYWNlOmxheW91dC5wcm9wcy5zcGFjZX0pXG5cdFx0XHRjbG9uZWQuY29udGV4dC5mcmFtZT1sYXlvdXQuY29udGV4dC5mcmFtZVxuXHRcdFx0cmV0dXJuIGNsb25lZFxuXHRcdH1cblx0fVxuICAgIFxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLmNvbXB1dGVkLm5hbWVkPXt9XG5cdH1cblxuXHRnZXQgaXNTZWN0aW9uKCl7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGdldCBjdXJyZW50KCl7XG4gICAgICAgIGlmKHRoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoPT0wKXtcblx0XHRcdGNvbnN0IGxheW91dD10aGlzLmNyZWF0ZUxheW91dCgpXG5cdFx0XHRpZihsYXlvdXQpe1xuXHRcdFx0XHR0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLnB1c2gobGF5b3V0KVxuXHRcdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KGxheW91dCkpXG5cdFx0XHR9XG4gICAgICAgIH1cblx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZFt0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aC0xXVxuXHR9IFxuXG4gICAgZ2V0Q2hpbGRDb250ZXh0KCl7XG4gICAgICAgIGNvbnN0IHNlbGY9dGhpc1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG4gICAgICAgICAgICBwcmV2TGF5b3V0KHJlZil7XG4gICAgICAgICAgICAgICAgY29uc3Qge2NvbXBvc2VkfT1zZWxmLmNvbXB1dGVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkW2NvbXBvc2VkLmluZGV4T2YocmVmKS0xXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cdG5hbWVkKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLm5hbWVkW25hbWVdXG5cdH1cblxuXG5cdC8qKnBhZ2UgaW5kZXgsIG9yIHVuZGVmaW5lZCAqL1xuXHRnZXQgdG9wSW5kZXgoKXtcblx0XHR2YXIgY3VycmVudD10aGlzLmNvbnRleHQucGFyZW50XG5cdFx0d2hpbGUoY3VycmVudCl7XG5cdFx0XHRpZihjdXJyZW50LmlzRnJhbWUgfHwgY3VycmVudC5pc1NlY3Rpb24pXG5cdFx0XHRcdHJldHVybiBcblx0XHRcdGlmKCFjdXJyZW50LmNvbnRleHQgfHwgIWN1cnJlbnQuY29udGV4dC5wYXJlbnQpXG5cdFx0XHRcdHJldHVybiBjdXJyZW50LmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aFxuXHRcdFx0Y3VycmVudD1jdXJyZW50LmNvbnRleHQucGFyZW50XG5cdFx0fVxuXHR9XG5cbiAgICAvKipcbiAgICAgKiAqKiBjcmVhdGUgaXMgcHVyZSwgc28geW91IGhhdmUgdG8gYXBwZW5kIHRvIHlvdXIgY29tcG9zZWQgYW5kIHBhcmVudCBtYW51YWxseSBldmVyeSB0aW1lIGNyZWF0ZSBjYWxsZWQqKipcbiAgICAgKiBjcmVhdGUgYSBibG9jayBsYXlvdXQgZW5naW5lIHdpdGggYSBlbnN1cmVkIHNwYWNlIHtsZWZ0LHJpZ2h0LGJsb2NrT2Zmc2V0LGhlaWdodCx3cmFwcGVlc31cbiAgICAgKiB3aGVuIGN1cnJlbnQgc3BhY2UgaXMgZnVsbCwgaXQgd291bGQgYmUgY2FsbGVkXG4gICAgICogQHBhcmFtIHsqfSBwcm9wc1xuICAgICAqIEBwYXJhbSB7Kn0gY29udGV4dCBcbiAgICAgKiBAcGFyYW0geyp9IHJlcXVpcmVkU3BhY2UgXG4gICAgICovXG4gICAgY3JlYXRlTGF5b3V0KHByb3BzPXt9LGNvbnRleHQ9e30scmVxdWlyZWRTcGFjZSl7XG5cdFx0Y29uc3QgYWxsUHJvcHM9ey4uLnByb3BzLFxuXHRcdFx0aWQ6dGhpcy5wcm9wcy5pZCwgXG5cdFx0XHRpOnRoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoLFxuXHRcdH1cblx0XHRjb25zdCBJPXRoaXMudG9wSW5kZXhcblx0XHRpZih0eXBlb2YoSSk9PVwibnVtYmVyXCIpXG5cdFx0XHRhbGxQcm9wcy5JPUlcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jcmVhdGVMYXlvdXQuYmluZCh0aGlzKShcblx0XHRcdGFsbFByb3BzLFxuICAgICAgICAgICAgey4uLmNvbnRleHQscGFyZW50OnRoaXMsZ2V0Q29tcG9zZXI6aWQ9PnRoaXMuY29udGV4dC5nZXRDb21wb3NlcihpZCl9XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBjcmVhdGVDb21wb3NlZDJQYXJlbnQoYSl7XG4gICAgICAgIHJldHVybiBhXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaXQgcHJveHkgdGhlIGNhbGwgdG8gY3VycmVudCBsYXlvdXRcbiAgICAgKiBpZiBjdXJyZW50IGxheW91dCBoYXMgbm8gcmVxdWlyZWQgc3BhY2UsIGEgbmV3IExheW91dCB3aWxsIGJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0geyp9IHJlcXVpcmVkIFxuICAgICAqL1xuICAgIG5leHRBdmFpbGFibGVTcGFjZShyZXF1aXJlZCl7XG4gICAgICAgIGNvbnN0IHNwYWNlPXRoaXMuY3VycmVudC5uZXh0QXZhaWxhYmxlU3BhY2UoLi4uYXJndW1lbnRzKVxuICAgICAgICBpZighc3BhY2Upe1xuXHRcdFx0Y29uc3QgbGF5b3V0PXRoaXMuY3JlYXRlTGF5b3V0KHVuZGVmaW5lZCx7ZnJhbWU6c3BhY2UuZnJhbWV9LHJlcXVpcmVkKVxuXHRcdFx0aWYobGF5b3V0KXtcblx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZC5wdXNoKGxheW91dClcblx0XHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudChsYXlvdXQpKVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5uZXh0QXZhaWxhYmxlU3BhY2UoLi4uYXJndW1lbnRzKVxuXHRcdFx0fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcGFjZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG5hbWVkIGlzIHN1cHBvcnRlZCB0byBiZSBrZXB0XG4gICAgICogQHBhcmFtIHsqfSBjb21wb3NlZENoaWxkZW5Db250ZW50IFxuICAgICAqIEByZXR1cm5zXG4gICAgICogbnVtYmVyOiB0byByb2xsYmFjayBsYXN0IG51bWJlciBvZiBsaW5lc1xuICAgICAqL1xuICAgIGFwcGVuZENvbXBvc2VkKHtwcm9wczp7bmFtZWQsaGVpZ2h0fX0pe1xuICAgICAgICBpZihuYW1lZCl7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLm5hbWVkW25hbWVkXT1hcmd1bWVudHNbMF1cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVuZGVkPXRoaXMuY3VycmVudC5hcHBlbmRDb21wb3NlZCguLi5hcmd1bWVudHMpXG4gICAgICAgICAgICBpZihhcHBlbmRlZD09PWZhbHNlKXtcblx0XHRcdFx0aWYodGhpcy5uZXh0QXZhaWxhYmxlU3BhY2Uoe2hlaWdodH0pKXtcblx0XHRcdFx0XHRyZXR1cm4gMS8vcmVjb21wb3NlIGN1cnJlbnQgbGluZSBpbiBjYXNlIGRpZmZlcmVudCBhdmFpbGFibGVTcGFjZVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFtZS5JTU1FRElBVEVfU1RPUFxuICAgICAgICAgICAgfWVsc2UgaWYoTnVtYmVyLmlzSW50ZWdlcihhcHBlbmRlZCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHBlbmRlZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKXtcblx0XHQvL2xhc3Qgb25lIHNob3VsZCBjaGVjayBiYWxhbmNlYWJsZVxuXHRcdGNvbnN0IGxhc3Q9dGhpcy5jb21wdXRlZC5jb21wb3NlZFt0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aC0xXVxuXHRcdGlmKGxhc3QuYmFsYW5jZWFibGUpe1xuXHRcdFx0bGFzdC5iYWxhbmNlKClcblx0XHR9XG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVNlY3Rpb24gZXh0ZW5kcyBlZGl0YWJsZShTZWN0aW9uLHtzdG9wcGFibGU6dHJ1ZX0pe1xuXHQvKipcblx0ICogbGFzdENvbXBvc2VkPT1jb21wb3NlZFxuXHQgKi9cblx0Y2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQobmV4dFByb3BzKXtcblx0XHRjb25zdCBjaGFuZ2VkPW5leHRQcm9wcy5oYXNoIT10aGlzLnByb3BzLmhhc2hcblx0XHRpZihjaGFuZ2VkKXtcblx0XHRcdHRoaXMuX2NhbmNlbENoYW5nZWRQYXJ0KC4uLmFyZ3VtZW50cylcblx0XHR9XG5cdFx0dGhpcy5fY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCguLi5hcmd1bWVudHMpXG5cdH1cblxuXHQvKipcblx0ICogYm90aCBjb21wb3NlZCBhbmQgbGFzdENvbXBvc2VkIHJlZmVyIHRvIGZpc3Npb25zLCBjaGVjayBjcmVhdGVDb21wb3NlZDJQYXJlbnRcblx0ICogXG5cdCAqL1xuXHRhcHBlbmRMYXN0Q29tcG9zZWQoKXtcblx0XHRjb25zdCBsYXN0Q29tcG9zZWQ9dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWRcblx0XHQvL2NsZWFyIGxhc3QgY29tcG9zZWRcblx0XHR0aGlzLmNvbXB1dGVkLmNvbXBvc2VkPVtdXG5cdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cblx0XHRcblx0XHQvL2FwcGVuZCBsYXN0IGNvbXBvc2VkIGZpc3Npb25zIG9uZSBieSBvbmVcblx0XHRjb25zdCBzcGFjZUNoYW5nZWRBdD1sYXN0Q29tcG9zZWQuZmluZEluZGV4KChmaXNzaW9uLGksXywkLGlzTGFzdD1pPT1sYXN0Q29tcG9zZWQubGVuZ3RoLTEpPT57XG5cdFx0XHRpZihpc0xhc3QmJmZpc3Npb24uaXNFbXB0eSgpKXtcblx0XHRcdFx0Ly9sYXN0IGVtcHR5IGZpc3Npb24gaXMgdXNlbGVzcyBmb3IgY2FjaGVcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRjb25zdCBjdXJyZW50PXRoaXMuY3JlYXRlTGF5b3V0KClcblx0XHRcdGlmKGZpc3Npb24uZ2V0U3BhY2UoKS5lcXVhbHMoY3VycmVudC5nZXRTcGFjZSgpKSl7XG5cdFx0XHRcdGZpc3Npb249Zmlzc2lvbi5jbG9uZTRTcGFjZShjdXJyZW50KVxuXHRcdFx0XHR0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLnNwbGljZShpLDEsZmlzc2lvbilcblx0XHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudChmaXNzaW9uKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH0pXG5cblxuXHRcdGlmKHNwYWNlQ2hhbmdlZEF0PT0wKXtcblx0XHRcdC8vY2xlYXIgYWxsIGNvbXB1dGVkXG5cdFx0XHR0aGlzLmFuY2hvcnM9W11cblx0XHRcdHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKHtjaGFuZ2VkOnRydWV9KVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fWVsc2UgaWYoc3BhY2VDaGFuZ2VkQXQ9PS0xKXtcblx0XHRcdGlmKHRoaXMuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCkpe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0Ly9jb250aW51ZSBmcm9tIGxhc3Rcblx0XHR9ZWxzZXtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkXG5cdFx0XHQvL2NvbnRpbnVlIGZyb20gbGFzdFxuXHRcdH1cblxuXHRcdGNvbnN0IGxhc3RJZD10aGlzLmN1cnJlbnQubGFzdExpbmUucHJvcHNbXCJkYXRhLWNvbnRlbnRcIl1cblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLmZpbmRJbmRleChhPT5hICYmIGEucHJvcHMuaWQ9PWxhc3RJZClcblx0fVxuXG5cdF9jYW5jZWxDaGFuZ2VkUGFydChuZXh0KXtcblx0XHR2YXIgbGluZUluZGV4PS0xXG5cdFx0Y29uc3QgY2hpbGRyZW5OZWVkUmVjb21wb3NlPXRoaXMuY2hpbGRyZW5OZWVkUmVjb21wb3NlKG5leHQsdGhpcy5wcm9wcylcblx0XHRjb25zdCBmaXNzaW9uSW5kZXg9dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuZmluZEluZGV4KCh7bGluZXN9KT0+e1xuXHRcdFx0cmV0dXJuIChsaW5lSW5kZXg9bGluZXMuZmluZEluZGV4KGE9PmNoaWxkcmVuTmVlZFJlY29tcG9zZS5pbmNsdWRlcyh0aGlzLmNoaWxkSWRPZihhKSkpKSE9LTFcblx0XHR9KVxuXG5cdFx0dGhpcy5fa2VlcExhc3RDb21wb3NlZFVudGlsKGZpc3Npb25JbmRleCxsaW5lSW5kZXgpXG5cdH1cblxuXHRcbiAgICAvKipcbiAgICAgKiBjYWNoZWFibGUgQVBJXG4gICAgICogY29tcG9zZSBydWxlOiBhbHdheXMgY29tcG9zZSBhbGwgY2hpbGRyZW4sIGFuZCBjb250ZW50IGNvbXBvc2luZyBpcyBzdG9wcGFibGUgXG4gICAgICogYm90aCBjb21wb3NlZCBhbmQgbGFzdENvbXBvc2VkIHJlZmVyIHRvIGZpc3Npb25zXG4gICAgICovXG5cdF9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG5cdFx0dmFyIGxpbmVJbmRleD0tMVxuICAgICAgICBjb25zdCBmaXNzaW9uSW5kZXg9dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuZmluZExhc3RJbmRleCgoe2xpbmVzfSk9Pntcblx0XHRcdHJldHVybiAobGluZUluZGV4PWxpbmVzLmZpbmRMYXN0SW5kZXgoKGEsaSxfLCQsaWQ9dGhpcy5jaGlsZElkT2YoYSkpPT57XG5cdFx0XHRcdGNvbnN0IGNvbXBvc2VyPXRoaXMuY29udGV4dC5nZXRDb21wb3NlcihpZClcblx0XHRcdFx0cmV0dXJuIGNvbXBvc2VyICYmIGNvbXBvc2VyLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0XHR9KSkhPS0xXG5cdFx0fSlcblx0XHR0aGlzLl9rZWVwTGFzdENvbXBvc2VkVW50aWwoZmlzc2lvbkluZGV4LGxpbmVJbmRleCsxKVxuXHR9XG5cblx0X2tlZXBMYXN0Q29tcG9zZWRVbnRpbChmaXNzaW9uSW5kZXgsbGluZUluZGV4KXtcblx0XHRjb25zdCB7bGFzdENvbXBvc2VkfT10aGlzLmNvbXB1dGVkXG5cdFx0aWYoZmlzc2lvbkluZGV4PT0tMSB8fCBcblx0XHRcdChmaXNzaW9uSW5kZXg9PWxhc3RDb21wb3NlZC5sZW5ndGgtMSAmJiBsaW5lSW5kZXg+PWxhc3RDb21wb3NlZFtmaXNzaW9uSW5kZXhdLmxpbmVzLmxlbmd0aCkpe1xuXHRcdFx0cmV0dXJuIFxuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZFxuXHRcdHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkPWxhc3RDb21wb3NlZC5zbGljZSgwLGZpc3Npb25JbmRleCsxKVxuXHRcdHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkW2Zpc3Npb25JbmRleF0ucmVtb3ZlRnJvbShsaW5lSW5kZXgpXG5cdH1cbn1cbiIsImltcG9ydCBMaW5lQnJlYWtlciBmcm9tIFwibGluZWJyZWFrXCJcblxuLyoqXG4qIGZpbmQgb3Bwb3J0dW5pdGllcyBmcm9tIHN0cmluZ1xuKlxuKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9wcG9ydHVuaXRpZXMoc3RyKXtcblx0bGV0IGJyZWFrZXI9bmV3IExpbmVCcmVha2VyKHN0cilcblx0bGV0IGxhc3Q9MFxuXHR2YXIgb3A9W11cblx0Zm9yIChsZXQgYms7YmsgPSBicmVha2VyLm5leHRCcmVhaygpOykge1xuXHQgIG9wLnB1c2goc3RyLnNsaWNlKGxhc3QsIGJrLnBvc2l0aW9uKSlcblxuXHQgIGlmIChiay5yZXF1aXJlZCkge1xuXHRcdC8vb3AucHVzaChcIlxcblwiKVxuXHQgIH1cblxuXHQgIGxhc3QgPSBiay5wb3NpdGlvblxuXHR9XG5cdHJldHVybiBvcFxufVxuLyoqXG4qIGZpbmQgb3Bwb3J0dW5pdGllcyBmcm9tIGEgc3RydWN0dXJlZCB0ZXh0c1xuKlxuKi9cbiBmdW5jdGlvbiBvcHBvcnR1bml0aWVzT2ZPYmplY3RzKGl0ZW1zLGdldFRleHQ9YT0+YSxyZXZpdmVyPWE9PmEpe1xuICAgIGxldCBjb21taXQ9KHN0YXRlLGkpPT57XG4gICAgICAgIGlmKHN0YXRlLnRleHQubGVuZ3RoPT0wKVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG5cbiAgICAgICAgbGV0IHt0ZXh0LG9wcG9ydHVuaXRpZXMsaW5kZXhlc309c3RhdGVcbiAgICAgICAgbGV0IHN0cj10ZXh0LmpvaW4oXCJcIilcbiAgICAgICAgbGV0IGJyZWFrZXI9bmV3IExpbmVCcmVha2VyKHN0cilcbiAgICAgICAgbGV0IG9wLCB3b3JkXG4gICAgICAgIGxldCBzdGFydD17aXRlbUluZGV4OnN0YXRlLnN0YXJ0LGk6MCxpbmRleE9mU3RyOjB9XG4gICAgICAgIGxldCBmb3VuZD0oYSxvcCxqKT0+e1xuICAgICAgICAgICAgaWYoYS5pdGVtSW5kZXg9PWopXG4gICAgICAgICAgICAgICAgYS5pPWEuaStvcC5wb3NpdGlvbi1hLmluZGV4T2ZTdHJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhLmk9b3AucG9zaXRpb24tYS5pbmRleE9mU3RyXG5cbiAgICAgICAgICAgIGEuaXRlbUluZGV4PWpcbiAgICAgICAgICAgIGEuaW5kZXhPZlN0cj1vcC5wb3NpdGlvblxuICAgICAgICB9XG4gICAgICAgIHdoaWxlKG9wPWJyZWFrZXIubmV4dEJyZWFrKCkpe1xuICAgICAgICAgICAgd29yZD1zdHIuc2xpY2Uoc3RhcnQuaW5kZXhPZlN0cixvcC5wb3NpdGlvbilcblxuICAgICAgICAgICAgbGV0IGVuZD1pbmRleGVzLnJlZHVjZSgoYSxsZW4saik9PntcbiAgICAgICAgICAgICAgICBpZihqPHN0YXJ0Lml0ZW1JbmRleCl7XG5cbiAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGo9PXN0YXJ0Lml0ZW1JbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlbj1sZW4tc3RhcnQuaVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGEuaW5kZXhPZlN0citsZW48b3AucG9zaXRpb24pe1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5pbmRleE9mU3RyKz1sZW5cbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoYS5pbmRleE9mU3RyK2xlbj5vcC5wb3NpdGlvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihhLmluZGV4T2ZTdHI9PW9wLnBvc2l0aW9uKXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQoYSxvcCxqKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihhLmluZGV4T2ZTdHIrbGVuPT1vcC5wb3NpdGlvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZChhLG9wLGopXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYVxuICAgICAgICAgICAgfSx7Li4uc3RhcnR9KVxuXG4gICAgICAgICAgICBvcHBvcnR1bml0aWVzLnB1c2gocmV2aXZlcih7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OntpdGVtSW5kZXg6c3RhcnQuaXRlbUluZGV4LGF0OnN0YXJ0Lml9LFxuICAgICAgICAgICAgICAgICAgICBlbmQ6e2l0ZW1JbmRleDplbmQuaXRlbUluZGV4LGF0OmVuZC5pfSxcbiAgICAgICAgICAgICAgICAgICAgd29yZFxuICAgICAgICAgICAgICAgIH0pKVxuXG5cdFx0XHRzdGFydD1lbmRcblxuXHRcdFx0Ly9lbmQgYXQgaXRlbSBlbmQsIGxldCBuZXh0IHN0YXJ0IGZyb20gbmV4dCBpdGVtXG4gICAgICAgICAgICBpZihzdGFydC5pdGVtSW5kZXg8dGV4dC5sZW5ndGhcblx0XHRcdFx0JiYgdGV4dFtzdGFydC5pdGVtSW5kZXhdLmxlbmd0aD09c3RhcnQuaSl7XG5cdFx0XHRcdHN0YXJ0Lml0ZW1JbmRleCs9MVxuXHRcdFx0XHRzdGFydC5pPTBcblx0XHRcdH1cbiAgICAgICAgfVxuICAgICAgIHRleHQuc3BsaWNlKDAsdGV4dC5sZW5ndGgpXG4gICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuICAgIHJldHVybiBjb21taXQoaXRlbXMucmVkdWNlKChzdGF0ZSwgcGllY2UsIGkpPT57XG4gICAgICAgIGxldCB7dGV4dCxvcHBvcnR1bml0aWVzLGluZGV4ZXN9PXN0YXRlXG5cdFx0bGV0IHQ9Z2V0VGV4dChwaWVjZSlcbiAgICAgICAgaWYodCl7XG4gICAgICAgICAgICB0ZXh0LnB1c2godClcbiAgICAgICAgICAgIGluZGV4ZXNbaV09dC5sZW5ndGhcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb21taXQoc3RhdGUsaSlcbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMucHVzaCh7c3RhcnQ6e2l0ZW1JbmRleDppLGF0OjB9LGVuZDp7aXRlbUluZGV4OmksYXQ6MH0gfSlcbiAgICAgICAgICAgIHN0YXRlLnN0YXJ0PWkrMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZVxuICAgIH0se3N0YXJ0OjAsIHRleHQ6W10sIG9wcG9ydHVuaXRpZXM6W10sIGluZGV4ZXM6W119KSlcbiAgICAgICAgLm9wcG9ydHVuaXRpZXNcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5cbmltcG9ydCB7ZG9tLCBSZWFjdFF1ZXJ5fSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQgRnJhbWUgZnJvbSBcIi4vZnJhbWVcIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxMYXlvdXQsIGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQgYnJlYWtPcHBvcnR1bml0aWVzIGZyb20gXCIuLi93b3Jkd3JhcC9saW5lLWJyZWFrXCJcbmltcG9ydCB7VGV4dCBhcyBDb21wb3NlZFRleHQsICBHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuY29uc3QgU3VwZXI9SGFzUGFyZW50QW5kQ2hpbGQoZG9tLlBhcmFncmFwaClcbmNsYXNzIFBhcmFncmFwaCBleHRlbmRzIFN1cGVye1xuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuXHRcdC4uLlN1cGVyLmNvbnRleHRUeXBlcyxcblx0XHRNZWFzdXJlOiBQcm9wVHlwZXMuZnVuYyxcblx0XHRudW1iZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXHR9XG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdC4uLlN1cGVyLnByb3BUeXBlcyxcblx0XHRkZWZhdWx0U3R5bGU6UHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFx0XG5cdH1cblxuICAgY29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5jb21wdXRlZC5hdG9tcz1bXVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse1xuXHRcdFx0bGluZXM6e1xuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodil7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZD12XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhdG9tczp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmF0b21zXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2KXtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5hdG9tcz12XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Z2V0IGVuZGVyV2lkdGgoKXtcblx0XHRyZXR1cm4gdGhpcy5hdG9tc1t0aGlzLmF0b21zLmxlbmd0aC0xXS5wcm9wcy53aWR0aFxuXHR9XG5cblx0Z2V0IGN1cnJlbnRMaW5lKCl7XG5cdFx0aWYodGhpcy5saW5lcy5sZW5ndGg9PTApe1xuXHRcdFx0dGhpcy5saW5lcy5wdXNoKHRoaXMuY3JlYXRlTGluZSgpKVxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aC0xXVxuXHR9XG5cblx0Z2V0RGVmYXVsdE1lYXN1cmU9bWVtb2l6ZSgoc3R5bGU9dGhpcy5wcm9wcy5kZWZhdWx0U3R5bGUpPT57XG5cdFx0cmV0dXJuIG5ldyB0aGlzLmNvbnRleHQuTWVhc3VyZShzdHlsZSlcblx0fSlcblxuICAgIC8qKlxuXHQgKiB0byBjb2xsZWN0IGF0b21pYyBpbmxpbmUgaXRlbXNcblx0ICogYSB0ZXh0IHN0YXJ0IG1heSBtZXJnZSB3aXRoIGxhc3QgdGV4dCB0byBjb21wdXRlIGJyZWFrIG9wcG9ydHVuaXR5XG5cdCAqIGAke2xhc3RUZXh0fSR7dGV4dH1gIHNob3VsZCBiZSBnb29kIGVub3VnaFxuXHQgKiBAcGFyYW0geyp9IGNvbnRlbnRcblx0ICovXG4gICAgYXBwZW5kQ29tcG9zZWQoY29udGVudCl7XG5cdFx0Y29uc3QgbGFzdD10aGlzLmF0b21zW3RoaXMuYXRvbXMubGVuZ3RoLTFdXG5cdFx0aWYobGFzdCAmJiBsYXN0LnByb3BzLm1lcmdlT3Bwb3J0dW5pdHkgJiYgY29udGVudC5wcm9wcy5tZXJnZU9wcG9ydHVuaXR5KXtcblx0XHRcdGNvbnN0IGxhc3RUZXh0PWxhc3QucHJvcHMubWVyZ2VPcHBvcnR1bml0eVxuXHRcdFx0Y29uc3QgdGV4dD1jb250ZW50LnByb3BzLm1lcmdlT3Bwb3J0dW5pdHlcblx0XHRcdGNvbnN0IG9wcz1icmVha09wcG9ydHVuaXRpZXMoYCR7bGFzdFRleHR9JHt0ZXh0fWApXG5cdFx0XHRzd2l0Y2gob3BzLmxlbmd0aCl7XG5cdFx0XHRjYXNlIDE6ey8vbWVyZ2UgY29udGVudCBpbnRvIGxhc3QgYXRvbVxuXHRcdFx0XHRjb25zdCBoZWlnaHQ9TWF0aC5tYXgobGFzdC5wcm9wcy5oZWlnaHQsIGNvbnRlbnQucHJvcHMuaGVpZ2h0KVxuXHRcdFx0XHRjb25zdCBkZXNjZW50PU1hdGgubWF4KGxhc3QucHJvcHMuZGVzY2VudCwgY29udGVudC5wcm9wcy5kZXNjZW50KVxuXHRcdFx0XHRjb25zdCB3aWR0aD1sYXN0LnByb3BzLndpZHRoK2NvbnRlbnQucHJvcHMud2lkdGhcblx0XHRcdFx0Y29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmlzUmF3QXRvbSwgY2hpbGRyZW4sbWVyZ2VPcHBvcnR1bml0eX19PWxhc3Rcblx0XHRcdFx0dGhpcy5hdG9tcy5zcGxpY2UoLTEsMSxcblx0XHRcdFx0XHQ8R3JvdXAgey4uLnt3aWR0aCxoZWlnaHQsZGVzY2VudCxtZXJnZU9wcG9ydHVuaXR5OmAke21lcmdlT3Bwb3J0dW5pdHl9JHtjb250ZW50LnByb3BzLm1lcmdlT3Bwb3J0dW5pdHl9YH19PlxuXHRcdFx0XHRcdFx0e2lzUmF3QXRvbSA/IFxuXHRcdFx0XHRcdFx0W1JlYWN0LmNsb25lRWxlbWVudChsYXN0LHtrZXk6MH0pLFJlYWN0LmNsb25lRWxlbWVudChjb250ZW50LHt4Omxhc3QucHJvcHMud2lkdGgsa2V5OjF9KV1cblx0XHRcdFx0XHRcdDogWy4uLmNoaWxkcmVuLFJlYWN0LmNsb25lRWxlbWVudChjb250ZW50LHt4Omxhc3QucHJvcHMud2lkdGgsa2V5OmNoaWxkcmVuLmxlbmd0aC0xfSldXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0KVxuXHRcdFx0XHRyZXR1cm4gXG5cdFx0XHR9XG5cdFx0XHRjYXNlIDI6XG5cdFx0XHRcdGlmKGxhc3RUZXh0PT09b3BzWzBdKXsvL2Rvbid0IG5lZWQgbWVyZ2Vcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zb2xlLndhcm4oYGVycm9yOiBcIiR7bGFzdFRleHR9JHt0ZXh0fVwiIGJyZWFrIG9wcG9ydHVuaXRpZXM6IFske29wcy5qb2luKFwiLFwiKX1dYClcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0dGhpcy5hdG9tcy5wdXNoKGNvbnRlbnQpXG5cdH1cblxuXG5cdG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpey8vbmVlZCBhcHBlbmQgbGFzdCBub24tZnVsbC13aWR0aCBsaW5lIHRvIHBhcmVudCA/Pz9cblx0XHRjb25zdCB7cHJvcHM6e0VuZD1cIlwifX09dGhpc1xuXHRcdGNvbnN0IG1lYXN1cmU9dGhpcy5nZXREZWZhdWx0TWVhc3VyZSgpXG5cdFx0dGhpcy5hdG9tcy5wdXNoKDxDb21wb3NlZFRleHRcblx0XHRcdHsuLi5tZWFzdXJlLmRlZmF1bHRTdHlsZX1cblx0XHRcdHdpZHRoPXttZWFzdXJlLnN0cmluZ1dpZHRoKEVuZCl9XG5cdFx0XHRtaW5XaWR0aD17MH1cblx0XHRcdGNoaWxkcmVuPXtFbmR9XG5cdFx0XHRjbGFzc05hbWU9XCJlbmRlclwiXG5cdFx0XHQvPilcblx0XHR0aGlzLmNvbW1pdCgpXG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICB9XG5cblx0cm9sbGJhY2tMaW5lcyhuKXtcblx0XHR0aGlzLmxpbmVzLnNwbGljZSgtbilcblx0fVxuXG5cdC8qKlxuXHQqIGxpbmUuYXBwZW5kQ29tcG9zZWQgY2FuIHJvbGxiYWNrIHRvIGEgc3BlY2lmaWVkIGF0b21cblx0KiBwYXJlbnQuYXBwZW5kQ29tcG9zZWQgY2FuIHJvbGxiYWNrIGxpbmVzXG5cdCoqL1xuXHRjb21taXQoc3RhcnQ9MCwgZW5kPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXtcbiAgICAgICAgY29uc3Qge2NvbnRleHQ6e3BhcmVudH0sIGNvbXB1dGVkOnthdG9tc319PXRoaXNcblxuXHRcdGNvbnN0IHJvbGxiYWNrVG9MaW5lV2l0aEZpcnN0QXRvbUluZGV4PWF0PT57XG5cdFx0XHRjb25zdCB7bGluZXMsYXRvbXN9PXRoaXNcblx0XHRcdGNvbnN0IGk9bGluZXMuZmluZEluZGV4KGE9PmF0b21zLmluZGV4T2YoYS5maXJzdEF0b20pPT1hdClcblx0XHRcdHRoaXMucm9sbGJhY2tMaW5lcyhsaW5lcy5sZW5ndGgtaSlcblx0XHR9XG5cblx0XHRjb25zdCBhcHBlbmRDb21wb3NlZExpbmU9Ykxhc3RMaW5lPT57XG5cdFx0XHR0aGlzLmN1cnJlbnRMaW5lLmZyZWV6ZSgpXG5cdFx0XHRyZXR1cm4gcGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KHRoaXMuY3VycmVudExpbmUsYkxhc3RMaW5lKSlcblx0XHR9XG5cblx0XHRjb25zdCBhdG9tSW5kZXhPZkxhc3ROdGhMaW5lPWk9Pntcblx0XHRcdGNvbnN0IGxpbmVzPXRoaXMubGluZXNcblx0XHRcdGNvbnN0IGxhc3ROdGhMaW5lPWxpbmVzW2xpbmVzLmxlbmd0aC1pXVxuXHRcdFx0cmV0dXJuIGF0b21zLmluZGV4T2YobGFzdE50aExpbmUuZmlyc3RBdG9tKVxuXHRcdH1cblxuXHRcdGNvbnN0IGNyZWF0ZUFuZEFwcGVuZExpbmU9KC4uLmFyZ3MpPT57XG5cdFx0XHRjb25zdCBsaW5lPXRoaXMuY3JlYXRlTGluZSguLi5hcmdzKVxuXHRcdFx0aWYoIWxpbmUpXG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0dGhpcy5saW5lcy5wdXNoKGxpbmUpXG5cdFx0XHRyZXR1cm4gbGluZVxuXHRcdH1cblxuXHRcdGNvbnN0IGxlbj1hdG9tcy5sZW5ndGhcblx0XHRjb25zdCBERUFEPTVcblx0XHR2YXIgbmVzdGVkPTBcblxuXHRcdGlmKCFjcmVhdGVBbmRBcHBlbmRMaW5lKCkpXG5cdFx0XHRyZXR1cm4gXG5cblx0XHRjb25zdCBjb21taXRGcm9tPShzdGFydD0wKT0+e1xuXHRcdFx0bGV0IGxhc3Q9MCwgdGltZXM9MFxuXHRcdFx0bGV0IG5leHQsIHJvbGxiYWNrTGluZXNcblx0XHRcdGZvcihsZXQgaT1zdGFydDtpPGxlbjspe1xuXHRcdFx0XHRpZihpPmVuZCl7XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpPT1sYXN0KXtcblx0XHRcdFx0XHR0aW1lcysrXG5cdFx0XHRcdFx0aWYodGltZXM+REVBRCl7XG5cdFx0XHRcdFx0XHR0aHJvdyBFcnJvcihgaXQgbWF5IGJlIGRlYWQgbG9vcCBvbiAke2l9dGggYXRvbXNgKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0bGFzdD1pXG5cdFx0XHRcdFx0dGltZXM9MFxuXHRcdFx0XHR9XG5cdFx0XHRcdG5leHQ9dGhpcy5jdXJyZW50TGluZS5hcHBlbmRBdG9tKGF0b21zW2ldLGkpXG5cdFx0XHRcdGlmKHR5cGVvZihuZXh0KT09XCJudW1iZXJcIil7XG5cdFx0XHRcdFx0Ly9kaXNjYXJkIGN1cnJlbnQgbGluZSwgYW5kIG5leHQgaXMgcmVxdWlyZWRIZWlnaHRcblx0XHRcdFx0XHR0aGlzLnJvbGxiYWNrTGluZXMoMSlcblx0XHRcdFx0XHRpZighY3JlYXRlQW5kQXBwZW5kTGluZSh7aGVpZ2h0Om5leHR9KSlcblx0XHRcdFx0XHRcdHJldHVybiBcblx0XHRcdFx0XHRjb250aW51ZVxuXHRcdFx0XHR9ZWxzZSBpZihuZXh0IT09ZmFsc2Upe1xuXHRcdFx0XHRcdGkrK1xuXHRcdFx0XHRcdGlmKGk+ZW5kKXtcblx0XHRcdFx0XHRcdC8vaXQncyByZWNvbW1pdHRpbmcgc2luY2UgZW5kIGlzIHJlYXNvbmFibGUgdmFsdWVcblx0XHRcdFx0XHRcdGlmKGFwcGVuZENvbXBvc2VkTGluZShpPT1hdG9tcy5sZW5ndGgpPT1MYXlvdXQuSU1NRURJQVRFX1NUT1ApXG5cdFx0XHRcdFx0XHRcdHJldHVybiBMYXlvdXQuSU1NRURJQVRFX1NUT1Bcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29udGludWVcblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0Ly9jdXJyZW50IGxpbmUgaXMgZnVsbCwgYXRvbXNbaV0gbm90IGFzc2VtYmxlZCwgY29tbWl0IHRvIGJsb2NrIGxheW91dFxuXHRcdFx0XHRcdHJvbGxiYWNrTGluZXM9YXBwZW5kQ29tcG9zZWRMaW5lKGZhbHNlKVxuXHRcdFx0XHRcdGlmKCFOdW1iZXIuaXNJbnRlZ2VyKHJvbGxiYWNrTGluZXMpKXtcblx0XHRcdFx0XHRcdC8vbGluZSBjb21taXR0ZWRcblx0XHRcdFx0XHRcdGlmKCFjcmVhdGVBbmRBcHBlbmRMaW5lKCkpXG5cdFx0XHRcdFx0XHRcdHJldHVybiBcblx0XHRcdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHQvL2ZhaWwgY29tbWl0dGVkLCBhbmQgcm9sbGJhY2sgbGluZXNcblx0XHRcdFx0XHRcdGlmKHJvbGxiYWNrTGluZXM9PUxheW91dC5JTU1FRElBVEVfU1RPUClcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExheW91dC5JTU1FRElBVEVfU1RPUFxuXG5cdFx0XHRcdFx0XHRuZXh0PWF0b21JbmRleE9mTGFzdE50aExpbmUocm9sbGJhY2tMaW5lcylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE51bWJlci5pc0ludGVnZXIobmV4dCkpe1xuXHRcdFx0XHRcdFx0XHRyb2xsYmFja1RvTGluZVdpdGhGaXJzdEF0b21JbmRleChuZXh0KVxuXHRcdFx0XHRcdFx0XHRpZighY3JlYXRlQW5kQXBwZW5kTGluZSgpKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBcbiAgICAgICAgXHRcdFx0XHRcdGk9bmV4dFxuICAgICAgICBcdFx0XHRcdFx0Y29udGludWVcbiAgICAgICAgXHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKCsrbmVzdGVkPkRFQUQpe1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBpdCBtYXkgYmUgZGVhZCBsb29wIG9uIHNpbmNlIGNvbW1pdCBuZXN0ZWQgJHtuZXN0ZWR9LCBpZ25vcmUgYW5kIGNvbnRpbnVlYClcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGlmKHRoaXMubGluZXMubGVuZ3RoPT0xIHx8ICF0aGlzLmN1cnJlbnRMaW5lLmlzRW1wdHkoKSl7XG5cdFx0XHRcdHJvbGxiYWNrTGluZXM9YXBwZW5kQ29tcG9zZWRMaW5lKHRydWUpXG5cdFx0XHRcdGlmKE51bWJlci5pc0ludGVnZXIocm9sbGJhY2tMaW5lcykpe1xuXHRcdFx0XHRcdGlmKHJvbGxiYWNrTGluZXM9PUZyYW1lLklNTUVESUFURV9TVE9QKVxuXHRcdFx0XHRcdFx0cmV0dXJuIEZyYW1lLklNTUVESUFURV9TVE9QXG5cdFx0XHRcdFx0bmV4dD1hdG9tSW5kZXhPZkxhc3ROdGhMaW5lKHJvbGxiYWNrTGluZXMpXG5cdFx0XHRcdFx0cm9sbGJhY2tUb0xpbmVXaXRoRmlyc3RBdG9tSW5kZXgobmV4dClcblx0XHRcdFx0XHRpZighY3JlYXRlQW5kQXBwZW5kTGluZSgpKVxuXHRcdFx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0XHRcdGNvbW1pdEZyb20obmV4dClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb21taXRGcm9tKHN0YXJ0KVxuXHR9XG5cblx0LyoqXG5cdCAqIHJlLWNvbW1pdCBsYXN0TGluZXNcblx0ICogZGVmYXVsdCByZS1jb21taXQgYWxsIGFscmVhZHkgbGF5b3V0ZWQgbGluZXNcblx0ICogQHBhcmFtIHt9IGxhc3RMaW5lcyBcblx0ICovXG5cdHJlY29tbWl0KGxhc3RMaW5lcz10aGlzLmxpbmVzKXtcblx0XHRjb25zdCB7YXRvbXMsIGxpbmVzfT10aGlzXG5cdFx0bGFzdExpbmVzPWxpbmVzLnNsaWNlKC1sYXN0TGluZXMubGVuZ3RoKVxuXG5cdFx0dGhpcy5yb2xsYmFja0xpbmVzKGxhc3RMaW5lcy5sZW5ndGgpXG5cblx0XHRjb25zdCBzdGFydD1hdG9tcy5maW5kSW5kZXgoYT0+YT09bGFzdExpbmVzWzBdLmZpcnN0QXRvbSlcblx0XHRjb25zdCBlbmQ9YXRvbXMuc2xpY2Uoc3RhcnQrMSkuZmluZEluZGV4KGE9PmE9PWxhc3RMaW5lc1tsYXN0TGluZXMubGVuZ3RoLTFdLmxhc3RBdG9tKStzdGFydCsxXG5cdFx0cmV0dXJuIHRoaXMuY29tbWl0KHN0YXJ0LCBlbmQ9PWF0b21zLmxlbmd0aC0xID8gdW5kZWZpbmVkIDogZW5kKVxuXHR9XG5cblx0LyoqXG5cdCAqIFN0b3J5IGNhbiBoYW5kbGUgaXQsIHNvIGl0IGNhbiBiZSBpbiBMaW5lIGFzIG5vcm1hbCBhdG9tXG5cdCAqIGZpcnN0TGluZSBpcyB1c3VhbGx5IG1pbnVzIGZvciBudW1iZXJpbmdcblx0ICovXG5cdGdldE51bWJlcmluZ0F0b20oKXtcblx0XHRjb25zdCB7cHJvcHM6e251bWJlcmluZzp7c3R5bGV9LCBpbmRlbnQ6e2ZpcnN0TGluZT0wfSxpZH0sY29udGV4dDp7TWVhc3VyZSwgbnVtYmVyaW5nfX09dGhpc1xuXHRcdGNvbnN0IHtkZWZhdWx0U3R5bGV9PW5ldyBNZWFzdXJlKHN0eWxlKVxuXG5cdFx0cmV0dXJuIDxDb21wb3NlZFRleHQuRHluYW1pY1xuXHRcdFx0ey4uLmRlZmF1bHRTdHlsZX1cblx0XHRcdGtleT1cIm51bWJlcmluZ1wiXG5cdFx0XHRjbGFzc05hbWU9XCJudW1iZXJpbmdcIlxuXHRcdFx0eD17Zmlyc3RMaW5lfVxuXHRcdFx0d2lkdGg9ey1maXJzdExpbmV9XG5cdFx0XHRjaGlsZHJlbj17KCk9Pm51bWJlcmluZyhpZCl9XG5cdFx0Lz5cblx0fVxuXG5cdG5leHRBdmFpbGFibGVTcGFjZShyZXF1aXJlZCl7XG5cdFx0Y29uc3Qgc3BhY2U9c3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKHJlcXVpcmVkKVxuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHJldHVybiBzcGFjZVxuXHRcdGNvbnN0IHt3aWR0aCxsZWZ0PTAscmlnaHQ9d2lkdGh9PXNwYWNlXG5cdFx0Y29uc3Qge2luZGVudDp7bGVmdDppbmRlbnRMZWZ0PTAscmlnaHQ6aW5kZW50UmlnaHQ9MCxmaXJzdExpbmU9MH0sIG51bWJlcmluZyx9PXRoaXMucHJvcHNcblx0XHRjb25zdCBiRmlyc3RMaW5lPXRoaXMubGluZXMubGVuZ3RoPT0wXG5cdFx0cmV0dXJuIHNwYWNlLmNsb25lKHtcblx0XHRcdGxlZnQ6bGVmdCtpbmRlbnRMZWZ0KyhiRmlyc3RMaW5lJiYhbnVtYmVyaW5nJiZmaXJzdExpbmV8fDApLCBcblx0XHRcdHJpZ2h0OnJpZ2h0LWluZGVudFJpZ2h0LFxuXHRcdH0pXG5cdH1cblxuXHQvKipcblx0ICogQmxvY2sgb2Zmc2V0L3RvcCBtdXN0IGJlIGRlY2lkZWQsIHNvIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSBoYW5kbGVkIGhlcmVcblx0ICogdG9wLCBmaXJzdExpbmUsIG51bWJlcmluZyBcblx0ICogcGFyYWdyYXBoIGJvdHRvbSBkb2Vzbid0IGFmZmVjdCBjdXJyZW50IGxpbmUncyBibG9jayBvZmZzZXQsIHNvIGRvbid0IGhhbmRsZSBpdCBoZXJlXG5cdCAqICoqKiBldmVyeSBjcmVhdGVkIGxpbmUgaXMgYXBwZW5kZWQgSU1NRURJQVRFTFkgaW50byBjb21wb3NlZCwgc28gdGhlIGxpbmUgaW5kZXggaXMgZnJvbSAxIGluIGNyZWF0ZUNvbXBvc2VkMlBhcmVudCBcblx0ICovXG4gICAgY3JlYXRlTGluZShyZXF1aXJlZCl7XG5cdFx0Y29uc3Qgc3BhY2U9dGhpcy5uZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQpXG5cdFx0aWYoIXNwYWNlKVxuXHRcdFx0cmV0dXJuIHNwYWNlXG5cdFx0Y29uc3Qge251bWJlcmluZywgYWxpZ24sc3BhY2luZzp7bGluZUhlaWdodCx0b3B9fT10aGlzLnByb3BzXG5cdFx0Y29uc3QgYkZpcnN0TGluZT10aGlzLmxpbmVzLmxlbmd0aD09MFxuXG5cdFx0Y29uc3QgbGluZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvci5MaW5lKHtcblx0XHRcdHNwYWNlLFxuXHRcdFx0cG9zaXRpb25lZDogYkZpcnN0TGluZSYmbnVtYmVyaW5nID8gW3RoaXMuZ2V0TnVtYmVyaW5nQXRvbSgpXSA6IFtdLFxuXHRcdFx0dG9wOiBiRmlyc3RMaW5lID8gdG9wIDogdW5kZWZpbmVkLCBcblx0XHRcdGxpbmVIZWlnaHQsXG5cdFx0XHRhbGlnbixcblx0XHR9LHtwYXJlbnQ6dGhpc30pXG5cblx0XHRyZXR1cm4gbGluZVxuXHR9XG5cdFxuXHQvKipcblx0ICogfCBzcGFjaW5nIGxlZnQgfCBsaW5lIGJveCB8IHNwYWNpbmcgcmlnaHR8XG5cdCAqIHNwYWNpbmcgYm90dG9tIGRvZXNuJ3QgYWZmZWN0IGxpbmUgYmxvY2sgb2Zmc2V0LCBzbyBpdCdzIG9rIGhlcmVcblx0ICogU3Rvcnk6IGhlbHBzIFxuXHQgKiAxLiBtZXJnZSwgZm9yIHBlcmZvcm1hbmNlIG9uIHZpZXcsIHNpbXBsZXIgZG9tXG5cdCAqIDIuIHNldCBiYXNlbGluZVxuXHQgKiAzLiBhbGlnblxuXHQgKiA0LiBqdXN0aWZ5XG5cdCAqIEBwYXJhbSB7Kn0gbGluZSBcblx0ICogQHBhcmFtIHsqfSBsYXN0IFxuXHQgKi9cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KGxpbmUsYkxhc3RMaW5lKXtcblx0XHRjb25zdCB7aGVpZ2h0LHdpZHRoLCBhbmNob3IsIHRvcFRvQmxvY2tPZmZzZXR9PWxpbmVcblx0XHRjb25zdCB7XG5cdFx0XHRudW1iZXJpbmcsXG5cdFx0XHRpbmRlbnQ6e2xlZnQ9MCxyaWdodD0wLCBmaXJzdExpbmU9MH0sXG5cdFx0XHRzcGFjaW5nOntib3R0b209MH0sXG5cdFx0XHRvcnBoYW4sd2lkb3csa2VlcFdpdGhOZXh0LGtlZXBMaW5lcyxcblx0XHRcdH09dGhpcy5wcm9wc1xuXHRcdFxuXHRcdGNvbnN0IGJGaXJzdExpbmU9dGhpcy5saW5lcy5sZW5ndGg9PTFcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIGNsYXNzTmFtZT1cImxpbmVcIlxuXHRcdFx0XHRoZWlnaHQ9e3RvcFRvQmxvY2tPZmZzZXQraGVpZ2h0KyhiTGFzdExpbmUmJmJvdHRvbXx8MCl9IFxuXHRcdFx0XHR3aWR0aD17bGVmdCsoYkZpcnN0TGluZSYmIW51bWJlcmluZyYmZmlyc3RMaW5lfHwwKSt3aWR0aCtyaWdodH0gXG5cdFx0XHRcdHBhZ2luYXRpb249e3tcblx0XHRcdFx0XHRpZDp0aGlzLnByb3BzLmlkLFxuXHRcdFx0XHRcdG9ycGhhbix3aWRvdyxrZWVwV2l0aE5leHQsa2VlcExpbmVzLCBcblx0XHRcdFx0XHRpOnRoaXMubGluZXMubGVuZ3RoLFxuXHRcdFx0XHRcdGxhc3Q6Ykxhc3RMaW5lXG5cdFx0XHRcdH19IFxuXHRcdFx0XHRhbmNob3I9e2FuY2hvcn0gXG5cdFx0XHRcdD5cblx0XHRcdFx0PEdyb3VwIFxuXHRcdFx0XHRcdHg9e2xlZnQrKGJGaXJzdExpbmUmJiFudW1iZXJpbmcmJmZpcnN0TGluZXx8MCl9IFxuXHRcdFx0XHRcdHk9e3RvcFRvQmxvY2tPZmZzZXR9IFxuXHRcdFx0XHRcdHdpZHRoPXt3aWR0aH0gXG5cdFx0XHRcdFx0aGVpZ2h0PXtoZWlnaHR9PlxuXHRcdFx0XHRcdHtsaW5lLnJlbmRlcihiTGFzdExpbmUpfVxuICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICApXG5cdH1cblx0XG5cdHN0YXRpYyBMaW5lPWNsYXNzIExpbmUgZXh0ZW5kcyBMYXlvdXQuSW5saW5le1xuXHRcdC8qKndoZXJlIGRvZXMgbGFzdCBhdG9tIGVuZCB3aXRoIGluIGlubGluZSBzaXplLCBmb3IgcG9zaXRpb25pbmcgb25seSAqL1xuXHRcdGdldCBjdXJyZW50WCgpe1xuXHRcdFx0cmV0dXJuIHRoaXMuaW5saW5lU2VnbWVudHMuY3VycmVudFhcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVQYXJhZ3JhcGggZXh0ZW5kcyBlZGl0YWJsZShQYXJhZ3JhcGgse3N0b3BwYWJsZTp0cnVlfSl7XG5cdC8qKnRvIHN5bmMgbGFzdENvbXBvc2VkIHdpdGggY29tcG9zZWQgKi9cblx0cm9sbGJhY2tMaW5lcyhuKXtcblx0XHRzdXBlci5yb2xsYmFja0xpbmVzKG4pXG5cdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuc3BsaWNlKC1uKVxuXHR9XG5cdFxuXHRjYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCh7aGFzaCxjaGFuZ2VkPWhhc2ghPXRoaXMucHJvcHMuaGFzaH0pe1xuXHRcdGlmKGNoYW5nZWQpe1xuXHRcdFx0dGhpcy5hdG9tcz1bXVxuXHRcdFx0c3VwZXIuY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoLi4uYXJndW1lbnRzKVxuXHRcdH1cblx0fVxuXG5cdC8qKmlmIGxpbmVTZWdtZW50cyBpcyBzYW1lLCBsYXN0IGxheW91dGVkIGxpbmUgc2hvdWxkIGJlIGFibGUgdG8gZml0IGluIHdpdGhvdXQgcmVsYXlvdXQgKi9cblx0YXBwZW5kTGFzdENvbXBvc2VkKCl7XG5cdFx0Y29uc3QgbGluZXM9dGhpcy5saW5lc1xuXHRcdHRoaXMubGluZXM9W11cblx0XHRjb25zdCBzcGFjZUNoYW5nZWRBdD10aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZC5maW5kSW5kZXgoKGEsaSk9Pntcblx0XHRcdHZhciBsaW5lPWxpbmVzW2ldXG5cdFx0XHRjb25zdCBuZXdMaW5lPXRoaXMuY3JlYXRlTGluZSh7aGVpZ2h0OmEucHJvcHMuaGVpZ2h0fSlcblx0XHRcdGlmKCFuZXdMaW5lKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0Y29uc3Qgc3BhY2U9bmV3TGluZS5wcm9wcy5zcGFjZVxuXHRcdFx0aWYobGluZS5pc0ZpdFRvKHNwYWNlKSl7XG5cdFx0XHRcdGxpbmU9bGluZS5jbG9uZTRTcGFjZShzcGFjZSlcblx0XHRcdFx0dGhpcy5saW5lcy5wdXNoKGxpbmUpXG5cdFx0XHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQoYSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQuc3BsaWNlKGkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0fSlcblxuXHRcdGlmKHNwYWNlQ2hhbmdlZEF0PT0wKXtcblx0XHRcdHRoaXMuY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2NoYW5nZWQ6dHJ1ZX0pXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cdFx0XG5cdFx0aWYoc3BhY2VDaGFuZ2VkQXQ+MCl7XG5cdFx0XHR0aGlzLmNvbW1pdCh0aGlzLmF0b21zLmluZGV4T2YobGluZXNbc3BhY2VDaGFuZ2VkQXRdLmZpcnN0QXRvbSkpXG5cdFx0fVxuXHRcdHJldHVybiB0cnVlXG5cdH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5pbXBvcnQge3NoYWxsb3dFcXVhbH0gZnJvbSBcInJlY29tcG9zZVwiXG5cbmltcG9ydCB7Tm9DaGlsZCxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBicmVha09wcG9ydHVuaXRpZXMgZnJvbSBcIi4uL3dvcmR3cmFwL2xpbmUtYnJlYWtcIlxuXG5pbXBvcnQge1RleHQgYXMgQ29tcG9zZWRUZXh0fSBmcm9tIFwiLi4vY29tcG9zZWRcIlxuXG5jb25zdCBTdXBlcj1Ob0NoaWxkKGRvbS5UZXh0KVxuXG5jbGFzcyBUZXh0IGV4dGVuZHMgU3VwZXJ7XG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0Li4uU3VwZXIuY29udGV4dFR5cGVzLFxuXHRcdE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuXHR9XG5cbiAgICBnZXQgdGV4dCgpe1xuICAgICAgICBjb25zdCB7Y2hpbGRyZW49XCJcIn09dGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbi5qb2luKFwiXCIpIDogY2hpbGRyZW5cbiAgICB9XG5cbiAgICBjcmVhdGVNZWFzdXJlPW1lbW9pemUoKGZvbnRzLHNpemUsYm9sZCxpdGFsaWMpPT57XG4gICAgICAgIGNvbnN0IHtNZWFzdXJlfT10aGlzLmNvbnRleHRcbiAgICAgICAgY29uc3QgbWVhc3VyZT1uZXcgTWVhc3VyZSh7Zm9udHMsc2l6ZSxib2xkLGl0YWxpY30pXG4gICAgICAgIGNvbnN0IF9zdHJpbmdXaWR0aD1tZWFzdXJlLnN0cmluZ1dpZHRoLmJpbmQobWVhc3VyZSlcbiAgICAgICAgY29uc3QgY2FjaGU9bmV3IE1hcCgpXG4gICAgICAgIG1lYXN1cmUuc3RyaW5nV2lkdGg9d29yZD0+e1xuICAgICAgICAgICAgaWYoY2FjaGUuaGFzKHdvcmQpKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQod29yZClcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoPV9zdHJpbmdXaWR0aCh3b3JkKVxuICAgICAgICAgICAgY2FjaGUuc2V0KHdvcmQsd2lkdGgpXG4gICAgICAgICAgICByZXR1cm4gd2lkdGhcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVhc3VyZVxuICAgIH0pXG5cbiAgICBnZXQgbWVhc3VyZSgpe1xuICAgICAgICBjb25zdCB7Zm9udHMsIHNpemUsIGJvbGQsIGl0YWxpYywgfT10aGlzLnByb3BzXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lYXN1cmUoZm9udHMsc2l6ZSxib2xkLGl0YWxpYylcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFN0eWxlKCl7XG4gICAgICAgIGNvbnN0IHtjb2xvcixoaWdobGlnaHQsdmFuaXNoLGJvcmRlcix1bmRlcmxpbmUsc3RyaWtlfT10aGlzLnByb3BzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50aGlzLm1lYXN1cmUuZGVmYXVsdFN0eWxlLFxuICAgICAgICAgICAgY29sb3IsIGhpZ2hsaWdodCxib3JkZXIsdW5kZXJsaW5lLHN0cmlrZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaXQncyBzYWZlIHRvIG92ZXJyaWRlIHJlbmRlciBzaW5jZSBhbGxDaGlsZHJlbkNvbXBvc2VkIHdvdWxkIGJlIHNldCBtYW51YWxseSBhdCBlbmQgb2YgcmVuZGVyXG4gICAgICovXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIHRyeXtcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmFuaXNoKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0U3R5bGU9dGhpcy5kZWZhdWx0U3R5bGVcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmU9dGhpcy5tZWFzdXJlXG4gICAgICAgICAgICBjb25zdCB3aGl0ZXNwYWNlV2lkdGg9bWVhc3VyZS5zdHJpbmdXaWR0aChcIiBcIilcblxuICAgICAgICAgICAgbGV0IHN0YXJ0PTBcbiAgICAgICAgICAgIGJyZWFrT3Bwb3J0dW5pdGllcyh0aGlzLnRleHQpLmZvckVhY2goKGEsaixfMSxfMixqTGFzdD1fMS5sZW5ndGgtMT09aik9PntcbiAgICAgICAgICAgICAgICBhLnNwbGl0KC8oXFxzKS8pLmZpbHRlcihhPT4hIWEpLmZvckVhY2goKGIsaSwkMSwkMixpTGFzdD0kMS5sZW5ndGgtMT09aSk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNXaGl0ZXNwYWNlPWI9PVwiIFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZGluZz1iLmVuZHNXaXRoKFwiLFwiKSA/IGIuc3Vic3RyaW5nKDAsYi5sZW5ndGgtMSkgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbXBvc2VkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTppc1doaXRlc3BhY2UgPyBcIndoaXRlc3BhY2VcIiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOmlzV2hpdGVzcGFjZSA/IHdoaXRlc3BhY2VXaWR0aCA6IG1lYXN1cmUuc3RyaW5nV2lkdGgoYiksXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDppc1doaXRlc3BhY2UgPyAwIDogKGVuZGluZyA/IG1lYXN1cmUuc3RyaW5nV2lkdGgoZW5kaW5nKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtZW5kYXRcIjpzdGFydCs9Yi5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogYixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlT3Bwb3J0dW5pdHk6KChpK2opPT0wfHwoakxhc3QmJmlMYXN0KSkmJiFpc1doaXRlc3BhY2UmJmIvL2ZpcnN0IG9yIGxhc3RcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1maW5hbGx5e1xuICAgICAgICAgICAgdGhpcy5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuICAgICAgICB9XG4gICAgfVxuXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudChwcm9wcyl7XG4gICAgICAgIHJldHVybiA8Q29tcG9zZWRUZXh0IHsuLi5wcm9wc30vPlxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGV4dCBleHRlbmRzIGVkaXRhYmxlKFRleHQpe1xuICAgIGlzQXRvbUNoYW5nZWQocHJvcHMpe1xuICAgICAgICBpZighc3VwZXIuaXNBdG9tQ2hhbmdlZCguLi5hcmd1bWVudHMpKXtcbiAgICAgICAgICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKHByb3BzLHRoaXMucHJvcHMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZW5kZXIoKXtcbiAgICAgICAgaWYodGhpcy50ZXh0Lmxlbmd0aD09MCl7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZENvbXBvc2VkKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmRlZmF1bHRTdHlsZSxcbiAgICAgICAgICAgICAgICB3aWR0aDowLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOjAsXG4gICAgICAgICAgICAgICAgXCJkYXRhLWVuZGF0XCI6MCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogXCJcIlxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgdGhpcy5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKClcbiAgICB9XG59XG4iLCJpbXBvcnQgUGF0aCBmcm9tIFwic3ZncGF0aFwiXG5pbXBvcnQgc2ltcGxpZnkgZnJvbSBcInNpbXBsaWZ5LXBhdGhcIlxuaW1wb3J0IGNvbnRvdXJzIGZyb20gXCJzdmctcGF0aC1jb250b3Vyc1wiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBfXyQxIGV4dGVuZHMgUGF0aHtcbiAgICBzdGF0aWMgZnJvbVJlY3Qoe3gseSx3aWR0aDp3LGhlaWdodDpofSl7XG4gICAgICAgIHJldHVybiBuZXcgdGhpcyhgTSR7eH0gJHt5fSBoJHt3fSB2JHtofSBoJHstd316YCkgICAgXG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKXtcbiAgICAgICAgdGhpcy5fX2V2YWx1YXRlU3RhY2soKVxuICAgICAgICByZXR1cm4gbWVtb2l6ZShkPT5zdXBlci50b1N0cmluZygpKSh0aGlzLnNlZ21lbnRzLm1hcChhPT5hLmpvaW4oXCJcIikpLmpvaW4oXCJcIikpXG4gICAgfVxuXG4gICAgYm91bmRzKCl7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRvdXIoKVxuXHRcdFx0LnJlZHVjZSgoe2xlZnQsdG9wLHJpZ2h0LGJvdHRvbX0sW3gseV0pPT4oe1xuXHRcdFx0XHRsZWZ0Ok1hdGgubWluKGxlZnQseCksXG5cdFx0XHRcdHRvcDpNYXRoLm1pbih0b3AseSksXG5cdFx0XHRcdHJpZ2h0Ok1hdGgubWF4KHJpZ2h0LHgpLFxuXHRcdFx0XHRib3R0b206TWF0aC5tYXgoYm90dG9tLHkpXG5cdFx0XHR9KSx7XG5cdFx0XHRcdGxlZnQ6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG5cdFx0XHRcdHRvcDpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcblx0XHRcdFx0cmlnaHQ6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsXG5cdFx0XHRcdGJvdHRvbTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcblx0XHRcdH0pXG4gICAgfVxuXG4gICAgY29udG91cih0b2xlcmFuY2U9MSxkPXRoaXMudG9TdHJpbmcoKSl7XG4gICAgICAgIHJldHVybiBtZW1vaXplKCh0b2xlcmFuY2UsIGQpPT5jb250b3Vycyh0aGlzLnNlZ21lbnRzKVxuICAgICAgICAgICAgLm1hcChhPT5hLm1hcCgoW3gseV0pPT5bTWF0aC5jZWlsKHgpLCBNYXRoLmNlaWwoeSldKSlcbiAgICAgICAgICAgIC5tYXAoYT0+c2ltcGxpZnkoYSx0b2xlcmFuY2UpKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWxsLGEpPT5bLi4uYWxsLC4uLmFdLFtdKVxuICAgICAgICApKCk7XG4gICAgfVxuXG4gICAgaW50ZXJzZWN0cyhsaW5lLyp7eDEseDIseTEseTJ9Ki8sIHRvbGVyYW5jZSl7XG4gICAgICAgIGNvbnN0IHBvaW50cz10aGlzLmNvbnRvdXIodG9sZXJhbmNlKVxuICAgICAgICByZXR1cm4gcG9pbnRzLnNsaWNlKDEpXG5cdFx0XHQubWFwKChbeDIseTJdLGkpPT57XG5cdFx0XHRcdGNvbnN0IFt4MSx5MV09cG9pbnRzW2ldXG5cdFx0XHRcdHJldHVybiB7eDEseTEseDIseTJ9XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcChsaW5lMT0+bGluZV9saW5lX2ludGVyc2VjdChsaW5lMSxsaW5lKSlcblx0XHRcdC5maWx0ZXIoYT0+ISFhKVxuICAgIH1cblxuICAgIGNlbnRlcigpe1xuICAgICAgICBjb25zdCB7bGVmdCxyaWdodCx0b3AsYm90dG9tLHg9KGxlZnQrcmlnaHQpLzIsIHk9KHRvcCtib3R0b20pLzJ9PXRoaXMuYm91bmRzKClcbiAgICAgICAgcmV0dXJuIHt4LHl9XG4gICAgfVxuXG4gICAgY2xvbmUoKXtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMudG9TdHJpbmcoKSlcbiAgICB9XG5cbiAgICBzaXplKHN0cm9rZVdpZHRoPTApe1xuICAgICAgICBjb25zdCB7bGVmdCxyaWdodCx0b3AsYm90dG9tLHdpZHRoPXJpZ2h0LWxlZnQsaGVpZ2h0PWJvdHRvbS10b3B9PXRoaXMuYm91bmRzKClcbiAgICAgICAgcmV0dXJuIHt3aWR0aDp3aWR0aCtzdHJva2VXaWR0aCxoZWlnaHQ6aGVpZ2h0K3N0cm9rZVdpZHRofVxuICAgIH1cbn1cblxuY29uc3QgYmV0d2Vlbj0oYSxiMSxiMik9PigoYSA+PSBiMSkgJiYgKGEgPD0gYjIpKXx8KChhID49IGIyKSAmJiAoYSA8PSBiMSkpXG5mdW5jdGlvbiBsaW5lX2xpbmVfaW50ZXJzZWN0KGxpbmUxLCBsaW5lMikge1xuXHR2YXIgeDEgPSBsaW5lMS54MSwgeDIgPSBsaW5lMS54MiwgeDMgPSBsaW5lMi54MSwgeDQgPSBsaW5lMi54Mjtcblx0dmFyIHkxID0gbGluZTEueTEsIHkyID0gbGluZTEueTIsIHkzID0gbGluZTIueTEsIHk0ID0gbGluZTIueTI7XG5cdHZhciBwdF9kZW5vbSA9ICh4MSAtIHgyKSAqICh5MyAtIHk0KSAtICh5MSAtIHkyKSAqICh4MyAtIHg0KTtcblx0dmFyIHB0X3hfbnVtID0gKHgxKnkyIC0geTEqeDIpICogKHgzIC0geDQpIC0gKHgxIC0geDIpICogKHgzKnk0IC0geTMqeDQpO1xuXHR2YXIgcHRfeV9udW0gPSAoeDEqeTIgLSB5MSp4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMqeTQgLSB5Myp4NCk7XG5cdGlmIChwdF9kZW5vbSA9PSAwKSB7XG5cdFx0aWYocHRfeF9udW09PTAgJiYgcHRfeV9udW09PTApey8vb3ZlcmxhcHBlZFxuXHRcdFx0XG5cdFx0fVxuXHRcdC8vcmV0dXJuIFwicGFyYWxsZWxcIlxuXHR9ZWxzZXtcblx0XHR2YXIgcHQgPSB7XG5cdFx0XHR4OiBwdF94X251bSAvIHB0X2Rlbm9tLFxuXHRcdFx0eTogcHRfeV9udW0gLyBwdF9kZW5vbVxuXHRcdH1cblxuXHRcdGlmICggYmV0d2VlbihwdC54LCB4MSwgeDIpXG5cdFx0XHQmJiBiZXR3ZWVuKHB0LnksIHkxLCB5Milcblx0XHRcdCYmIGJldHdlZW4ocHQueCwgeDMsIHg0KVxuXHRcdFx0JiYgYmV0d2VlbihwdC55LCB5MywgeTQpKSB7XG5cdFx0XHRcdHJldHVybiBwdFxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvL3JldHVybiBcIm5vdCBpbiByYW5nZVwiXG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBPdmVybGF5IGZyb20gXCIuL292ZXJsYXlcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi90b3BcIlxuXG4vKipcbiAqIHJlc2l6YWJsZSBzdXBwb3J0IHR3byB0eXBlczpcbiAqIDEuIHNwb3RzIGZvciBtdWx0aXBsZSBkaXJlY3Rpb25zLCBvciBcbiAqIDIuIGEgc2luZ2xlIGRpcmVjdGlvbiBcbiAqL1xuY29uc3QgZGlyZWN0aW9uPVByb3BUeXBlcy5vbmVPZihcImV3LG5zLG53c2UsbmVzd1wiLnNwbGl0KFwiLFwiKS5yZWR1Y2UoKGFsbCxhKT0+KGFsbC5zcGxpY2UoMCwwLGEsXCItXCIrYSksYWxsKSxbXSkpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNpemFibGUgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdGRpcmVjdGlvbixcblx0XHRvblJlc2l6ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcblx0XHRzcG90czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnNoYXBlKHtcblx0XHRcdHg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRcdHk6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRcdGRpcmVjdGlvbixcblx0XHRcdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdH0pKVxuXHR9XG5cblx0c3RhdGljIENvbFJlc2l6ZXI9cHJvcHM9PjxSZXNpemVyIHsuLi5wcm9wc30gZGlyZWN0aW9uPVwiZXdcIiBjdXJzb3I9XCJjb2wtcmVzaXplXCIvPlxuXHRzdGF0aWMgUm93UmVzaXplcj1wcm9wcz0+PFJlc2l6ZXIgey4uLnByb3BzfSBkaXJlY3Rpb249XCItbnNcIiBjdXJzb3I9XCJyb3ctcmVzaXplXCIvPlxuXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RhdGU9e31cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtyZXNpemluZyxjdXJzb3J9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7Y2hpbGRyZW4sc3BvdHM9W10sIG9uRW5kLCBkaXJlY3Rpb259PXRoaXMucHJvcHNcblx0XHRpZihyZXNpemluZyl7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8T3ZlcmxheVxuXHRcdFx0XHRcdG9uTW91c2VVcD17ZT0+e1xuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmc6ZmFsc2V9KVxuXHRcdFx0XHRcdFx0b25FbmQgJiYgb25FbmQoKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0b25Nb3VzZU1vdmU9e2U9Pntcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdHRoaXMucmVzaXplKGUpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRzdHlsZT17e2N1cnNvcn19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0XHR7c3BvdHMubWFwKGE9PjxTcG90IGtleT17YS5kaXJlY3Rpb259IHsuLi5hfS8+KX1cblx0XHRcdFx0PC9PdmVybGF5PlxuXHRcdFx0KVxuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7ZGlyZWN0aW9uID8gUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLHtvbk1vdXNlRG93bjplPT50aGlzLnN0YXJ0UmVzaXplKGRpcmVjdGlvbixlKX0pIDogY2hpbGRyZW59XG5cdFx0XHRcdHtzcG90cy5tYXAoYT0+PFNwb3Qga2V5PXthLmRpcmVjdGlvbn0gey4uLmF9IG9uTW91c2VEb3duPXtlPT50aGlzLnN0YXJ0UmVzaXplKGEuZGlyZWN0aW9uLGUpfS8+KX19XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdClcblx0fVxuXG5cdHN0YXJ0UmVzaXplKHJlc2l6aW5nLGUpe1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRjb25zdCB7Y2xpZW50WDpsZWZ0LCBjbGllbnRZOnRvcCx0YXJnZXQ6e3N0eWxlOntjdXJzb3J9fX09ZVxuXHRcdGNvbnN0IHtvblN0YXJ0fT10aGlzLnByb3BzXG5cdFx0dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmcsY3Vyc29yfSlcblx0XHRvblN0YXJ0ICYmIG9uU3RhcnQoKVxuXHRcdHRoaXMubGVmdD1sZWZ0XG5cdFx0dGhpcy50b3A9dG9wXG5cdH1cblxuXHRyZXNpemUoe2NsaWVudFg6bGVmdCxjbGllbnRZOnRvcH0pe1xuXHRcdGNvbnN0IHtwcm9wczp7b25SZXNpemV9LCBzdGF0ZTp7cmVzaXppbmd9fT10aGlzXG5cdFx0bGV0IHg9bGVmdC10aGlzLmxlZnRcblx0XHRsZXQgeT10b3AtdGhpcy50b3Bcblx0XHRzd2l0Y2gocmVzaXppbmcpe1xuXHRcdGNhc2UgXCItbnNcIjpcblx0XHRcdHkqPS0xXG5cdFx0Y2FzZSBcIm5zXCI6XG5cdFx0XHRpZih5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eToteX0pKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdGJyZWFrXG5cdFx0Y2FzZSBcIi1ld1wiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwiZXdcIjpcblx0XHRcdGlmKHgpe1xuXHRcdFx0XHRpZihmYWxzZT09PW9uUmVzaXplKHt4fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblxuXHRcdGNhc2UgXCItbndzZVwiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwibndzZVwiOlxuXHRcdFx0aWYoeCAmJiB5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eDoteCx5fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblxuXHRcdGNhc2UgXCItbmVzd1wiOlxuXHRcdFx0eCo9LTFcblx0XHRjYXNlIFwibmVzd1wiOlxuXHRcdFx0aWYoeCAmJiB5KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eCx5fSkpe1xuXHRcdFx0XHRcdHJldHVyblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0YnJlYWtcblx0XHR9XG5cdFx0dGhpcy5sZWZ0PWxlZnRcblx0XHR0aGlzLnRvcD10b3Bcblx0fVxufVxuXG5jb25zdCBTcG90PSgoe3dpZHRoPTUsaGVpZ2h0PTUseCx5LGRpcmVjdGlvbixzdHlsZT17fSwgLi4ucHJvcHN9KT0+PHJlY3Qgey4uLntcblx0XHQuLi5wcm9wcyxcblx0XHR3aWR0aCxoZWlnaHQsXG5cdFx0eDp4LXdpZHRoLzIsXG5cdFx0eTp5LWhlaWdodC8yLFxuXHRcdHN0eWxlOntcblx0XHRcdGZpbGw6XCJ3aGl0ZVwiLHN0cm9rZTpcImxpZ2h0Z3JheVwiLHN0cm9rZVdpZHRoOjEsXG5cdFx0XHRjdXJzb3I6YCR7ZGlyZWN0aW9uLnJlcGxhY2UoXCItXCIsXCJcIil9LXJlc2l6ZWAsXG5cdFx0XHQuLi5zdHlsZVxuXHRcdH0sXG5cdH19Lz5cbilcbi8qKlxuICogY29sdW1uL3JvdyByZXNpemVyXG4gKi9cbmNsYXNzIFJlc2l6ZXIgZXh0ZW5kcyBDb21wb25lbnR7XG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RhdGU9e3Jlc2l6aW5nOmZhbHNlfVxuXHR9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtyZXNpemluZ309dGhpcy5zdGF0ZVxuXHRcdGNvbnN0IHtvblJlc2l6ZSxkaXJlY3Rpb24sZD1kaXJlY3Rpb249PVwiZXdcIiA/ICd5JyA6J3gnLGN1cnNvcixjaGlsZHJlbiwuLi5wcm9wc309dGhpcy5wcm9wc1xuXHRcdHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPFJlc2l6YWJsZVxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgb25TdGFydD17ZT0+dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmc6dHJ1ZX0pfVxuICAgICAgICAgICAgICAgICAgICBvbkVuZD17ZT0+dGhpcy5zZXRTdGF0ZSh7cmVzaXppbmc6ZmFsc2V9KX1cbiAgICAgICAgICAgICAgICAgICAgb25SZXNpemU9e29uUmVzaXplfT5cbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgey4uLnByb3BzfSBzdHJva2U9e1widHJhbnNwYXJlbnRcIn0gc3Ryb2tlV2lkdGg9ezV9IHN0eWxlPXt7Y3Vyc29yfX0vPlxuICAgICAgICAgICAgICAgIDwvUmVzaXphYmxlPlxuICAgICAgICAgICAgICAgIHtyZXNpemluZyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUb3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB7Li4uey4uLnByb3BzLFtkKycxJ106XCItMTAwJVwiLCBbZCsnMiddOlwiMTAwJVwifX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJsaWdodGdyYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheT1cIjUsNVwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub3A+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHR9XG59XG5cblxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi9vdmVybGF5XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm90YXRhYmxlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR4OlByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRyOlByb3BUeXBlcy5udW1iZXIsXG5cdFx0ZGVncmVlOiBQcm9wVHlwZXMubnVtYmVyLFxuXHR9XG5cdFxuXHRzdGF0ZT17cm90YXRpbmc6ZmFsc2V9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3Byb3BzOntyPTEyLHgseSxvbkVuZCwgZGVncmVlPTAsIG9uUm90YXRlfSxzdGF0ZTp7cm90YXRpbmd9fT10aGlzXG5cdFx0Y29uc3Qgcm90YXRvcj17XG5cdFx0XHR3aWR0aDoyKnIsaGVpZ2h0OjIqcix4Ongtcix5Oi0yKnIsXG5cdFx0XHRzdHlsZTp7ZmlsbDpcIndoaXRlXCIsc3Ryb2tlOlwibGlnaHRncmF5XCIsc3Ryb2tlV2lkdGg6MX0sXG5cdFx0fVxuXHRcdFxuXHRcdGlmKCFyb3RhdGluZylcblx0XHRcdHJldHVybiAoPHVzZSB4bGlua0hyZWY9XCIjcm90YXRvclwiIHsuLi5yb3RhdG9yfSBvbk1vdXNlRG93bj17ZT0+dGhpcy5zZXRTdGF0ZSh7cm90YXRpbmc6dHJ1ZX0pfS8+KVxuXHRcdFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxnIHJlZj1cImxvY2F0b3JcIj5cblx0XHRcdFx0XHQ8dGV4dCB4PXt4K3J9IHk9ey0yMH0+e2RlZ3JlZX08L3RleHQ+XG5cdFx0XHRcdFx0PHVzZSB4bGlua0hyZWY9XCIjcm90YXRvclwiIHsuLi5yb3RhdG9yfS8+XG5cdFx0XHRcdDwvZz5cblx0XHRcdFx0PE92ZXJsYXkgY3Vyc29yPVwiY3Jvc3NoYWlyXCJcblx0XHRcdFx0XHRvbk1vdXNlVXA9e2U9Pntcblx0XHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe3JvdGF0aW5nOnVuZGVmaW5lZH0pXG5cdFx0XHRcdFx0XHRpZihvbkVuZClcblx0XHRcdFx0XHRcdFx0b25FbmQoKVxuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0b25Nb3VzZU1vdmU9e2U9Pntcblx0XHRcdFx0XHRcdG9uUm90YXRlKGUpXG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZSxBQ1RJT04sIFJlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCB7Y29tcG9zZSwgc2hvdWxkVXBkYXRlIH0gZnJvbSBcInJlY29tcG9zZVwiXG5cbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vLi4vY29tcG9zZWQvZ3JvdXBcIlxuaW1wb3J0IE1vdmFibGUgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9tb3ZhYmxlXCJcbmltcG9ydCBSZXNpemFibGUgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGVcIlxuaW1wb3J0IFJvdGF0YWJsZSBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3JvdGF0YWJsZVwiXG5cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShcblx0d2hlblNlbGVjdGlvbkNoYW5nZSgpLFxuXHRzaG91bGRVcGRhdGUoKGEsYik9Pntcblx0XHRjb25zdCB0YXJnZXRDaGFuZ2VkPWEuc2VsZWN0aW9uPy5wb3NpdGlvbi5pZCE9Yi5zZWxlY3Rpb24/LnBvc2l0aW9uLmlkXG5cdFx0Y29uc3QgaXNTZWxmT3JHcmFuZD10PT4hIXQuc2VsZWN0aW9uPy5nZXRDb21wb3Nlcih0LnNlbGVjdGlvbj8ucG9zaXRpb24uaWQpLmNsb3Nlc3QocD0+cC5wcm9wcy5pZD09dC5pZClcblx0XHRjb25zdCBzaGFwZVJlY29tcG9zZWQ9YS5jb21wb3NlZFVVSUQhPWIuY29tcG9zZWRVVUlEXG5cdFx0Y29uc3QgaXNBR3JhbmQ9aXNTZWxmT3JHcmFuZChhKVxuXHRcdGNvbnN0IGlzQkdyYW5kPWlzU2VsZk9yR3JhbmQoYilcblx0XHRyZXR1cm4gKHNoYXBlUmVjb21wb3NlZCB8fCB0YXJnZXRDaGFuZ2VkKSYmKGlzQUdyYW5kfHxpc0JHcmFuZClcblx0fSlcbikoY2xhc3MgRm9jdXNTaGFwZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0d2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHBhdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0cmVzaXphYmxlOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KSxcblx0XHRyb3RhdGFibGU6IFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHR4OlByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRcdHk6UHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0cjpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0ZGVncmVlOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdH0pLFxuXHRcdG1vdmFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRcdGlkOlByb3BUeXBlcy5zdHJpbmcsXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRlZGl0YWJsZTpQcm9wVHlwZXMuYW55XG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtpZCxzZWxlY3Rpb259KXtcblx0XHRpZighc2VsZWN0aW9uKVxuXHRcdFx0cmV0dXJuIHt9XG5cdFx0Y29uc3QgZ2V0Q29tcG9zZXI9YT0+c2VsZWN0aW9uLnBvc2l0aW9uaW5nLmdldENvbXBvc2VyKGEpXG5cdFx0Y29uc3QgY3Vyc29yPXNlbGVjdGlvbi5wb3NpdGlvbi5pZFxuXHRcdGNvbnN0IHRhcmdldD1nZXRDb21wb3NlcihpZClcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTp0YXJnZXQuZ2V0Q29tcG9zZVR5cGUoKSxcblx0XHRcdFxuXHRcdFx0Ly9hbGwgZ3JhbmQgZm9jdXMgc2hhcGUgb2YgY3Vyc29yL3NlbGVjdGlvbiBzaG91bGQgc2hvdyBpdHNlbGZcblx0XHRcdHNob3dGb2N1czohIWdldENvbXBvc2VyKGN1cnNvcikuY2xvc2VzdChhPT5hLnByb3BzLmlkPT1pZCksXG5cdFx0XHRcblx0XHRcdC8vXG5cdFx0XHRpc0FuY2hvcjp0YXJnZXQuY2xvc2VzdChhPT4oYSE9dGFyZ2V0ICYmIChhLmlzRnJhbWV8fGEuaXNTZWN0aW9uKSl8fGEuZ2V0Q29tcG9zZVR5cGUoKT09XCJhbmNob3JcIikuZ2V0Q29tcG9zZVR5cGUoKT09XCJhbmNob3JcIixcblx0XHRcdFxuXHRcdFx0Ly9zaG91bGQgbm90IHRyYW5zZm9ybSBpZiBjdXJzb3Ivc2VsZWN0aW9uIGlzIGluIGVkaXRhYmxlIGN1cnNvciwgc3VjaCBhcyBhbnkgaW5saW5lIGNvbnRlbnRcblx0XHRcdGlzRWRpdGFibGVDdXJzb3I6IChpc1BhcmFncmFwaD0+e1xuXHRcdFx0XHRcdGNvbnN0IGdyYW5kPWdldENvbXBvc2VyKGN1cnNvcikuY2xvc2VzdChhPT5pc1BhcmFncmFwaChhKXx8YS5wcm9wcy5pZD09aWQpXG5cdFx0XHRcdFx0cmV0dXJuIGdyYW5kICYmIGlzUGFyYWdyYXBoKGdyYW5kKVxuXHRcdFx0XHR9KShhPT5hLmdldENvbXBvc2VUeXBlKCk9PVwicGFyYWdyYXBoXCIpLFxuXHRcdH1cblx0fVxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtwcm9wczp7c2VsZWN0aW9uLCBjaGlsZHJlbjpvdXRsaW5lLCByb3RhdGUsIHNjYWxlLCB0cmFuc2xhdGV9LGNvbnRleHQ6e2VkaXRhYmxlfSxzdGF0ZTp7c2hvd0ZvY3VzfX09dGhpc1xuXHRcdGlmKCFzZWxlY3Rpb24gfHwgIWVkaXRhYmxlIHx8ICFzaG93Rm9jdXMpe1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEdyb3VwIHsuLi57cm90YXRlLCBzY2FsZSwgLi4udHJhbnNsYXRlfX0+XG5cdFx0XHRcdFx0e291dGxpbmV9XG5cdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09b3V0bGluZS5wcm9wc1xuXHRcdGNvbnN0ICRvdXRsaW5lPW5ldyBSZWFjdFF1ZXJ5KG91dGxpbmUpXG5cdFx0Y29uc3QgY29udGVudD0kb3V0bGluZS5maW5kRmlyc3QoXCIuY29udGVudFwiKS5nZXQoMClcblxuXHRcdGNvbnN0IHtpZCwgZGVncmVlLCBkaXNwYXRjaCxwb3NpdGlvbmluZz1zZWxlY3Rpb24ucG9zaXRpb25pbmcsXG5cdFx0XHRwYXRoPWBNMCAwIGgke3dpZHRofSB2JHtoZWlnaHR9IGgkey13aWR0aH0gWmAsXG5cdFx0XHRyZXNpemFibGU9Wy8vZGVmYXVsdCBmb3IgcmVjdFt3aWR0aCxoZWlnaHRdXG5cdFx0XHRcdHt4OjAseTowLGRpcmVjdGlvbjpcIm53c2VcIn0sXG5cdFx0XHRcdHt4OndpZHRoLzIseTowLGRpcmVjdGlvbjpcIm5zXCIsfSxcblx0XHRcdFx0e3g6d2lkdGgseTowLGRpcmVjdGlvbjpcIm5lc3dcIn0sXG5cdFx0XHRcdHt4OndpZHRoLHk6aGVpZ2h0LzIsZGlyZWN0aW9uOlwiZXdcIn0sXG5cdFx0XHRcdHt4OndpZHRoLHk6aGVpZ2h0LGRpcmVjdGlvbjpcIi1ud3NlXCJ9LFxuXHRcdFx0XHR7eDp3aWR0aC8yLHk6aGVpZ2h0LGRpcmVjdGlvbjpcIi1uc1wifSxcblx0XHRcdFx0e3g6MCx5OmhlaWdodCxkaXJlY3Rpb246XCItbmVzd1wifSxcblx0XHRcdFx0e3g6MCx5OmhlaWdodC8yLGRpcmVjdGlvbjpcIi1ld1wifSxcblx0XHRcdF0sXG5cdFx0XHRyb3RhdGFibGU9ey8vZGVmYXVsdCBmb3IgcmVjdCwgYW5kIHt4LHl9IGlzIGNlbnRlclxuXHRcdFx0XHR4OndpZHRoLzIsXG5cdFx0XHRcdHk6aGVpZ2h0LzIsXG5cdFx0XHRcdGRlZ3JlZTpNYXRoLmNlaWwoZGVncmVlKjEwMCkvMTAwLFxuXHRcdFx0fSxcblx0XHRcdGZvY3VzYWJsZUNvbnRlbnQ9dHJ1ZSxtb3ZhYmxlPXRydWV9PXRoaXMucHJvcHNcblx0XHRjb25zdCB7dHlwZSxpc0FuY2hvcixpc0VkaXRhYmxlQ3Vyc29yfT10aGlzLnN0YXRlXG5cdFx0Y29uc3QgZWR0YWJsZUNvbnRlbnQ9KFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8R3JvdXAgey4uLntcImRhdGEtbm9jb250ZW50XCI6dHJ1ZX19PlxuXHRcdFx0XHRcdDxwYXRoIGQ9e3BhdGh9IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwibGlnaHRncmF5XCIvPlxuXHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHR7bW92YWJsZSA/IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHR7IWZvY3VzYWJsZUNvbnRlbnQgJiYgY29udGVudH1cblx0XHRcdFx0XHRcdDxHcm91cCB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0XHRcdDxNb3ZhYmxlIGlzQW5jaG9yPXtpc0FuY2hvcn1cblx0XHRcdFx0XHRcdFx0XHRvbk1vdmU9e2U9PmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uTU9WRSh7Li4uZSwgaWQsdHlwZX0pKX0+XG5cdFx0XHRcdFx0XHRcdFx0PHBhdGggZD17cGF0aH0gZmlsbD1cIndoaXRlXCIgZmlsbE9wYWNpdHk9ezAuMDF9IGN1cnNvcj1cIm1vdmVcIi8+XG5cdFx0XHRcdFx0XHRcdDwvTW92YWJsZT5cblx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0XHR7Zm9jdXNhYmxlQ29udGVudCAmJiBjb250ZW50fVxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdCkgOiBjb250ZW50fVxuXG5cdFx0XHRcdDxHcm91cCB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0e3JvdGF0YWJsZSAmJiAoPFJvdGF0YWJsZSB7Li4ucm90YXRhYmxlfVxuXHRcdFx0XHRcdFx0XHRvblJvdGF0ZT17KHtjbGllbnRYOmxlZnQsY2xpZW50WTp0b3B9KT0+e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHh5PXBvc2l0aW9uaW5nLmFzQ2FudmFzUG9pbnQoe2xlZnQsdG9wfSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwb3M9cG9zaXRpb25pbmcucG9zaXRpb24oaWQsMClcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjZW50ZXI9e3g6cm90YXRhYmxlLngrcG9zLngseTpyb3RhdGFibGUueStwb3MueX1cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWdyZWU9cGFyc2VJbnQoTWF0aC5hdGFuMih4eS54LWNlbnRlci54LC14eS55K2NlbnRlci55KSoxODAvTWF0aC5QSSlcblxuXHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoKEFDVElPTi5FbnRpdHkuVVBEQVRFKHtpZCx0eXBlLHJvdGF0ZTpkZWdyZWU8MCA/IGRlZ3JlZSszNjAgOiBkZWdyZWV9KSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fS8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR7cmVzaXphYmxlICYmICg8UmVzaXphYmxlIHNwb3RzPXtyZXNpemFibGV9XG5cdFx0XHRcdFx0XHRcdG9uUmVzaXplPXsoe3gseX0pPT57XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNpemU9bnVsbFxuXHRcdFx0XHRcdFx0XHRcdGlmKHk9PT11bmRlZmluZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT17d2lkdGg6d2lkdGgreH1cblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSBpZih4PT09dW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9e2hlaWdodDpoZWlnaHQreX1cblx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNjYWxlPTErTWF0aC5tYXgoTWF0aC5hYnMoeCkvd2lkdGgsTWF0aC5hYnMoeSkvaGVpZ2h0KSp4L01hdGguYWJzKHgpXG5cdFx0XHRcdFx0XHRcdFx0XHRzaXplPXt3aWR0aDp3aWR0aCpzY2FsZSwgaGVpZ2h0OmhlaWdodCpzY2FsZX1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2goQUNUSU9OLkVudGl0eS5VUERBVEUoe2lkLHR5cGUsc2l6ZX0pKVxuXHRcdFx0XHRcdFx0XHR9fS8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB7Li4uKGlzRWRpdGFibGVDdXJzb3IgPyB7Lypub3QgdHJhbnNmb3JtKi99IDoge3NjYWxlLCByb3RhdGUsIC4uLnRyYW5zbGF0ZX0pfT5cblx0XHRcdFx0eyRvdXRsaW5lLnJlcGxhY2UoY29udGVudCwgZWR0YWJsZUNvbnRlbnQpLmdldCgwKX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG59KVxuXG4iLCJpbXBvcnQgUmVhY3Qse0NvbXBvbmVudCx9IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vLi4vY29tcG9zZWRcIlxuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi4vLi4vdG9vbC9wYXRoXCJcbmltcG9ydCBGb2N1c1NoYXBlIGZyb20gXCIuL2ZvY3VzLXNoYXBlXCJcblxuZXhwb3J0IGNsYXNzIGN1c3RvbSBleHRlbmRzIENvbXBvbmVudHtcblx0Z2V0IHN0cm9rZVdpZHRoKCl7XG5cdFx0Y29uc3Qge291dGxpbmU6e3dpZHRoPTB9PXt9fT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIHdpZHRofHwwXG5cdH1cblxuXHRnZXQgY29udGVudEJveCgpe1xuXHRcdGNvbnN0IHttYXJnaW46e3JpZ2h0PTAsbGVmdD0wLHRvcD0wLGJvdHRvbT0wfX09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHR9PXRoaXMuZ2V0UGF0aCgpLnNpemUoKVxuXHRcdGNvbnN0IHN0cm9rZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGhcblx0XHRyZXR1cm4ge3dpZHRoOndpZHRoLXN0cm9rZVdpZHRoLzItcmlnaHQtbGVmdCxoZWlnaHQ6aGVpZ2h0LXN0cm9rZVdpZHRoLzItdG9wLWJvdHRvbX1cblx0fVxuXG5cdGdldCBvdXRsaW5lQm94KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGF0aCgpLnNpemUodGhpcy5zdHJva2VXaWR0aClcblx0fVxuXG5cdGF2YWlsYWJsZVNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudEJveFxuXHR9XG5cblx0Y3JlYXRlQ29tcG9zZWRTaGFwZShjb250ZW50LCBwcm9wcyl7XG5cdFx0Y29uc3Qge1xuXHRcdFx0XHRtYXJnaW46e2xlZnQ9MCx0b3A9MH0sXG5cdFx0XHRcdHNvbGlkRmlsbD1cInRyYW5zcGFyZW50XCIsYmxpcEZpbGw6e3VybH09e30sXG5cdFx0XHRcdG91dGxpbmU9e3dpZHRoOjB9LFxuXHRcdFx0XHRmaWxsPXtmaWxsOnNvbGlkRmlsbH0sXG5cdFx0XHRcdHJvdGF0ZTpkZWdyZWUsXG5cdFx0XHRcdHNjYWxlLFxuXHRcdFx0XHRpZCxcblx0XHRcdFx0aGFzaCxcblx0XHRcdH09dGhpcy5wcm9wc1xuXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodCxyb3RhdGUsdHJhbnNsYXRlLGdlb21ldHJ5fT10aGlzLnRyYW5zZm9ybSh0aGlzLmdldFBhdGgoKS5jbG9uZSgpKVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgey4uLnt3aWR0aCxoZWlnaHQsIGdlb21ldHJ5fX0+XG5cdFx0XHRcdDxGb2N1c1NoYXBlIHsuLi57d2lkdGgsaGVpZ2h0LCBzY2FsZSxyb3RhdGUsdHJhbnNsYXRlLCBkZWdyZWUsIGlkLC4uLnByb3BzfX0+XG5cdFx0XHRcdFx0PEdyb3VwIHsuLi50aGlzLm91dGxpbmVCb3h9PlxuXHRcdFx0XHRcdFx0PEdyb3VwIHg9e3RoaXMuc3Ryb2tlV2lkdGgvMn0geT17dGhpcy5zdHJva2VXaWR0aC8yfT5cblx0XHRcdFx0XHRcdFx0PEdyb3VwICB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0XHRcdFx0ezxwYXRoIGQ9e3RoaXMuZ2V0UGF0aCgpLnRvU3RyaW5nKCl9IHN0cm9rZVdpZHRoPXt0aGlzLnN0cm9rZVdpZHRofSBzdHJva2U9e291dGxpbmUuc29saWRGaWxsfSB7Li4uZmlsbH0vPn1cblx0XHRcdFx0XHRcdFx0XHR7dXJsICYmIDxpbWFnZSB7Li4uey4uLnRoaXMuY29udGVudEJveCx4OmxlZnQsIHk6dG9wLCB4bGlua0hyZWY6IHVybCwgcHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn19IC8+fVxuXHRcdFx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHRcdFx0XHQ8R3JvdXAgeD17dGhpcy5zdHJva2VXaWR0aC8yK2xlZnR9IHk9e3RoaXMuc3Ryb2tlV2lkdGgvMit0b3B9IGNsYXNzTmFtZT1cImNvbnRlbnRcIj5cblx0XHRcdFx0XHRcdFx0XHR7Y29udGVudH1cblx0XHRcdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0PC9Gb2N1c1NoYXBlPlxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblxuXHRnZXRQYXRoKCl7XG5cdFx0cmV0dXJuIG1lbW9pemUoKGdlb21ldHJ5KT0+bmV3IFBhdGgoZ2VvbWV0cnkpKSh0aGlzLnByb3BzLmdlb21ldHJ5KVxuXHR9XG5cblx0LyoqXG5cdCAqIFJvdGF0aW9uIGhlYXZpbHkgZGVwZW5kcyBvbiBpbmxpbmUgc3RvcnkgYmFzZWxpbmUgaW1wbGVtZW50YXRpb25cblx0ICovXG5cdHRyYW5zZm9ybShnZW9tZXRyeSl7XG5cdFx0dmFyIHtyb3RhdGUsIHNjYWxlfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgdHJhbnNsYXRlPXt9XG5cdFx0aWYocm90YXRlKXtcblx0XHRcdGNvbnN0IGE9Z2VvbWV0cnkuYm91bmRzKClcblx0XHRcdGNvbnN0IHt4LHl9PWdlb21ldHJ5LmNlbnRlcigpXG5cdFx0XHRnZW9tZXRyeS5yb3RhdGUocm90YXRlLHgseSlcblx0XHRcdGNvbnN0IGI9Z2VvbWV0cnkuYm91bmRzKClcblx0XHRcdHJvdGF0ZT1gJHtyb3RhdGV9ICR7eH0gJHt5fWBcblx0XHRcdFxuXHRcdFx0dHJhbnNsYXRlLng9cGFyc2VJbnQoYS5sZWZ0LWIubGVmdClcblx0XHRcdHRyYW5zbGF0ZS55PXBhcnNlSW50KGEudG9wLWIudG9wKVxuXHRcdFx0Z2VvbWV0cnkudHJhbnNsYXRlKHRyYW5zbGF0ZS54LCB0cmFuc2xhdGUueSlcblx0XHRcdGdlb21ldHJ5Lm9yaWdpbj17eDp0cmFuc2xhdGUueCx5OnRyYW5zbGF0ZS55fVxuXHRcdH1cblxuXHRcdGlmKHNjYWxlKXtcblx0XHRcdGdlb21ldHJ5LnNjYWxlKHNjYWxlKVxuXHRcdH1cblxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHR9PWdlb21ldHJ5LnNpemUoZ2VvbWV0cnkuc3Ryb2tlV2lkdGg9dGhpcy5zdHJva2VXaWR0aClcblx0XHRyZXR1cm4ge3dpZHRoLGhlaWdodCxnZW9tZXRyeSxyb3RhdGUsdHJhbnNsYXRlfVxuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyByZWN0IGV4dGVuZHMgY3VzdG9te1xuXHRnZXRQYXRoKCl7XG5cdFx0Y29uc3Qge3dpZHRoOncsaGVpZ2h0Omh9PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gbmV3IFBhdGgoYE0wIDBoJHt3fXYke2h9aCR7LXd9emApXG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIGVsbGlwc2UgZXh0ZW5kcyBjdXN0b217XG5cdGdldFBhdGgoKXtcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LGN4PXdpZHRoLzIsY3k9aGVpZ2h0LzIscng9Y3gscnk9Y3l9PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gbmV3IFBhdGgoYE0ke2N4LXJ4fSwke2N5fWEke3J4fSwke3J5fSAwIDEsMCAke3J4KjJ9LDBhJHtyeH0sJHtyeX0gMCAxLDAgLSR7cngqMn0sMGApXG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIGNpcmNsZSBleHRlbmRzIGVsbGlwc2V7XG5cbn0iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxlZGl0YWJsZSxMYXlvdXR9IGZyb20gXCIuLi8uLi9jb21wb3NhYmxlXCJcblxuaW1wb3J0IEZyYW1lIGZyb20gXCIuLi9mcmFtZVwiXG5cblxuaW1wb3J0IHtjdXN0b20sIHJlY3QsIGVsbGlwc2UsIGNpcmNsZX0gZnJvbSBcIi4vc2hhcGVzXCJcblxuY29uc3QgU3VwZXI9ZWRpdGFibGUoSGFzUGFyZW50QW5kQ2hpbGQoZG9tLlNoYXBlKSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYXBlIGV4dGVuZHMgRnJhbWV7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1TdXBlci5kaXNwbGF5TmFtZVxuXHRzdGF0aWMgcHJvcFR5cGVzPVN1cGVyLnByb3BUeXBlc1xuXHRzdGF0aWMgZGVmYXVsdFByb3BzPVN1cGVyLmRlZmF1bHRQcm9wc1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5GcmFtZS5jb250ZXh0VHlwZXMsXG5cdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5hbnksXG5cdH1cblxuXHRmb2N1c2FibGU9dHJ1ZVxuXG5cdF9fZ2V0R2VvbWV0cnk9bWVtb2l6ZShjb21wb3NlZFVVSUQ9Pntcblx0XHRjb25zdCB7Z2VvbWV0cnk9XCJyZWN0XCJ9PXRoaXMucHJvcHNcblx0XHRjb25zdCBHZW9tZXRyeT10aGlzLmNvbnN0cnVjdG9yW2dlb21ldHJ5XXx8dGhpcy5jb25zdHJ1Y3Rvci5jdXN0b21cblx0XHRyZXR1cm4gbmV3IEdlb21ldHJ5KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dClcblx0fSlcblxuXHRnZXQgZ2VvbWV0cnkoKXtcblx0XHRyZXR1cm4gdGhpcy5fX2dldEdlb21ldHJ5KHRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEKVxuXHR9XG5cblx0X19nZXRTcGFjZT1tZW1vaXplKGdlb21ldHJ5PT57XG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuYXZhaWxhYmxlU3BhY2UoKVxuXHRcdHJldHVybiBMYXlvdXQuQ29uc3RyYWludFNwYWNlLmNyZWF0ZSh7d2lkdGgsaGVpZ2h0fSlcblx0XHRcdC5jbG9uZSh7ZWRnZXM6e1xuXHRcdFx0XHRwYWdlOntsZWZ0OjAscmlnaHQ6d2lkdGgsdG9wOjAsYm90dG9tOmhlaWdodH0sXG5cdFx0XHRcdFt0aGlzLmdldENvbXBvc2VUeXBlKCldOntsZWZ0OjAscmlnaHQ6d2lkdGgsdG9wOjAsYm90dG9tOmhlaWdodH0sXG5cdFx0XHR9fSlcblx0fSlcblxuXHRnZXRTcGFjZSgpe1xuXHRcdHJldHVybiB0aGlzLl9fZ2V0U3BhY2UodGhpcy5nZW9tZXRyeSlcblx0fVxuXG5cdC8qKlxuXHQgKiB0aGVyZSdzIG5vIGNhbGwgc3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50LCBzbyBlZGl0YWJsZSBpbnRlcmZhY2UgaXMgc2tpcHBlZFxuXHQgKioqIC5wb3NpdGlvbmxpbmVzIGlzIHVzZWQgdG8gZ2V0IGxpbmVYWShsaW5lKSwgc28gaXQgc2hvdWxkIGJlIGFkZGVkXG5cdCAqL1xuXHRyZWNvbXBvc2FibGVfY3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0Y29uc3Qge3gseSx6fT10aGlzLnByb3BzXG5cdFx0Y29uc3QgY29udGVudD0oXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdHtbXG5cdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KHRoaXMucG9zaXRpb25MaW5lcyh0aGlzLmxpbmVzKSx7a2V5OlwiY29udGVudFwiLGNsYXNzTmFtZTpcInBvc2l0aW9ubGluZXNcIn0pLFxuXHRcdFx0XHRcdC4uLnRoaXMuYW5jaG9ycy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXk6aX0pKSxcblx0XHRcdFx0XS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6e3o6ejE9MH19LHtwcm9wczp7ejp6Mj0wfX0sKT0+ejEtejIpXG5cdFx0XHRcdH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXG5cdFx0Y29uc3QgY29tcG9zZWQ9UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0dGhpcy5nZW9tZXRyeS5jcmVhdGVDb21wb3NlZFNoYXBlKGNvbnRlbnQse2NvbXBvc2VkVVVJRDp0aGlzLmNvbXB1dGVkLmNvbXBvc2VkVVVJRH0pLFxuXHRcdFx0e2NsYXNzTmFtZTpcImZyYW1lXCIsIFwiZGF0YS1mcmFtZVwiOnRoaXMudXVpZCx4LHksen1cblx0XHQpXG5cdFx0cmV0dXJuIGNvbXBvc2VkXG5cdH1cblxuXHRzdGF0aWMgY3VzdG9tPWN1c3RvbVxuXG5cdHN0YXRpYyByZWN0PXJlY3RcblxuXHRzdGF0aWMgZWxsaXBzZT1lbGxpcHNlXG5cblx0c3RhdGljIGNpcmNsZT1jaXJjbGVcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IENvbXBvc2VkSW1hZ2UgZnJvbSBcIi4uL2NvbXBvc2VkL2ltYWdlXCJcbmltcG9ydCB7Tm9DaGlsZCxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuXG5pbXBvcnQgU2hhcGUgZnJvbSBcIi4vc2hhcGVcIlxuY29uc3QgU3VwZXI9ZWRpdGFibGUoTm9DaGlsZChkb20uSW1hZ2UpKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2UgZXh0ZW5kcyBTdXBlcntcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0Li4uU3VwZXIuY29udGV4dFR5cGVzLFxuXHRcdGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55LFxuXHR9XG5cdGZvY3VzYWJsZT10cnVlXG5cblx0Z2V0U2hhcGUoKXtcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LGlkLH09dGhpcy5wcm9wc1xuXHRcdHJldHVybiBuZXcgU2hhcGUoe3dpZHRoLCBoZWlnaHQsaWQsLi4udGhpcy5wcm9wcy5vdXRsaW5lLCBtYXJnaW46e30sY2hpbGRyZW46bnVsbH0se2NvbnRleHQ6dGhpcy5jb250ZXh0fSlcblx0fVxuXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdGNvbnN0IGdlb21ldHJ5PXRoaXMuZ2V0U2hhcGUoKS5nZW9tZXRyeVxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHR9PWdlb21ldHJ5LmNvbnRlbnRCb3hcblx0XHRjb25zdCB7c3JjfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgaW1hZ2U9PENvbXBvc2VkSW1hZ2Ugey4uLntcblx0XHRcdHdpZHRoLFxuXHRcdFx0aGVpZ2h0LFxuXHRcdFx0eGxpbmtIcmVmOiBzcmMsXG5cdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLFx0XG5cdFx0fX0vPlxuXHRcdHJldHVybiBnZW9tZXRyeS5jcmVhdGVDb21wb3NlZFNoYXBlKGltYWdlLCB7Zm9jdXNhYmxlQ29udGVudDpmYWxzZSwgY29tcG9zZWRVVUlEOnRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEfSlcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vY29tcG9zZWRcIlxuXG5jb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChkb20uVGFibGUpXG5cbi8qKlxuICogdGFibGUvcm93L2NlbGwgbWF5IGJlIHNwbGl0dGVkIGludG8gYmxvY2tzXG4gKiBjZWxsIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIGNvbXBvc2luZ1xuICogYnV0IGNlbGwgbWF5IGJlIHNwbGl0dGVkIGludG8gYmxvY2tzXG4gKiBzcGFjZSBpcyBkZWZpbmVkIGJ5IGNlbGwtPnJvdy0+dGFibGUtPnBhcmVudCBzcGFjZSwgc28gaXQgaGFzIHRvIHJlcXVpcmUgc3BhY2UgdXBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGUgZXh0ZW5kcyBTdXBlcntcblx0Lyoqcm93IGNhbGwgaXQgdG8gYXBwZW5kIGEgYmxvY2sgb2Ygcm93Ki9cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KHJvdyl7XG5cdFx0Y29uc3Qge3dpZHRoLGluZGVudH09dGhpcy5wcm9wc1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e3Jvdy5wcm9wcy5oZWlnaHR9PlxuXHRcdFx0XHR7UmVhY3QuY2xvbmVFbGVtZW50KHJvdyx7eDppbmRlbnR9KX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3Qse1B1cmVDb21wb25lbnQgYXMgQ29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtkb20sIFJlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsZWRpdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5Sb3cpXG5cbi8qKlxuICogdGVybXM6XG4gKiBSYW5rOiBhIGNvbXBvc2VkIGxpbmUsIGEgcm93IG1heSBiZSBzcGxpdHRlZCBpbnRvIG1vcmUgdGhhbiBvbmUgcmFuaywgcmFuayBhcHBseSB2ZXJ0QWxpZ25cbiAqIFNsb3Q6IGEgY29tcG9zZWQgY2VsbCBzZWdtZW50LCBhIGNlbGwgbWF5IGJlIHNwbGl0dGVkIGludG8gbW9yZSB0aGFuIG9uZSBzbG90XG4gKiBcbiAqIFxuICogKioqRXZlcnkgdGltZSBhIHJvdyByZXF1ZXN0IHNwYWNlIHVwLCBhIHJhbmsgd291bGQgYmUgY3JlYXRlZCB0byBrZWVwIHRoZSBzcGFjZSBpbiB0aGUgbGF5b3V0IGVuZ2luZVxuICogKioqXG4gKiA+d2h5IHJhbmsncyBoZWlnaHQgbXVzdCBiZSBmaXhlZD8gXG4gKiAqKiogYm9yZGVyXG4gKiA+cmFuaydzIGhlaWdodCBpcyBub3QgYWx3YXlzIGNvcnJlY3QsIGhvdyB0byBmaXggaXQ/Pz8gXG4gKiAqKiogYWxsIGNoaWxkcmVuIGNvbXBvc2VkLCBlYWNoIHJhbmsncyBoZWlnaHQgY291bGQgYmUgZml4ZWRcbiAqICoqKiByYW5rJ3MgaGVpZ2h0PU1heChyb3cgaGVpZ2h0IGlmIGRlZmluZWQsIC4uLiBzbG90J3MgaGVpZ2h0KVxuICogXG4gKiBjb21wdXRlZC5jb21wb3NlZCBpcyBbcmFuaywgcmFuaywgcmFuaywgLi4uXVxuICogcmFua1x0XHRzcGFjZVxcY29sXHRjb2wxXHRjb2wyIFx0Li4uXG4gKiByYW5rMVx0c3BhY2UxXHRcdHNsb3QxMVx0XHRcbiAqIHJhbmsyXHRzcGFjZTJcdFx0c2xvdDEyXHRzbG90MjFcbiAqIC4uLlx0XHQuLi5cdCBcdFx0Li4uXHQgXHQuLi5cbiAqIHdoZW4gYXBwZW5kIFJhbmsgdG8gc3BhY2UsICMxIGlzIHNpbXBsZSBhbmQgY2hvc2VuXG4gKiAxPiByZXF1ZXN0IHJhbmsgc3BhY2UsIHRoZW4gYWRkIGVtcHR5IFJhbmsgcGxhY2Vob2xkZXIsIHRoZW4gYWRqdXN0IHJhbmsgZXZlcnkgdGltZSBhIHNsb3QgY29tbWl0dGVkXG4gKiAyPiBiZWZvcmUgcmVxdWVzdGluZyByYW5rIHNwYWNlLCBjb21taXQgbGFzdCBSYW5rIHBsYWNlaG9sZGVyLCBkbyB3aGF0ICMxIHdvdWxkIGRvXG4gKiAzPiBhbGwgY2hpbGRyZW4gY29tcG9zZWQgOiBhZmZlY3QgYmxvY2tPZmZzZXQsIHNvIGl0J3MgTk9UIHBvc3NpYmxlXG4qL1xuY2xhc3MgUm93IGV4dGVuZHMgU3VwZXJ7XG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse1xuXHRcdFx0cmFua3M6e1xuXHRcdFx0XHRnZXQoKXtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodmFsdWUpe1xuXHRcdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQ9dmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRnZXQgd2lkdGgoKXsvL3VzZWQgYnkgY2FsYyByb3cgcmFuZ2Vcblx0XHRyZXR1cm4gdGhpcy5jbG9zZXN0KFwidGFibGVcIikucHJvcHMud2lkdGhcblx0fVxuXHRcblx0LyoqXG5cdCAqIHN1cHBvcnQgZ2V0IGNvbHVtbiBieSBjZWxsaWQsIHN1Y2ggYXMgdGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylbXCJjZWxsaWQxXCJdIFxuXHQgKiBjZWxsIGlkIHdvdWxkIGJlIHNldCBpbiBjb2x1bW4gYWNjb2RpbmcgdG8gdXNpbmcvY29tcG9zaW5nIG9yZGVyKGl0J3MgY29ycmVjdCBmb3IgY29tcG9zaW5nKVxuXHQgKiBzdXBwb3J0IFxuXHQgKiBjb2x1bW4uY3VycmVudFJhbms6Y3VycmVudCB2YWxpZCByYW5rIGZvciB0aGUgY29sdW1uXG5cdCAqIGNvbHVtbi5maXJzdFNsb3Q6Zmlyc3Qgc2xvdCBvZiB0aGlzIGNvbHVtblxuXHQgKiBtYWtlIGl0IGR5bmFtaWMgdG8gYWx3YXlzIHVzZSBjdXJyZW50IGNvbHNcblx0ICovXG5cdGdldENvbHVtbnM9bWVtb2l6ZShjb2xzPT57XG5cdFx0Y29uc3QgbWU9dGhpc1xuXHRcdHJldHVybiBuZXcgUHJveHkoY29scy5tYXAoYT0+bmV3IFByb3h5KGEse1xuXHRcdFx0Z2V0KGNvbCxwcm9wKXtcblx0XHRcdFx0c3dpdGNoKHByb3Ape1xuXHRcdFx0XHRjYXNlIFwiY3VycmVudFJhbmtcIjp7XG5cdFx0XHRcdFx0XHRjb25zdCByYW5rcz1tZS5yYW5rc1xuXHRcdFx0XHRcdFx0Y29uc3QgaT1jb2xzLmluZGV4T2YoY29sKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHJhbmtzW3JhbmtzLmZpbmRMYXN0SW5kZXgoYT0+ISFhLnNsb3RzW2ldKSsxXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBcImZpcnN0U2xvdFwiOntcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtzPW1lLnJhbmtzXG5cdFx0XHRcdFx0XHRjb25zdCBpPWNvbHMuaW5kZXhPZihjb2wpXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmFua3MuZmluZChhPT4hIWEuc2xvdHNbaV0pLnNsb3RzW2ldXHRcblx0XHRcdFx0XHR9XHRcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29sW3Byb3BdXG5cdFx0XHR9XG5cdFx0fSkpLHtcblx0XHRcdGdldChjb2x1bW5zLCBwcm9wKXtcblx0XHRcdFx0aWYocHJvcCBpbiBjb2x1bW5zKXtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1uc1twcm9wXVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYodHlwZW9mKHByb3ApPT1cInN0cmluZ1wiKXtcblx0XHRcdFx0XHRyZXR1cm4gY29sdW1ucy5maW5kKGE9PmEuaWQgPyBhLmlkPT1wcm9wIDogYS5pZD1wcm9wKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fSlcblxuXHQvKipcblx0ICogaXQgd291bGQgZmluZCBhIHJhbmsncyBzcGFjZSBtZWV0aW5nIHJlcXVpcmVkLCBpZiB0aGVyZSBpc24ndCBcblx0ICogaXQgd291bGQgcmVxdWVzdCBzcGFjZSB1cCwgYW5kIHVzZSBhbiBlbXB0eSByYW5rIHBsYWNlaG9sZGVyIHRvIHRha2UgdXAgdGhlIGJsb2NrIGluIGxheW91dCBlbmdpbmVcblx0ICogXG5cdCAqICoqKkRvbid0IHVzZSByZXF1aXJlZCBoZWlnaHQgdG8gcmVxdWVzdCBzcGFjZSwgc2luY2UgbGF0ZXIgb3RoZXIgY2VsbHMnIHNsb3QgbWF5IGZpdCBpblxuXHQgKiBpZiB0aGVyZSdzIG5vIHNsb3QgZml0IGluIGEgcmFuaywgaXQgY2FuIGJlIGRlbGV0ZSBhZnRlciBhbGwgY2hpbGRyZW4gY29tcG9zZWRcblx0ICogQFRPRE86IHRoZXJlIG1heSBiZSBkZWFkIGxvb3Bcblx0ICogQHBhcmFtIHsqfSBjb2wgXG5cdCAqIEBwYXJhbSB7Kn0gcmVxdWlyZWRTcGFjZVxuXHQgKi9cblx0ZmluZE9yQ3JlYXRlUmFua0ZvckNvbHVtbihjb2wsIHtoZWlnaHQ6bWluSGVpZ2h0PTB9PXt9KXtcblx0XHR2YXIgcmFuaz1jb2wuY3VycmVudFJhbmsgXG5cdFx0aWYocmFuayl7XG5cdFx0XHQvL2ZpbmQgZmlyc3QgcmFuayB3aG9zZSBzcGFjZSBtZWV0IHJlcXVpcmVkXG5cdFx0XHRyYW5rPXRoaXMucmFua3Muc2xpY2UodGhpcy5yYW5rcy5pbmRleE9mKHJhbmspKS5maW5kKHJhbms9PnJhbmsuc3BhY2UuaGVpZ2h0Pj1taW5IZWlnaHQpXG5cdFx0fVxuXHRcdHdoaWxlKCFyYW5rKXtcblx0XHRcdC8vcmVxdWVzdCBsYXJnZXN0IHNwYWNlIGluIGN1cnJlbnQgY29uc3RyYWludCBzcGFjZVxuXHRcdFx0Y29uc3Qgc3BhY2U9c3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKClcblx0XHRcdGlmKCFzcGFjZSkvL25vIHNwYWNlIGFueSBtb3JlLCBzdG9wIGltbWVkaWF0ZWx5XG5cdFx0XHRcdHJldHVybiBcblx0XHRcdHRoaXMucmFua3MucHVzaChyYW5rPW5ldyB0aGlzLmNvbnN0cnVjdG9yLlJhbmsoe3NwYWNlLCBjaGlsZHJlbjpuZXcgQXJyYXkodGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scykubGVuZ3RoKS5maWxsKG51bGwpfSkpXG5cdFx0XHQvL2VhY2ggcmVxdWVzdGVkIHNwYWNlIHNob3VsZCBiZSB0YWtlbiB1cCBieSBhcHBlbmRpbmcgcmFuayBwbGFjZWhvbGRlciwgc28gbmV4dCByZXF1ZXN0IGNhbiB0YWtlIGVmZmVjdFxuXHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudChyYW5rKSlcblx0XHR9XG5cdFx0cmV0dXJuIHJhbmtcblx0fVxuXHQvKipcblx0ICogcmVxdWVzdCBhIHJhbmsgc3BhY2UgZnJvbSB1cCwgYW5kIHRoZW5cblx0ICogY3JlYXRlIHNwYWNlIGZvciBlYWNoIGNlbGxcblx0ICogd2hlbiBhIGNlbGwgcmVxdWVzdCBzcGFjZSwgd2UgbmVlZCBhdCBmaXJzdCBkZXRlcm1pbiB3aGljaCByYW5rLCB0aGVuIHdlIGNhbiBkZXRlcm1pbiBcblx0ICogMS4gcmVxdWVzdCByYW5rIHNwYWNlIGZyb20gdXBcblx0ICogMi4gb3IgY2FsYyBjZWxsIHNwYWNlIGZyb20gcmFuayBzcGFjZVxuXHQgKiBIb3cgdG8gZGV0ZXJtaW4gd2hpY2ggcmFuayB3aGVuIGNlbGwgcmVxdWVzdCBzcGFjZT8/P1xuXHQgKiAqKiB1c2UgY2VsbElkIHRvIHF1ZXJ5IHJhbmtcblx0ICogXG5cdCAqIFxuXHQgKiAqKmV2ZXJ5IHRpbWUgcmVxdWVzdGluZyBzcGFjZSwgYSByYW5rIHBsYWNlaG9sZGVyIGhlaWdodD0wIHdvdWxkIGJlIGFwcGVuZGVkIHRvIHRha2UgdGhlIHNwYWNlXG5cdCAqICoqdGhlbiBoZWlnaHQgd2lsbCBiZSBjb3JyZWN0ZWQgZXZlcnkgdGltZSBhIHNsb3QgYXBwZW5kZWRcblx0ICogQHBhcmFtIHsqfSByZXF1aXJlZFNwYWNlIHtjZWxsSWQsIGhlaWdodDpyZXF1aXJlZEJsb2NrU2l6ZX0gXG5cdCAqL1xuXHRuZXh0QXZhaWxhYmxlU3BhY2Uoe2lkOmNlbGxJZCwgLi4ucmVxdWlyZWR9KXtcblx0XHRjb25zdCB7a2VlcExpbmVzfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgY29sPXRoaXMuZ2V0Q29sdW1ucyh0aGlzLnByb3BzLmNvbHMpW2NlbGxJZF1cblx0XHRjb25zdCByYW5rPXRoaXMuZmluZE9yQ3JlYXRlUmFua0ZvckNvbHVtbihjb2wscmVxdWlyZWQpXG5cdFx0aWYoIXJhbmspXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRjb25zdCBzcGFjZT1yYW5rLnNwYWNlXG5cdFx0Ly9mdXJ0aGVyIGNvbnN0cmFpbnQgcmFuayBzcGFjZSBmb3IgY29sdW1uIG9mIGNlbGxpZFxuXHRcdGNvbnN0IHtsZWZ0LGhlaWdodH09c3BhY2UsIHt4PTAsd2lkdGh9PWNvbCwgWD1sZWZ0K3hcblx0XHRyZXR1cm4gc3BhY2UuY2xvbmUoe1xuXHRcdFx0bGVmdDpYLFxuXHRcdFx0cmlnaHQ6WCt3aWR0aCxcblx0XHRcdGhlaWdodDprZWVwTGluZXMgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGhlaWdodCxcblx0XHR9KVxuXHR9XG5cblx0LyoqXG5cdCAqIHB1dCBpdCBpbnRvIGNvcnJlY3QgY29sdW1uW2ldLnB1c2goY2VsbClcblx0ICogQHBhcmFtIHsqfSBzbG90RnJhbWUgXG5cdCAqL1xuXHRhcHBlbmRDb21wb3NlZChzbG90RnJhbWUpe1xuXHRcdGNvbnN0IGNvbHVtbnM9dGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylcblx0XHRjb25zdCBjZWxsSWQ9c2xvdEZyYW1lICYmIHNsb3RGcmFtZS5wcm9wcy5pZFxuXHRcdGNvbnN0IGNvbD1jb2x1bW5zW2NlbGxJZF1cblx0XHRjb25zdCByYW5rPXRoaXMuZmluZE9yQ3JlYXRlUmFua0ZvckNvbHVtbihjb2wsIHtoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoW3Nsb3RGcmFtZV0pfSlcblx0XHRyYW5rICYmIHJhbmsuaW5zZXJ0QXQoc2xvdEZyYW1lLGNvbHVtbnMuaW5kZXhPZihjb2wpKVxuXHR9XG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCl7XG5cdFx0Ly9yZW1vdmUgZW1wdHkgcmFuaywgY2FuIGl0IGJlIGlnbm9yZWQ/Pz8/XG5cdFx0dGhpcy5yYW5rcz10aGlzLnJhbmtzLmZpbHRlcihyYW5rPT57XG5cdFx0XHRpZighcmFuay5pc0VtcHR5KCkpe1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0cmFuay5kZWxheW91dCgpXG5cdFx0fSlcblx0XHRjb25zdCBjb2x1bW5zPXRoaXMuZ2V0Q29sdW1ucyh0aGlzLnByb3BzLmNvbHMpXG5cdFx0dGhpcy5yYW5rcy5mb3JFYWNoKChyYW5rLGkscmFua3MpPT57XG5cdFx0XHRjb25zdCBoZWlnaHQ9dGhpcy5nZXRIZWlnaHQocmFuay5zbG90cylcblx0XHRcdC8vcmVwbGFjZSAgZW1wdHkgc2xvdCB3aXRoIGVtcHR5IGNvbHVtbi5maXJzdFNsb3Qgc2hhcGVcblx0XHRcdHJhbmsuc2xvdHMuZm9yRWFjaCgoYSxpLHNsb3RzKT0+IWEgJiYgKHNsb3RzW2ldPWNvbHVtbnNbaV0uZmlyc3RTbG90LmNsb25lQXNFbXB0eSgpKSlcblx0XHRcdC8vdGhlbiBcblx0XHRcdHJhbmsucmVsYXlvdXQoaGVpZ2h0LHJhbmtzLmxlbmd0aC0xPT1pKVxuXHRcdH0pXG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcblx0fVxuXG5cdC8qKlxuXHQgKiBpdCBjcmVhdGUgYSByYW5rIHBsYWNlaG9sZGVyLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBhcHBlbmQgdG8gYmxvY2sgYXMgcGxhY2Vob2xkZXJcblx0ICogaXQgZmlyc3QgdGFrZSB1cCB0aGUgd2hvbGUgbGVmdCBzcGFjZSB3aXRoIHNwYWNlLmhlaWdodCwgdGhlblxuXHQgKiBhZnRlciBhbGwgY2hpbGRyZW4gY29tcG9zZWQsIHRoZSByYW5rIGhlaWdodCBhbmQgc2xvdHMgaGVpZ2h0IHdvdWxkIGJlIGZpeGVkXG5cdCAqIEBwYXJhbSB7Kn0gcmFuayBcblx0ICogQHBhcmFtIHsqfSBsYXN0IFxuXHQgKi9cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KHtwcm9wczp7c3BhY2U6e2hlaWdodH0sIGNoaWxkcmVufX0pe1xuXHRcdGNvbnN0IHtwcm9wczp7Y29scyxpZDpyb3d9LHdpZHRofT10aGlzXG5cdFx0cmV0dXJuIDx0aGlzLmNvbnN0cnVjdG9yLlJhbmsgey4uLntoZWlnaHQsd2lkdGgsIHJvdywgY2hpbGRyZW4sIGNvbHN9fS8+XG5cdH1cblxuXHRnZXRIZWlnaHQoc2xvdHMpe1xuXHRcdHJldHVybiBNYXRoLm1heCh0aGlzLnByb3BzLmhlaWdodHx8MCwuLi5zbG90cy5maWx0ZXIoYT0+ISFhKS5tYXAoYT0+YS5zbG90SGVpZ2h0KSlcblx0fVxuXG5cdHN0YXRpYyBSYW5rPWNsYXNzIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRcdHN0YXRpYyBkaXNwbGF5TmFtZT1cInJhbmtcIlxuXHRcdGdldCBzcGFjZSgpe1xuXHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuc3BhY2Vcblx0XHR9XG5cdFxuXHRcdGdldCBzbG90cygpe1xuXHRcdFx0cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW5cblx0XHR9XG5cblx0XHQvKip0aGUgbGF5b3V0ZWQgcmFuayBpbiB0aGUgc3BhY2UgKi9cblx0XHRnZXQgbGF5b3V0ZWQoKXtcblx0XHRcdGNvbnN0IGZyYW1lPXRoaXMuc3BhY2UuZnJhbWVcblx0XHRcdHJldHVybiBuZXcgUHJveHkoZnJhbWUubGFzdExpbmUsIHtcblx0XHRcdFx0Z2V0KGxpbmUsIHByb3ApIHtcblx0XHRcdFx0XHRpZiAocHJvcCA9PSBcInJlcGxhY2VXaXRoXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybiByZXBsYWNlbWVudCA9PiBmcmFtZS5saW5lcy5zcGxpY2UoLTEsIDEsIHJlcGxhY2VtZW50KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSBpZiAocHJvcCA9PSBcImRldGFjaFwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKCkgPT4gZnJhbWUubGluZXMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdFx0XHR9ZWxzZSBpZihwcm9wID09IFwiaXNGaXJzdFJvd0luUGFnZVwiKXtcblx0XHRcdFx0XHRcdGNvbnN0IHByZXZMaW5lPWZyYW1lLmxpbmVzW2ZyYW1lLmxpbmVzLmxlbmd0aC0yXVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGU9YT0+bmV3IFJlYWN0UXVlcnkoYSkuZmluZEZpcnN0KGBbZGF0YS10eXBlPXRhYmxlXWApLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcblx0XHRcdFx0XHRcdHJldHVybiAhcHJldkxpbmUgfHwgdGFibGUobGluZSkhPXRhYmxlKHByZXZMaW5lKVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmVbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGRlbGF5b3V0KCl7XG5cdFx0XHR0aGlzLmxheW91dGVkLmRldGFjaCgpXG5cdFx0fVxuXHRcblx0XHRpc0VtcHR5KCl7XG5cdFx0XHRjb25zdCB7Y2hpbGRyZW46c2xvdHN9PXRoaXMucHJvcHNcblx0XHRcdHJldHVybiAhc2xvdHMuZmluZChhPT4hIWEpXG5cdFx0fVxuXG5cdFx0cmVsYXlvdXQoaGVpZ2h0LCBpc0xhc3RSYW5rT2ZSb3cpe1xuXHRcdFx0Y29uc3QgUmFuaz10aGlzLmNvbnN0cnVjdG9yXG5cdFx0XHRmdW5jdGlvbiBjaGFuZ2VIZWlnaHRVcChoZWlnaHQsIHJhbmssIHBhcmVudHMpIHtcblx0XHRcdFx0Y29uc3QgZGVsdGE9aGVpZ2h0LShyYW5rLnByb3BzLmhlaWdodHx8MClcblx0XHRcdFx0cmV0dXJuIHBhcmVudHMucmVkdWNlUmlnaHQoKGNoaWxkLCBwYXJlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IHByb3BzOiB7IGhlaWdodCwgY2hpbGRyZW4gfSB9ID0gcGFyZW50XG5cdFx0XHRcdFx0aWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KGNoaWxkcmVuKSA9PSAxKSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIChoZWlnaHQpID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChwYXJlbnQsIHsgaGVpZ2h0OiBoZWlnaHQgKyBkZWx0YSB9LCBjaGlsZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcInJvdydzIG9mZnNwcmluZyBzaG91bGQgb25seSBoYXMgb25lIGNoaWxkXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcGFyZW50XG5cdFx0XHRcdH0sIG5ldyBSYW5rKHsuLi5yYW5rLnByb3BzLGhlaWdodH0pLnJlbmRlcigpKVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qge2ZpcnN0LHBhcmVudHMscmFuaz1maXJzdC5nZXQoMCl9PW5ldyBSZWFjdFF1ZXJ5KHRoaXMubGF5b3V0ZWQpLmZpbmRGaXJzdEFuZFBhcmVudHMoYHJhbmtgKVxuXHRcdFx0dHJ5e1xuXHRcdFx0Y29uc3QgY2hhbmdlZD1jaGFuZ2VIZWlnaHRVcChcblx0XHRcdFx0aGVpZ2h0LFxuXHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQocmFuayx7XG5cdFx0XHRcdFx0aXNMYXN0UmFua09mUm93LFxuXHRcdFx0XHRcdGlzRmlyc3RSb3dJblBhZ2U6dGhpcy5sYXlvdXRlZC5pc0ZpcnN0Um93SW5QYWdlLFxuXHRcdFx0XHRcdHRhYmxlOnBhcmVudHMuZmluZExhc3QoYT0+YS5wcm9wc1tcImRhdGEtdHlwZVwiXT09XCJ0YWJsZVwiKS5wcm9wc1tcImRhdGEtY29udGVudFwiXSxcblx0XHRcdFx0fSksXG5cdFx0XHRcdHBhcmVudHNcblx0XHRcdClcblx0XHRcdC8qKiBzZXQgaGVpZ2h0IGNoYW5nZXMgZnJvbSByYW5rIHRvIGJsb2NrIGxpbmUqL1xuXHRcdFx0dGhpcy5sYXlvdXRlZC5yZXBsYWNlV2l0aChjaGFuZ2VkKVxuXHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRkZWJ1Z2dlclxuXHRcdFx0fVxuXHRcdH1cblx0XG5cdFx0aW5zZXJ0QXQoc2xvdCwgaSl7XG5cdFx0XHR0aGlzLnNsb3RzW2ldPXNsb3Rcblx0XHR9XG5cdFxuXHRcdHJlbmRlcigpe1xuXHRcdFx0Y29uc3Qge2NoaWxkcmVuOnNsb3RzPVtdLGNvbHMsaGVpZ2h0LGlzTGFzdFJhbmtPZlJvdywgaXNGaXJzdFJvd0luUGFnZSx0YWJsZSwgcm93LCBzcGFjZSwgLi4ucHJvcHN9PXRoaXMucHJvcHNcblx0XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxHcm91cCBoZWlnaHQ9e2hlaWdodH0gey4uLnByb3BzfSA+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0c2xvdHMubWFwKChhLGkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdGEuY2xvbmUoe2hlaWdodCxcblx0XHRcdFx0XHRcdFx0XHRjb2xJbmRleDppLHRhYmxlLHJvdyxpc0xhc3RSYW5rT2ZSb3csaXNGaXJzdFJvd0luUGFnZS8vZWRpdGFibGUgZWRnZXMgbmVlZCB0aGUgaW5mb3JtYXRpb25cblx0XHRcdFx0XHRcdFx0fSkuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkse1xuXHRcdFx0XHRcdFx0XHQuLi5jb2xzW2ldLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQsXG5cdFx0XHRcdFx0XHRcdGtleTppLFxuXHRcdFx0XHRcdFx0fSkpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdClcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVSb3cgZXh0ZW5kcyBlZGl0YWJsZShSb3cse3N0b3BwYWJsZTp0cnVlLCBjb250aW51YWJsZTp0cnVlfSl7XG5cdC8qKlxuXHQgKiBAY29udGludWFibGVcblx0ICogMS4gW2RvbmVdc2ltcGx5KHN1aXRhYmxlIGZvciBtb3N0IGNhc2VzKSwgcm93IGlzIGF0b20gb2YgY29tcG9zaW5nLCBzbyBjb21wb3NlIGFsbCBjb250ZW50IG9yIG5vdGhpbmdcblx0ICogMi4gYmlnIHJvdzogaXQgY2FuIGF2b2lkIGNvbXBvc2luZyBmb3Igb3V0IG9mIHZpZXdwb3J0IHNwYWNlXG5cdCAqIEBwYXJhbSB7Kn0gYSBcblx0ICovXG5cdHNob3VsZENvbnRpbnVlQ29tcG9zZSgpe1xuXHRcdHJldHVybiB0cnVlXG5cdH1cbn1cblxuXG5cbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcbmNsYXNzIFNlbGVjdG9yIGV4dGVuZHMgQ29tcG9uZW50IHtcblx0cmVuZGVyKCkge1xuXHRcdGNvbnN0IHsgb25TZWxlY3QsIGN1cnNvciwgc2l6ZSA9IDUsIC4uLnByb3BzIH0gPSB0aGlzLnByb3BzO1xuXHRcdHJldHVybiA8bGluZSB7Li4ucHJvcHN9IHN0cm9rZT1cInRyYW5zcGFyZW50XCIgc3Ryb2tlV2lkdGg9e3NpemV9IHN0eWxlPXt7IGN1cnNvciB9fSBvbkNsaWNrPXtvblNlbGVjdH0gLz47XG5cdH1cbn1cbmV4cG9ydCBjb25zdCBSb3dTZWxlY3RvciA9IHByb3BzID0+IDxTZWxlY3RvciB7Li4ucHJvcHN9IGN1cnNvcj1cImUtcmVzaXplXCIgLz47XG5leHBvcnQgY29uc3QgQ29sU2VsZWN0b3IgPSBwcm9wcyA9PiA8U2VsZWN0b3Igey4uLnByb3BzfSBjdXJzb3I9XCJzLXJlc2l6ZVwiIC8+O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL2dyb3VwXCJcblxuY29uc3QgRWRnZT0oe3N6OnNpemUsY29sb3IsZCwgdmFsLCBzcGFjZSwgLi4ueHl9KT0+PGxpbmUgc3Ryb2tlV2lkdGg9e3NpemV9IHN0cm9rZT17Y29sb3J9IHsuLi54eX0vPlxuXG5leHBvcnQgZGVmYXVsdCAoe3RvcCxsZWZ0LHJpZ2h0LGJvdHRvbSwgd2lkdGgsaGVpZ2h0LCAuLi5wcm9wc30pPT4oXG4gICAgPEdyb3VwIHsuLi5wcm9wc30+XG4gICAgICAgIDxFZGdlIHsuLi50b3B9IHkxPXswfSB5Mj17MH0geDE9ezB9IHgyPXt3aWR0aH0vPlxuICAgICAgICA8RWRnZSB7Li4uYm90dG9tfSB5MT17aGVpZ2h0fSB5Mj17aGVpZ2h0fSB4MT17MH0geDI9e3dpZHRofS8+XG4gICAgICAgIDxFZGdlIHsuLi5yaWdodH0geDE9e3dpZHRofSB4Mj17d2lkdGh9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgICAgIDxFZGdlIHsuLi5sZWZ0fSB4MT17MH0geDI9ezB9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgPC9Hcm91cD5cbikiLCJpbXBvcnQgUmVhY3Qse0NvbXBvbmVudCxGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtjb25uZWN0LCBBQ1RJT059IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IHtDb2xTZWxlY3RvciwgUm93U2VsZWN0b3J9IGZyb20gXCIuL3NlbGVjdG9yXCJcbmltcG9ydCBSZXNpemFibGUgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGVcIlxuaW1wb3J0IEVkZ2VzIGZyb20gXCIuL2VkZ2VzXCJcblxuY29uc3Qge0NvbFJlc2l6ZXIsIFJvd1Jlc2l6ZXJ9PVJlc2l6YWJsZVxuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KCkoY2xhc3MgRWRpdGFibGVFZGdlcyBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0ZWRpdGFibGU6UHJvcFR5cGVzLmFueSxcblx0fVxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7aXNGaXJzdFJvd0luUGFnZSwgaXNMYXN0UmFua09mUm93LCB0YWJsZSxyb3csIGNlbGwsaSx3aWR0aCxoZWlnaHQsZGlzcGF0Y2h9PXRoaXMucHJvcHNcblx0XHRpZighdGhpcy5jb250ZXh0LmVkaXRhYmxlKVxuXHRcdFx0cmV0dXJuIDxFZGdlcyB7Li4udGhpcy5wcm9wc30vPlxuICAgICAgICAgICAgICAgIFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIDxFZGdlcyB7Li4udGhpcy5wcm9wc30vPlxuXG4gICAgICAgICAgICAgICAge2lzRmlyc3RSb3dJblBhZ2UgJiYgPENvbFNlbGVjdG9yLz59XG5cbiAgICAgICAgICAgICAgICB7aXNMYXN0UmFua09mUm93ICYmIDxSb3dSZXNpemVyIHgxPXswfSB4Mj17d2lkdGh9IHkxPXtoZWlnaHR9IHkyPXtoZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVzaXplPXsoe3l9KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2goQUNUSU9OLkVudGl0eS5VUERBVEUoe2lkOnRhYmxlLCB0eXBlOlwidGFibGVcIixoZWlnaHQ6e3ZhbHVlOmhlaWdodCt5LHJvdyxjZWxsLGl9fSkpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+IHx8IG51bGxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB7aT09MCAgJiYgPFJvd1NlbGVjdG9yIHgxPXswfSB4Mj17MH0geTE9ezB9IHkyPXtoZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXsoKT0+ZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TRUxFQ1Qocm93KSl9Lz59XG5cbiAgICAgICAgICAgICAgICA8Q29sUmVzaXplciB4MT17d2lkdGh9IHkxPXswfSB4Mj17d2lkdGh9IHkyPXtoZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIG9uUmVzaXplPXsoe3h9KT0+e1xuXHRcdFx0XHRcdFx0ZGlzcGF0Y2goQUNUSU9OLkVudGl0eS5VUERBVEUoe2lkOnRhYmxlLCB0eXBlOlwidGFibGVcIiwgd2lkdGg6e3ZhbHVlOndpZHRoK3gsIHJvdywgY2VsbCxpfX0pKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgKVxuICAgIH1cbn0pXG5cblxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCBFZGl0YWJsZUVkZ2VzIGZyb20gXCIuL2VkaXRhYmxlLWVkZ2VzXCJcbmltcG9ydCBTZWN0aW9uIGZyb20gXCIuLi9zZWN0aW9uXCJcbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGR9IGZyb20gXCIuLi8uLi9jb21wb3NhYmxlXCJcblxuLyoqXG4gKiBDZWxsIGlzIGZpc3Npb25hYmxlXG4gKiBjb21taXQgYWxsIHdoZW4gYWxsIGNvbXBvc2VkPz8/P1xuICovXG5jb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChkb20uQ2VsbClcbmNvbnN0IGRpc3BsYXlOYW1lPSgpPT57XG5cdGNvbnN0IHBhcnRzPVNlY3Rpb24uZGlzcGxheU5hbWUuc3BsaXQoXCItXCIpXG5cdHBhcnRzLnNwbGljZSgtMSwxLFN1cGVyLmRpc3BsYXlOYW1lLnNwbGl0KFwiLVwiKS5wb3AoKSlcblx0cmV0dXJuIHBhcnRzLmpvaW4oXCItXCIpXG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDZWxsIGV4dGVuZHMgU2VjdGlvbntcblx0c3RhdGljIGRpc3BsYXlOYW1lPWRpc3BsYXlOYW1lKClcblx0c3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0Li4uU3VwZXIuZGVmYXVsdFByb3BzLFxuXHRcdGNyZWF0ZUxheW91dDpTZWN0aW9uLmRlZmF1bHRQcm9wcy5jcmVhdGVMYXlvdXQsXG5cdH1cblx0XG5cdHN0YXRpYyBMYXlvdXQ9Y2xhc3MgTGF5b3V0Q2VsbCBleHRlbmRzIFNlY3Rpb24uTGF5b3V0e1xuXHRcdHN0YXRpYyBkaXNwbGF5TmFtZT1cImZyYW1lLWNlbGxcIlxuXHRcdG5leHRBdmFpbGFibGVTcGFjZSh7aGVpZ2h0OnJlcXVpcmVkQmxvY2tTaXplPTB9PXt9KXtcblx0XHRcdGNvbnN0IHNwYWNlPXN1cGVyLm5leHRBdmFpbGFibGVTcGFjZSguLi5hcmd1bWVudHMpXG5cdFx0XHQvKipjZWxsIGlzIGFsbG93ZWQgdG8gYmUgZW1wdHksIGJ1dCBub3JtYWwgZnJhbWUgaXMgbm90IGFsbG93ZWQgKi9cblx0XHRcdGlmKHNwYWNlICYmIHRoaXMuaXNFbXB0eSgpICYmIHJlcXVpcmVkQmxvY2tTaXplPnRoaXMuYXZhaWxhYmxlQmxvY2tTaXplKXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3BhY2Vcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBhIGNlbGwgc3BhY2UgYm9yZGVyfG1hcmdpbnxjb250ZW50fG1hcmdpbnxib3JkZXJcblx0XHQgKi9cblx0XHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcblx0XHRcdGNvbnN0IHtib3JkZXJzLHdpZHRoLGhlaWdodH09dGhpcy5wcm9wc1xuXHRcdFx0Y29uc3Qge3RhYmxlLHJvdyxpZDpjZWxsLGNvbEluZGV4OmksaXNGaXJzdFJvd0luUGFnZSxpc0xhc3RSYW5rT2ZSb3d9PXRoaXMucHJvcHNcbiAgICAgICAgXG5cdFx0XHRjb25zdCBjb250ZW50PXN1cGVyLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCguLi5hcmd1bWVudHMpXG5cdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0XHRjb250ZW50LFxuXHRcdFx0XHR7d2lkdGgsaGVpZ2h0fSxcblx0XHRcdFx0Y29udGVudC5wcm9wcy5jaGlsZHJlbixcblx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KGJvcmRlcnMse2hlaWdodCx3aWR0aCxcblx0XHRcdFx0XHR0YWJsZSxyb3csY2VsbCxpLGlzRmlyc3RSb3dJblBhZ2UsaXNMYXN0UmFua09mUm93Ly9lZGl0YWJsZSBlZGdlc1xuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH1cblx0XHQvKipcblx0XHQgKiBjcmVhdGUgZW1wdHkgY2VsbCBzbG90XG5cdFx0ICovXG5cdFx0Y2xvbmVBc0VtcHR5KCl7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih0aGlzLmNsb25lKC4uLmFyZ3VtZW50cykse2NvbXB1dGVkOntjb21wb3NlZDpbXSxhbmNob3JzOltdLGxhc3RDb21wb3NlZDpbXX19KVxuXHRcdH1cblxuXHRcdC8qKnVzZWQgdG8gY2FjdWxhdGUgcmFuayBoZWlnaHQgKi9cblx0XHRnZXQgc2xvdEhlaWdodCgpe1xuXHRcdFx0Y29uc3Qge21hcmdpbjp7Ym90dG9tPTB9fT10aGlzLnByb3BzXG5cdFx0XHRyZXR1cm4gdGhpcy5ibG9ja09mZnNldCtib3R0b21cblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgRWRnZXM9RWRpdGFibGVFZGdlc1xuXG5cdC8qKlxuXHQgKiBzcGFjZSBpcyBkZWZpbmVkIGJ5IHJvdy0+dGFibGUtPnBhcmVudCBzcGFjZSwgc28gaXQgaGFzIHRvIHJlcXVpcmUgc3BhY2UgdXBcblx0ICogd2hlbiBjdXJyZW50IGNlbGwgc3BhY2UgaXMgZnVsbCwgaXQncyBjYWxsZWQgdG8gY3JlYXRlIG5ldyBjZWxsIHNwYWNlIGJ5IHJlcXVpcmUgc3BhY2UgdXAgQUZURVJcblx0ICogKioqIGNvbW1pdCBjdXJyZW50IGNvbXBvc2VkIHRvIHBhcmVudCwgXG5cdCAqIE9yIGNvbW1pdCBhbGwgd2hlbiBhbGwgY29tcG9zZWQ/Pz8/IE5vLCBibG9ja09mZnNldCBjYW4ndCBiZSBkZXRlcm1pbmVkIGZyb20gc2Vjb25kIHNlZ21lbnRcblx0ICogQHBhcmFtIHsqfSBwcm9wcyBcblx0ICogQHBhcmFtIHsqfSBjb250ZXh0IFxuXHQgKiBAcGFyYW0geyp9IHJlcXVpcmVkIFxuXHQgKi9cblx0Y3JlYXRlTGF5b3V0KHByb3BzLGNvbnRleHQscmVxdWlyZWQ9e30pe1xuXHRcdGNvbnN0IHNwYWNlPXRoaXMuY29udGV4dC5wYXJlbnQubmV4dEF2YWlsYWJsZVNwYWNlKHsuLi5yZXF1aXJlZCxpZDp0aGlzLnByb3BzLmlkfSlcblx0XHRpZighc3BhY2UpXG5cdFx0XHRyZXR1cm4gbnVsbFxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsZnJhbWV9PXNwYWNlXG5cdFx0Y29uc3Qge21hcmdpbjp7cmlnaHQ9MCxsZWZ0PTAsdG9wPTAsYm90dG9tPTB9PXt9LCB2ZXJ0QWxpZ24sYm9yZGVyfT10aGlzLnByb3BzXG5cdFx0LyoqXG5cdFx0ICogYSBjZWxsIHNwYWNlIGJvcmRlcnxtYXJnaW58Y29udGVudHxtYXJnaW58Ym9yZGVyXG5cdFx0ICovXG5cdFx0cmV0dXJuIHN1cGVyLmNyZWF0ZUxheW91dCh7XG5cdFx0XHRtYXJnaW46e1xuXHRcdFx0XHRsZWZ0OmxlZnQrYm9yZGVyLmxlZnQuc3osXG5cdFx0XHRcdHJpZ2h0OnJpZ2h0K2JvcmRlci5sZWZ0LnN6LFxuXHRcdFx0XHR0b3A6dG9wK2JvcmRlci50b3Auc3osXG5cdFx0XHRcdGJvdHRvbTpib3R0b20rYm9yZGVyLmJvdHRvbS5zelxuXHRcdFx0fSxcblx0XHRcdHdpZHRoLFxuXHRcdFx0aGVpZ2h0LFxuXHRcdFx0dmVydEFsaWduLFxuXHRcdFx0Ym9yZGVyczo8dGhpcy5jb25zdHJ1Y3Rvci5FZGdlcyB7Li4ue1xuXHRcdFx0XHQuLi5ib3JkZXIsd2lkdGgsaGVpZ2h0LFxuXHRcdFx0XHRcImRhdGEtbm9jb250ZW50XCI6dHJ1ZSwvL2lnbm9yZSBzZWFyY2ggZm9yIHBvc2l0aW9uaW5nXG5cdFx0XHRcdH19Lz5cblx0XHR9LHtmcmFtZX0pXG5cdH1cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKXtcblx0XHRpZih0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aD09MCl7XG5cdFx0XHRjb25zdCBhPXRoaXMuY3JlYXRlTGF5b3V0KClcblx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQucHVzaChhKVxuXHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZCh0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudChhKSlcblx0XHR9XG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vY29tcG9zZWRcIlxuXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG4vKipcbiogeHkgZm9yIFBvc2l0aW9uaW5nXG4qIHdyYXAgYm91bmRhcnkgbXVzdCBiZSBwcm92aWRlZCBieSBjaGlsZHJlbiBjb250ZW50LCBhbmQgdGhlbiBwYXNzIHRvIGZyYW1lXG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5jaG9yIGV4dGVuZHMgSGFzUGFyZW50QW5kQ2hpbGQoZG9tLkFuY2hvcil7XG4gICAgY3JlYXRlQ29tcG9zZWQyUGFyZW50KGNvbnRlbnQpe1xuICAgICAgICB2YXIge3dpZHRoLGhlaWdodCxnZW9tZXRyeX09Y29udGVudC5wcm9wc1xuICAgICAgICBjb25zdCB7bWFyZ2luOntsZWZ0PTAscmlnaHQ9MCx0b3A9MCxib3R0b209MH09e30sIHdyYXAsIHg6WCwgeTpZfT10aGlzLnByb3BzXG4gICAgICAgIHRoaXMud2lkdGg9d2lkdGgrPShsZWZ0K3JpZ2h0KVxuICAgICAgICB0aGlzLmhlaWdodD1oZWlnaHQrPSh0b3ArYm90dG9tKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEdyb3VwIGNoaWxkcmVuPXtjb250ZW50fVxuICAgICAgICAgICAgICAgIGFuY2hvcj17c3BhY2U9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZT17d2lkdGg6dGhpcy53aWR0aCwgaGVpZ2h0OnRoaXMuaGVpZ2h0fSAgXG4gICAgICAgICAgICAgICAgICAgIHZhciB4PXNwYWNlLmFuY2hvcih7YWxpZ246XCJsZWZ0XCIsLi4uWH0sc2l6ZSxzcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgdmFyIHk9c3BhY2UuYW5jaG9yKHthbGlnbjpcInRvcFwiLC4uLll9LHNpemUsc3BhY2UpXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB4PXgtbGVmdCwgeT15LXRvcFxuICAgICAgICAgICAgICAgICAgICBpZihnZW9tZXRyeSAmJiBnZW9tZXRyeS5vcmlnaW4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgeC09Z2VvbWV0cnkub3JpZ2luLnhcbiAgICAgICAgICAgICAgICAgICAgICAgIHktPWdlb21ldHJ5Lm9yaWdpbi55XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3cmFwRnVuYz0oZm49PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFmbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih3cmFwLm1vZGU9PVwiU3F1YXJlXCIgfHwgd3JhcC5tb2RlPT1cIlRvcEFuZEJvdHRvbVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lPT5mbi5jYWxsKHRoaXMsIGxpbmUsIHtib3VuZHM6KCk9Pih7bGVmdDp4LHRvcDp5LHJpZ2h0Ongrd2lkdGgsYm90dG9tOnkraGVpZ2h0fSl9KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU9PmZuLmNhbGwodGhpcywgbGluZSwgZ2VvbWV0cnkuY2xvbmUoKS50cmFuc2xhdGUoeCx5KSlcbiAgICAgICAgICAgICAgICAgICAgfSkod3JhcCAmJiAodHlwZW9mKHdyYXApPT1cImZ1bmN0aW9uXCIgPyB3cmFwIDogdGhpc1tgd3JhcCR7d3JhcC5tb2RlfWBdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxHcm91cCB7Li4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgseSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOndyYXBGdW5jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5Ont4LHksd2lkdGgsaGVpZ2h0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtY29udGVudFwiOnRoaXMucHJvcHMuaWQsXCJkYXRhLXR5cGVcIjp0aGlzLmdldENvbXBvc2VUeXBlKCl9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R3JvdXAgeD17bGVmdH0geT17dG9wfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgfVxuXG4gICAgYXBwbHlXcmFwVGV4dCh4MSx4MiwgeCwgWCl7XG4gICAgICAgIGNvbnN0IHt3cmFwOnt3cmFwVGV4dH19PXRoaXMucHJvcHNcbiAgICAgICAgY29uc3QgZ2V0PXR5cGU9PntcbiAgICAgICAgICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt4LHdpZHRoOngyLXh9XG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge3g6eDEsd2lkdGg6WC14MX1cbiAgICAgICAgICAgIGNhc2UgXCJsYXJnZXN0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCgoeC14MSk+PSh4Mi1YKSA/IFwibGVmdFwiIDogXCJyaWdodFwiKVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4ge3gsIHdpZHRoOlgteH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZXQod3JhcFRleHQpXG4gICAgfVxuXG4gICAgd3JhcFNxdWFyZSh7eDEseDIseTI6eSx5MT15fSxnZW9tZXRyeSl7XG4gICAgICAgIGNvbnN0IHt3cmFwOnttb2RlLCB3cmFwVGV4dH0sbWFyZ2luOntyaWdodDptcj0wLCBsZWZ0Om1sPTB9PXt9fT10aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IHtsZWZ0LHRvcCxyaWdodCxib3R0b219PWdlb21ldHJ5LmJvdW5kcygpXG4gICAgICAgIGlmKHk+PXRvcCAmJiB5PD1ib3R0b20pe1xuICAgICAgICAgICAgaWYoISh4Mjw9bGVmdCB8fCB4MT49cmlnaHQpKXtcbiAgICAgICAgICAgICAgICBpZih5MSE9PWJvdHRvbSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuYXBwbHlXcmFwVGV4dCh4MSx4MixsZWZ0LW1sLCByaWdodCttcikse3k6Ym90dG9tfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cmFwVGlnaHQobGluZSxnZW9tZXRyeSl7XG4gICAgICAgIGNvbnN0IHttYXJnaW46e2xlZnQ9MCxyaWdodD0wfX09dGhpcy5wcm9wc1xuICAgICAgICBjb25zdCB7eDEseDIsIHkyfT1saW5lXG4gICAgICAgIGNvbnN0IHBvaW50cz1nZW9tZXRyeS5pbnRlcnNlY3RzKHt4MSx4Mix5Mix5MTp5Mn0pLnNvcnQoKGEsYik9PmEueC1iLngpXG4gICAgICAgIGlmKHBvaW50cy5sZW5ndGg+Mil7XG4gICAgICAgICAgICBwb2ludHMuc3BsaWNlKDEscG9pbnRzLmxlbmd0aC0xLTEpXG4gICAgICAgIH1cbiAgICAgICAgaWYocG9pbnRzLmxlbmd0aD4wKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5V3JhcFRleHQoeDEseDIscG9pbnRzWzBdLngtbGVmdCxwb2ludHMucG9wKCkueCtyaWdodClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyYXBUaHJvdWdoKGxpbmUsZ2VvbWV0cnkpe1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwVGlnaHQoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIHdyYXBDbGVhcih7eDEseDIseTI6eSwgeTE9eX0sZ2VvbWV0cnkpe1xuICAgICAgICBjb25zdCB7bGVmdCx0b3AscmlnaHQsYm90dG9tfT1nZW9tZXRyeS5ib3VuZHMoKVxuICAgICAgICBpZih5Pj10b3AgJiYgeTw9Ym90dG9tKXtcbiAgICAgICAgICAgIGlmKHkxIT09Ym90dG9tKXtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3g6eDEsd2lkdGg6eDIteDEseTpib3R0b20sdHlwZTpcImNsZWFyXCJ9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cmFwVG9wQW5kQm90dG9tKCl7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBDbGVhciguLi5hcmd1bWVudHMpXG4gICAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkLFN0b3BwYWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRhaW5lciBleHRlbmRzIFN0b3BwYWJsZShIYXNQYXJlbnRBbmRDaGlsZChkb20uQ29udGFpbmVyKSxmYWxzZSl7XG4gICAgZ2V0Q29tcG9zZVR5cGUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSB8fCBzdXBlci5nZXRDb21wb3NlVHlwZSgpXG4gICAgfVxuXG4gICAgYXBwZW5kQ29tcG9zZWQoZWxlbWVudCl7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHdpZHRoLGhlaWdodCxtaW5XaWR0aCx4LHksYmxvY2tPZmZzZXQsXG4gICAgICAgICAgICB3cmFwLCBhbmNob3IsXG4gICAgICAgICAgICBkZXNjZW50LHBhZ2luYXRpb24sXG4gICAgICAgICAgICBtZXJnZU9wcG9ydHVuaXR5LFxuICAgICAgICAgICAgLi4ucHJvcHN9PWVsZW1lbnQucHJvcHNcbiAgICAgICAgcmV0dXJuIHN1cGVyLmFwcGVuZENvbXBvc2VkKFJlYWN0LmNyZWF0ZUVsZW1lbnQoR3JvdXAse1xuICAgICAgICAgICAgd2lkdGgsaGVpZ2h0LG1pbldpZHRoLHdyYXAsIGFuY2hvcixkZXNjZW50LHBhZ2luYXRpb24seCx5LGJsb2NrT2Zmc2V0LG1lcmdlT3Bwb3J0dW5pdHksXG4gICAgICAgICAgICBjaGlsZHJlbjpSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCx7XG4gICAgICAgICAgICAgICAgeDp1bmRlZmluZWQsIHk6dW5kZWZpbmVkLHdyYXA6dW5kZWZpbmVkLGFuY2hvcjp1bmRlZmluZWQsYmxvY2tPZmZzZXQ6dW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1lcmdlT3Bwb3J0dW5pdHk6dW5kZWZpbmVkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSkpXG4gICAgfVxufVxuIiwiaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsTG9jYXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5cbmltcG9ydCBEb2N1bWVudCBmcm9tIFwiLi9kb2N1bWVudFwiXG5pbXBvcnQgU2VjdGlvbiBmcm9tIFwiLi9zZWN0aW9uXCJcbmltcG9ydCBQYXJhZ3JhcGggZnJvbSBcIi4vcGFyYWdyYXBoXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuL3RleHRcIlxuaW1wb3J0IEltYWdlIGZyb20gXCIuL2ltYWdlXCJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi90YWJsZVwiXG5pbXBvcnQgUm93IGZyb20gXCIuL3Jvd1wiXG5pbXBvcnQgQ2VsbCBmcm9tIFwiLi9jZWxsXCJcbmltcG9ydCBGcmFtZSBmcm9tIFwiLi9mcmFtZVwiXG5pbXBvcnQgQW5jaG9yIGZyb20gXCIuL2FuY2hvclwiXG5pbXBvcnQgU2hhcGUgZnJvbSBcIi4vc2hhcGVcIlxuaW1wb3J0IENvbnRhaW5lciBmcm9tIFwiLi9jb250YWluZXJcIlxuaW1wb3J0IFRlbXBsYXRlIGZyb20gXCIuL3RlbXBsYXRlXCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vY29tcG9zZWQvZ3JvdXBcIlxuXG5leHBvcnQgZGVmYXVsdCBMb2NhdGFibGUuZW5hYmxlKEhhc1BhcmVudEFuZENoaWxkLmVuYWJsZShkb20se1xuXHREb2N1bWVudCxcblx0U2VjdGlvbixcblx0UGFyYWdyYXBoLFxuXHRUZXh0LFxuXG5cdEltYWdlLFxuXHRUYWJsZSxcblx0Um93LFxuXHRDZWxsLFxuXHRGcmFtZSxcblx0U2hhcGUsXG5cdEFuY2hvcixcblx0Q29udGFpbmVyLFxuXHRUZW1wbGF0ZSxcbn0pLHtHcm91cH0pXG4iLCJpbXBvcnQgZG9tIGZyb20gXCIuLlwiXG5cbmltcG9ydCB7ZWRpdGFibGV9IGZyb20gXCIuLi8uLi9jb21wb3NhYmxlXCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vLi4vY29tcG9zZWQvZ3JvdXBcIlxuXG5leHBvcnQgZGVmYXVsdCBlZGl0YWJsZS5lbmFibGUoZG9tLHtHcm91cH0pXG4iLCJpbXBvcnQgRm9udEtpdCBmcm9tIFwiZm9udGtpdFwiXG5cbmNvbnN0IGZvbnRzPW5ldyAoY2xhc3N7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5mYW1pbGllcz17fVxuICAgIH1cblxuICAgIGdldChuYW1lLHtib2xkLGl0YWxpY309e30pe1xuICAgICAgICBjb25zdCBmb3VuZD10aGlzLmZhbWlseShuYW1lKVxuICAgICAgICBpZihmb3VuZCl7XG4gICAgICAgICAgICBpZihmb3VuZC5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzBdXG5cbiAgICAgICAgICAgIGZvdW5kLnNvcnQoKGEsYik9PmEuYm9sZHx8MCthLml0YWxpY3x8MC1iLmJvbGR8fDAtYi5pdGFsaWN8fDApXG5cbiAgICAgICAgICAgIGxldCBib2xkcz1mb3VuZC5maWx0ZXIoYT0+YS5ib2xkKVxuICAgICAgICAgICAgbGV0IGl0YWxpY3M9Zm91bmQuZmlsdGVyKGE9PmEuaXRhbGljKVxuXG4gICAgICAgICAgICBpZihib2xkICYmIGl0YWxpYyl7XG4gICAgICAgICAgICAgICAgY29uc3QgYmk9Ym9sZHMuZmluZChhPT5pdGFsaWNzLmluY2x1ZGVzKGEpKVxuICAgICAgICAgICAgICAgIGlmKGJpKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihib2xkKXtcbiAgICAgICAgICAgICAgICBpZighaXRhbGljKXtcbiAgICAgICAgICAgICAgICAgICAgYm9sZHM9Ym9sZHMuZmlsdGVyKGE9PiFpdGFsaWNzLmluY2x1ZGVzKGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihib2xkcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9sZHNbMF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGl0YWxpYyl7XG4gICAgICAgICAgICAgICAgaWYoIWJvbGQpe1xuICAgICAgICAgICAgICAgICAgICBpdGFsaWNzPWl0YWxpY3MuZmlsdGVyKGE9PiFib2xkcy5pbmNsdWRlcyhhKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoaXRhbGljcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRhbGljc1swXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICByZXR1cm4gZm91bmRbMF1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1dChmb250LHByb3BzKXtcbiAgICAgICAgaWYoIWZvbnQuZmFtaWx5TmFtZSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXk9Zm9udC5mYW1pbHlOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgY29uc3QgZmFtaWx5PSh0aGlzLmZhbWlsaWVzW2tleV09dGhpcy5mYW1pbGllc1trZXldfHxbXSlcbiAgICAgICAgaWYoZmFtaWx5LmZpbmQoYT0+YS5mdWxsTmFtZT09Zm9udC5mdWxsTmFtZSkpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBmb250PWV4dGVuZChmb250LHByb3BzKVxuICAgICAgICBjb25zdCB7ZnVsbE5hbWU9XCJcIixmYW1pbHlOYW1lPVwiXCIsc3ViZmFtaWx5TmFtZT1cIlwifT1mb250XG4gICAgICAgIGNvbnN0IHV1aWQ9YCR7ZnVsbE5hbWV9LCR7ZmFtaWx5TmFtZX0sJHtzdWJmYW1pbHlOYW1lfWBcbiAgICAgICAgaWYoL2JvbGQvaS50ZXN0KHV1aWQpKVxuICAgICAgICAgICAgZm9udC5ib2xkPTFcbiAgICAgICAgaWYoL2l0YWxpYy9pLnRlc3QodXVpZCkpXG4gICAgICAgICAgICBmb250Lml0YWxpYz0xXG4gICAgICAgIGNvbnN0IG5hbWU9Zm9udC5mYW1pbHlOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgY29uc29sZS5sb2coYGZvbnRbJHtmb250LmZhbWlseU5hbWV9XSBsb2FkZWRgKVxuICAgICAgICBmYW1pbHkucHVzaChmb250KVxuICAgICAgICByZXR1cm4gZm9udFxuICAgIH1cblxuICAgIG5hbWVzKCl7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZhbWlsaWVzKVxuXHRcdFx0Lm1hcChrPT50aGlzLmZhbWlsaWVzW2tdWzBdLmZhbWlseU5hbWUpXG5cdFx0XHQuZmlsdGVyKGE9PiEhYSlcbiAgICB9XG5cbiAgICBmYW1pbHkobmFtZSl7XG4gICAgICAgIHJldHVybiB0aGlzLmZhbWlsaWVzW25hbWUudG9Mb3dlckNhc2UoKV1cbiAgICB9XG59KSgpXG5cbmNvbnN0IEZvbnRNYW5hZ2VyPXtcbiAgICBnZXQoKXtcbiAgICAgICAgcmV0dXJuIGZvbnRzLmdldCguLi5hcmd1bWVudHMpXG4gICAgfSxcblxuICAgIGdldCBuYW1lcygpe1xuXHRcdHJldHVybiBmb250cy5uYW1lcygpLnNvcnQoKVxuXHR9LFxuXG4gICAgcmVsZWFzZSgpe1xuICAgICAgICB0aGlzLml0ZXJhdGVMb2NhbChhPT5VUkwucmVsZWFzZU9iamVjdFVSTChhLnNyYykpXG4gICAgICAgIGZvbnRzLmZhbWlsaWVzPXt9XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGl0ZXJhdGVMb2NhbChmKXtcbiAgICAgICAgZm9udHMubmFtZXMoKS5mb3JFYWNoKGs9PntcbiAgICAgICAgICAgIGZvbnRzLmZhbWlseShrKS5mb3JFYWNoKGE9PntcbiAgICAgICAgICAgICAgICBpZihhLnNyYyAmJiBhLnNyYy5zdGFydHNXaXRoKFwiYmxvYjpcIikpe1xuICAgICAgICAgICAgICAgICAgICBmKGEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9LFxuXG5cdGZyb21Ccm93c2VyKGxvYWRlcil7XG4gICAgICAgIGNvbnN0IGxvYWQxPWZpbGU9PntcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlPT57XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjPVVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSlcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBGaWxlUmVhZGVyKCkse1xuICAgICAgICAgICAgICAgICAgICBvbmxvYWQoe3RhcmdldDp7cmVzdWx0OmRhdGF9fSl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udD1Gb250S2l0LmNyZWF0ZShCdWZmZXIuZnJvbShkYXRhKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighZm9udCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZvbnQuZm9udHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEFycmF5LmZyb20oZm9udC5mb250cykubWFwKGZvbnQ9PmZvbnRzLnB1dChmb250LHtzcmN9KSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNle1xuICAgIFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShmb250cy5wdXQoZm9udCx7c3JjfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHRcdFx0fWNhdGNoKGUpe1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKClcblx0XHRcdFx0XHRcdH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25lcnJvcjplPT5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICB9KS5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKGxvYWRlci5maWxlcykubWFwKGxvYWQxKSkudGhlbihmb250cz0+e1xuICAgICAgICAgICAgbG9hZGVyLnZhbHVlPVwiXCJcbiAgICAgICAgICAgIHJldHVybiBmbGF0KGZvbnRzKVxuICAgICAgICB9KS5maW5hbGx5KG1ha2VXZWJGb250KVxuXHR9LFxuXG4gICAgZnJvbVBhdGgocGF0aCl7XG4gICAgICAgIGNvbnN0IGxvYWQxPWZpbGU9PntcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlPT57XG4gICAgICAgICAgICAgICAgRm9udEtpdC5vcGVuKGZpbGUsKGVyciwgZm9udCk9PntcbiAgICAgICAgICAgICAgICAgICAgaWYoZXJyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihmb250LmZvbnRzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShmb250LmZvbnRzKS5tYXAoZm9udD0+Zm9udHMucHV0KGZvbnQse3NyYzpmaWxlfSkpKVxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZm9udHMucHV0KGZvbnQse3NyYzpmaWxlfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICAgICAgICAgIGlmKHBhdGgpe1xuICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwiZnNcIikucmVhZGRpcihwYXRoLCAoZXJyLCBmaWxlcyk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVycil7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoZmlsZXMubWFwKGZpbGU9PmxvYWQxKGAke3BhdGh9LyR7ZmlsZX1gKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZm9udHM9PnJlc29sdmUoZmxhdChmb250cykpLHJlamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZShcImdldC1zeXN0ZW0tZm9udHNcIikoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZm9udHM9PlByb21pc2UuYWxsKGZvbnRzLm1hcChsb2FkMSkuZmlsdGVyKGE9PiEhYSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZm9udHM9PnJlc29sdmUoZmxhdChmb250cykpLHJlamVjdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgIH0sXG5cbiAgICBmcm9tUmVtb3RlKHNlcnZpY2Upe1xuICAgICAgICByZXR1cm4gZmV0Y2goc2VydmljZSlcbiAgICAgICAgICAgIC50aGVuKHJlcz0+cmVzLnRleHQoKSlcbiAgICAgICAgICAgIC50aGVuKGxpc3Q9PntcbiAgICAgICAgICAgICAgICBsZXQgZm9udHNcbiAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRzPUpTT04ucGFyc2UobGlzdClcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgIGZvbnRzPWxpc3Quc3BsaXQoXCIsXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmb250cy5maWx0ZXIoYT0+ISFhKS5tYXAoYT0+YS50cmltKCkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4obGlzdD0+e1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5tYXAoYT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3JjPWAke3NlcnZpY2V9LyR7YX1gXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmV0Y2goc3JjKS50aGVuKHJlcz0+e1xuICAgICAgICAgICAgXHRcdFx0XHRcdGlmKHJlcy5vayl7XG4gICAgICAgICAgICBcdFx0XHRcdFx0XHRyZXR1cm4gcmVzLmFycmF5QnVmZmVyKCkudGhlbihidWZmZXI9PmZvbnRzLnB1dChGb250S2l0LmNyZWF0ZShCdWZmZXIuZnJvbShidWZmZXIpKSx7c3JjfSkpXG4gICAgICAgICAgICBcdFx0XHRcdFx0fVxuICAgICAgICAgICAgXHRcdFx0XHR9KVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maW5hbGx5KG1ha2VXZWJGb250KVxuICAgIH0sXG5cblx0bG9hZChzZXJ2aWNlLGlkKXtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgY29uc3QgZm91bmQ9dGhpcy5nZXQoaWQpXG4gICAgXHRcdGlmKHR5cGVvZihmb3VuZCkhPVwidW5kZWZpbmVkXCIpXG4gICAgXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmb3VuZClcbiAgICAgICAgfWNhdGNoKGUpe1xuXG4gICAgICAgIH1cblxuXHRcdGxldCBkYXRhUmV0cmlldmVkLHByb3BzPXt9XG5cdFx0aWYodHlwZW9mKHNlcnZpY2UpPT1cInN0cmluZ1wiKXtcbiAgICAgICAgICAgIGRhdGFSZXRyaWV2ZWQ9ZmV0Y2gocHJvcHMuc3JjPWAke3NlcnZpY2V9LyR7aWR9YClcblx0XHRcdFx0LnRoZW4ocmVzPT57XG5cdFx0XHRcdFx0aWYoIXJlcy5vayl7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IocmVzLnN0YXR1c1RleHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXMuYXJyYXlCdWZmZXIoKVxuXHRcdFx0XHR9KVxuXHRcdH1lbHNle1xuXHRcdFx0ZGF0YVJldHJpZXZlZD1zZXJ2aWNlKGlkKVxuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhUmV0cmlldmVkXG5cdFx0XHQudGhlbihidWZmZXI9PmZvbnRzLnB1dChGb250S2l0LmNyZWF0ZShCdWZmZXIuZnJvbShidWZmZXIpKSxwcm9wcykpXG5cdFx0XHQuY2F0Y2goKVxuXHR9LFxuXG4gICAgYXNTZXJ2aWNlKHN3PVwiL2ZvbnQtc2VydmljZS5qc1wiLHNjb3BlPVwiXCIpe1xuICAgICAgICBpZiAodHlwZW9mKG5hdmlnYXRvcikhPVwidW5kZWZpbmVkXCIgJiYgJ3NlcnZpY2VXb3JrZXInIGluIG5hdmlnYXRvcikge1xuICAgICAgICAgICAgdmFyIHNlcnZpY2VcbiAgICAgICAgICAgIGNvbnN0IF9mcm9tQnJvd3Nlcj1Gb250TWFuYWdlci5mcm9tQnJvd3NlclxuICAgICAgICAgICAgRm9udE1hbmFnZXIuZnJvbUJyb3dzZXI9ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zyb21Ccm93c2VyLmNhbGwoRm9udE1hbmFnZXIsLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgLmZpbmFsbHkoKCk9PkZvbnRNYW5hZ2VyLml0ZXJhdGVMb2NhbCgoe2ZhbWlseU5hbWUsIHNyY30pPT57XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLmFjdGl2ZS5wb3N0TWVzc2FnZSh7ZmFtaWx5TmFtZSwgc3JjLCBzY29wZX0pXG4gICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLnJlZ2lzdGVyKGAke3N3fWAsIHsgc2NvcGU6IGAke3Njb3BlfS9gIH0pLnRoZW4oZnVuY3Rpb24ocmVnKSB7XG4gICAgICAgICAgICAgICAgc2VydmljZT1yZWdcbiAgICAgICAgICAgICAgICBpZihyZWcuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb250IFNlcnZpY2VbJHtzd31dIHdvcmtlciBhY3RpdmVgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb250IFNlcnZpY2VbJHtzd31dIGZhaWxlZCB3aXRoIGAgKyBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvbnRNYW5hZ2VyXG5cbmZ1bmN0aW9uIGZsYXQoZm9udHMpe1xuICAgIHJldHVybiBmb250cy5yZWR1Y2UoKGNsdCxhKT0+e1xuICAgICAgICBpZihBcnJheS5pc0FycmF5KGEpKXtcbiAgICAgICAgICAgIGNsdC5zcGxpY2UoY2x0Lmxlbmd0aCwwLC4uLmEpXG4gICAgICAgIH1lbHNlIGlmKGEpe1xuICAgICAgICAgICAgY2x0LnB1c2goYSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2x0XG4gICAgfSxbXSlcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGZvbnQsIHByb3BzPXt9KXtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZm9udCx7XG5cdFx0bGluZUhlaWdodChmb250U2l6ZSl7XG5cdFx0XHRjb25zdCBzY2FsZSA9IDEgLyB0aGlzLnVuaXRzUGVyRW0gKiBmb250U2l6ZVxuXHRcdFx0cmV0dXJuIHNjYWxlKih0aGlzLmFzY2VudC10aGlzLmRlc2NlbnQrdGhpcy5saW5lR2FwKVxuXHRcdH0sXG5cdFx0bGluZURlc2NlbnQoZm9udFNpemUpe1xuXHRcdFx0Y29uc3Qgc2NhbGUgPSAxIC8gdGhpcy51bml0c1BlckVtICogZm9udFNpemU7XG5cdFx0XHRyZXR1cm4gLXRoaXMuZGVzY2VudCpzY2FsZVxuXHRcdH0sXG5cbiAgICAgICAgc3RyaW5nV2lkdGgoc3RyaW5nLGZvbnRTaXplKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxheW91dChzdHJpbmcpLmFkdmFuY2VXaWR0aC90aGlzLnVuaXRzUGVyRW0gKiBmb250U2l6ZVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuXHR9KVxufVxuXG52YXIgd2ViRm9udHM9bnVsbFxuZnVuY3Rpb24gbWFrZVdlYkZvbnQoKXtcbiAgICBpZighd2ViRm9udHMpe1xuICAgICAgICB3ZWJGb250cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIilcbiAgICAgICAgd2ViRm9udHMuaWQ9XCJ3ZV9lZGl0X3dlYl9mb250c1wiXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQod2ViRm9udHMpXG4gICAgfVxuICAgIGNvbnN0IGxvYWRlZD1BcnJheS5mcm9tKHdlYkZvbnRzLnNoZWV0LnJ1bGVzKS5tYXAoYT0+YS5zdHlsZS5mb250RmFtaWx5KVxuICAgIGZvbnRzLm5hbWVzKCkuZmlsdGVyKGE9PiFsb2FkZWQuaW5jbHVkZXMoYSkpXG4gICAgICAgIC5mb3JFYWNoKGs9PntcbiAgICAgICAgICAgIGNvbnN0IGZvbnQ9Zm9udHMuZ2V0KGspXG4gICAgICAgICAgICBjb25zdCB7ZmFtaWx5TmFtZSwgc3JjfT1mb250XG4gICAgICAgICAgICBpZihzcmMgJiYgZmFtaWx5TmFtZSl7XG4gICAgICAgICAgICAgICAgd2ViRm9udHMuc2hlZXQuYWRkUnVsZSgnQGZvbnQtZmFjZScsYGZvbnQtZmFtaWx5OlwiJHtmYW1pbHlOYW1lfVwiO3NyYzogbG9jYWwoXCIke2ZhbWlseU5hbWV9XCIpLCB1cmwoXCIke3NyY31cIik7YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbn1cbiIsImV4cG9ydCBjbGFzcyBNZWFzdXJle1xuICAgIGNvbnN0cnVjdG9yKHN0eWxlKXtcblx0XHRjb25zdCB7Zm9udHMsIHNpemV9PXN0eWxlXG5cdFx0dGhpcy5zdHlsZT1zdHlsZVxuXHRcdHRoaXMuZm9udEZhbWlseXM9Zm9udHMuc3BsaXQoXCIsXCIpLm1hcChhPT5hLnRyaW0oKSkuZmlsdGVyKGE9PiEhYSlcbiAgICAgICAgdGhpcy5mb250RmFtaWx5PXRoaXMuZm9udEZhbWlseXNbMF1cblx0XHR0aGlzLnNpemU9c2l6ZVxuICAgICAgICB0aGlzLmRlZmF1bHRTdHlsZT17XG5cdFx0XHR3aGl0ZVNwYWNlOidwcmUnLFxuXHRcdFx0Zm9udFNpemU6YCR7c2l6ZX1wdGAsXG5cdFx0XHRmb250V2VpZ2h0OnN0eWxlLmJvbGQgPyA3MDAgOiA0MDAsXG5cdFx0XHRmb250U3R5bGU6c3R5bGUuaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCIsXG5cdFx0XHRmb250RmFtaWx5OnRoaXMuZm9udEZhbWlseVxuXHRcdH1cblxuXHRcdGNvbnN0IHtoZWlnaHQsIGRlc2NlbnR9PXRoaXMubGluZUhlaWdodCgpXG4gICAgICAgIHRoaXMuZGVmYXVsdFN0eWxlLmhlaWdodD10aGlzLmhlaWdodD1oZWlnaHRcblx0XHR0aGlzLmRlZmF1bHRTdHlsZS5kZXNjZW50PXRoaXMuZGVzY2VudD1kZXNjZW50XG4gICAgfVxuXG5cdGxpbmVIZWlnaHQoKXtcblx0XHRyZXR1cm4ge2hlaWdodDoyNSxkZXNjZW50OjJ9XG5cdH1cblxuXHRzdHJpbmdXaWR0aChzdHJpbmcpe1xuXHRcdHJldHVybiAyMDBcblx0fVxuXG5cdHdpZHRoU3RyaW5nKHdpZHRoLHN0cmluZyl7XG5cdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UuY2FsbChzdHJpbmcsKHN0YXRlLGEpPT57XG5cdFx0XHRpZihzdGF0ZS5kb25lKVxuXHRcdFx0XHRyZXR1cm4gc3RhdGVcblxuXHRcdFx0bGV0IGFXaWR0aD10aGlzLnN0cmluZ1dpZHRoKGEpXG5cdFx0XHRpZihzdGF0ZS53aWR0aCthV2lkdGg+d2lkdGgpe1xuXHRcdFx0XHRzdGF0ZS5kb25lPXRydWVcblx0XHRcdFx0aWYod2lkdGgtc3RhdGUud2lkdGg+c3RhdGUud2lkdGgrYVdpZHRoLXdpZHRoKXtcblx0XHRcdFx0XHRzdGF0ZS53aWR0aCs9YVdpZHRoXG5cdFx0XHRcdFx0c3RhdGUudGV4dCs9YVxuXHRcdFx0XHR9XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0c3RhdGUud2lkdGgrPWFXaWR0aFxuXHRcdFx0XHRzdGF0ZS50ZXh0Kz1hXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3RhdGVcblx0XHR9LHt3aWR0aDowLHRleHQ6XCJcIixkb25lOmZhbHNlfSkudGV4dC5sZW5ndGhcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNZWFzdXJlXG4iLCJpbXBvcnQgTWVhc3VyZSBmcm9tIFwiLi9iYXNlXCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbi8qKlxuICpcbiAqIHdoeSBpdCdzIHNsb3dlciB0aGFuIGh0bWxcbiAqL1xubGV0IHRlc3Rlcj1udWxsXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkdNZWFzdXJlIGV4dGVuZHMgTWVhc3VyZXtcbiAgICBsaW5lSGVpZ2h0KCl7XG5cdFx0aWYoIXRlc3Rlcil7XG5cdFx0XHRsZXQgY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcblx0XHRcdGNvbnRhaW5lci5zdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO3RvcDotMTAwMHB4XCJcblx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuXHRcdFx0Y29udGFpbmVyLmlubmVySFRNTD1gPHN2ZyB2aWV3Qm94PVwiMCAwICR7MTAwfSAkezEwMH1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHRleHQ+w4Q8L3RleHQ+PC9zdmc+YFxuXHRcdFx0dGVzdGVyPWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCd0ZXh0JylcbiAgICAgICAgICAgIHRlc3Rlci5zZXRTdHlsZT1tZW1vaXplKHN0eWxlPT50ZXN0ZXIuc3R5bGU9c3R5bGUpXG5cdFx0fVxuXHRcdHRlc3Rlci5zZXRTdHlsZSh0aGlzLmNzc1N0eWxlKCkpXG4gICAgICAgIHRlc3Rlci5maXJzdENoaWxkLmRhdGE9XCLDhFwiXG4gICAgICAgIGNvbnN0IHtoZWlnaHQseSwgYmFzZWxpbmU9LXl9PXRlc3Rlci5nZXRCQm94KClcbiAgICAgICAgcmV0dXJuIHtoZWlnaHQsZGVzY2VudDpoZWlnaHQtYmFzZWxpbmV9XG4gICAgfVxuXG4gICAgY3NzU3R5bGUoKXtcbiAgICAgICAgcmV0dXJuIGB3aGl0ZS1zcGFjZTpwcmU7XG4gICAgICAgICAgICBmb250LWZhbWlseToke3RoaXMuZm9udEZhbWlseX07XG4gICAgICAgICAgICBmb250LXNpemU6JHt0aGlzLnNpemV9cHQ7XG4gICAgICAgICAgICBmb250LXdlaWdodDoke3RoaXMuc3R5bGUuYm9sZCA/IFwiNzAwXCIgOiBcIjQwMFwifTtcbiAgICAgICAgICAgIGZvbnQtc3R5bGU6JHt0aGlzLnN0eWxlLml0YWxpYyA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwifTtcbiAgICAgICAgICAgIGBcbiAgICB9XG5cbiAgICBzdHJpbmdXaWR0aCh3b3JkKXtcblx0XHR0ZXN0ZXIuc2V0U3R5bGUodGhpcy5jc3NTdHlsZSgpKVxuICAgICAgICB0ZXN0ZXIuZmlyc3RDaGlsZC5kYXRhPXdvcmRcbiAgICAgICAgcmV0dXJuIHRlc3Rlci5nZXRCQm94KCkud2lkdGhcbiAgICB9XG59XG4iLCJpbXBvcnQgTWVhc3VyZSBmcm9tIFwiLi9iYXNlXCJcbmltcG9ydCBGb250TWFuYWdlciBmcm9tIFwiLi4vZm9udHNcIlxuaW1wb3J0IHtkZWZhdWx0IGFzIGlzTm9kZX0gZnJvbSBcImlzLW5vZGVcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb250TWVhc3VyZSBleHRlbmRzIE1lYXN1cmV7XG5cdGdldEZvbnQoKXtcblx0XHRyZXR1cm4gRm9udE1hbmFnZXIuZ2V0KHRoaXMuZm9udEZhbWlseSwgdGhpcy5zdHlsZSlcblx0fVxuXG4gICAgbGluZUhlaWdodCgpe1xuXHRcdHRoaXMuZm9udD10aGlzLmdldEZvbnQoKVxuICAgICAgICByZXR1cm4ge1xuXHRcdFx0aGVpZ2h0IDogdGhpcy5mb250LmxpbmVIZWlnaHQodGhpcy5zaXplKSo5Ni83Mixcblx0XHRcdGRlc2NlbnQ6IHRoaXMuZm9udC5saW5lRGVzY2VudCh0aGlzLnNpemUpKjk2LzcyXG5cdFx0fVxuICAgIH1cblxuICAgIHN0cmluZ1dpZHRoKGlucHV0KXtcblx0XHRyZXR1cm4gdGhpcy5mb250LnN0cmluZ1dpZHRoKGlucHV0LHRoaXMuc2l6ZSkqOTYvNzJcbiAgICB9XG5cblx0c3RhdGljIHJlcXVpcmVGb250cyhzZXJ2aWNlLGZvbnRzPVtdKXtcblx0XHRjb25zdCBkb25lPSgpPT57XG5cdFx0XHRsZXQgdW5sb2FkZWQ9Zm9udHMuZmlsdGVyKGE9PiFGb250TWFuYWdlci5nZXQoYSkpXG5cdFx0XHRpZih1bmxvYWRlZC5sZW5ndGg+MClcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImZvbnRbXCIrdW5sb2FkZWQuam9pbihcIixcIikrXCJdIGNhbid0IGJlIGxvYWRlZCFcIikpXG5cdFx0fVxuXG5cdFx0aWYoZm9udHMucmVkdWNlKChsb2FkZWQsayk9PmxvYWRlZCAmJiAhIUZvbnRNYW5hZ2VyLmdldChrKSx0cnVlKSl7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRvbmUoKSlcblx0XHR9XG5cblx0XHRpZihpc05vZGUgJiYgdHlwZW9mKHNlcnZpY2UpPT1cInN0cmluZ1wiICYmIHJlcXVpcmUoXCJmc1wiKS5leGlzdHNTeW5jKHNlcnZpY2UpKXtcblx0XHRcdHJldHVybiBGb250TWFuYWdlclxuXHRcdFx0XHQuZnJvbVBhdGgoc2VydmljZSlcblx0XHRcdFx0LmZpbmFsbHkoZG9uZSlcblx0XHR9XG5cblx0XHRzd2l0Y2godHlwZW9mKHNlcnZpY2UpKXtcblx0XHRjYXNlIFwic3RyaW5nXCI6Ly91cmxcblx0XHRcdHJldHVybiBGb250TWFuYWdlci5mcm9tUmVtb3RlKHNlcnZpY2UpXG5cdFx0XHRcdC5maW5hbGx5KGRvbmUpXG5cdFx0Y2FzZSBcImZ1bmN0aW9uXCI6XG5cdFx0XHRyZXR1cm4gUHJvbWlzZVxuXHRcdFx0XHQuYWxsKGZvbnRzLm1hcChhPT5Gb250TWFuYWdlci5sb2FkKHNlcnZpY2UsYSkpKVxuXHRcdFx0XHQuZmluYWxseShkb25lKVxuXHRcdGJyZWFrXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9uZSgpKVxuXHRcdGJyZWFrXG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQge0VtaXR0ZXJ9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBQYXJzZXIgZnJvbSBcImh0bWxwYXJzZXIyXCJcblxuY29uc3QgUkVfVFJBTlNMQVRFPS90cmFuc2xhdGVcXCgoLiopXFxzKyguKilcXCkvXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPdXRwdXQgZXh0ZW5kcyBFbWl0dGVyLkZvcm1hdC5CYXNle1xuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5FbWl0dGVyLkZvcm1hdC5CYXNlLmRlZmF1bHRQcm9wcyxcblx0XHRyZXByZXNlbnRhdGlvbjogXCJwYWdpbmF0aW9uXCJcblx0fVxuXHRvdXRwdXQoY29udGVudCl7XG5cdFx0Y29udGVudC5waXBlKG5ldyBQYXJzZXIuV3JpdGFibGVTdHJlYW0odGhpcyx7eG1sTW9kZTp0cnVlfSkpXG5cdH1cblxuXHRvbm9wZW50YWcobmFtZSxhdHRycyl7XG5cdFx0c3dpdGNoKG5hbWUpe1xuXHRcdFx0Y2FzZSAnc3ZnJzpcblx0XHRcdFx0dGhpcy5vbnJlc2V0KClcblx0XHRcdFx0dGhpcy5vbkRvY3VtZW50KGF0dHJzKVxuXHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ2cnOlxuXHRcdFx0XHRpZihhdHRycy5jbGFzcz09XCJwYWdlXCIpe1xuXHRcdFx0XHRcdGNvbnN0IGk9cGFyc2VJbnQoYXR0cnMuaWQuc3Vic3RyaW5nKDQpKVxuXHRcdFx0XHRcdGNvbnN0IHtwcm9wczp7d2lkdGgsaGVpZ2h0fX09dGhpcy5wcm9wcy5kb2N1bWVudC5wYWdlc1tpXVxuXHRcdFx0XHRcdHRoaXMub25QYWdlKHt3aWR0aCxoZWlnaHR9KVxuXHRcdFx0XHR9ZWxzZVxuXHRcdFx0XHRcdHRoaXMub25Hcm91cChhdHRycylcblx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdFx0dGhpcy5fY3VycmVudFRleHQ9YXR0cnNcblx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0Ontcblx0XHRcdFx0bGV0IG9uQ29udGVudD1gb24ke25hbWVbMF0udG9VcHBlckNhc2UoKX0ke25hbWUuc3Vic3RyKDEpfWBcblx0XHRcdFx0aWYodGhpc1tvbkNvbnRlbnRdKXtcblx0XHRcdFx0XHR0aGlzW29uQ29udGVudF0oYXR0cnMpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0b25jbG9zZXRhZyhuYW1lKXtcblx0XHRzd2l0Y2gobmFtZSl7XG5cdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0dGhpcy5vbkdyb3VwRW5kKClcblx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlICd0ZXh0Jzpcblx0XHRcdFx0dGhpcy5vblRleHQodGhpcy5fY3VycmVudFRleHQpXG5cdFx0XHRicmVha1xuXHRcdH1cblx0fVxuXG5cdG9uYXR0cmlidXRlKG5hbWUsIHZhbHVlKXtcblxuXHR9XG5cblx0b250ZXh0KHRleHQpe1xuXHRcdHRoaXMuX2N1cnJlbnRUZXh0LnRleHQ9dGV4dFxuXHR9XG5cblx0b25wcm9jZXNzaW5naW5zdHJ1Y3Rpb24obmFtZSwgZGF0YSl7XG5cblx0fVxuXHRvbmNvbW1lbnQoZGF0YSl7XG5cblx0fVxuXHRvbmNvbW1lbnRlbmQoKXtcblxuXHR9XG5cblx0b25jZGF0YXN0YXJ0KCl7XG5cblx0fVxuXHRvbmNkYXRhZW5kKCl7XG5cblx0fVxuXG5cdG9uZXJyb3IoZXJyb3Ipe1xuXG5cdH1cblxuXHRvbnJlc2V0KCl7XG5cdFx0dGhpcy5fb2Zmc2V0cz1be3g6MCx5OjB9XVxuXHRcdHRoaXMuX2N1cnJlbnRUZXh0PW51bGxcblx0XHR0aGlzLl9hc3luY0pvYnM9W11cblx0fVxuXG5cdG9uZW5kKCl7XG5cdFx0UHJvbWlzZS5hbGwodGhpcy5fYXN5bmNKb2JzKVxuXHRcdFx0LnRoZW4oKCk9Pntcblx0XHRcdFx0dGhpcy5vbkRvY3VtZW50RW5kKClcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZT0+e1xuXHRcdFx0XHR0aGlzLm9uRG9jdW1lbnRFbmQoZSlcblx0XHRcdH0pXG5cdH1cblxuXHRhZGRBc3luY0pvYihhKXtcblx0XHR0aGlzLl9hc3luY0pvYnMucHVzaChhLmNhdGNoKGU9Pntcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSlcblx0XHRcdHJldHVybiBlXG5cdFx0fSkpXG5cdH1cblxuXHRvbkRvY3VtZW50KCl7XG5cblx0fVxuXG5cdG9uRG9jdW1lbnRFbmQoKXtcblxuXHR9XG5cblx0b25QYWdlKGF0dHJzKXtcblx0XHR0aGlzLm9uR3JvdXAoYXR0cnMpXG5cdH1cblxuXHRvbkltYWdlKCl7XG5cblx0fVxuXG5cdG9uVGV4dCh7dGV4dH0pe1xuXG5cdH1cblxuXHRvbkdyb3VwKHt0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCAwKVwifSl7XG5cdFx0bGV0IFsseD0wLHk9MF09dHJhbnNmb3JtLm1hdGNoKFJFX1RSQU5TTEFURSlcblx0XHR0aGlzLl9vZmZzZXRzLnB1c2goe3g6cGFyc2VJbnQoeCkseTpwYXJzZUludCh5KX0pXG5cdH1cblxuXHRvbkdyb3VwRW5kKCl7XG5cdFx0dGhpcy5fb2Zmc2V0cy5wb3AoKVxuXHR9XG5cblx0Z2V0IG9mZnNldCgpe1xuXHRcdHJldHVybiB0aGlzLl9vZmZzZXRzLnJlZHVjZSgoc3RhdGUse3gseX0pPT57XG5cdFx0XHRzdGF0ZS54Kz14XG5cdFx0XHRzdGF0ZS55Kz15XG5cdFx0XHRyZXR1cm4gc3RhdGVcblx0XHR9LHt4OjAseTowfSlcblx0fVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgQmFzZSBmcm9tIFwiLi9pbmRleFwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkcgZXh0ZW5kcyBCYXNle1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9XCJTVkdcIlxuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHQuLi5CYXNlLnByb3BUeXBlcyxcblx0XHRwYWdlR2FwOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHBnQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH1cblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHR0eXBlOlwic3ZnXCIsXG5cdFx0bmFtZTpcIlNWRyBEb2N1bWVudFwiLFxuXHRcdGV4dDpcInN2Z1wiLFxuXHRcdHJlcHJlc2VudGF0aW9uOiBcInBhZ2luYXRpb25cIixcblxuXHRcdHBhZ2VHYXA6MjQsXG5cdFx0cGdDb2xvcjpcIndoaXRlXCJcblx0fVxuXG5cdG9ucmVzZXQoKXtcblx0XHRzdXBlci5vbnJlc2V0KC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnk9MFxuXHRcdHRoaXMuZGVwdGg9LTFcblx0XHR0aGlzLmRlZnM9bmV3IFNldCgpXG5cdH1cblxuXHRzcHJlYWQoYXR0cnMpe1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhhdHRycykubWFwKGs9PmAke2t9PVwiJHthdHRyc1trXX1cImApLmpvaW4oXCIgXCIpXG5cdH1cblxuXHRvbkRvY3VtZW50KHt2aWV3Qm94fSl7XG5cdFx0Y29uc3Qge3BhZ2VHYXB9PXRoaXMucHJvcHNcblx0XHRjb25zdCBbLCx3aWR0aCxoZWlnaHRdPXZpZXdCb3gudHJpbSgpLnNwbGl0KC9cXHMrL2cpXG5cdFx0dGhpcy53aWR0aD1wYWdlR2FwK3BhcnNlSW50KHdpZHRoKStwYWdlR2FwXG5cdFx0dGhpcy5oZWlnaHQ9cGFyc2VJbnQoaGVpZ2h0KVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8c3ZnXG5cdHN0eWxlPVwiYmFja2dyb3VuZDpsaWdodGdyYXlcIlxuXHR3aWR0aD1cIiR7dGhpcy53aWR0aH1cIiBoZWlnaHQ9XCIke3RoaXMuaGVpZ2h0fVwiXG5cdHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuXHR4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj5cblx0XHRgKVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJHtwYWdlR2FwfSwwKVwiPmApXG5cdH1cblxuXHRvbkRvY3VtZW50RW5kKGUpe1xuXHRcdHRoaXMuc3RyZWFtLmVuZCgnPC9nPjwvc3ZnPicpXG5cdH1cblxuXHRvblBhZ2Uoe3dpZHRoLGhlaWdodH0pe1xuXHRcdHdpZHRoPXBhcnNlSW50KHdpZHRoKVxuXHRcdGhlaWdodD1wYXJzZUludChoZWlnaHQpXG5cdFx0dGhpcy55Kz10aGlzLnByb3BzLnBhZ2VHYXBcblx0XHRjb25zdCB7IHBhZ2VHYXAsIHBnQ29sb3J9PXRoaXMucHJvcHNcblx0XHR0aGlzLnN0cmVhbS53cml0ZShgPGcgdHJhbnNmb3JtPVwidHJhbnNsYXRlKCR7KHRoaXMud2lkdGgtd2lkdGgpLzJ9ICR7dGhpcy55fSlcIj5gKVxuXHRcdGlmKHBnQ29sb3IpXG5cdFx0XHR0aGlzLnN0cmVhbS53cml0ZShgPHJlY3Qgd2lkdGg9XCIke3dpZHRofVwiIGhlaWdodD1cIiR7aGVpZ2h0fVwiIGZpbGw9XCIke3BnQ29sb3J9XCIvPmApXG5cblx0XHR0aGlzLnkrPWhlaWdodFxuXHR9XG5cblx0b25JbWFnZShhdHRycyl7XG5cdFx0bGV0IGhyZWY9YXR0cnNbXCJ4bGluazpocmVmXCJdXG5cdFx0ZGVsZXRlIGF0dHJzW1wieGxpbms6aHJlZlwiXVxuXHRcdGxldCBpZD1idG9hKGhyZWYpXG5cblx0XHR0aGlzLnN0cmVhbS53cml0ZShgPHVzZSB4bGluazpocmVmPVwiIyR7aWR9XCIvPmApXG5cblx0XHRpZighdGhpcy5kZWZzLmhhcyhocmVmKSl7XG5cdFx0XHR0aGlzLmRlZnMuYWRkKGhyZWYpXG5cdFx0XHRsZXQgam9iPWZldGNoKGhyZWYpXG5cdFx0XHRcdC50aGVuKHJlcz0+e1xuXHRcdFx0XHRcdGlmKCFyZXMub2spe1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHJlcy5zdGF0dXNUZXh0KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzLmFycmF5QnVmZmVyKClcblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oYnVmZmVyPT57XG5cdFx0XHRcdFx0Y29uc3Qgc3RyZWFtPXRoaXMuc3RyZWFtXG5cblx0XHRcdFx0XHRjb25zdCB0b1N0cmluZz12aWV3PT52aWV3LnJlZHVjZSgoYixhLGkpPT57XG5cdFx0XHRcdFx0XHRcdGJbaV09U3RyaW5nLmZyb21DaGFyQ29kZShhKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYlxuXHRcdFx0XHRcdFx0fSxuZXcgQXJyYXkodmlldy5ieXRlTGVuZ3RoKSkuam9pbihcIlwiKVxuXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGA8ZGVmcz5gKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZShgPGltYWdlIGlkPVwiJHtpZH1cIiAke3RoaXMuc3ByZWFkKGF0dHJzKX0gYClcblx0XHRcdFx0XHRzdHJlYW0ud3JpdGUoJ3hsaW5rOmhyZWY9XCJkYXRhOmltYWdlLyo7YmFzZTY0LCcpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGJ0b2EodG9TdHJpbmcobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkpKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZSgnXCInKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZSgnLz4nKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZShgPC9kZWZzPmApXG5cdFx0XHRcdH0pXG5cblx0XHRcdHRoaXMuYWRkQXN5bmNKb2Ioam9iKVxuXHRcdH1cblx0fVxuXG5cdG9uVGV4dCh7dGV4dCwgLi4uYXR0cnN9KXtcblx0XHR0aGlzLnN0cmVhbS53cml0ZShgPHRleHQgJHt0aGlzLnNwcmVhZChhdHRycyl9PiR7dGV4dH08L3RleHQ+YClcblx0fVxuXG5cdG9uR3JvdXAoYXR0cnMpe1xuXHRcdHN1cGVyLm9uR3JvdXAoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8ZyAke3RoaXMuc3ByZWFkKGF0dHJzKX0+YClcblx0fVxuXG5cdG9uR3JvdXBFbmQoKXtcblx0XHRzdXBlci5vbkdyb3VwRW5kKClcblx0XHR0aGlzLnN0cmVhbS53cml0ZShcIjwvZz5cIilcblx0fVxuXG5cdG9ub3BlbnRhZygpe1xuXHRcdHN1cGVyLm9ub3BlbnRhZyguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoXCJcXHJcXG5cIilcblx0XHR0aGlzLmRlcHRoKytcblx0XHR0aGlzLnN0cmVhbS53cml0ZShuZXcgQXJyYXkodGhpcy5kZXB0aCkuZmlsbChcIlxcdFwiKS5qb2luKFwiXCIpKVxuXHR9XG5cblx0b25jbG9zZXRhZygpe1xuXHRcdHN1cGVyLm9uY2xvc2V0YWcoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKFwiXFxyXFxuXCIpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUobmV3IEFycmF5KHRoaXMuZGVwdGgpLmZpbGwoXCJcXHRcIikuam9pbihcIlwiKSlcblx0XHR0aGlzLmRlcHRoLS1cblx0fVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IGlzTm9kZSBmcm9tIFwiaXMtbm9kZVwiXG5pbXBvcnQge1JlcHJlc2VudGF0aW9ufSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCBWaWV3ZXJzIGZyb20gXCIuL2RvbVwiXG5pbXBvcnQgRWRpdG9ycyBmcm9tIFwiLi9kb20vZWRpdFwiXG5pbXBvcnQge2VkaXRhYmxlfSBmcm9tIFwiLi9jb21wb3NhYmxlXCJcblxuaW1wb3J0IEZvbnRNYW5hZ2VyIGZyb20gXCIuL2ZvbnRzXCJcbmltcG9ydCAqIGFzIENvbXBvc2VkIGZyb20gXCIuL2NvbXBvc2VkXCJcbmltcG9ydCAqIGFzIE1lYXN1cmUgZnJvbSBcIi4vbWVhc3VyZVwiXG5pbXBvcnQgT3V0cHV0IGZyb20gXCIuL291dHB1dFwiXG5pbXBvcnQgU1ZHIGZyb20gXCIuL291dHB1dC9zdmdcIlxuXG5pbXBvcnQgUmVzaXphYmxlIGZyb20gXCIuL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGVcIlxuaW1wb3J0IE1vdmFibGUgZnJvbSBcIi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGVcIlxuaW1wb3J0IFJvdGF0YWJsZSBmcm9tIFwiLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlXCJcbmltcG9ydCBUb3AgZnJvbSBcIi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcFwiXG5cblxuaW1wb3J0ICogYXMgY29tcG9zYWJsZSBmcm9tIFwiLi9jb21wb3NhYmxlXCJcblxuY29uc3Qge0ZvbnRNZWFzdXJlLCBTVkdNZWFzdXJlfT1NZWFzdXJlXG5cbmNvbnN0IGNyZWF0ZUZvbnRNZWFzdXJlV2l0aERlZmF1bHQ9ZGVmYXVsdEZvbnQ9Pntcblx0cmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBGb250TWVhc3VyZXtcblx0XHRnZXRGb250KCl7XG5cdFx0XHRyZXR1cm4gc3VwZXIuZ2V0Rm9udCgpfHxGb250TWFuYWdlci5nZXQoZGVmYXVsdEZvbnQpXG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2luYXRpb24gZXh0ZW5kcyBSZXByZXNlbnRhdGlvbi5CYXNle1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9XCJwYWdpbmF0aW9uXCJcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0dHlwZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuXHRcdG1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdGZvbnRzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLFByb3BUeXBlcy5mdW5jXSksXG5cdFx0ZGVmYXVsdEZvbnQ6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH1cblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHR0eXBlOlwicGFnaW5hdGlvblwiLFxuXHRcdGRlZmF1bHRGb250OlwiQXJpYWxcIlxuXHR9XG5cblx0c3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcblx0XHRNZWFzdXJlOiBQcm9wVHlwZXMuZnVuY1xuXHR9XG5cblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0ZG9jOiBQcm9wVHlwZXMub2JqZWN0LFxuXHR9XG5cblx0c3RhdGljIE91dHB1dD1PdXRwdXRcblxuXHRzdGF0ZT17Zm9udHNMb2FkZWQ6ZmFsc2V9XG5cdGNvbXBvbmVudERpZE1vdW50KCl7XG5cdFx0Y29uc3Qge2RlZmF1bHRGb250LG1lYXN1cmUsZm9udHN9PXRoaXMucHJvcHNcblx0XHR0aGlzLk1lYXN1cmU9bWVhc3VyZXx8KGZvbnRzfHxpc05vZGUgPyBGb250TWVhc3VyZSA6IFNWR01lYXN1cmUpXG5cdFx0c3dpdGNoKHRoaXMuTWVhc3VyZSl7XG5cdFx0XHRjYXNlIEZvbnRNZWFzdXJlOntcblx0XHRcdFx0dGhpcy5NZWFzdXJlPWNyZWF0ZUZvbnRNZWFzdXJlV2l0aERlZmF1bHQoZGVmYXVsdEZvbnQpXG5cdFx0XHRcdGNvbnN0IHJlcXVpcmVkRm9udHM9dGhpcy5jb250ZXh0LmRvYy5nZXRGb250TGlzdCgpXG5cdFx0XHRcdGNvbnN0IGZvbnRzTG9hZGVkPWVycm9yPT57XG5cdFx0XHRcdFx0bGV0IGxvYWRlZD1Gb250TWFuYWdlci5uYW1lc1xuXHRcdFx0XHRcdGlmKGxvYWRlZCAmJiBsb2FkZWQubGVuZ3RoKXtcblx0XHRcdFx0XHRcdGlmKCFGb250TWFuYWdlci5nZXQoZGVmYXVsdEZvbnQpKXtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKGBkZWZhdWx0IGZvbnRbJHtkZWZhdWx0Rm9udH1dIGNhbid0IGJlIGxvYWRlZCwgc2V0ICR7bG9hZGVkWzBdfSBhcyBkZWZhdWx0YClcblx0XHRcdFx0XHRcdFx0dGhpcy5NZWFzdXJlPWNyZWF0ZUZvbnRNZWFzdXJlV2l0aERlZmF1bHQobG9hZGVkWzBdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGVycm9yKXtcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSlcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLnNldFN0YXRlKHtmb250c0xvYWRlZDp0cnVlfSlcblx0XHRcdFx0fVxuXHRcdFx0XHRGb250TWVhc3VyZVxuXHRcdFx0XHRcdC5yZXF1aXJlRm9udHMoZm9udHMsW2RlZmF1bHRGb250LC4uLnJlcXVpcmVkRm9udHNdKVxuXHRcdFx0XHRcdC50aGVuKGZvbnRzTG9hZGVkLCBmb250c0xvYWRlZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6e1xuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHtmb250c0xvYWRlZDp0cnVlfSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXRDaGlsZENvbnRleHQoKXtcblx0XHRyZXR1cm4ge1xuXHRcdFx0TWVhc3VyZTogdGhpcy5NZWFzdXJlLFxuXHRcdH1cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtmb250c0xvYWRlZH09dGhpcy5zdGF0ZVxuXHRcdGlmKCFmb250c0xvYWRlZClcblx0XHRcdHJldHVybiA8ZGl2PmxvYWRpbmcgZm9udHMuLi48L2Rpdj5cblxuXHRcdGNvbnN0IHtkZWZhdWx0Rm9udCxtZWFzdXJlLGZvbnRzLCB0eXBlLCBWaWV3ZXJUeXBlcz1WaWV3ZXJzLCBFZGl0b3JUeXBlcz1FZGl0b3JzLCAuLi5wcm9wc309dGhpcy5wcm9wc1xuXG5cdFx0cmV0dXJuICg8UmVwcmVzZW50YXRpb24gey4uLntWaWV3ZXJUeXBlcyxFZGl0b3JUeXBlcywuLi5wcm9wcyx0eXBlOnVuZGVmaW5lZH0gfS8+KVxuXHR9XG59XG5cblxuKGZ1bmN0aW9uKEEpe1xuXHRjb25zdCBpbnN0YWxsPUEuaW5zdGFsbC5iaW5kKEEpXG5cdEEuaW5zdGFsbD1mdW5jdGlvbigpe1xuXHRcdGluc3RhbGwoLi4uYXJndW1lbnRzKVxuXHRcdFNWRy5pbnN0YWxsKClcblx0fVxuXG5cdGNvbnN0IHVuaW5zdGFsbD1BLnVuaW5zdGFsbC5iaW5kKEEpXG5cdEEudW5pbnN0YWxsPWZ1bmN0aW9uKCl7XG5cdFx0dW5pbnN0YWxsKC4uLmFyZ3VtZW50cylcblx0XHRTVkcudW5pbnN0YWxsKClcblx0fVxufSkoUGFnaW5hdGlvbik7XG5cblBhZ2luYXRpb24uaW5zdGFsbCgpXG5cbmV4cG9ydCB7Vmlld2VycywgRWRpdG9ycywgRm9udE1hbmFnZXIsIE1lYXN1cmUsIENvbXBvc2VkLCBjb21wb3NhYmxlLCBlZGl0YWJsZSwgUmVzaXphYmxlLCBNb3ZhYmxlLCBSb3RhdGFibGUsVG9wfVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
\No newline at end of file