UNPKG

788 kBJavaScriptView Raw
1module.exports=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=31)}([function(t,e){t.exports=require("react")},function(t,e){t.exports=require("@babel/runtime/helpers/defineProperty")},function(t,e){t.exports=require("@babel/runtime/helpers/getPrototypeOf")},function(t,e){t.exports=require("prop-types")},function(t,e){t.exports=require("@babel/runtime/helpers/createClass")},function(t,e){t.exports=require("@babel/runtime/helpers/classCallCheck")},function(t,e){t.exports=require("@babel/runtime/helpers/possibleConstructorReturn")},function(t,e){t.exports=require("@babel/runtime/helpers/inherits")},function(t,e){t.exports=require("we-edit")},function(t,e){t.exports=require("@babel/runtime/helpers/get")},function(t,e){t.exports=require("@babel/runtime/helpers/assertThisInitialized")},function(t,e){t.exports=require("@babel/runtime/helpers/objectWithoutProperties")},function(t,e){t.exports=require("@babel/runtime/helpers/extends")},function(t,e){t.exports=require("memoize-one")},function(t,e){t.exports=require("@babel/runtime/helpers/slicedToArray")},function(t,e){t.exports=require("recompose")},function(t,e){t.exports=require("@babel/runtime/helpers/construct")},function(t,e){t.exports=require("@babel/runtime/helpers/typeof")},function(t,e){t.exports=require("fontkit")},function(t,e){t.exports=require("is-node")},function(t,e){t.exports=require("react-waypoint")},function(t,e){t.exports=require("@babel/runtime/helpers/objectDestructuringEmpty")},function(t,e){t.exports=require("@babel/runtime/regenerator")},function(t,e){t.exports=require("linebreak")},function(t,e){t.exports=require("fs")},function(t,e){t.exports=require("react-dom")},function(t,e){t.exports=require("svgpath")},function(t,e){t.exports=require("simplify-path")},function(t,e){t.exports=require("svg-path-contours")},function(t,e){t.exports=require("htmlparser2")},function(t,e){t.exports=require("get-system-fonts")},function(t,e,n){"use strict";n.r(e);var r={};n.r(r),n.d(r,"Canvas",(function(){return ht})),n.d(r,"Group",(function(){return ut})),n.d(r,"Text",(function(){return st})),n.d(r,"Image",(function(){return yt})),n.d(r,"Shape",(function(){return mt}));var i={};n.r(i),n.d(i,"default",(function(){return Xt})),n.d(i,"enablify",(function(){return Qt})),n.d(i,"editable",(function(){return Yt})),n.d(i,"Layout",(function(){return Gt})),n.d(i,"HasChild",(function(){return R})),n.d(i,"HasParentAndChild",(function(){return N})),n.d(i,"NoChild",(function(){return W})),n.d(i,"ComposedAllTrigger",(function(){return F})),n.d(i,"Recomposable",(function(){return z})),n.d(i,"Locatable",(function(){return U})),n.d(i,"Stoppable",(function(){return Y})),n.d(i,"Continuable",(function(){return Z}));var o={};n.r(o),n.d(o,"SVGMeasure",(function(){return Tr})),n.d(o,"FontMeasure",(function(){return Fr}));var a=n(11),s=n.n(a),c=n(10),u=n.n(c),l=n(1),p=n.n(l),h=n(5),f=n.n(h),d=n(4),y=n.n(d),m=n(6),g=n.n(m),v=n(2),b=n.n(v),w=n(9),x=n.n(w),k=n(7),O=n.n(k),C=n(0),P=n.n(C),E=n(3),j=n.n(E),S=n(19),A=n.n(S),T=n(8),F=function(t){return t.host.onAllChildrenComposed(),null},I=n(13),D=n.n(I);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 O()(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(F,{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 O()(e,t),y()(e,[{key:"nextAvailableSpace",value:function(){var t;return(t=this.context.parent).nextAvailableSpace.apply(t,arguments)}},{key:"appendComposed",value:function(){return this.context.parent.appendComposed(this.createComposed2Parent.apply(this,arguments))}}]),e}(r),p()(e,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},r.contextTypes,{parent:j.a.object})),n},W=function(t){return function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"isAtomChanged",value:function(t){var e=t.hash,n=t.changed;return void 0===n?e==this.props.hash:n}},{key:"render",value:function(){return this.appendComposed(),this.onAllChildrenComposed(),null}},{key:"isAtom",get:function(){return!0}}]),e}(N(t))},z=function(t){var e=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"childrenNeedRecompose",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 O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){var t=x()(b()(e.prototype),"createComposed2Parent",this).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(F,{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 q(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 G(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 O()(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",q({},t.propTypes,{id:j.a.oneOfType([j.a.string,j.a.number]).isRequired})),p()(e,"contextTypes",q({},t.contextTypes,{mount:j.a.func,unmount:j.a.func,getComposer:j.a.func})),n}G.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 O()(e,t),y()(e,[{key:"getChildContext",value:function(){var t=this.mount,n=this.unmount,r=this.getComposer;return q({},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",q({},t.childContextTypes,{mount:j.a.func,unmount:j.a.func,getComposer:j.a.func})),n};var U=G;function H(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function X(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?H(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):H(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Y=function(t){var e,n,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return n=e=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){return this.context.shouldContinueCompose&&(r||this.props.stoppable)&&!this.context.shouldContinueCompose(this)?(console.debug("".concat(this.getComposeType(),"[").concat(this.props.id,"] skip composed")),null):x()(b()(e.prototype),"render",this).call(this)}}]),e}(t),p()(e,"displayName","stoppable-".concat(t.displayName)),p()(e,"contextTypes",X({},t.contextTypes,{shouldContinueCompose:j.a.func})),n};function Q(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function V(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Q(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Q(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var K,J,Z=function(t){var e,n;return n=e=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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 O()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=(t.whiteSpace,t.color),r=t.highlight,i=t.border,o=t.underline,a=t.strike,c=t.descent,u=(t.minWidth,t.height),l=t.width,p=(t.blockOffset,t.mergeOpportunity,t.y),h=s()(t,["children","whiteSpace","color","highlight","border","underline","strike","descent","minWidth","height","width","blockOffset","mergeOpportunity","y"]),f=null;if(r||i){var d={width:Math.ceil(l),height:Math.ceil(u),fill:r||"none",x:0,y:p-u+c};i&&(d.stroke="black",d.strokeWidth=.5),f=P.a.createElement("rect",d)}var y=null;if(o){var m=Math.ceil(c/2),g=function(t){switch(o){case"double":return 1;default:return.5}}();y=P.a.createElement("line",{y1:m,x2:l,y2:m,stroke:"black",strokeWidth:g})}var v=null;if(a){var b=-c;v=P.a.createElement("line",{y1:b,x2:l,y2:b,stroke:"black",strokeWidth:.5})}return P.a.createElement(C.Fragment,null,f,v,y,P.a.createElement("text",it()({style:{userSelect:"none",whiteSpace:"pre",cursor:"text"},y:p||0},h,{fill:n}),e))}}]),e}(C.PureComponent);p()(st,"Dynamic",(function(t){var e=t.children,n=s()(t,["children"]);return P.a.createElement(st,it()({},n,{children:e()}))}));var ct=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.active,n=void 0===e||e,r=t.children;return n?P.a.createElement(ut,null,r):P.a.createElement(ut,{style:{opacity:.4},onDoubleClick:function(t){return t}},r)}}]),e}(C.Component);p()(ct,"displayName","layer"),p()(ct,"propTypes",{z:j.a.number,active:j.a.bool}),p()(ct,"Container",Object(T.whenSelectionChange)((function(t){var e=t.selection;if(!e)return{};var n=e.props("page");return{active:n?n.layer:void 0}}))((J=K=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){if(!this.context.editable)return P.a.createElement(C.Fragment,null,this.props.children);var t=this.props.active,e=C.Children.toArray(this.props.children).filter((function(t){return!!t})).sort((function(t,e){var n=t.props,r=e.props;return n.z-r.z}));return P.a.createElement(C.Fragment,null,[].concat(e.filter((function(e){return e.props.z!=t})).map((function(t){return P.a.cloneElement(t,{active:!1})})),[e.find((function(e){return e.props.z==t}))]).filter((function(t){return!!t})))}}]),e}(C.Component),p()(K,"contextTypes",{editable:j.a.any}),J)));var ut=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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,k=void 0===x?0:x;switch(g.type){case st:case this.constructor:return P.a.cloneElement(y[0],{x:w+i,y:k+a})}}return P.a.createElement("g",f,y)}}]),e}(C.Component);function lt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function pt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?lt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):lt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(ut,"propTypes",{width:j.a.number,height:j.a.number,x:j.a.number,y:j.a.number,z:j.a.number}),p()(ut,"contextTypes",{debug:j.a.bool}),p()(ut,"Layer",ct),p()(ut,"Layers",ct.Container);var ht=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"getComposed",D()((function(t,e){var n=t.map((function(t){return t.createComposed2Parent()}));return n.reduce((function(t,n){var r=n.props,i=r.width,o=r.height;return Object.assign(t,{width:Math.max(t.width,i),height:t.height+o+e})}),{width:0,height:e,composed:n})}))),t.state={},t}return O()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t){var e=t.document,n=s()(t,["document"]),r=e.pages,i=e.props,o=i.scale,a=void 0===o?n.scale:o,c=i.pageGap,u=void 0===c?n.pageGap:c,l=i.precision;return{pages:r,precision:void 0===l?n.precision:l,scale:a,pageGap:u}}}]),y()(e,[{key:"render",value:function(){var t=this.state,e=t.pages,n=t.pageGap,r=t.scale,i=t.precision,o=void 0===i?1:i,a=this.props,c=a.style,u=a.children,l=a.innerRef,p=(a.document,a.pages,a.pageGap,a.scale,a.precision,a.paper,a.__sequentialCompose,s()(a,["style","children","innerRef","document","pages","pageGap","scale","precision","paper","__sequentialCompose"])),h=this.getComposed(e,n),f=h.width,d=h.height,y=h.composed;return P.a.createElement("svg",it()({},p,{ref:l,preserveAspectRatio:"xMidYMin",viewBox:"0 0 ".concat(f," ").concat(d),style:pt({background:"transparent",width:f*r*o,height:d*r*o},c)}),this.positionPages(y,f),u)}},{key:"positionPages",value:function(t,e){var n=this.state,r=n.pageGap,i=n.precision,o=this.props.paper,a=this.context.media;return P.a.createElement(ut,{y:r,x:0},t.reduce((function(t,n){var s=n.props,c=s.width,u=s.height,l=s.margin,p=s.I;return t.push(P.a.createElement("g",{key:p,className:"page",id:"page".concat(p)},P.a.createElement(ut,{y:t.y,x:(e-c)/2},"file"==a?n:P.a.createElement(ft,{children:n,width:c,height:u,margin:l,precision:i,paper:o})))),t.y+=u+r,t}),Object.assign([],{y:0})))}}],[{key:"composedY",value:function(t,e){var n=t[t.length-1];if(!n)return 0;var r=n.context.parent.isAllChildrenComposed()?n.props.height:n.composedHeight;return t.slice(0,t.length-1).reduce((function(t,n){return t+n.props.height+e}),r)}},{key:"pageRect",value:function(t,e){var n=e.querySelector("#page"+t);return n&&n.getBoundingClientRect()}}]),e}(C.Component);p()(ht,"displayName","composed-document-default-canvas"),p()(ht,"contextTypes",{media:j.a.string}),p()(ht,"propTypes",{pages:j.a.arrayOf(j.a.object),pageGap:j.a.number,scale:j.a.number,document:j.a.object}),p()(ht,"defaultProps",{pageGap:24,scale:1});var ft=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"state",{display:!1}),n}return O()(e,t),y()(e,[{key:"render",value:function(){var t=this,e=this.state.display,n=this.props,r=n.children,i=n.width,o=n.height,a=n.margin,s=n.precision,c=n.paper;return P.a.createElement(at.a,{fireOnRapidScroll:!1,onEnter:function(e){t.setState({display:!0})},onLeave:function(e){return t.setState({display:!1})}},P.a.createElement("g",null,c&&P.a.createElement(dt,pt({width:i,height:o,margin:a,fill:"white",precision:s},c)),e?r:null))}}]),e}(C.Component),dt=function(t){var e=t.width,n=t.height,r=t.margin,i=(r=void 0===r?{}:r).left,o=void 0===i?0:i,a=r.right,c=void 0===a?0:a,u=r.top,l=void 0===u?0:u,p=r.bottom,h=void 0===p?0:p,f=t.precision,d=t.border,y=void 0===d||d,m=t.strokeWidth,g=void 0===m?1*f:m,v=t.marginWidth,b=void 0===v?20*f:v,w=s()(t,["width","height","margin","precision","border","strokeWidth","marginWidth"]);return P.a.createElement("g",{className:"paper"},P.a.createElement("rect",it()({},w,{width:e,height:n})),y&&P.a.createElement("path",{strokeWidth:g,stroke:"lightgray",fill:"none",d:"\n\t\t \t\tM0 0 h".concat(e," v").concat(n," h").concat(-e,"z\n\t\t\t\tM").concat(o-Math.min(o,b)," ").concat(l," h").concat(Math.min(o,b)," v").concat(-Math.min(l,b),"\n\t\t\t\tM").concat(o-Math.min(o,b)," ").concat(n-h," h").concat(Math.min(o,b)," v").concat(Math.min(h,b),"\n\t\t\t\tM").concat(e-c+Math.min(c,b)," ").concat(n-h," h").concat(-Math.min(c,b)," v").concat(Math.min(h,b),"\n\t\t\t\tM").concat(e-c+Math.min(c,b)," ").concat(l," h").concat(-Math.min(c,b)," v").concat(-Math.min(l,b),"\n\t\t\t")}))},yt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){return P.a.createElement("image",this.props)}}]),e}(C.PureComponent),mt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){return null}}]),e}(C.Component);function gt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function vt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?gt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):gt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var bt=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(e.width,e.left,e.right,s()(e,["width","left","right"]));f()(this,t),Object.assign(this,n),this.props=arguments[0]||{}}return y()(t,null,[{key:"create",value:function(e){return e instanceof t?e:tt()(t,Array.prototype.slice.call(arguments))}}]),y()(t,[{key:"clone",value:function(e){return e instanceof t&&(e=e.props),new t(vt({},this.props,{},e,{edges:vt({},this.props.edges,{},e.edges)}))}},{key:"anchor",value:function(t){var e=t.base,n=t.offset,r=void 0===n?0:n,i=t.align,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=o.width,s=void 0===a?0:a,c=o.height,u=void 0===c?0:c,l=this.props.edges;if(!(l&&l[e]&&i in l[e]))return r;var p=l[e],h=(p=void 0===p?{}:p)[i],f=void 0===h?0:h;switch(i){case"right":return f-r-s;case"bottom":return f-r-u;default:return f+r}}},{key:"isInlineSizeDifferent",value:function(t){if(!!this.cols!=!!t.cols)return!0;var e=t.width,n=t.cols;return n?n.length!=this.cols.length||(!!this.cols.find((function(t,e,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:n[e];return t.width!=o.width}))||void 0):e!=this.width}},{key:"equals",value:function(t){return!this.isInlineSizeDifferent(t)&&this.height==t.height}},{key:"width",get:function(){return this.right-this.left}},{key:"left",get:function(){var t=this.props.left;return void 0===t?0:t}},{key:"right",get:function(){var t=this.props,e=t.width,n=t.right;return void 0===n?e:n}}]),t}();function wt(t,e){this.set(t,e)}function xt(t,e,n,r){this.left=t,this.top=e,this.right=t+n,this.bottom=e+r}wt.prototype={clone:function(){return new wt(this.x,this.y)},set:function(t,e){return this.x=t,this.y=e,this},equals:function(t,e){return this.x==t&&this.y==e},toString:function(){return"("+this.x+","+this.y+")"},map:function(t){return this.x=t.call(this,this.x),this.y=t.call(this,this.y),this},add:function(t,e){return this.x+=t,this.y+=e,this},subtract:function(t,e){return this.x-=t,this.y-=e,this},scale:function(t){return this.x*=t,this.y*=t,this},isZero:function(){return 0==this.x&&0==this.y}},function(){function t(t){return function(e,n){return void 0===n?t.call(this,e.x,e.y):t.call(this,e,n)}}for(var e=0,n=["add","subtract","equals","set"];e<n.length;e++){var r=n[e];wt.prototype[r]=t(wt.prototype[r])}}(),xt.fromRect=function(t){return new xt(t.left,t.top,t.right-t.left,t.bottom-t.top)},xt.prototype={get x(){return this.left},get y(){return this.top},get width(){return this.right-this.left},get height(){return this.bottom-this.top},set x(t){var e=this.left-t;this.left=t,this.right-=e},set y(t){var e=this.top-t;this.top=t,this.bottom-=e},set width(t){this.right=this.left+t},set height(t){this.bottom=this.top+t},isEmpty:function(){return this.left>=this.right||this.top>=this.bottom},setRect:function(t,e,n,r){return this.left=t,this.top=e,this.right=t+n,this.bottom=e+r,this},setBounds:function(t,e,n,r){return this.top=e,this.left=t,this.bottom=r,this.right=n,this},equals:function(t){return null!=t&&(this.isEmpty()&&t.isEmpty()||this.top==t.top&&this.left==t.left&&this.bottom==t.bottom&&this.right==t.right)},clone:function(){return new xt(this.left,this.top,this.right-this.left,this.bottom-this.top)},center:function(){if(this.isEmpty())throw"Empty rectangles do not have centers";return new wt(this.left+(this.right-this.left)/2,this.top+(this.bottom-this.top)/2)},copyFrom:function(t){return this.top=t.top,this.left=t.left,this.bottom=t.bottom,this.right=t.right,this},translate:function(t,e){return this.left+=t,this.right+=t,this.top+=e,this.bottom+=e,this},toString:function(){return"["+this.x+","+this.y+","+this.width+","+this.height+"]"},union:function(t){return this.clone().expandToContain(t)},contains:function(t){return!!t.isEmpty()||!this.isEmpty()&&(t.left>=this.left&&t.right<=this.right&&t.top>=this.top&&t.bottom<=this.bottom)},intersect:function(t){return this.clone().restrictTo(t)},intersects:function(t){if(this.isEmpty()||t.isEmpty())return!1;var e=Math.max(this.left,t.left),n=Math.min(this.right,t.right),r=Math.max(this.top,t.top),i=Math.min(this.bottom,t.bottom);return e<n&&r<i},restrictTo:function(t){if(this.isEmpty()||t.isEmpty())return this.setRect(0,0,0,0);var e=Math.max(this.left,t.left),n=Math.min(this.right,t.right),r=Math.max(this.top,t.top),i=Math.min(this.bottom,t.bottom);return this.setRect(e,r,Math.max(0,n-e),Math.max(0,i-r))},expandToContain:function(t){if(this.isEmpty())return this.copyFrom(t);if(t.isEmpty())return this;var e=Math.min(this.left,t.left),n=Math.max(this.right,t.right),r=Math.min(this.top,t.top),i=Math.max(this.bottom,t.bottom);return this.setRect(e,r,n-e,i-r)},expandToIntegers:function(){return this.left=Math.floor(this.left),this.top=Math.floor(this.top),this.right=Math.ceil(this.right),this.bottom=Math.ceil(this.bottom),this},scale:function(t,e){return this.left*=t,this.right*=t,this.top*=e,this.bottom*=e,this},map:function(t){return this.left=t.call(this,this.left),this.top=t.call(this,this.top),this.right=t.call(this,this.right),this.bottom=t.call(this,this.bottom),this},translateInside:function(t){var e=0;this.left<=t.left?e=t.left-this.left:this.right>t.right&&(e=t.right-this.right);var n=0;return this.top<=t.top?n=t.top-this.top:this.bottom>t.bottom&&(n=t.bottom-this.bottom),this.translate(e,n)},subtract:function(t){var e=new xt(0,0,0,0),n=[];return(t=t.intersect(this)).isEmpty()?[this.clone()]:(e.setBounds(this.left,this.top,t.left,this.bottom),e.isEmpty()||n.push(e.clone()),e.setBounds(t.left,this.top,t.right,t.top),e.isEmpty()||n.push(e.clone()),e.setBounds(t.left,t.bottom,t.right,this.bottom),e.isEmpty()||n.push(e.clone()),e.setBounds(t.right,this.top,this.right,this.bottom),e.isEmpty()||n.push(e.clone()),n)},blend:function(t,e){return new xt(this.left+(t.left-this.left)*e,this.top+(t.top-this.top)*e,this.width+(t.width-this.width)*e,this.height+(t.height-this.height)*e)},inflate:function(t,e){var n=(this.width*t-this.width)/2,r=arguments.length>1?e:t,i=(this.height*r-this.height)/2;return this.left-=n,this.right+=n,this.top-=i,this.bottom+=i,this},inflateFixed:function(t){return this.left-=t,this.right+=t,this.top-=t,this.bottom+=t,this}};var 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 O()(e,t),y()(e,[{key:"defineProperties",value:function(){Object.defineProperties(this,{firstLine:{enumerable:!0,configurable:!0,get:function(){return this.lines[0]}},lastLine:{enumerable:!0,configurable:!0,get:function(){var t=this.lines;return t[t.length-1]}},lines:{enumerable:!0,configurable:!0,get:function(){return this.computed.composed},set:function(t){this.computed.composed=t}},totalLines:{enumerable:!0,configurable:!0,get:function(){return this.lines.length}},blockOffset:{enumerable:!1,configurable:!0,get:function(){var t=this.getSpace().blockOffset;return(void 0===t?0:t)+this.contentHeight}},availableBlockSize:{enumerable:!0,configurable:!0,get:function(){var t=this.getSpace().height;return(void 0===t?Number.MAX_SAFE_INTEGER:t)-this.contentHeight}},anchors:{enumerable:!0,configurable:!1,get:function(){return this.computed.anchors},set:function(t){this.computed.anchors=t}},wrappees:{enumerable:!0,configurable:!0,get:function(){return this.anchors.filter((function(t){return!!t.props.wrap}))}},contentHeight:{enumerable:!0,configurable:!0,get:function(){return this.lines.reduce((function(t,e){var n=e.props.height;return(void 0===n?0:n)+t}),0)}}})}},{key:"onAllChildrenComposed",value:function(){var t=this.createComposed2Parent();this.context.parent.appendComposed(t),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"appendComposed",value:function(t){null!=t.props.y?this.anchors.push(t):this.lines.push(t)}},{key:"getSpace",value:function(){return this.props.space}},{key:"positionLines",value:function(t){var e=0,n=t.map((function(t,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t,a=o.props.height,s=void 0===a?0:a,c=P.a.cloneElement(t,{key:n,y:e});return e+=s,c}));return P.a.createElement(ut,{height:e},n)}},{key:"nextAvailableSpace",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.height,r=void 0===n?1:n,i=this.props.allowOverflow,o=void 0!==i&&i;if(this.isEmpty()||this.availableBlockSize>=r){var a=this.getSpace();return bt.create(a||{}).clone({blockOffset:this.blockOffset,height:o?Number.MAX_SAFE_INTEGER:this.availableBlockSize,frame:this,findInlineSegments:function(e,n,r){for(var i=t.blockOffset,o=t.exclusive(i,i+e,n,r),a=0;"number"==typeof o;)a=o,o=t.exclusive(a,a+e,n,r);var s=t.nextAvailableSpace({height:a-i+e});return s?{top:a,segments:o.reduce((function(t,e){var n=e.x,i=e.width,o=t.splice(-1),a=nt()(o,1)[0];return[].concat(t,[{x:a.x,width:n-a.x},{x:n+i,width:r-n-i}])}),[{x:n,width:r-n}])}:s},isAnchored:function(e){return t.isAnchored(e)}})}return!1}},{key:"exclusive",value:function(t,e,n,r){var i={x1:n,x2:r,y1:t,y2:e},o=this.wrappees.reduce((function(t,e){var n=(0,e.props.wrap)(i);return t.splice.apply(t,[t.length,0].concat(Array.isArray(n)?n:[n])),t}),[]).filter((function(t){return!!t})).filter((function(t){return t.width>0})).sort((function(t,e){return t.x-e.x})),a=o.filter((function(t){return"clear"==t.type}));return a.length>0?Math.max.apply(Math,a.map((function(t){return t.y}))):(o.length>1&&(o.forEach((function(t){return t.x2=t.x+t.width})),(o=o.reduce((function(t,e){var n=t[t.length-1];return e.x2>n.x2&&(e.x>n.x2?t.push(e):(n.x2=e.x2,n.width=n.x2-n.x)),t}),[o[0]])).forEach((function(t){return delete t.x2}))),o)}},{key:"recompose",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(t){return t};if(this.recompose.deadLoop||(this.recompose.deadLoop=1),++this.recompose.deadLoop,this.isEmpty())return e([],[]),function(t){return t};var n=[].concat(this.lines),r=[].concat(this.anchors),i=this.cols?[].concat(this.columns):void 0,o=function(){t.lines=n,t.anchors=r,i&&(t.columns=i)};try{this.lines=[],this.anchors=[],this.columns=[];var a=[].concat(n);this.computed.recomposing=e(a,[].concat(r));for(var s,c=function(t){return new T.ReactQuery(t).findFirst('[data-type="paragraph"]').attr("data-content")},u=null,l=[],p=0;p<a.length;p++){var h=c(s=a[p]);if(h){if(u){if(h!==u){this.context.getComposer(u).recommit(l),u=h,l=[s];continue}l.push(s);continue}u=h,l.push(s)}else u&&(this.context.getComposer(u).recommit(l),u=null,l=[]),this.appendComposed(s)}u&&this.context.getComposer(u).recommit(l)}catch(t){console.error(t)}finally{return delete this.computed.recomposing,o}}},{key:"rollbackLines",value:function(t){return 0==t?[]:this.lines.splice(-t)}},{key:"isEmpty",value:function(){return this.lines.length+this.anchors.length==0}},{key:"isAnchored",value:function(t){return!!this.anchors.find((function(e){return 1==new T.ReactQuery(e).findFirst('[data-content="'.concat(t,'"]')).length}))}},{key:"_isIntersect",value:function(t,e){return new xt(t.x,t.y,t.width,t.height).intersects(new xt(e.x,e.y,e.width,e.height))}}]),e}(N(T.dom.Container));p()(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 Ot=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"appendComposed",value:function(t){var n=this,r=t.props,i=r.anchor,o=r.height,a=void 0===o?0:o,s=this.nextAvailableSpace({height:a});if(0==s)return!!this.computed.recomposing&&this.constructor.IMMEDIATE_STOP;var c=function(t,e){return 1==new T.ReactQuery(e).findFirst('[data-anchor="'.concat(t,"]")).length};if(!i)return this.computed.recomposing&&c(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 u,l,p,h=i(s.clone({edges:{paragraph:{top:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.lines.find((function(e){return e.props.pagination.id==t}));return n.lineXY(e).y}(t.props.pagination.id)},line:{top:s.blockOffset},character:{left:s.left+(u=new T.ReactQuery(t).findFirstAndParents("[data-anchor]"),l=u.first,p=u.parents,[].concat(p,[l.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0))}}})),f=h.props,d=f.wrap,y=f.geometry,m=f["data-content"];if(!d||!this.__isDirtyIn(y))return x()(b()(e.prototype),"appendComposed",this).call(this,h),1;var g=this.recompose((function(r,i){return n.anchors=i,x()(b()(e.prototype),"appendComposed",n).call(n,h),r.push(t),m}));return c(m,this.lines[this.lines.length-1])?(this.lines.pop(),1):(g(),!1)}},{key:"rollbackLines",value:function(){var t,n=this,r=x()(b()(e.prototype),"rollbackLines",this).apply(this,arguments),i=(t=r.map((function(t){return e=t,new T.ReactQuery(e).find("[data-anchor]").toArray().map((function(t){return t.props["data-anchor"]}));var e})).flat(),n.anchors.filter((function(e){return t.includes(function(t){return new T.ReactQuery(t).findFirst('[data-type="anchor"]').attr("data-content")}(e))})).map((function(t){return n.anchors.splice(n.anchors.indexOf(t),1)[0]}))),o=this.blockOffset,a=this.wrappees.filter((function(t){return i.includes(t)})).filter((function(t){var e=t.props.geometry,n=e.y,r=void 0===n?0:n,i=e.height;return r+(void 0===i?0:i)<o}));return a.length>0&&this.recompose(),Object.assign(r,{anchors:i})}},{key:"__isDirtyIn",value:function(t){var e=this,n=function(t,e){return new xt(t.x,t.y,t.width,t.height).intersects(new xt(e.x,e.y,e.width,e.height))};return!!this.wrappees.find((function(e){var r=e.props,i=r.x,o=r.y,a=r.width,s=r.height;return n(t,{x:i,y:o,width:a,height:s})}))||(!!n(t,{x:0,y:0,width:this.props.width,height:this.blockOffset})||!!this.cols&&!!this.columns.filter((function(t){return t!=e.currentColumn})).find((function(e){var r=e.x,i=void 0===r?0:r,o=e.y,a=void 0===o?0:o,s=e.width,c=e.blockOffset;return n(t,{x:i,y:a,width:s,height:c})})))}}]),e}(kt);function Ct(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var Pt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{prev:{enumerable:!1,configurable:!0,get:function(){var t=this.context,e=t.parent,n=t.prevLayout;return(n=n||e&&e.context&&e.context.prevLayout||function(t){return null})(this)}}})}},{key:"orphanCount",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lastLine,e=Et(t,'[data-type="paragraph"]');if(!e)return 0;var n=this.lines,r=n.findLastIndex((function(t){return Et(t)!==e}));return-1==r?n.length:r+1}},{key:"appendComposed",value:function(t){if(this.isEmpty()&&this.prev){var n=t.props.pagination,r=void 0===n?{}:n,i=r.widow,o=r.orphan,a=r.keepLines,s=r.last;if(a){if(this.prev.shouldKeepLinesWith(t)){var c=this.prev.orphanCount();return this.prev.rollbackLines(c),c+1}}else{if(o&&1==this.prev.orphanCount(t)&&this.prev.lines.length>1)return this.prev.rollbackLines(1),2;if(i&&s){var u=this.prev.orphanCount(t);if(u>0&&this.prev.lines.length>u)return this.prev.rollbackLines(1),o&&2==u?(this.prev.rollbackLines(1),3):2}}if(this.prev.shouldKeepWithNext(t)){var l=this.prev.rollbackLines(this.prev.orphanCount()),p=Et(l[0]);return this.context.getComposer(p).recommit(),1}}return x()(b()(e.prototype),"appendComposed",this).apply(this,arguments)}},{key:"shouldKeepLinesWith",value:function(t){var e=Et(t);return Et(this.lastLine)==e&&Et(this.firstLine)!=e}},{key:"shouldKeepWithNext",value:function(t){return(this.lastLine.props.pagination||{}).keepWithNext&&0==this.orphanCount(t)&&Et(this.firstLine)!==Et(this.lastLine)}}]),e}(Ot);p()(Pt,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Ct(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ct(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Ot.contextTypes,{prevLayout:j.a.func})),p()(Pt,"Fixed",Pt);var Et=function(t){return new ReactQuery(t).findFirst('[data-type="paragraph"]').attr("data-content")};function jt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function St(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?jt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):jt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var At=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),this.props.cols&&(this.computed.columns=[],Object.defineProperties(this,{blockOffset:{enumerable:!1,configurable:!0,get:function(){return this.currentColumn.blockOffset}},availableBlockSize:{enumerable:!0,configurable:!0,get:function(){return this.currentColumn.availableBlockSize}},contentHeight:{enumerable:!1,configurable:!0,get:function(){return Math.max.apply(Math,this.columns.map((function(t){return t.height})))}},currentColumn:{enumerable:!0,configurable:!0,get:function(){var t=this.columns;return 0==t.length&&this.createColumn(),t[t.length-1]}},cols:{enumerable:!0,configurable:!0,get:function(){return this.props.cols}},columns:{enumerable:!0,configurable:!0,get:function(){return this.computed.columns},set:function(t){return this.computed.columns=t}}}))}},{key:"createColumn",value:function(){var t=St({},this.cols[this.columns.length],{lines:Tt.create.apply(Tt,[this].concat(Array.prototype.slice.call(arguments))),get isEmpty(){return 0==this.lines.length},get availableBlockSize(){var t=this.maxHeight,e=void 0===t?Number.MAX_SAFE_INTEGER:t,n=this.height,r=void 0===n?e:n,i=this.y,o=void 0===i?0:i;return r-(this.blockOffset-o)},get blockOffset(){var t=this.y;return(void 0===t?0:t)+this.contentHeight},get contentHeight(){return this.lines.reduce((function(t,e){var n=e.props.height;return(void 0===n?0:n)+t}),0)}});return this.columns.push(t),t}},{key:"getSpace",value:function(t){var n=x()(b()(e.prototype),"getSpace",this).apply(this,arguments);if(!this.cols)return n;n||(n=bt.create({}));var r=n,i=r.left,o=void 0===i?0:i,a=r.right,s=void 0===a?0:a,c=r.blockOffset,u=void 0===c?0:c,l=r.height,p=t||this.currentColumn,h=p.width,f=void 0===h?s-o:h,d=p.x,y=void 0===d?o:d,m=p.height,g=void 0===m?l:m,v=p.y,w=void 0===v?u:v;return n.clone({left:y,right:y+f,blockOffset:w,height:g,edges:{column:{left:y,top:w,right:y+f,bottom:w+g}}})}},{key:"nextAvailableSpace",value:function(){var t=x()(b()(e.prototype),"nextAvailableSpace",this).apply(this,arguments);if(0==t&&this.cols){if(this.currentColumn.isEmpty)return x()(b()(e.prototype),"nextAvailableSpace",this).call(this);var n=this.cols.length>this.columns.length;if(n)return this.createColumn(),x()(b()(e.prototype),"nextAvailableSpace",this).call(this)}return t}},{key:"positionLines",value:function(){var t=this;if(!this.cols)return x()(b()(e.prototype),"positionLines",this).apply(this,arguments);var n=Math.max.apply(Math,this.columns.map((function(t){var e=t.contentHeight,n=t.height;return void 0===n?e:n})));return P.a.createElement(ut,{height:n},this.columns.map((function(n,r){var i=n.x,o=n.y,a=n.width,s=n.contentHeight,c=n.height,u=void 0===c?s:c,l=n.lines;return P.a.cloneElement(x()(b()(e.prototype),"positionLines",t).call(t,l),{x:i,y:o,width:a,height:u,key:r})})))}},{key:"rollbackLines",value:function(){var t=x()(b()(e.prototype),"rollbackLines",this).apply(this,arguments);if(this.cols&&this.columns.length>1){var n=this.lines.length-1,r=this.columns.findIndex((function(t){return t.lines.startIndex>n}));-1!=r&&this.columns.splice(r)}return t}}]),e}(Pt),Tt=function(){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e.computed.composed.length;f()(this,t),this.frame=e,this.startIndex=n}return y()(t,[{key:"unsupport",value:function(t){console.error(t)}},{key:"push",value:function(){var t;(t=this.frame.lines).splice.apply(t,[this.endIndex,0].concat(Array.prototype.slice.call(arguments)))}},{key:"splice",value:function(t,e){throw new Error("not supported")}},{key:"endIndex",get:function(){var t=this,e=this.frame.columns,n=e.findIndex((function(e){return e.lines.target==t})),r=e[n+1];return r?r.lines.startIndex:this.frame.lines.length}},{key:"items",get:function(){return this.frame.lines.slice(this.startIndex,this.endIndex)}},{key:"length",get:function(){return this.endIndex-this.startIndex}}],[{key:"create",value:function(){return new Proxy(tt()(t,Array.prototype.slice.call(arguments)),{get:function(t,e){switch(e){case Symbol.isConcatSpreadable:return!0;case"target":return t;default:if(e in t)return t[e];var n=t.items;if(e in n){var r=n[e];return"function"==typeof r?r.bind(n):r}return function(){return t.unsupport("not supported ColumnChildren[".concat(e,"]"))}}}})}}]),t}(),Ft=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{balanceable:{get:function(){return this.cols&&this.cols.length>1&&this.props.balance&&this.lines.length>1}}})}},{key:"onAllChildrenComposed",value:function(){this.balanceable&&this.balance(),x()(b()(e.prototype),"onAllChildrenComposed",this).apply(this,arguments)}},{key:"balance",value:function(){var t=this.props.balance;if("function"==typeof t)return t.call(this);var e=this.props.balanceThreshold,n=void 0===e?1:e,r=this.cols[0].width;this.cols.find((function(t){return Math.abs(r-t.width)>n}))?this.anyBalance():this.equalBalance()}},{key:"equalBalance",value:function(){var t=this,e=this.lines.reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),0)/this.cols.length;return this.columns=[],this.lines.reduce((function(t,n,r){var i=n.props.height,o=void 0===i?0:i;return t.h<e?t.h+=o:(t.columns.push(r),t.h=o),t}),{columns:[0],h:0}).columns.slice(0,this.cols.length).forEach((function(e){return t.createColumn(e)}))}},{key:"anyBalance",value:function(){var t=this,e=this.createColumn;try{var n=this.cols.reduce((function(t,e){return t+e.width}),0);this.createColumn=function(){return Object.assign(e.call(t),{width:n,height:Number.MAX_SAFE_INTEGER})},this.recompose();var r=this.blockOffset;this.createColumn=function(){return Object.assign(e.call(t),{height:r})},this.recompose()}finally{delete this.createColumn}}}]),e}(At);function It(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 Dt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?It(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):It(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Mt=function(t){function e(){var t,n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{segments:[]}).segments,r=void 0===n?[]:n;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).segments=r,t}return O()(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(Dt({segments:r.map((function(t){return new Lt(t)}))},i))}}]),y()(e,[{key:"shouldRelayout",value:function(t){var e=t.segments,n=e&&this.segments.length==e.length&&!this.segments.find((function(t,n,r){var i=t.props,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e[n];return!(o&&i.x==o.x&&i.width==o.width)}));return e&&!n}},{key:"relayout",value:function(t){for(var e=this.constructor.create(Dt({},this.props,{},t)),n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];for(var o=[].concat(this.items,r),a=0,s=o.length,c=0,u=e.segments.length;c<u;c++)for(var l=e.segments[c];a<s;a++){var p=o[a];if(!1===l.push(p))break}return!(a<s)&&e}},{key:"push",value:function(){var t=arguments,e=this.segments.findLastIndex((function(t,e){return t.items.length>0||0==e}));return!!this.segments.slice(e).find((function(e){if(!1!==e.push.apply(e,t))return!0}))}},{key:"pushAtomic",value:function(){}},{key:"pushTab",value:function(){}},{key:"pushLinebreak",value:function(){}},{key:"pushHyphen",value:function(){}},{key:"render",value:function(){var t=this.props.left,e=void 0===t?0:t,n=this.segments.reduce((function(t,n,r){var i=t.X,o=t.flat,a=n.items,s=n.props,c=s.x,u=void 0===c?0:c,l=s.width,p=void 0===l?0:l;return a=a.map((function(t){return t.props.height&&!Rt(t)?P.a.cloneElement(t,{y:-t.props.height}):t})),o.splice.apply(o,[o.length,0].concat(i!=u?[P.a.createElement(ut,{x:i-e,width:u-i})].concat(a):a)),{X:u+p,flat:o}}),{flat:[],X:e}).flat;return P.a.createElement(ut,{x:e,children:n})}},{key:"items",get:function(){return this.segments.reduce((function(t,e){return[].concat(t,e.items)}),[])}},{key:"current",get:function(){return this.segments.findLast((function(t,e){return t.items.length>0||0==e}))}},{key:"currentX",get:function(){var t=this.current,e=t.x,n=void 0===e?0:e;return t.items.reduce((function(t,e){var n=e.props.width;return t+(void 0===n?0:n)}),n)}}]),e}(C.Component);p()(Mt,"propTypes",{left:j.a.number,segments:j.a.arrayOf(Lt)});var Lt=function(t){function e(t){var n;t.x,t.width;return f()(this,e),(n=g()(this,b()(e).apply(this,arguments))).items=[],n}return O()(e,t),y()(e,[{key:"push",value:function(t,e){if(e)this.items.push(t);else{var n=t.props,r=n.width,i=void 0===r?0:r,o=n.minWidth,a=void 0===o?i:o;if(!(0==a||this.availableWidth>=a))return!1;this.items.push(t)}}},{key:"render",value:function(){var t=this.props,e=t.x,n=void 0===e?0:e,r=t.width,i=n;return P.a.createElement(ut,{x:n,width:r},this.items.map((function(t){var e=P.a.cloneElement(t,{x:i});return i+=t.props.width||0,!Rt(t)&&t.props.height?P.a.cloneElement(e,{y:-t.props.height}):e})))}},{key:"contentWidth",get:function(){return this.items.reduce((function(t,e){return t+e.props.width}),0)}},{key:"availableWidth",get:function(){return this.props.width-this.contentWidth}}]),e}(C.Component);p()(Lt,"propTypes",{x:j.a.number,width:j.a.number});var Rt=function(t){return void 0!==t.props.descent},_t=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"getMerged",D()((function(t){return P.a.Children.toArray(t).reduce((function(t,e,n){var r=Nt(e);return r.bText?r.join(",")==t.trunkPath?t.trunk.push(e):(t.mergeTrunk(n),t.trunk.push(e),t.trunkPath=r.join(",")):(t.mergeTrunk(n),t.pieces.push(P.a.cloneElement(e,{x:t.x,key:n})),t.x+=e.props.width),t}),{pieces:[],x:0,trunk:[],trunkPath:null,mergeTrunk:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(1==this.trunk.length){var e=this.trunk[0];this.pieces.push(P.a.cloneElement(e,{x:this.x,key:t})),this.x+=e.props.width}else if(this.trunk.length>1){var n=function(t){return Nt(t,(function(t){return t})).pop()},r=this.trunk.map(n),i=r.reduce((function(t,e){return t.width+=e.props.width,t.children+=e.props.children,t}),{width:0,children:"","data-endat":r[r.length-1].props["data-endat"],className:void 0,minWidth:void 0}),o=Nt(this.trunk[0],(function(t){return t}),(function(t){return!0})).slice(0,-1),a=o.reduceRight((function(t,e){return P.a.cloneElement(e,{width:i.width},t)}),P.a.cloneElement(r[0],i));this.pieces.push(P.a.cloneElement(a,{x:this.x,key:t})),this.x+=i.width}return this.trunk=[],this.trunkPath=null,this}}).mergeTrunk().pieces}))),n}return O()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=t.x,r=this.getMerged(e);return 1==r.length?P.a.cloneElement(r[0],{x:n}):P.a.createElement(ut,{x:n},this.getMerged(e))}}]),e}(C.Component);function Nt(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(t){return t.props["data-content"]},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(t){return!!t.props["data-content"]},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];return P.a.isValidElement(t)&&(n(t)&&(r.push(e(t)),r.bText="text"==t.props["data-type"]),P.a.isValidElement(t.props.children)&&Nt(P.a.Children.only(t.props.children),e,n,r)),r}var Wt=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){var t=this.props,e=t.children,n=t.align,r=void 0===n?"left":n,i=e.reduce((function(t,e){var n=e.props.descent,r=void 0===n?0:n;return Math.max(t,r)}),0),o=e.reduce((function(t,e){var n=e.props,r=n.height,i=void 0===r?0:r,o=n.descent,a=void 0===o?0:o;return Math.max(t,i-a)}),0),a=this[r]();return P.a.createElement(ut,{className:"story",y:o,lineDescent:i,children:a})}},{key:"group",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.props.children.reduce((function(e,n){return null!=n.props.x?t?e.push({located:n,words:[]}):(e[e.length-1].located=n,e.push({words:[]})):e[e.length-1].words.push(n),e}),[{words:[]}]).map((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e==n.length-1,i=t.words.length-Array.from(t.words).reverse().findIndex((function(t){return r?0!==t.props.minWidth:!zt(t)}));return t.endingWhitespaces=t.words.slice(i),t.words=t.words.slice(0,i),t}))}},{key:"left",value:function(){return this.group().reduce((function(t,e){var n=e.words,r=e.endingWhitespaces,i=e.located;return n.length+r.length&&t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:[].concat(n,r).map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length})),i&&(t.aligned.push(P.a.cloneElement(i,{key:t.aligned.length})),t.x=i.props.x+i.props.width),t}),{x:0,aligned:[]}).aligned}},{key:"right",value:function(){return this.group(!0).reduceRight((function(t,e){var n=e.located,r=e.words,i=e.endingWhitespaces;return i.length>0&&t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:i.map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length})),r.length&&(t.x=r.reduce((function(t,e){return t-e.props.width}),t.x),t.aligned.push(P.a.cloneElement(new _t({x:t.x,children:r.map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:t.aligned.length}))),n&&(t.aligned.push(P.a.cloneElement(n,{key:t.aligned.length})),t.x=n.props.x),t}),{x:this.props.width,aligned:[]}).aligned.reverse()}},{key:"center",value:function(){var t=this;return this.group().reduce((function(e,n){var r=n.words,i=n.endingWhitespaces,o=n.located;if(r.length+i.length){var a=(o?o.props.x:t.props.width)-e.x,s=r.reduce((function(t,e){return t+e.props.width}),0);e.aligned.push(P.a.cloneElement(new _t({x:e.x+(a-s)/2,children:[].concat(r,i).map((function(t,e){return P.a.cloneElement(t,{key:e})}))}).render(),{key:e.aligned.length}))}return o&&(e.aligned.push(P.a.cloneElement(o,{key:e.aligned.length})),e.x=o.props.x+o.props.width),e}),{x:0,aligned:[]}).aligned}},{key:"justify",value:function(){var t=this;return this.group().reduce((function(e,n){var r=n.words,i=n.endingWhitespaces,o=n.located,a=e.justified.length,s=(o?o.props.x:t.props.width)-e.x,c=r.reduce((function(t,e,n){return zt(e)?t.whitespaces.push(n):t.contentWidth+=e.props.width,t}),{contentWidth:0,whitespaces:[]}),u=c.whitespaces,l=c.contentWidth,p=u.length>0?(s-l)/u.length:0;return[].concat(r,i).reduce((function(t,n,r){return e.justified.push(P.a.cloneElement(n,{x:t,key:a++})),t+(u.includes(r)?p:n.props.width)}),e.x),o&&(e.justified.push(P.a.cloneElement(o,{key:a++})),e.x=o.props.x+o.props.width),e}),{x:0,justified:[]}).justified}},{key:"both",value:function(){return this.justify()}}]),e}(C.Component);function zt(t){return new T.ReactQuery(t).findFirst(".whitespace").length>0}function Bt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function qt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Bt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Bt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Wt,"displayName","story");var 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=Mt.create(qt({left:i},s)),n}return O()(e,t),y()(e,[{key:"isEmpty",value:function(){return!this.firstAtom}},{key:"appendAnchorAtom",value:function(t){var e=new T.ReactQuery(t),n=e.findFirst('[data-type="anchor"]'),r=n.attr("data-content"),i=P.a.cloneElement(e.replace(n.get(0),P.a.createElement(ut,null)).get(0),{atom:t,width:0,"data-anchor":r});if(this.inlineSegments.push(i),!this.space.isAnchored(r))return this.anchor=t.props.anchor,!1}},{key:"appendAtom",value:function(t){var e=this;if(t.props.anchor)return this.appendAnchorAtom(t);var n=function(n){if(n-e.height>1){var r=e.props,i=r.space,o=i.left,a=i.right,s=(r.top,e.findInlineSegments(e.topToBlockOffset+n,o,a));if(e.inlineSegments.shouldRelayout(s)){var c=e.inlineSegments.relayout(s,t);return!1!==c&&void(e.inlineSegments=c)}}return e.inlineSegments.push(t)}(this.getLineHeight(t.props.height));if(!1!==n||!this.isEmpty())return n;this.inlineSegments.push(t,!0)}},{key:"getLineHeight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.contentHeight,e=this.props.lineHeight;return"string"==typeof e?t+("string"==typeof e?this.textHeight*(parseInt(e)-100)/100:0):"number"==typeof e?e:t}},{key:"freeze",value:function(){var t=this.inlineSegments.render().props.children;return this.children=[].concat(this.props.positioned,t),this}},{key:"render",value:function(t){var e=this.props.align;return new Wt({children:this.children,width:this.width,align:t&&["justify","both"].includes(e)?void 0:e}).render()}},{key:"isFitTo",value:function(t){if(!t)return!1;if(this.space.width!=t.width)return!1;var e=t.findInlineSegments(this.topToBlockOffset+this.height,t.left,t.right).segments;return this.inlineSegments.segments.length==e.length&&!this.inlineSegments.segments.find((function(t,n,r,i){var o=t.props,a=o.x,s=o.width,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:e[n];return c.x!=a&&c.width!=s}))}},{key:"clone4Space",value:function(t){return Object.assign(new this.constructor(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:bt,IMMEDIATE_STOP:Ft.IMMEDIATE_STOP};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 Ht(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}function Xt(t,e){var n=e.locatable,r=e.stoppable,i=e.continuable,o=e.recomposable;return n&&!t.already("locatable")&&(t=U(t,n)),o&&!t.already("recomposable")&&(t=z(t,o)),r&&!t.already("stoppable")&&(t=Y(t,r)),i&&!t.already("continuable")&&(t=Z(t,Z)),t}function Yt(t){return Xt(t,Ht({locatable:!0,recomposable:!0},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}))}var Qt=function(t){return function(e,n){return Object.keys(e).reduce((function(n,r){return n[r]||(n[r]=t(e[r])),n}),Ht({},n))}};function Vt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function Kt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Vt(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Vt(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}[R,N,W,z,U,Y,Z,Yt].forEach((function(t){return t.enable=Qt(t)}));var Jt=function(t){function e(){var t;return f()(this,e),t=g()(this,b()(e).apply(this,arguments)),p()(u()(t),"__getSpace",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,k=o.x,O=void 0===k?0:k,C=o.y,P=void 0===C?0:C,E=(r={},p()(r,t.getComposeType(),{left:O,top:P,right:O+a,bottom:P+c}),p()(r,"margin",{left:O+f,top:P+g,right:a+O-y,bottom:P+c-w}),r);return t.cols?Gt.ConstraintSpace.create(i).clone({edges:E}):Gt.ConstraintSpace.create(i).clone({left:O+f,right:O+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 O()(e,t),y()(e,[{key:"getSpace",value:function(){return this.__getSpace(this.props)}},{key:"defineProperties",value:function(){x()(b()(e.prototype),"defineProperties",this).call(this),Object.defineProperties(this,{composedHeight:{enumerable:!0,configurable:!0,get:function(){return this.cols?Math.max.apply(Math,this.columns.map((function(t){return t.blockOffset}))):this.blockOffset}}})}},{key:"createComposed2Parent",value:function(){var t=this,e=this.positionLines(this.lines),n=e.props.height;e=P.a.cloneElement(e,{y:function(e){var n=t.props,r=n.height,i=void 0===r?e:r,o=n.vertAlign;if(null!=e)switch(o){case"bottom":return i-e;case"center":case"middle":return(i-e)/2;default:return 0}}(n)});var r=this.props,i=r.width,o=r.height,a=void 0===o?n:o,s=r.margin,c=(s=void 0===s?{}:s).left,u=void 0===c?0:c,l=s.top,p=void 0===l?0:l,h=r.x,f=r.y,d=r.z,y=r.named;return this.cols||!u&&!p||(e=P.a.createElement(ut,{x:u,y:p},e)),P.a.createElement(ut,{width:i,height:a,x:h,y:f,z:d,named:y,className:"frame","data-frame":this.uuid},[P.a.cloneElement(e,{key:"content"})].concat(this.anchors.map((function(t,e){return P.a.cloneElement(t,{key:e})}))).filter((function(t){return!!t})).sort((function(t,e){var n=t.props.z,r=void 0===n?0:n,i=e.props.z;return r-(void 0===i?0:i)})))}},{key:"lineXY",value:function(t){if(!this.cols){var e=this.props.margin,n=(e=void 0===e?{}:e).top,r=void 0===n?0:n,i=e.left;return{x:void 0===i?0:i,y:this.lines.slice(0,this.lines.indexOf(t)).reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),r)}}var o=this.columns.find((function(e){return e.lines.includes(t)}))||this.currentColumn,a=o.y,s=void 0===a?0:a,c=o.x,u=void 0===c?0:c,l=o.lines;return{x:u,y:l.slice(0,l.indexOf(t)).reduce((function(t,e){var n=e.props.height;return t+(void 0===n?0:n)}),s)}}},{key:"columnIndexOf",value:function(t){return this.cols?this.columns.findIndex((function(e){return e.lines.startIndex>=t})):0}},{key:"layoutOf",value:function(){var t=this.props;return{width:t.width,height:t.height,margin:t.margin,cols:this.cols}}},{key:"clone",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.computed;return Object.assign(new this.constructor(Kt({},this.props,{},t),this.context),{computed:e})}},{key:"isFrame",get:function(){return!0}}]),e}(Gt.Block);p()(Jt,"displayName",N(T.dom.Frame).displayName);var Zt=function(t){function e(){var t,n;f()(this,e);for(var r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];return n=g()(this,(t=b()(e)).call.apply(t,[this].concat(i))),p()(u()(n),"___createComposed2Parent",D()((function(t){return x()(b()(e.prototype),"createComposed2Parent",u()(n)).call(u()(n))}))),n}return O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){return this.___createComposed2Parent(this.computed.composedUUID||this.context.parent.computed.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.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!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,this.computed.lastComposed=[]),n}}]),e}(Yt(Jt,{stoppable:!0,continuable:!0})),$t=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"render",value:function(){var t=this.context.getComposedTemplate(this.props.xhref);return t?P.a.createElement(C.Fragment,null,t.props.children):null}}]),e}(C.Component);p()($t,"contextTypes",{getComposedTemplate:j.a.func.isRequired});var te=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){var t=this.props,n=t.xhref,r=t.master;return P.a.createElement("symbol",{id:n},r?P.a.createElement($t,{xhref:r}):null,x()(b()(e.prototype),"createComposed2Parent",this).apply(this,arguments))}}],[{key:"isTemplate",value:function(t){return t&&"symbol"===t.type}}]),e}(Zt);p()(te,"Use",$t);var ee=n(21),ne=n.n(ee),re=n(25);function ie(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 oe=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return O()(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?ie(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ie(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;ne()(this.props);var s=function(t){return t.stopPropagation()},c=P.a.createElement(ut,{innerRef:function(e){return t.el=e},x:r,y:o,onMouseDown:s,onMouseMove:s,onMouseUp:s},this.props.children);return a?Object(re.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),ae=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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(oe,{x:0,y:0},P.a.createElement("rect",it()({width:"100%",height:"100%",fill:"transparent"},n))))}}]),e}(C.Component);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}var ce=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 O()(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(ae,{cursor:"default",onMouseUp:function(e){return t.onEndMove(e)},onMouseMove:function(e){return t.moving(e)}},!s&&P.a.createElement(pe,{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?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}({},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()(ce,"propTypes",{around:j.a.func,onMove:j.a.func,isAnchor:j.a.bool}),p()(ce,"contextTypes",{positioning:j.a.object});var ue,le,pe=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(oe,null,P.a.createElement(ut,{x:n,y:i},P.a.createElement("rect",{x:5,y:20,width:10,height:5,fill:"transparent",stroke:"gray",strokeWidth:"1"}),P.a.createElement("rect",{width:2,height:20,fill:"black"})))},he=Object(T.whenSelectionChange)((function(t){var e=t.selection;return e?{selection:e,rects:e.getRangeRects()}:{}}),void 0,void 0,{withRef:!0})((le=ue=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 O()(e,t),y()(e,[{key:"render",value:function(){var t=this.state,e=t.rects,n=void 0===e?[]:e,r=t.selecting;ne()(this.props);var i=this.context.editable,o=P.a.createElement(fe,{rects:n,innerRef:this.area});return r?P.a.cloneElement(o,{onMouseMove:this.onShrink}):i?P.a.createElement(ce,{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()(ue,"contextTypes",{editable:j.a.any}),le)),fe=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)}}))},de=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 O()(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)),ye=n(15);function me(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 ge=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?me(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):me(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 O()(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),ve=Object(ye.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 O()(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 ge(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)),be=n(17),we=n.n(be),xe=n(22),ke=n.n(xe),Oe=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 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}function Pe(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}p()(Oe,"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 O()(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 Ee,je,Se=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 O()(e,t),y()(e,[{key:"getTopFrameXY",value:function(t){var e=this.pageXY(t.props.I),n=e.x,r=e.y;return{x:n,y:r,top:r,bottom:r+t.props.height}}},{key:"getTopFrameByPosition",value:function(t,e){var n,r=this;return{topFrame:this.frames.find((function(i){var o=i.props,a=o.width,s=o.height,c=o.I;return n=r.pageXY(c),t>=n.x&&t<=n.x+a&&e>=n.y&&e<=n.y+s})),topFrameOffset:n}}},{key:"normalizeSelection",value:function(t,e){if(t.id==e.id)return{start:t,end:e};var n=function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];t;)(t.isSection||t.isFrame||["row","document"].includes(t.getComposeType()))&&e.push(t.props.id),t=t.context?t.context.parent:null;return e},r=n(this.getComposer(t.id)),i=n(this.getComposer(e.id)),o=r.findLastIndex((function(t,e){return t==i[e]}));return-1!=o&&(r.splice(0,o+1),i.splice(0,o+1)),r[0]&&(t={id:r[0],at:1}),i[0]&&(e={id:i[0],at:1}),{start:t,end:e}}},{key:"getOrderedPosition",value:function(t,e){var n=this.normalizeSelection(t,e);t=n.start,e=n.end;var r=this.position(t.id,t.at,!0),i=this.position(e.id,e.at,!0),o={p0:i,p1:r};if(r.topFrame.props.i>i.topFrame.props.i)return o;if(r.topFrame.props.i==i.topFrame.props.i)if(r.leafFrame==i.leafFrame){if(r.lineIndexInLeafFrame>i.lineIndexInLeafFrame)return o;if(r.lineIndexInLeafFrame==i.lineIndexInLeafFrame&&r.x>i.x)return o}else if(r.leafFrame.props.i>i.leafFrame.props.i)return o;return{p0:r,p1:i}}},{key:"getFrameOffsetGrandFrame",value:function(t,e){if(t==e)return{x:0,y:0};var n=t.createComposed2Parent(),r=new T.ReactQuery(n).findFirstAndParents("[data-frame=".concat(e.uuid,"]")),i=r.first,o=r.parents;return[].concat(o,[i.get(0)]).filter((function(t){return!!t})).reduce((function(t,e){var n=e.props,r=n.x,i=void 0===r?0:r,o=n.y,a=void 0===o?0:o;return t.x+=i,t.y+=a,t}),{x:0,y:0})}},{key:"getCheckedGrandFrameByFrame",value:function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"find";if(!e){var i=this._targetFrameContainsFrame(t);e=function(e){return e==t||i(e)}}for(var o=t,a=null;o;){if(o.isFrame&&e(o)?a=o:o.isSection&&(a=o.computed.composed[r](e)),n&&a)return a;o.context&&(o=o.context.frame||o.context.parent)}return a}},{key:"getBoundaryCheckedMostInnerNode",value:function(t,e){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(t){return t},r=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.filter((function(e){return e!=t})).reduce((function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.props,r=(n=void 0===n?{}:n).height,i=n.width,o=n.x,a=void 0===o?0:o,s=n.y,c=void 0===s?0:s,u=n["data-type"];return t.x+=a,"text"!==u&&(t.y+=c),"paragraph"==u&&(t.height=r),null!=i&&(t.width=i),t}),Pe({},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,k=w.i,O=b.paragraph,C=void 0===O?this.getComposer(x):O;return this.aroundInInline(C.computed.lastComposed[k-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]"),k=x.last,O=x.parents;if("text"==k.attr("data-type")){if(o.x=[].concat(O,[k.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0),e>=o.x+k.attr("width"))return{id:k.attr("data-content"),at:k.attr("data-endat")};var C=k.get(0),P=C.props,E=P.children,j=P["data-content"],S=P["data-endat"],A=C.composer,F=(void 0===A?this.getComposer(j):A).measure.widthString(e-o.x,E);return{id:j,at:S-E.length+F}}return{id:k.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}),Pe({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"),k=d.attr("children");if(x>=e){var O=e-(x-k.length),C=w.measure.stringWidth(k.substring(0,O));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}(Oe),Ae=Oe.makeSafe(function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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=Pe({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.geometry,n=e.x,r=void 0===n?0:n,i=e.y,o=void 0===i?0:i,a=e.width,s=void 0===a?0:a,l=e.height;return u({x:r,y:o,width:s,height:void 0===l?0:l},c)}));if(l&&0==new T.ReactQuery(l).findFirst("[data-frame]").length)return{id:this.getBoundaryCheckedMostInnerNode(l,(function(t,e){var n=e.props,r=n.width,i=n.height;return!n["data-nocontent"]&&(r&&i?u(t({width:r,height:i}),c,l.props.geometry):void 0)}),(function(t,e){return[t].concat(e).find((function(t){return t&&t.props&&"data-content"in t.props}))})).node.props["data-content"]};var p=this.getBoundaryCheckedMostInnerNode(s.createComposed2Parent(),(function(t,e){var n=e.props,r=n["data-frame"],i=n.width,o=n.height;if(r)return u(t({width:i,height:o}),c)}),(function(t){return n.getFrameByLayoutedFrameNode(t)})).node,h=this.getFrameOffsetGrandFrame(s,p),f=p.lines.find((function(t){var e=t.props,n=e.width,r=void 0===n?0:n,i=e.height,o=void 0===i?0:i;return u(Pe({},p.lineXY(t),{width:r,height:o}),h,c)}));if(!f)return{id:p.props.id,at:1};var d=p.lineXY(f),y=f.props,m=y.pagination,g=m.id,v=m.i,b=y.paragraph,w=void 0===b?this.getComposer(g):b;return this.aroundInInline(w.computed.lastComposed[v-1],i-c.x-h.x-d.x)}},{key:"getRangeRects",value:function(t,e){var n=[],r=this.getOrderedPosition(t,e),i=r.p0,o=r.p1,a=ke.a.mark((function t(e,n){var r,a,s,c=this;return ke.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t.lines.length-1,r=c.getCheckedGrandFrameByFrame(t),i=c.getTopFrameXY(r),o=c.getFrameOffsetGrandFrame(r,t),a=o.x,s=o.y;return t.lines.slice(e,n+1).map((function(e,n,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e,o=i.props,a=o.width,s=o.height,c=o.pagination,u=(c=void 0===c?{}:c).id,l=t.lineXY(e);if(u){var p=new T.ReactQuery(e).findFirstAndParents(".story"),h=[].concat(p.parents,[p.first.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),0),f=p.first.findFirstAndParents("[data-content],.ender"),d=[].concat(f.parents,[f.first.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),h),y=p.first.findLastAndParents("[data-content],.ender"),m=[].concat(y.parents,[y.last.get(0)]).reduce((function(t,e){var n=e.props.x;return t+(void 0===n?0:n)}),h+y.last.attr("width"));return Pe({},l,{x:l.x+d,width:m-d,height:s})}return Pe({},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"===we()(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"===we()(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}(Se)),Te=Object(ye.compose)(Object(ye.setDisplayName)("ComposeMoreTrigger"),Object(T.connect)((function(t){return{selection:Object(T.getSelection)(t)}})))((je=Ee=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"shouldComponentUpdate",value:function(t){var e=t.selection,n=t.isSelectionComposed,r=t.compose4Selection;return!!n(e)||(r(),!1)}},{key:"render",value:function(){var t=this.props,e=t.compose4Scroll,n=t.getComposedY,r=t.debug,i=n();return P.a.createElement(at.a,{onEnter:function(){return e(i)}},P.a.createElement(ut,{y:i-100},P.a.createElement("line",{className:"composeTrigger",x1:"0",y1:"0",x2:"2",y2:"0",strokeWidth:"2",stroke:r?"red":"transparent"})))}}]),e}(C.Component),p()(Ee,"propTypes",{selection:j.a.object,getComposedY:j.a.func,isSelectionComposed:j.a.func,compose4Scroll:j.a.func,compose4Selection:j.a.func}),p()(Ee,"contextTypes",{debug:j.a.bool}),je)),Fe=function(){return P.a.createElement(C.Fragment,null,P.a.createElement("defs",null,P.a.createElement(Ie,null),P.a.createElement(De,null)))},Ie=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"})},De=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 Me(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 Le(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Me(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Me(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Re=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t.getComposer=t.getComposer.bind(u()(t)),t.getContent=t.getContent.bind(u()(t)),t.positioning=new Ae(u()(t)),t}return O()(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 Le({},ht.getDerivedStateFromProps.apply(ht,arguments),{editable:i,canvasId:o,content:a,viewport:u,screenBuffer:p,composed4Y:f})}}]),y()(e,[{key:"getChildContext",value:function(){return{positioning:this.positioning}}},{key:"getComposer",value:function(t){return this.props.document.getComposer(t)}},{key:"getContent",value:function(t){return T.ContentQuery.fromContent(this.state.content,t?"#".concat(t):void 0)}},{key:"asCanvasPoint",value:function(t){var e=t.left,n=t.top,r=this.canvas.createSVGPoint();r.x=e,r.y=n;var i=r.matrixTransform(this.canvas.getScreenCTM().inverse());return{x:i.x,y:i.y}}},{key:"asViewportPoint",value:function(t){var e=t.x,n=t.y,r=this.canvas.createSVGPoint();r.x=e,r.y=n;var i=r.matrixTransform(this.canvas.getScreenCTM());return{left:i.x,top:i.y}}},{key:"pageXY",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=this.constructor.Canvas.pageRect(t,this.canvas);return e?this.asCanvasPoint(e):{x:0,y:0}}},{key:"__composedY",value:function(){var t=this.state,e=t.pages,n=t.pageGap;return this.constructor.Canvas.composedY(e,n)}},{key:"availableBlockSize",value:function(){var t=this.state,e=t.scale,n=t.composed4Y,r=void 0===n?0:n,i=t.screenBuffer,o=t.viewport,a=o.height,s=o.node.scrollTop,c=this.__composedY()*e;return Math.max(0,Math.max(s,r)+a+i*a-c)}},{key:"render",value:function(){var t=this,e=this.props,n=e.children,r=e.document,i=this.state,o=i.editable,a=void 0===o||o,s=i.scale,c=i.pageGap,u=i.pages,l=i.precision,p=a&&!1===a.cursor?{}:this.eventHandlers,h=function(e){t.selectionChangeNotifier?t.selectionChangeNotifier.setState({composedContent:null},e):e()},f=this.constructor.Canvas;return P.a.createElement(f,it()({scale:s,pageGap:c,pages:u,precision:l,document:r,paper:!0},{innerRef:function(e){t.canvas=e}},p),P.a.createElement(Te,{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(Fe,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(de,{scrollNodeIntoView:function(e){return t.scrollNodeIntoView(e)}})),P.a.createElement(T.Selection,null,P.a.createElement(he,{ref:"selecting"})),P.a.createElement(ve,{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 Le({},s()(t,["cursorAt"])[e])}}]),e}(C.Component);p()(Re,"displayName","responsible-composed-document-default-canvas"),p()(Re,"Canvas",ht),p()(Re,"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()(Re,"defaultProps",{pageGap:12,screenBuffer:1,scale:1}),p()(Re,"contextTypes",{onContextMenu:j.a.func,activeDocStore:j.a.any}),p()(Re,"childContextTypes",{positioning:j.a.object});var _e=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 O()(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}(Re);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}function We(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}var ze=U.Locatorize(R(T.dom.Document)),Be=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 O()(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 O()(e,t),y()(e,[{key:"getComposed",value:function(){return P.a.createElement(ht,{document:this})}},{key:"getChildContext",value:function(){var t=this;return We({},x()(b()(e.prototype),"getChildContext",this).call(this),{Measure:this.getMeasure(),getComposedTemplate:function(e){return t.computed.templates.find((function(t){return t.props.id===e}))||{props:{children:null}}},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){te.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}(ze);p()(Be,"propTypes",We({},ze.prototype,{canvas:j.a.node})),p()(Be,"defaultProps",We({},ze.defaultProps,{canvas:P.a.createElement(ht,null)})),p()(Be,"contextTypes",We({},ze.contextTypes,{Measure:j.a.func})),p()(Be,"childContextTypes",We({},ze.childContextTypes,{Measure:j.a.func,getComposedTemplate:j.a.func,prevLayout:j.a.func,editable:j.a.any}));var qe,Ge,Ue=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state=We({mode:"content"},t.state),t.computed.shouldContinueCompose=!0,t}return O()(e,t),y()(e,null,[{key:"getDerivedStateFromProps",value:function(t,e){var n=t.hash,r=t.viewport,i=t.editable;return We({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(We({},t.props,{document:this}));return n.state=e.getDerivedStateFromProps(n.props,n.state),n}}]),e}(Yt(Be,{continuable:!0}));function He(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 Xe(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?He(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):He(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Ue,"defaultProps",We({},Be.defaultProps,{canvas:P.a.createElement(_e,null)})),p()(Ue,"contextTypes",We({},Be.contextTypes,{activeDocStore:j.a.any}));var Ye=N(T.dom.Section),Qe=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).computed.named={},t}return O()(e,t),y()(e,[{key:"getChildContext",value:function(){var t=this;return Xe({},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],Xe({},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,Xe({},n,{parent:this,getComposer:function(e){return t.context.getComposer(e)}}))}},{key:"createComposed2Parent",value:function(t){return t}},{key:"nextAvailableSpace",value:function(t){var e,n=(e=this.current).nextAvailableSpace.apply(e,arguments);if(!n){var r=this.createLayout(void 0,{frame:n.frame},t);if(r)return this.computed.composed.push(r),this.context.parent.appendComposed(this.createComposed2Parent(r)),this.nextAvailableSpace.apply(this,arguments)}return n}},{key:"appendComposed",value:function(t){var e=t.props,n=e.named,r=e.height;if(!n){var i,o=(i=this.current).appendComposed.apply(i,arguments);return!1===o?this.nextAvailableSpace({height:r})?1:Zt.IMMEDIATE_STOP:Number.isInteger(o)?o:void 0}this.computed.named[n]=arguments[0]}},{key:"onAllChildrenComposed",value:function(){var t=this.computed.composed[this.computed.composed.length-1];t.balanceable&&t.balance(),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"isSection",get:function(){return!0}},{key:"current",get:function(){if(0==this.computed.composed.length){var t=this.createLayout();t&&(this.computed.composed.push(t),this.context.parent.appendComposed(this.createComposed2Parent(t)))}return this.computed.composed[this.computed.composed.length-1]}},{key:"topIndex",get:function(){for(var t=this.context.parent;t;){if(t.isFrame||t.isSection)return;if(!t.context||!t.context.parent)return t.computed.composed.length;t=t.context.parent}}}]),e}(Ye);p()(Qe,"defaultProps",Xe({},Ye.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,[Xe({},this.props.layout,{},t)].concat(n))}})),p()(Qe,"childContextTypes",Xe({},Ye.childContextTypes,{prevLayout:j.a.func})),p()(Qe,"Layout",(Ge=qe=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(){var t=this.props,n=t.i,r=t.I,i={margin:t.margin,i:n,key:n};return null!=r&&(i.I=r),P.a.cloneElement(x()(b()(e.prototype),"createComposed2Parent",this).call(this),i)}},{key:"clone4Space",value:function(t){if(t.context.frame==this.context.frame)return this;var e=this.clone({space:t.props.space});return e.context.frame=t.context.frame,e}}]),e}(Zt),p()(qe,"displayName","frame-section"),Ge));var Ve=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"cancelUnusableLastComposed",value:function(t){var e=t.hash!=this.props.hash;e&&this._cancelChangedPart.apply(this,arguments),this._cancelUntilLastAllChildrenComposed.apply(this,arguments)}},{key:"appendLastComposed",value:function(){var t=this,n=this.computed.lastComposed;this.computed.composed=[],this.computed.lastComposed=[];var r=n.findIndex((function(e,r,i,o){var a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r==n.length-1;if(a&&e.isEmpty())return!0;var s=t.createLayout();return!e.getSpace().equals(s.getSpace())||(e=e.clone4Space(s),t.computed.composed.splice(r,1,e),t.context.parent.appendComposed(t.createComposed2Parent(e)),!1)}));if(0==r)return this.anchors=[],x()(b()(e.prototype),"cancelUnusableLastComposed",this).call(this,{changed:!0}),!1;if(-1==r){if(this.isAllChildrenComposed())return!0}else delete this.computed.allComposed;var i=this.current.lastLine.props["data-content"];return this.childrenArray(this.props.children).findIndex((function(t){return t&&t.props.id==i}))}},{key:"_cancelChangedPart",value:function(t){var e=this,n=-1,r=this.childrenNeedRecompose(t,this.props),i=this.computed.lastComposed.findIndex((function(t){var i=t.lines;return-1!=(n=i.findIndex((function(t){return r.includes(e.childIdOf(t))})))}));this._keepLastComposedUntil(i,n)}},{key:"_cancelUntilLastAllChildrenComposed",value:function(){var t=this,e=-1,n=this.computed.lastComposed.findLastIndex((function(n){var r=n.lines;return-1!=(e=r.findLastIndex((function(e,n,r,i){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:t.childIdOf(e),a=t.context.getComposer(o);return a&&a.isAllChildrenComposed()})))}));this._keepLastComposedUntil(n,e+1)}},{key:"_keepLastComposedUntil",value:function(t,e){var n=this.computed.lastComposed;-1==t||t==n.length-1&&e>=n[t].lines.length||(delete this.computed.allComposed,this.computed.lastComposed=n.slice(0,t+1),this.computed.lastComposed[t].removeFrom(e))}}]),e}(Yt(Qe,{stoppable:!0})),Ke=n(23),Je=n.n(Ke);function Ze(t){for(var e,n=new Je.a(t),r=0,i=[];e=n.nextBreak();)i.push(t.slice(r,e.position)),e.required,r=e.position;return i}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 tn(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 en=N(T.dom.Paragraph),nn=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 O()(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=Ze("".concat(n).concat(r));switch(i.length){case 1:var o=Math.max(e.props.height,t.props.height),a=Math.max(e.props.descent,t.props.descent),s=e.props.width+t.props.width,c=e.props,u=c["data-content"],l=c.children,p=c.mergeOpportunity;return void this.atoms.splice(-1,1,P.a.createElement(ut,{width:s,height:o,descent:a,mergeOpportunity:"".concat(p).concat(t.props.mergeOpportunity)},u?[P.a.cloneElement(e,{key:0}),P.a.cloneElement(t,{x:e.props.width,key:1})]:[].concat(l,[P.a.cloneElement(t,{x:e.props.width,key:l.length-1})])));case 2:if(n===i[0])break;default:console.warn('error: "'.concat(n).concat(r,'" break opportunities: [').concat(i.join(","),"]"))}}this.atoms.push(t)}},{key:"onAllChildrenComposed",value:function(){var t=this.props.End,n=void 0===t?"":t,r=this.getDefaultMeasure();this.atoms.push(P.a.createElement(st,it()({},r.defaultStyle,{width:r.stringWidth(n),minWidth:0,children:n,className:"ender"}))),this.commit(),x()(b()(e.prototype),"onAllChildrenComposed",this).call(this)}},{key:"rollbackLines",value:function(t){this.lines.splice(-t)}},{key:"commit",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_SAFE_INTEGER,r=this.context.parent,i=this.computed.atoms,o=function(e){var n=t.lines,r=t.atoms,i=n.findIndex((function(t){return r.indexOf(t.firstAtom)==e}));t.rollbackLines(n.length-i)},a=function(e){return t.currentLine.freeze(),r.appendComposed(t.createComposed2Parent(t.currentLine,e))},s=function(e){var n=t.lines,r=n[n.length-e];return i.indexOf(r.firstAtom)},c=function(){var e=t.createLine.apply(t,arguments);return!!e&&(t.lines.push(e),e)},u=i.length,l=5,p=0;if(c()){var h=function e(){for(var r,h,f=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,d=0,y=0,m=f;m<u;){if(m>n)return;if(m==d){if(++y>l)throw Error("it may be dead loop on ".concat(m,"th atoms"))}else d=m,y=0;if("number"!=typeof(r=t.currentLine.appendAtom(i[m],m))){if(!1===r){if(h=a(!1),Number.isInteger(h)){if(h==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==Zt.IMMEDIATE_STOP)return Zt.IMMEDIATE_STOP;if(r=s(h),o(r),!c())return;e(r)}};return h(e)}}},{key:"recommit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lines,e=this.atoms,n=this.lines;t=n.slice(-t.length),this.rollbackLines(t.length);var r=e.findIndex((function(e){return e==t[0].firstAtom})),i=e.slice(r+1).findIndex((function(e){return e==t[t.length-1].lastAtom}))+r+1;return this.commit(r,i==e.length-1?void 0:i)}},{key:"getNumberingAtom",value:function(){var t=this.props,e=t.numbering.style,n=t.indent.firstLine,r=void 0===n?0:n,i=t.id,o=this.context,a=o.Measure,s=o.numbering,c=new a(e).defaultStyle;return P.a.createElement(st.Dynamic,it()({},c,{key:"numbering",className:"numbering",x:r,width:-r,children:function(){return s(i)}}))}},{key:"nextAvailableSpace",value:function(t){var n=x()(b()(e.prototype),"nextAvailableSpace",this).call(this,t);if(!n)return n;var r=n.width,i=n.left,o=void 0===i?0:i,a=n.right,s=void 0===a?r:a,c=this.props,u=c.indent,l=u.left,p=void 0===l?0:l,h=u.right,f=void 0===h?0:h,d=u.firstLine,y=void 0===d?0:d,m=c.numbering,g=0==this.lines.length;return n.clone({left:o+p+(g&&!m&&y||0),right:s-f})}},{key:"createLine",value:function(t){var e=this.nextAvailableSpace(t);if(!e)return e;var n=this.props,r=n.numbering,i=n.align,o=n.spacing,a=o.lineHeight,s=o.top,c=0==this.lines.length;return new this.constructor.Line({space:e,positioned:c&&r?[this.getNumberingAtom()]:[],top:c?s:void 0,lineHeight:a,align:i},{parent:this})}},{key:"createComposed2Parent",value:function(t,e){var n=t.height,r=t.width,i=t.anchor,o=t.topToBlockOffset,a=this.props,s=a.numbering,c=a.indent,u=c.left,l=void 0===u?0:u,p=c.right,h=void 0===p?0:p,f=c.firstLine,d=void 0===f?0:f,y=a.spacing.bottom,m=void 0===y?0:y,g=a.orphan,v=a.widow,b=a.keepWithNext,w=a.keepLines,x=1==this.lines.length;return P.a.createElement(ut,{className:"line",height:o+n+(e&&m||0),width:l+(x&&!s&&d||0)+r+h,pagination:{id:this.props.id,orphan:g,widow:v,keepWithNext:b,keepLines:w,i:this.lines.length,last:e},anchor:i},P.a.createElement(ut,{x:l+(x&&!s&&d||0),y:o,width:r,height:n},t.render(e)))}},{key:"enderWidth",get:function(){return this.atoms[this.atoms.length-1].props.width}},{key:"currentLine",get:function(){return 0==this.lines.length&&this.lines.push(this.createLine()),this.lines[this.lines.length-1]}}]),e}(en);p()(nn,"contextTypes",tn({},en.contextTypes,{Measure:j.a.func,numbering:j.a.func})),p()(nn,"propTypes",tn({},en.propTypes,{defaultStyle:j.a.object.isRequired})),p()(nn,"Line",function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"currentX",get:function(){return this.inlineSegments.currentX}}]),e}(Gt.Inline));var rn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"rollbackLines",value:function(t){x()(b()(e.prototype),"rollbackLines",this).call(this,t),this.computed.lastComposed.splice(-t)}},{key:"cancelUnusableLastComposed",value:function(t){var n=t.hash,r=t.changed,i=void 0===r?n!=this.props.hash:r;i&&(this.atoms=[],x()(b()(e.prototype),"cancelUnusableLastComposed",this).apply(this,arguments))}},{key:"appendLastComposed",value:function(){var t=this,e=this.lines;this.lines=[];var n=this.computed.lastComposed.findIndex((function(n,r){var i=e[r],o=t.createLine({height:n.props.height});if(!o)return!0;var a=o.props.space;return i.isFitTo(a)?(i=i.clone4Space(a),t.lines.push(i),t.context.parent.appendComposed(n),!1):(t.computed.lastComposed.splice(r),!0)}));return 0==n?(this.cancelUnusableLastComposed({changed:!0}),!1):(n>0&&this.commit(this.atoms.indexOf(e[n].firstAtom)),!0)}}]),e}(Yt(nn,{stoppable:!0}));function on(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 an(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?on(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):on(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var sn=W(T.dom.Text),cn=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 O()(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 Ze(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(an({},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 an({},this.measure.defaultStyle,{color:e,highlight:n,border:r,underline:i,strike:o})}}]),e}(sn);p()(cn,"contextTypes",an({},sn.contextTypes,{Measure:j.a.func}));var un=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"isAtomChanged",value:function(t){return!!x()(b()(e.prototype),"isAtomChanged",this).apply(this,arguments)||!Object(ye.shallowEqual)(t,this.props)}},{key:"render",value:function(){return 0==this.text.length?(this.appendComposed(an({},this.defaultStyle,{width:0,minWidth:0,"data-endat":0,children:""})),this.onAllChildrenComposed(),null):x()(b()(e.prototype),"render",this).call(this)}}]),e}(Yt(cn)),ln=n(26),pn=n.n(ln),hn=n(27),fn=n.n(hn),dn=n(28),yn=n.n(dn),mn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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 yn()(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 fn()(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(gn(f.x,n,r)&&gn(f.y,a,s)&&gn(f.x,i,o)&&gn(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}(pn.a),gn=function(t,e,n){return t>=e&&t<=n||t>=n&&t<=e};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 bn(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 wn=j.a.oneOf("ew,ns,nwse,nesw".split(",").reduce((function(t,e){return t.splice(0,0,e,"-"+e),t}),[])),xn=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return O()(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(ae,{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(Cn,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(Cn,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()(xn,"propTypes",{direction:wn,onResize:j.a.func.isRequired,spots:j.a.arrayOf(j.a.shape({x:j.a.number.isRequired,y:j.a.number.isRequired,direction:wn,width:j.a.number,height:j.a.number}))});var kn,On,Cn=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",bn({},p,{width:n,height:i,x:o-n/2,y:a-i/2,style:bn({fill:"white",stroke:"lightgray",strokeWidth:1,cursor:"".concat(c.replace("-",""),"-resize")},l)}))},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),"state",{rotating:!1}),n}return O()(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(ae,{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 En(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 jn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?En(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):En(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Pn,"propTypes",{x:j.a.number.isRequired,r:j.a.number,degree:j.a.number});var Sn=Object(T.whenSelectionChange)()((On=kn=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={},t}return O()(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:"shouldComponentUpdate",value:function(t){var e=t.selection;return this.props.selection!=e}},{key:"render",value:function(){var t=this.props,e=t.selection,n=t.children,r=t.rotate,i=t.scale,o=t.translate,a=this.context.editable,s=this.state.showFocus;if(!e||!a||!s)return P.a.createElement(ut,jn({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,k=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,O=f.rotatable,E=void 0===O?{x:u/2,y:l/2,degree:Math.ceil(100*y)/100}:O,j=f.focusableContent,S=void 0===j||j,A=f.movable,F=void 0===A||A,I=this.state,D=I.type,M=I.isAnchor,L=I.isEditableCursor,R=P.a.createElement(C.Fragment,null,P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement("path",{d:w,fill:"none",stroke:"lightgray"})),F?P.a.createElement(C.Fragment,null,!S&&h,P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement(ce,{isAnchor:M,onMove:function(t){return m(T.ACTION.Selection.MOVE(jn({},t,{id:d,type:D})))}},P.a.createElement("path",{d:w,fill:"white",fillOpacity:.01,cursor:"move"}))),S&&h):h,P.a.createElement(ut,{"data-nocontent":!0},E&&P.a.createElement(Pn,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}))}})),k&&P.a.createElement(xn,{spots:k,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(ut,L?{}:jn({scale:i,rotate:r},o),p.replace(h,R).get(0))}}]),e}(C.Component),p()(kn,"propTypes",{width:j.a.number,height:j.a.number,path:j.a.string,resizable:j.a.arrayOf(j.a.object),rotatable:j.a.shape({x:j.a.number.isRequired,y:j.a.number.isRequired,r:j.a.number,degree:j.a.number}),movable:j.a.bool,id:j.a.string,absolute:j.a.bool}),p()(kn,"contextTypes",{editable:j.a.any}),On));function An(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}var Tn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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,h=(l=void 0===l?{}:l).url,f=n.outline,d=void 0===f?{width:0}:f,y=n.fill,m=void 0===y?{fill:u}:y,g=n.rotate,v=n.scale,b=n.id,w=this.transform(this.getPath().clone()),x=w.width,k=w.height,O=w.rotate,C=w.translate,E=w.geometry;return P.a.createElement(Sn,{width:x,height:k,geometry:E,focusableContent:e,scale:v,rotate:O,translate:C,degree:g,id:b},P.a.createElement(ut,this.outlineBox,P.a.createElement(ut,{x:this.strokeWidth/2,y:this.strokeWidth/2},P.a.createElement(ut,{"data-nocontent":!0},P.a.createElement("path",it()({d:this.getPath().toString(),strokeWidth:this.strokeWidth,stroke:d.solidFill},m)),h&&P.a.createElement("image",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?An(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):An(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},this.contentBox,{x:o,y:s,xlinkHref:h,preserveAspectRatio:"none"}))),P.a.createElement(ut,{x:this.strokeWidth/2+o,y:this.strokeWidth/2+s,className:"content"},t))))}},{key:"getPath",value:function(){return D()((function(t){return new mn(t)}))(this.props.geometry)}},{key:"createFocusShape",value:function(t,e){var n=this.outlineBox,r=n.width,i=n.height,o=this.props,a=o.rotate,s=void 0===a?0:a,c=o.id;return P.a.createElement(Sn,{width:r,height:i,rotate:s,id:c,focusableContent:e,children:t})}},{key:"transform",value:function(t){var e=this.props,n=e.rotate,r=e.scale,i={};if(n){var o=t.bounds(),a=t.center(),s=a.x,c=a.y;t.rotate(n,s,c);var u=t.bounds();n="".concat(n," ").concat(s," ").concat(c),i.x=parseInt(o.left-u.left),i.y=parseInt(o.top-u.top),t.translate(i.x,i.y),t.origin={x:i.x,y:i.y}}r&&t.scale(r);var l=t.size(t.strokeWidth=this.strokeWidth);return{width:l.width,height:l.height,geometry:t,rotate:n,translate:i}}},{key:"strokeWidth",get:function(){var t=this.props.outline,e=(t=void 0===t?{}:t).width;return(void 0===e?0:e)||0}},{key:"contentBox",get:function(){var t=this.props.margin,e=t.right,n=void 0===e?0:e,r=t.left,i=void 0===r?0:r,o=t.top,a=void 0===o?0:o,s=t.bottom,c=void 0===s?0:s,u=this.getPath().size(),l=u.width,p=u.height,h=this.strokeWidth;return{width:l-h/2-n-i,height:p-h/2-a-c}}},{key:"outlineBox",get:function(){return this.getPath().size(this.strokeWidth)}}]),e}(C.Component),Fn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"getPath",value:function(){var t=this.props,e=t.width,n=t.height;return new mn("M0 0h".concat(e,"v").concat(n,"h").concat(-e,"z"))}}]),e}(Tn),In=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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 mn("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}(Tn),Dn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),e}(In);function Mn(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 Ln=Yt(N(T.dom.Shape)),Rn=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 O()(e,t),y()(e,[{key:"getSpace",value:function(){return this.__getSpace(this.geometry)}},{key:"createComposed2Parent",value:function(){var t=P.a.createElement(C.Fragment,null,[P.a.cloneElement(this.positionLines(this.lines),{key:"content"})].concat(this.anchors.map((function(t,e){return P.a.cloneElement(t,{key:e})}))).filter((function(t){return!!t})).sort((function(t,e){var n=t.props.z,r=void 0===n?0:n,i=e.props.z;return r-(void 0===i?0:i)})));return P.a.cloneElement(this.geometry.createComposedShape(t),{className:"frame","data-frame":this.uuid})}},{key:"geometry",get:function(){return this.__getGeometry(this.computed.composedUUID)}}]),e}(Zt);function _n(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 Nn(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?_n(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):_n(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(Rn,"displayName",Ln.displayName),p()(Rn,"propTypes",Ln.propTypes),p()(Rn,"defaultProps",Ln.defaultProps),p()(Rn,"contextTypes",function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Mn(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Mn(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},Zt.contextTypes,{editable:j.a.any})),p()(Rn,"custom",Tn),p()(Rn,"rect",Fn),p()(Rn,"ellipse",In),p()(Rn,"circle",Dn);var Wn=Yt(W(T.dom.Image)),zn=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 O()(e,t),y()(e,[{key:"getShape",value:function(){var t=this.props,e=t.width,n=t.height,r=t.id;return new Rn(Nn({width:e,height:n,id:r},this.props.outline,{margin:{},children:null}),{context:this.context})}},{key:"createComposed2Parent",value:function(){var t=this.getShape().geometry,e=t.contentBox,n=e.width,r=e.height,i=this.props.src,o=P.a.createElement(yt,{width:n,height:r,xlinkHref:i,preserveAspectRatio:"none"});return t.createComposedShape(o,!1)}}]),e}(Wn);p()(zn,"contextTypes",Nn({},Wn.contextTypes,{editable:j.a.any}));var Bn,qn,Gn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(t){var e=this.props,n=e.width,r=e.indent;return P.a.createElement(ut,{width:n,height:t.props.height},P.a.cloneElement(t,{x:r}))}}]),e}(N(T.dom.Table));function 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 Hn(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}var Xn=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 O()(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()(Xn,"Rank",(qn=Bn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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(Hn({},e.props,{height:t})).render())}(t,P.a.cloneElement(s,{isLastRankOfRow:e,isFirstRowInPage:this.layouted.isFirstRowInPage,table:o.findLast((function(t){return"table"==t.props["data-type"]})).props["data-content"]}),o);this.layouted.replaceWith(c)}catch(t){}}},{key:"insertAt",value:function(t,e){this.slots[e]=t}},{key:"render",value:function(){var t=this.props,e=t.children,n=void 0===e?[]:e,r=t.cols,i=t.height,o=t.isLastRankOfRow,a=t.isFirstRowInPage,c=t.table,u=t.row,l=(t.space,s()(t,["children","cols","height","isLastRankOfRow","isFirstRowInPage","table","row","space"]));return P.a.createElement(ut,it()({height:i},l),n.map((function(t,e){return P.a.cloneElement(t.clone({height:i,colIndex:e,table:c,row:u,isLastRankOfRow:o,isFirstRowInPage:a}).createComposed2Parent(),Hn({},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()(Bn,"displayName","rank"),qn));var Yn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"shouldContinueCompose",value:function(){return!0}}]),e}(Yt(Xn,{stoppable:!0,continuable:!0})),Qn=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))},Vn=function(t){var e=t.top,n=t.left,r=t.right,i=t.bottom,o=t.width,a=t.height,c=s()(t,["top","left","right","bottom","width","height"]);return P.a.createElement(ut,c,P.a.createElement(Qn,it()({},e,{y1:0,y2:0,x1:0,x2:o})),P.a.createElement(Qn,it()({},i,{y1:a,y2:a,x1:0,x2:o})),P.a.createElement(Qn,it()({},r,{x1:o,x2:o,y1:0,y2:a})),P.a.createElement(Qn,it()({},n,{x1:0,x2:0,y1:0,y2:a})))},Kn=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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),Jn=function(t){return P.a.createElement(Kn,it()({},t,{cursor:"e-resize"}))},Zn=function(t){return P.a.createElement(Kn,it()({},t,{cursor:"s-resize"}))};function $n(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 tr,er,nr,rr,ir=function(t){function e(){var t;return f()(this,e),(t=g()(this,b()(e).apply(this,arguments))).state={resizing:!1},t}return O()(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(xn,{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(oe,null,P.a.createElement("line",it()({},function(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?$n(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$n(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}({},l,(t={},p()(t,c+"1","-100%"),p()(t,c+"2","100%"),t)),{stroke:"lightgray",strokeWidth:1,strokeDasharray:"5,5"}))))}}]),e}(C.Component),or=function(t){return P.a.createElement(ir,it()({},t,{direction:"ew",cursor:"col-resize"}))},ar=function(t){return P.a.createElement(ir,it()({},t,{direction:"-ns",cursor:"row-resize"}))},sr=Object(T.connect)()((er=tr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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(Vn,this.props),e&&P.a.createElement(Zn,null),n&&P.a.createElement(ar,{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(Jn,{x1:0,x2:0,y1:0,y2:c,onSelect:function(){return u(T.ACTION.Selection.SELECT(i))}}),P.a.createElement(or,{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(Vn,this.props)}}]),e}(C.Component),p()(tr,"contextTypes",{editable:j.a.any}),er));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}function ur(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}var lr,pr=N(T.dom.Cell),hr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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(ur({},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,ur({},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}(Ve);function fr(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 dr(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?fr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):fr(n).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}p()(hr,"displayName",((lr=Ve.displayName.split("-")).splice(-1,1,pr.displayName.split("-").pop()),lr.join("-"))),p()(hr,"defaultProps",ur({},pr.defaultProps,{createLayout:Ve.defaultProps.createLayout})),p()(hr,"Layout",(rr=nr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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}(Ve.Layout),p()(nr,"displayName","frame-cell"),rr)),p()(hr,"Edges",sr);var yr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"createComposed2Parent",value:function(t){var e=this,n=t.props,r=n.width,i=n.height,o=n.geometry,a=this.props,s=a.margin,c=(s=void 0===s?{}:s).left,u=void 0===c?0:c,l=s.right,p=void 0===l?0:l,h=s.top,f=void 0===h?0:h,d=s.bottom,y=void 0===d?0:d,m=a.wrap,g=a.x,v=a.y;return this.width=r+=u+p,this.height=i+=f+y,P.a.createElement(ut,{children:t,anchor:function(n){var a={width:e.width,height:e.height},s=n.anchor(dr({align:"left"},g),a,n),c=n.anchor(dr({align:"top"},v),a,n);s-=u,c-=f,o&&o.origin&&(s-=o.origin.x,c-=o.origin.y);var l=function(t){if(t)return"Square"==m.mode||"TopAndBottom"==m.mode?function(n){return t.call(e,n,{bounds:function(){return{left:s,top:c,right:s+r,bottom:c+i}}})}:function(n){return t.call(e,n,o.clone().translate(s,c))}}(m&&("function"==typeof m?m:e["wrap".concat(m.mode)]));return P.a.createElement(ut,{x:s,y:c,wrap:l,geometry:{x:s,y:c,width:r,height:i},"data-content":e.props.id,"data-type":e.getComposeType()},P.a.createElement(ut,{x:u,y:f},t))}})}},{key:"applyWrapText",value:function(t,e,n,r){return function i(o){switch(o){case"left":return{x:n,width:e-n};case"right":return{x:t,width:r-t};case"largest":return i(n-t>=e-r?"left":"right");default:return{x:n,width:r-n}}}(this.props.wrap.wrapText)}},{key:"wrapSquare",value:function(t,e){var n=t.x1,r=t.x2,i=t.y2,o=t.y1,a=void 0===o?i:o,s=this.props,c=s.wrap,u=(c.mode,c.wrapText,s.margin),l=(u=void 0===u?{}:u).right,p=void 0===l?0:l,h=u.left,f=void 0===h?0:h,d=e.bounds(),y=d.left,m=d.top,g=d.right,v=d.bottom;if(i>=m&&i<=v&&!(r<=y||n>=g)&&a!==v)return Object.assign(this.applyWrapText(n,r,y-f,g+p),{y:v})}},{key:"wrapTight",value:function(t,e){var n=this.props.margin,r=n.left,i=void 0===r?0:r,o=n.right,a=void 0===o?0:o,s=t.x1,c=t.x2,u=t.y2,l=e.intersects({x1:s,x2:c,y2:u,y1:u}).sort((function(t,e){return t.x-e.x}));if(l.length>2&&l.splice(1,l.length-1-1),l.length>0)return this.applyWrapText(s,c,l[0].x-i,l.pop().x+a)}},{key:"wrapThrough",value:function(t,e){return this.wrapTight.apply(this,arguments)}},{key:"wrapClear",value:function(t,e){var n=t.x1,r=t.x2,i=t.y2,o=t.y1,a=void 0===o?i:o,s=e.bounds(),c=(s.left,s.top),u=(s.right,s.bottom);if(i>=c&&i<=u&&a!==u)return{x:n,width:r-n,y:u,type:"clear"}}},{key:"wrapTopAndBottom",value:function(){return this.wrapClear.apply(this,arguments)}}]),e}(N(T.dom.Anchor)),mr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"getComposeType",value:function(){return this.props.type||x()(b()(e.prototype),"getComposeType",this).call(this)}},{key:"appendComposed",value:function(t){var n=t.props,r=n.width,i=n.height,o=n.minWidth,a=n.x,c=n.y,u=n.blockOffset,l=n.wrap,p=n.anchor,h=n.descent,f=n.pagination,d=n.mergeOpportunity;s()(n,["width","height","minWidth","x","y","blockOffset","wrap","anchor","descent","pagination","mergeOpportunity"]);return x()(b()(e.prototype),"appendComposed",this).call(this,P.a.createElement(ut,{width:r,height:i,minWidth:o,wrap:l,anchor:p,descent:h,pagination:f,x:a,y:c,blockOffset:u,mergeOpportunity:d,children:P.a.cloneElement(t,{x:void 0,y:void 0,wrap:void 0,anchor:void 0,blockOffset:void 0,mergeOpportunity:void 0})}))}}]),e}(Y(N(T.dom.Container),!1)),gr=U.enable(N.enable(T.dom,{Document:Ue,Section:Ve,Paragraph:rn,Text:un,Image:zn,Table:Gn,Row:Yn,Cell:hr,Frame:Zt,Shape:Rn,Anchor:yr,Container:mr,Template:te}),{Group:ut}),vr=Yt.enable(gr,{Group:ut}),br=n(18),wr=n.n(br);function xr(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 kr=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?xr(n,!0).forEach((function(e){p()(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):xr(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}()),Or={get:function(){return kr.get.apply(kr,arguments)},get names(){return kr.names().sort()},release:function(){return this.iterateLocal((function(t){return URL.releaseObjectURL(t.src)})),kr.families={},this},iterateLocal:function(t){kr.names().forEach((function(e){kr.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=wr.a.create(Buffer.from(r));i?i.fonts?e(Array.from(i.fonts).map((function(t){return kr.put(t,{src:n})}))):e(kr.put(i,{src:n})):e()}catch(t){e()}},onerror:function(t){return e()}}).readAsArrayBuffer(t)}))}))).then((function(e){return t.value="",Pr(e)})).finally(jr)},fromPath:function(t){var e=function(t){return new Promise((function(e){wr.a.open(t,(function(n,r){n?e():r.fonts?e(Array.from(r.fonts).map((function(e){return kr.put(e,{src:t})}))):e(kr.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(Pr(t))}),i)})):n(30)().then((function(t){return Promise.all(t.map(e).filter((function(t){return!!t})))})).then((function(t){return r(Pr(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 kr.put(wr.a.create(Buffer.from(t)),{src:n})}))}))})))})).finally(jr)},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 kr.put(wr.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=Or.fromBrowser;Or.fromBrowser=function(){return r.call.apply(r,[Or].concat(Array.prototype.slice.call(arguments))).finally((function(){return Or.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)}))}}},Cr=Or;function Pr(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 Er=null;function jr(){Er||((Er=document.createElement("style")).id="we_edit_web_fonts",document.body.appendChild(Er));var t=Array.from(Er.sheet.rules).map((function(t){return t.style.fontFamily}));kr.names().filter((function(e){return!t.includes(e)})).forEach((function(t){var e=kr.get(t),n=e.familyName,r=e.src;r&&n&&Er.sheet.addRule("@font-face",'font-family:"'.concat(n,'";src: local("').concat(n,'"), url("').concat(r,'");'))}))}var Sr=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}(),Ar=null,Tr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"lineHeight",value:function(){if(!Ar){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>'),(Ar=t.querySelector("text")).setStyle=D()((function(t){return Ar.style=t}))}Ar.setStyle(this.cssStyle()),Ar.firstChild.data="Ä";var e=Ar.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 Ar.setStyle(this.cssStyle()),Ar.firstChild.data=t,Ar.getBBox().width}}]),e}(Sr),Fr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"getFont",value:function(){return Cr.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!Cr.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&&!!Cr.get(e)}),!0))return Promise.resolve(r());if(A.a&&"string"==typeof t&&n(24).existsSync(t))return Cr.fromPath(t).finally(r);switch(we()(t)){case"string":return Cr.fromRemote(t).finally(r);case"function":return Promise.all(e.map((function(e){return Cr.load(t,e)}))).finally(r);default:return Promise.resolve(r())}}}]),e}(Sr),Ir=n(29),Dr=n.n(Ir);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}var Lr=/translate\((.*)\s+(.*)\)/,Rr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(e,t),y()(e,[{key:"output",value:function(t){t.pipe(new Dr.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(Lr),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 _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}p()(Rr,"defaultProps",function(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}({},T.Emitter.Format.Base.defaultProps,{representation:"pagination"}));var Nr=function(t){function e(){return f()(this,e),g()(this,b()(e).apply(this,arguments))}return O()(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}(Rr);function Wr(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}p()(Nr,"displayName","SVG"),p()(Nr,"propTypes",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}({},Rr.propTypes,{pageGap:j.a.number,pgColor:j.a.string})),p()(Nr,"defaultProps",{type:"svg",name:"SVG Document",ext:"svg",representation:"pagination",pageGap:24,pgColor:"white"}),n.d(e,"default",(function(){return Gr})),n.d(e,"Viewers",(function(){return gr})),n.d(e,"Editors",(function(){return vr})),n.d(e,"FontManager",(function(){return Cr})),n.d(e,"Measure",(function(){return o})),n.d(e,"Composed",(function(){return r})),n.d(e,"composable",(function(){return i})),n.d(e,"editable",(function(){return Yt})),n.d(e,"Resizable",(function(){return xn})),n.d(e,"Movable",(function(){return ce})),n.d(e,"Rotatable",(function(){return Pn})),n.d(e,"Top",(function(){return oe}));var zr=Fr,Br=Tr,qr=function(t){return function(e){function n(){return f()(this,n),g()(this,b()(n).apply(this,arguments))}return O()(n,e),y()(n,[{key:"getFont",value:function(){return x()(b()(n.prototype),"getFont",this).call(this)||Cr.get(t)}}]),n}(zr)},Gr=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 O()(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?zr:Br),this.Measure){case zr:this.Measure=qr(n);var o=this.context.doc.getFontList(),a=function(e){var r=Cr.names;r&&r.length&&(Cr.get(n)||(console.warn("default font[".concat(n,"] can't be loaded, set ").concat(r[0]," as default")),t.Measure=qr(r[0]))),e&&console.error(e.message),t.setState({fontsLoaded:!0})};zr.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?gr:e,r=t.EditorTypes,i=void 0===r?vr: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?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}({ViewerTypes:n,EditorTypes:i},o,{type:void 0}))}}]),e}(T.Representation.Base);p()(Gr,"displayName","pagination"),p()(Gr,"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()(Gr,"defaultProps",{type:"pagination",defaultFont:"Arial"}),p()(Gr,"childContextTypes",{Measure:j.a.func}),p()(Gr,"contextTypes",{doc:j.a.object}),p()(Gr,"Output",Rr),function(t){var e=t.install.bind(t);t.install=function(){e.apply(void 0,arguments),Nr.install()};var n=t.uninstall.bind(t);t.uninstall=function(){n.apply(void 0,arguments),Nr.uninstall()}}(Gr),Gr.install()}]);
2//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZlwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInByb3AtdHlwZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVyblwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3ZS1lZGl0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHNcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJtZW1vaXplLW9uZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlY29tcG9zZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY29uc3RydWN0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2ZcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJmb250a2l0XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiaXMtbm9kZVwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInJlYWN0LXdheXBvaW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3REZXN0cnVjdHVyaW5nRW1wdHlcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvclwiIiwid2VicGFjazovLy9leHRlcm5hbCBcImxpbmVicmVha1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImZzXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwic3ZncGF0aFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcInNpbXBsaWZ5LXBhdGhcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJzdmctcGF0aC1jb250b3Vyc1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcImh0bWxwYXJzZXIyXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiZ2V0LXN5c3RlbS1mb250c1wiIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb21wb3NlZC1hbGwtdHJpZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvaGFzQ2hpbGQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2hhc1BhcmVudEFuZENoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9ub0NoaWxkLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9yZWNvbXBvc2FibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xvY2F0YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvc3RvcHBhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9jb250aW51YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9sYXllci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL2dyb3VwLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvY2FudmFzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2NvbnN0cmFpbnQtc3BhY2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy90b29sL2dlb21ldHJ5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2FibGUvbGF5b3V0L2Jsb2NrL2FuY2hvcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9vcnBoYW4tY29udHJvbGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9ibG9jay9jb2x1bW5hYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvYmxvY2svYmFsYW5jZWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvbG5saW5lLXNwYWNlLXNlZ21lbnRzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL21lcmdlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5saW5lL3N0b3J5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zYWJsZS9sYXlvdXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2xheW91dC9pbmxpbmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NhYmxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2ZyYW1lLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3RlbXBsYXRlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9vdmVybGF5LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvc2VsZWN0aW9uLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL2N1cnNvci1zaGFwZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9zZWxlY3Rpb24tc3R5bGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvd2hlbi1zZWxlY3Rpb24tY2hhbmdlLW5vdGlmaWVyLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Bvc2l0aW9uaW5nL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvcmVhY3QtcG9zaXRpb25pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcG9zaXRpb25pbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvY29tcG9zZS1tb3JlLXRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvZGVmaW5lLXNoYXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9kb2N1bWVudC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvd29yZHdyYXAvbGluZS1icmVhay5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9wYXJhZ3JhcGguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL3Rvb2wvcGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yZXNpemFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL2ZvY3VzLXNoYXBlLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL3NoYXBlL3NoYXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9zaGFwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9pbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS90YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9yb3cuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vY2VsbC9lZGdlcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9jZWxsL3NlbGVjdG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NlbGwvcmVzaXplci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9jZWxsL2VkaXRhYmxlLWVkZ2VzLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NlbGwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9kb20vYW5jaG9yLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZG9tL2NvbnRhaW5lci5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL2RvbS9lZGl0L2luZGV4LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3dlLWVkaXQtcmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi9zcmMvZm9udHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9tZWFzdXJlL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9tZWFzdXJlL3N2Zy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL21lYXN1cmUvZm9udC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL291dHB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy93ZS1lZGl0LXJlcHJlc2VudGF0aW9uLXBhZ2luYXRpb24vc3JjL291dHB1dC9zdmcuanMiLCJ3ZWJwYWNrOi8vLy4vcGFja2FnZXMvd2UtZWRpdC1yZXByZXNlbnRhdGlvbi1wYWdpbmF0aW9uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJob3N0Iiwib25BbGxDaGlsZHJlbkNvbXBvc2VkIiwiQSIsImFscmVhZHkiLCJhcmd1bWVudHMiLCJtZW1vaXplIiwiY2hpbGRyZW4iLCJwcm9wcyIsIkNoaWxkcmVuIiwidG9BcnJheSIsImNvbXB1dGVkIiwiY29tcG9zZWQiLCJhbGxDb21wb3NlZCIsInVuZGVmaW5lZCIsImRlYnVnIiwic3RhdGUiLCJwYXJlbnQiLCJ0aGlzIiwiY2hpbGRyZW5BcnJheSIsImxpbmUiLCJjdXJyZW50IiwiY29udGV4dCIsImNvbnRlbnQiLCJ0eXBlIiwiZm4iLCJhIiwiZ2V0Q29tcG9zZVR5cGUiLCJkaXNwbGF5TmFtZSIsImNhcGFibGUiLCJzcGxpdCIsImluY2x1ZGVzIiwiY29udGV4dFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsIk1vZGVsVHlwZXMiLCJjaGlsZENvbnRleHRUeXBlcyIsIlN1cGVyIiwiSGFzQ2hpbGQiLCJuZXh0QXZhaWxhYmxlU3BhY2UiLCJhcHBlbmRDb21wb3NlZCIsImNyZWF0ZUNvbXBvc2VkMlBhcmVudCIsImhhc2giLCJjaGFuZ2VkIiwiSGFzUGFyZW50QW5kQ2hpbGQiLCJSZWNvbXBvc2FibGUiLCJiIiwibmV4dCIsImNoYW5nZWRJbmRleCIsImZpbmRJbmRleCIsIl8iLCIkIiwiaWQiLCJzbGljZSIsIm1hcCIsImxhc3RDb21wb3NlZCIsInB1c2giLCJjb21wb3NlZFVVSUQiLCJEYXRlIiwibm93IiwiaXNBbGxDaGlsZHJlbkNvbXBvc2VkIiwic2hvdWxkQ29udGludWVDb21wb3NlIiwiY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQiLCJpc0F0b21Db2xsZWN0b3IiLCJpc0F0b21DaGFuZ2VkIiwiZm9yRWFjaCIsImxlbmd0aCIsImFwcGVuZGVkIiwiYXBwZW5kTGFzdENvbXBvc2VkIiwiY29uc29sZSIsImV4dHJhY3QiLCJpc0F0b20iLCJpc0lubGluZUNvbnRhaW5lciIsIkxvY2F0YWJsZSIsIm1vdW50IiwiZWxlbWVudCIsIlJlYWN0IiwiaXNWYWxpZEVsZW1lbnQiLCJjbG9uZUVsZW1lbnQiLCJwcm9wVHlwZXMiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJudW1iZXIiLCJpc1JlcXVpcmVkIiwiZnVuYyIsInVubW91bnQiLCJnZXRDb21wb3NlciIsIkxvY2F0b3JpemUiLCJjb21wb3NlcnMiLCJNYXAiLCJzZXQiLCJhbHdheXMiLCJzdG9wcGFibGUiLCJFcnJvciIsIlRleHQiLCJmaWxsIiwid2hpdGVTcGFjZSIsImNvbG9yIiwiaGlnaGxpZ2h0IiwiYm9yZGVyIiwidW5kZXJsaW5lIiwic3RyaWtlIiwiZGVzY2VudCIsImhlaWdodCIsIm1pbldpZHRoIiwid2lkdGgiLCJ5IiwiYmxvY2tPZmZzZXQiLCJtZXJnZU9wcG9ydHVuaXR5Iiwib3RoZXJzIiwiYmFja2dyb3VuZCIsIk1hdGgiLCJjZWlsIiwieCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwiZGVjb3JhdGlvbiIsInkxIiwieDIiLCJ5MiIsInN0cmlrZWxpbmUiLCJzdHlsZSIsInVzZXJTZWxlY3QiLCJjdXJzb3IiLCJDb21wb25lbnQiLCJMYXllciIsImFjdGl2ZSIsIm9wYWNpdHkiLCJvbkRvdWJsZUNsaWNrIiwiZSIsInoiLCJ3aGVuU2VsZWN0aW9uQ2hhbmdlIiwic2VsZWN0aW9uIiwibGF5ZXIiLCJlZGl0YWJsZSIsImZpbHRlciIsInNvcnQiLCJmaW5kIiwiYW55IiwiR3JvdXAiLCJpbm5lclJlZiIsInJvdGF0ZSIsIm1hcmdpbiIsImluZGV4IiwiY2hpbGRJbmRleCIsImdlb21ldHJ5IiwiYmFzZWxpbmUiLCJsaW5lRGVzY2VudCIsImlzTGFzdFJhbmtPZlJvdyIsImlzRmlyc3RSb3dJblBhZ2UiLCJjb250ZW50V2lkdGgiLCJ3cmFwIiwicGFnaW5hdGlvbiIsImFuY2hvciIsIm5hbWVkIiwic3BhY2VIZWlnaHQiLCJkaXNwYXRjaCIsIkkiLCJyZWYiLCJ0cmFuc2Zvcm0iLCJwYXJzZUludCIsImtleXMiLCJ4MSIsImNvbnN0cnVjdG9yIiwiQ29udGFpbmVyIiwiQ29tcG9zZWREb2N1bWVudENhbnZhcyIsInBhZ2VzIiwicGFnZUdhcCIsInBhZ2UiLCJyZWR1Y2UiLCJzaXplIiwiYXNzaWduIiwibWF4IiwiZG9jdW1lbnQiLCJtZSIsInNjYWxlIiwicHJlY2lzaW9uIiwicGFwZXIiLCJfX3NlcXVlbnRpYWxDb21wb3NlIiwiZ2V0Q29tcG9zZWQiLCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwidmlld0JveCIsInBvc2l0aW9uUGFnZXMiLCJjYW52YXNXaWR0aCIsIm1lZGlhIiwicG9zaXRpb25lZCIsImNsYXNzTmFtZSIsImxhc3QiLCJoZWlnaHRPZkxhc3QiLCJjb21wb3NlZEhlaWdodCIsInciLCJzdmciLCJxdWVyeVNlbGVjdG9yIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYXJyYXlPZiIsIlNtYXJ0U2hvdyIsImRpc3BsYXkiLCJmaXJlT25SYXBpZFNjcm9sbCIsIm9uRW50ZXIiLCJzZXRTdGF0ZSIsIm9uTGVhdmUiLCJQYXBlciIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsIm1hcmdpbldpZHRoIiwibWluIiwiSW1hZ2UiLCJTaGFwZSIsIlNwYWNlIiwic291cmNlIiwibW9kaWZpZXIiLCJlZGdlcyIsImJhc2UiLCJvZmZzZXQiLCJhbGlnbiIsInYiLCJ0aGF0IiwiY29scyIsImlzSW5saW5lU2l6ZURpZmZlcmVudCIsIlBvaW50IiwiUmVjdCIsImgiLCJjbG9uZSIsImVxdWFscyIsInRvU3RyaW5nIiwiZiIsImFkZCIsInN1YnRyYWN0IiwiaXNaZXJvIiwidGFrZVBvaW50T3JBcmdzIiwiYXJnMSIsImFyZzIiLCJmcm9tUmVjdCIsImRpZmYiLCJpc0VtcHR5Iiwic2V0UmVjdCIsInNldEJvdW5kcyIsIm90aGVyIiwiY2VudGVyIiwiY29weUZyb20iLCJ0cmFuc2xhdGUiLCJ1bmlvbiIsImV4cGFuZFRvQ29udGFpbiIsImNvbnRhaW5zIiwiaW50ZXJzZWN0IiwicmVzdHJpY3RUbyIsImludGVyc2VjdHMiLCJleHBhbmRUb0ludGVnZXJzIiwiZmxvb3IiLCJ4c2NsIiwieXNjbCIsInRyYW5zbGF0ZUluc2lkZSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzdWx0IiwiYmxlbmQiLCJyZWN0Iiwic2NhbGFyIiwiaW5mbGF0ZSIsInhBZGoiLCJ5QWRqIiwiaW5mbGF0ZUZpeGVkIiwiZml4ZWQiLCJGbG93IiwiYW5jaG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJmaXJzdExpbmUiLCJjb25maWd1cmFibGUiLCJsaW5lcyIsImxhc3RMaW5lIiwidmFsdWVzIiwidG90YWxMaW5lcyIsImdldFNwYWNlIiwiY29udGVudEhlaWdodCIsImF2YWlsYWJsZUJsb2NrU2l6ZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJ3cmFwcGVlcyIsIkgiLCJzcGFjZSIsImN0eCIsInJlcXVpcmVkQmxvY2tTaXplIiwiYWxsb3dPdmVyZmxvdyIsIkNvbnN0cmFpbnRTcGFjZSIsImZyYW1lIiwiZmluZElubGluZVNlZ21lbnRzIiwiZXhjbHVzaXZlIiwic2VnbWVudHMiLCJvcHMiLCJzcGxpY2UiLCJpc0FuY2hvcmVkIiwiZXhjbHVkZXMiLCJjb2xsZWN0ZWQiLCJibG9ja3MiLCJBcnJheSIsImlzQXJyYXkiLCJjbGVhcnMiLCJ3cmFwZWVzIiwiaW5pdCIsInJlY29tcG9zZSIsImRlYWRMb29wIiwibGFzdExpbmVzIiwibGFzdEFuY2hvcnMiLCJsYXN0Q29sdW1ucyIsImNvbHVtbnMiLCJyb2xsYmFjayIsInJlY29tcG9zaW5nIiwiZ2V0UGFyYWdyYXBoSWQiLCJSZWFjdFF1ZXJ5IiwiZmluZEZpcnN0IiwiYXR0ciIsImN1cnJlbnRQYXJhZ3JhcGgiLCJjdXJyZW50UGFyYWdyYXBoTGluZXMiLCJwYXJhZ3JhcGhPZkxpbmUiLCJyZWNvbW1pdCIsImVycm9yIiwiQiIsImRvbSIsImJhbGFuY2UiLCJiYWxhbmNlVGhyZXNob2xkIiwic2hhcGUiLCJpbmhlcml0RXhjbHVzaXZlcyIsIkFuY2hvcmFibGUiLCJJTU1FRElBVEVfU1RPUCIsImFuY2hvclBsYWNlZCIsImFuY2hvcklkIiwiZmlyc3QiLCJwYXJlbnRzIiwiYW5jaG9yZWQiLCJwYXJhZ3JhcGgiLCJsaW5lWFkiLCJjaGFyYWN0ZXIiLCJmaW5kRmlyc3RBbmRQYXJlbnRzIiwiWCIsIl9faXNEaXJ0eUluIiwicmVjb21wb3NpbmdMaW5lcyIsInBvcCIsInJlbW92aW5nQW5jaG9ySWRzIiwicmVtb3ZlZExpbmVzIiwicmVtb3ZlZEFuY2hvcnMiLCJmbGF0IiwiaW5kZXhPZiIsInJlbW92ZWRXcmFwcGVlc0FmZmVjdGVkTGF5b3V0ZWRTcGFjZSIsImlzSW50ZXJzZWN0IiwiY3VycmVudENvbHVtbiIsIk9ycGhhbkNvbnRyb2xhYmxlIiwicHJldiIsInByZXZMYXlvdXQiLCJwaWQiLCJnZXRMaW5lUGFyYWdyYXBoSWQiLCJmaW5kTGFzdEluZGV4Iiwid2lkb3ciLCJvcnBoYW4iLCJrZWVwTGluZXMiLCJzaG91bGRLZWVwTGluZXNXaXRoIiwibGluZUNvdW50Iiwib3JwaGFuQ291bnQiLCJyb2xsYmFja0xpbmVzIiwic2hvdWxkS2VlcFdpdGhOZXh0Iiwia2VlcFdpdGhOZXh0IiwiQ29sdW1uYWJsZSIsImNyZWF0ZUNvbHVtbiIsImNvbHVtbiIsIkNvbHVtbkNoaWxkcmVuIiwibWF4SGVpZ2h0IiwiQ29udHJhaW50U3BhY2UiLCJoYXNNb3JlQ29sdW1uIiwic3RhcnRJbmRleCIsIm1zZyIsImVuZEluZGV4IiwiaiIsInRhcmdldCIsIm5leHRDb2x1bW4iLCJQcm94eSIsIm9iaiIsInByb3AiLCJpc0NvbmNhdFNwcmVhZGFibGUiLCJpdGVtcyIsInVuc3VwcG9ydCIsIkJhbGFuY2VhYmxlIiwiYmFsYW5jZWFibGUiLCJhYnMiLCJhbnlCYWxhbmNlIiwiZXF1YWxCYWxhbmNlIiwiY29sSGVpZ2h0IiwidG90YWxXaWR0aCIsInRvdGFsSGVpZ2h0IiwiSW5saW5lU2VnbWVudHMiLCJJbmxpbmVTZWdtZW50IiwiYlNhbWUiLCJyZWxheW91dCIsImF0b21zIiwibGVuIiwic2VnbWVudCIsIml0ZW0iLCJpc1RleHQiLCJhbGwiLCJmaW5kTGFzdCIsImF0b20iLCJtdXN0IiwiYXZhaWxhYmxlV2lkdGgiLCJsb2NhdGVkIiwiTWVyZ2UiLCJwaWVjZSIsInBpZWNlUGF0aCIsInBhdGgiLCJiVGV4dCIsImpvaW4iLCJ0cnVua1BhdGgiLCJ0cnVuayIsIm1lcmdlVHJ1bmsiLCJwaWVjZXMiLCJ0ZXh0cyIsIm1lcmdlZCIsInJlZHVjZVJpZ2h0IiwiY2hpbGQiLCJnZXRNZXJnZWQiLCJpbmZvIiwidGVzdCIsImlkcyIsIm9ubHkiLCJTdG9yeSIsImFsaWduZWQiLCJncm91cHMiLCJ3b3JkcyIsImdyb3VwIiwiX2kiLCJfYSIsImlzTGFzdCIsImZyb20iLCJyZXZlcnNlIiwiaXNXaGl0ZXNwYWNlIiwiZW5kaW5nV2hpdGVzcGFjZXMiLCJyZW5kZXIiLCJ3b3Jkc1dpZHRoIiwianVzdGlmaWVkIiwic3RhdHVzIiwid2hpdGVzcGFjZXMiLCJ3aGl0ZXNwYWNlV2lkdGgiLCJ3b3JkIiwianVzdGlmeSIsIkJsb2NrIiwiSW5saW5lIiwidG9wVG9CbG9ja09mZnNldCIsImlubGluZVNlZ21lbnRzIiwiZmlyc3RBdG9tIiwiJGF0b20iLCIkYW5jaG9yIiwicGxhY2Vob2xkZXIiLCJyZXBsYWNlIiwiYXBwZW5kQW5jaG9yQXRvbSIsIm5ld0hlaWdodCIsInNob3VsZFJlbGF5b3V0IiwicmVsYXlvdXRlZCIsImdldExpbmVIZWlnaHQiLCJsaW5lSGVpZ2h0IiwidGV4dEhlaWdodCIsImJMYXN0TGluZSIsImxpbmVUb3AiLCJjb21wb3NhYmxlIiwibG9jYXRhYmxlIiwiY29udGludWFibGUiLCJyZWNvbXBvc2FibGUiLCJTdG9wcGFibGUiLCJDb250aW51YWJsZSIsImVuYWJsaWZ5IiwidGFyZ2V0cyIsImVuYWJsZWQiLCJrIiwiTm9DaGlsZCIsImVuYWJsZSIsIkZyYW1lIiwiTGF5b3V0IiwidXVpZCIsIl9fZ2V0U3BhY2UiLCJwb3NpdGlvbkxpbmVzIiwidmVydEFsaWduIiwiYWxpZ25ZIiwiejEiLCJZIiwieTAiLCJsaW5lSW5kZXgiLCJFZGl0YWJsZUZyYW1lIiwiX19fY3JlYXRlQ29tcG9zZWQyUGFyZW50IiwibmV4dFByb3BzIiwiaXNJbmxpbmVTaXplQ2hhbmdlZCIsIl9jYW5jZWxDaGFuZ2VkUGFydCIsIl9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkIiwiY2hpbGRyZW5OZWVkUmVjb21wb3NlIiwiZmlyc3RMaW5lTmVlZFJlY29tcG9zZSIsImNoaWxkSWRPZiIsInJlbW92ZUZyb20iLCJsYXN0TGluZU9mQWxsQ2hpbGRyZW5Db21wb3NlZCIsImNvbXBvc2VyIiwibGFzdElkIiwicmVtb3ZlZCIsIlVzZSIsImNvbXBvc2VkVGVtcGxhdGUiLCJnZXRDb21wb3NlZFRlbXBsYXRlIiwieGhyZWYiLCJUZW1wbGF0ZSIsIm1hc3RlciIsIlRvcCIsImlnbm9yZUV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwiZWwiLCJvbk1vdXNlRG93biIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZVVwIiwiY3JlYXRlUG9ydGFsIiwidXNlUmVsYXRpdmVQb3NpdGlvbiIsInZpZXdwb3J0RWxlbWVudCIsImNyZWF0ZVNWR1BvaW50IiwibWF0cml4VHJhbnNmb3JtIiwiZ2V0Q1RNIiwiT3ZlcmxheSIsIk1vdmFibGUiLCJtb3ZpbmciLCJpc0FuY2hvciIsIm9uRW5kTW92ZSIsImJ1dHRvbnMiLCJwb3NpdGlvbmluZyIsImFzQ2FudmFzUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9uTW92ZSIsImRlc3QiLCJkeCIsImR5IiwiYXJvdW5kIiwiYXQiLCJwb3NpdGlvbiIsIk1vdmluZ1BsYWNlaG9sZGVyIiwicmVjdHMiLCJnZXRSYW5nZVJlY3RzIiwid2l0aFJlZiIsImFyZWEiLCJjcmVhdGVSZWYiLCJvblNocmluayIsInNlbGVjdGluZyIsInJhbmdlIiwibmV3UmVjdHMiLCJBQ1RJT04iLCJTZWxlY3Rpb24iLCJNT1ZFIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiaXNSYW5nZSIsImlzU2VsZWN0aW9uQ2hhbmdlZCIsInNjcm9sbEludG9WaWV3SWZOZWVkZWQiLCJzY3JvbGxJbnRvVmlldyIsIkFyZWEiLCJmaWxsT3BhY2l0eSIsIm9uQ2xpY2siLCJsb2ciLCJpc0N1cnNvciIsImlzRm9jdXNhYmxlIiwiUGFnaW5hdGlvblNlbGVjdGlvblN0eWxlIiwic3RhcnQiLCJlbmQiLCJnZXRGcm9tQ29udGVudCIsInRvTG93ZXJDYXNlIiwiX3BhZ2VQcm9wcyIsIl9sYXlvdXRQcm9wcyIsInJlYWR5IiwibGF5b3V0T2YiLCJwYWdlWFkiLCJjb2x1bW5JbmRleE9mIiwiZ2V0Q29udGVudCIsImZvcndhcmRGaXJzdCIsImZvY3VzYWJsZSIsIl9fZ2V0UmFuZ2VSZWN0cyIsIlNlbGVjdGlvblN0eWxlIiwiY29tcG9zZSIsImNvbm5lY3QiLCJjb21wb3NlZENvbnRlbnQiLCJjYW52YXMiLCJ0b0pTIiwiY3Vyc29yQXQiLCJTVFlMRSIsIlBvc2l0aW9uaW5nIiwicmVzcG9uc2libGUiLCJhc1ZpZXdwb3J0UG9pbnQiLCJuZXh0RnJhbWUiLCJwcmV2RnJhbWUiLCJhcmdzIiwid2FybiIsIlBvc2l0aW9uaW5nSGVscGVyIiwidGFyZ2V0RnJhbWUiLCJmb3VuZCIsIm5vZGUiLCJpc0ZyYW1lIiwidG9wRnJhbWUiLCJ4eSIsImZyYW1lcyIsInRvcEZyYW1lT2Zmc2V0IiwiZ2V0R3JhbmRCbG9ja0NvbnRlbnRzIiwiaXNTZWN0aW9uIiwiYmxvY2tzQSIsImJsb2Nrc0IiLCJub3JtYWxpemVTZWxlY3Rpb24iLCJwMCIsInAxIiwicmV2ZXJ0ZWQiLCJsZWFmRnJhbWUiLCJsaW5lSW5kZXhJbkxlYWZGcmFtZSIsImdyYW5kRnJhbWUiLCJncmFuZEZyYW1lTGF5b3V0ZWQiLCJjaGVjayIsImZyYW1lQ29udGFpbmVkQnkiLCJfdGFyZ2V0RnJhbWVDb250YWluc0ZyYW1lIiwiZ3JhbmRNYXliZSIsImZvcm1hdE5vZGUiLCJub2RlcyIsImJvdW5kIiwiYWxsUGFyZW50cyIsImZpbmRMYXN0QW5kUGFyZW50cyIsImJsb2NrRnJhbWUiLCJsaW5lT2Zmc2V0IiwiZ2V0VG9wRnJhbWVYWSIsImJsb2NrRnJhbWVPZmZzZXQiLCJnZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUiLCIkcGFyYWdyYXBoIiwiaXNJbmNsdWRlWCIsImdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUiLCJib3VuYXJ5IiwiaW5saW5lT2Zmc2V0IiwicG9zc2libGVQYXJhZ3JhcGgiLCJpc0lubGluZU5vZGUiLCJhcm91bmRJbklubGluZSIsImNvbXBvc2VkTGluZSIsIiRub2RlIiwidGV4dE5vZGUiLCJ0ZXh0IiwiZW5kYXQiLCJtZWFzdXJlIiwid2lkdGhTdHJpbmciLCJ3cmFwcGVyIiwiJGxpbmUiLCJ4MCIsImdldFBhcmFncmFwaEluQ2VsbCIsInBhcmFncmFwaEluQ2VsbCIsInBhcmFncmFwaERpcmVjdCIsImxpbmVJbkZyYW1lIiwiY2xvc2VzdCIsIiRmaW5kIiwidGFyZ2V0SGFzUGFyYWdyYXBoIiwiX19maW5kRmlyc3RQYXJhZ3JhcGhJblRhcmdldCIsInBvc2l0aW9uSW5JbmxpbmUiLCJmaXJzdFBhcmFncmFwaCIsImdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZSIsImluRnJhbWUiLCJkZWZhdWx0U3R5bGUiLCJnZXREZWZhdWx0TWVhc3VyZSIsInN0b3J5IiwicG9zIiwiaXNQYXJhZ3JhcGhTZWxmIiwic3RyaW5nV2lkdGgiLCJzdWJzdHJpbmciLCJmcmFtZUlkIiwiUmVhY3RQb3NpdGlvbmluZyIsIm1ha2VTYWZlIiwiX19yZXR1cm5FdmVyeXRoaW5nIiwicG9zaXRpb25Ub0xlYWZGcmFtZUxpbmUiLCJsZWFmRnJhbWVPZmZzZXQiLCJpbmxpbmUiLCJsaW5lSW5kZXhPZlBhcmFncmFwaCIsIiRwIiwibGFzdEF0b20iLCJpc0NvbnRlbnQiLCJnZXRUb3BGcmFtZUJ5UG9zaXRpb24iLCJwb2ludElzSW5zaWRlIiwib2Zmc2V0cyIsImxheW91dGVkRnJhbWVOb2RlIiwiZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlIiwiZ2V0T3JkZXJlZFBvc2l0aW9uIiwic2NvcGUiLCJmcmFtZTAiLCJmcmFtZTEiLCJtYWtlUmVjdHMiLCJ0byIsIl8xIiwiaXNQYXJhZ3JhcGhMaW5lIiwiYm91bmRzIiwibmV4dExpbmUiLCJuZXh0TGluZUJlbG93IiwicG9pbnQiLCJmcmFtZUlzQmVsb3dQb2ludEFuZENvbnRhaW5Qb2ludFgiLCJsYXlvdXRlZFRvcEZyYW1lIiwiZmlyc3RMaW5lSW5jbHVkZVgiLCJsaW5lSW5MZWFmRnJhbWUiLCJhcm91bmRJbkJsb2NrTGluZSIsImxlYWZGcmFtZUNvbnRhaW5lZEJ5IiwicGFyZW50RnJhbWUiLCJwcmV2TGluZSIsInByZXZMaW5lQWJvdmUiLCJpc0ZpcnN0IiwiZnJhbWVJc0Fib3ZlUG9pbnRBbmRDb250YWluUG9pbnRYIiwibGFzdExpbmVJbmNsdWRlWCIsInhpZCIsInNldERpc3BsYXlOYW1lIiwiZ2V0U2VsZWN0aW9uIiwiaXNTZWxlY3Rpb25Db21wb3NlZCIsImNvbXBvc2U0U2VsZWN0aW9uIiwiY29tcG9zZTRTY3JvbGwiLCJnZXRDb21wb3NlZFkiLCJUYWJsZUFkZGVyIiwiUm90YXRvciIsImN4IiwiY3kiLCJSZXNwb25zaWJsZSIsImNhbnZhc0lkIiwidmlld3BvcnQiLCJzY3JlZW5CdWZmZXIiLCJDYW52YXMiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJjb21wb3NlZDRZIiwiQ29udGVudFF1ZXJ5IiwiZnJvbUNvbnRlbnQiLCJnZXRTY3JlZW5DVE0iLCJpbnZlcnNlIiwibG9jYXRpb24iLCJwYWdlUmVjdCIsImNvbXBvc2VkWSIsInNjcm9sbFRvcCIsIl9fY29tcG9zZWRZIiwiZXZlbnRIYW5kbGVycyIsIm5vdGlmeVNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIiwiY2FsbGJhY2siLCJzZWxlY3Rpb25DaGFuZ2VOb3RpZmllciIsIjM3Iiwib25LZXlBcnJvd0xlZnQiLCIzOSIsIm9uS2V5QXJyb3dSaWdodCIsIjM4Iiwib25LZXlBcnJvd1VwIiwiNDAiLCJvbktleUFycm93RG93biIsInNjcm9sbE5vZGVJbnRvVmlldyIsIlN0YXRpc3RpY3MiLCJfX3N0YXRpc3RpY3MiLCJDdXJzb3IiLCJBQ1RJVkUiLCJhY3RpdmVEb2NTdG9yZSIsInJlZnMiLCJnZXRXcmFwcGVkSW5zdGFuY2UiLCJnZXRTdGF0ZSIsImluc3RhbmNlT2YiLCJFbGVtZW50Iiwib25Db250ZXh0TWVudSIsIkV2ZW50UmVzcG9uc2libGUiLCJoYW5kbGVycyIsIl9fbW91c2VEb3duRmxhZyIsInNoaWZ0S2V5IiwiZG91YmxlQ2xpY2tlZCIsIlNFTEVDVCIsImxlZnQxIiwidG9wMSIsIlNUQVJUX0FUIiwiZXh0ZW5kV29yZCIsIkFUIiwic2VsZWN0ZWQiLCJfX29uQ2xpY2siLCJfX3Nob3VsZElnbm9yZU1vdXNlRG93bkV2ZW50IiwiX19vbktleUFycm93IiwibWV0YUtleSIsImN0cmxLZXkiLCJwb3NpdGlvblRvTGluZVN0YXJ0IiwiQkFDS1dBUkQiLCJwb3NpdGlvblRvTGluZUVuZCIsIkZPUldBUkQiLCJEb2N1bWVudCIsIk1lYXN1cmUiLCJ0ZW1wbGF0ZXMiLCJzZWxmIiwiZ2V0TWVhc3VyZSIsImlzVGVtcGxhdGUiLCJkZWZhdWx0UHJvcHMiLCJub3RpZnlOb3RBbGxDb21wb3NlZCIsInNob3VsZCIsImhhcyIsIlR5cGUiLCJTZWN0aW9uIiwiYWxsUHJvcHMiLCJ0b3BJbmRleCIsImNyZWF0ZUxheW91dCIsInJlcXVpcmVkIiwibGF5b3V0IiwiaXNJbnRlZ2VyIiwiY2xvbmVkIiwiRWRpdGFibGVTZWN0aW9uIiwic3BhY2VDaGFuZ2VkQXQiLCJmaXNzaW9uIiwiY2xvbmU0U3BhY2UiLCJmaXNzaW9uSW5kZXgiLCJfa2VlcExhc3RDb21wb3NlZFVudGlsIiwib3Bwb3J0dW5pdGllcyIsInN0ciIsImJrIiwiYnJlYWtlciIsIkxpbmVCcmVha2VyIiwib3AiLCJuZXh0QnJlYWsiLCJQYXJhZ3JhcGgiLCJsYXN0VGV4dCIsImJyZWFrT3Bwb3J0dW5pdGllcyIsImlzUmF3QXRvbSIsIkVuZCIsImNvbW1pdCIsInJvbGxiYWNrVG9MaW5lV2l0aEZpcnN0QXRvbUluZGV4IiwiYXBwZW5kQ29tcG9zZWRMaW5lIiwiY3VycmVudExpbmUiLCJmcmVlemUiLCJhdG9tSW5kZXhPZkxhc3ROdGhMaW5lIiwibGFzdE50aExpbmUiLCJjcmVhdGVBbmRBcHBlbmRMaW5lIiwiY3JlYXRlTGluZSIsIkRFQUQiLCJuZXN0ZWQiLCJjb21taXRGcm9tIiwidGltZXMiLCJhcHBlbmRBdG9tIiwibnVtYmVyaW5nIiwiaW5kZW50IiwiRHluYW1pYyIsImluZGVudExlZnQiLCJpbmRlbnRSaWdodCIsImJGaXJzdExpbmUiLCJzcGFjaW5nIiwiTGluZSIsImdldE51bWJlcmluZ0F0b20iLCJjdXJyZW50WCIsIkVkaXRhYmxlUGFyYWdyYXBoIiwibmV3TGluZSIsImlzRml0VG8iLCJmb250cyIsImJvbGQiLCJpdGFsaWMiLCJfc3RyaW5nV2lkdGgiLCJjYWNoZSIsInZhbmlzaCIsIl8yIiwiakxhc3QiLCIkMSIsIiQyIiwiaUxhc3QiLCJlbmRpbmciLCJlbmRzV2l0aCIsImNyZWF0ZU1lYXN1cmUiLCJFZGl0YWJsZVRleHQiLCJzaGFsbG93RXF1YWwiLCJfXyQxIiwiX19ldmFsdWF0ZVN0YWNrIiwiY29udG91ciIsIk1JTl9TQUZFX0lOVEVHRVIiLCJ0b2xlcmFuY2UiLCJjb250b3VycyIsInNpbXBsaWZ5IiwicG9pbnRzIiwibGluZTEiLCJsaW5lMiIsIngzIiwieDQiLCJ5MyIsInk0IiwicHRfZGVub20iLCJwdF94X251bSIsInB0X3lfbnVtIiwicHQiLCJiZXR3ZWVuIiwibGluZV9saW5lX2ludGVyc2VjdCIsIlBhdGgiLCJiMSIsImIyIiwiZGlyZWN0aW9uIiwib25lT2YiLCJSZXNpemFibGUiLCJyZXNpemluZyIsInNwb3RzIiwib25FbmQiLCJyZXNpemUiLCJzdGFydFJlc2l6ZSIsIm9uU3RhcnQiLCJvblJlc2l6ZSIsIlNwb3QiLCJSb3RhdGFibGUiLCJyb3RhdGluZyIsImRlZ3JlZSIsIm9uUm90YXRlIiwicm90YXRvciIsInhsaW5rSHJlZiIsImlzUGFyYWdyYXBoIiwiZ3JhbmQiLCJzaG93Rm9jdXMiLCJpc0VkaXRhYmxlQ3Vyc29yIiwib3V0bGluZSIsIiRvdXRsaW5lIiwicmVzaXphYmxlIiwicm90YXRhYmxlIiwiZm9jdXNhYmxlQ29udGVudCIsIm1vdmFibGUiLCJlZHRhYmxlQ29udGVudCIsImF0YW4yIiwiUEkiLCJFbnRpdHkiLCJVUERBVEUiLCJhYnNvbHV0ZSIsImN1c3RvbSIsImNvbnRlbnRCb3giLCJzb2xpZEZpbGwiLCJibGlwRmlsbCIsInVybCIsImdldFBhdGgiLCJvdXRsaW5lQm94Iiwib3JpZ2luIiwiZWxsaXBzZSIsInJ4IiwicnkiLCJjaXJjbGUiLCJhdmFpbGFibGVTcGFjZSIsImNyZWF0ZUNvbXBvc2VkU2hhcGUiLCJfX2dldEdlb21ldHJ5IiwiZ2V0U2hhcGUiLCJzcmMiLCJpbWFnZSIsIlRhYmxlIiwicm93IiwiUm93IiwiY29sIiwicmFua3MiLCJzbG90cyIsIm1pbkhlaWdodCIsInJhbmsiLCJjdXJyZW50UmFuayIsIlJhbmsiLCJnZXRDb2x1bW5zIiwiY2VsbElkIiwiZmluZE9yQ3JlYXRlUmFua0ZvckNvbHVtbiIsInNsb3RGcmFtZSIsImdldEhlaWdodCIsImluc2VydEF0IiwiZGVsYXlvdXQiLCJmaXJzdFNsb3QiLCJjbG9uZUFzRW1wdHkiLCJzbG90SGVpZ2h0IiwibGF5b3V0ZWQiLCJkZXRhY2giLCJkZWx0YSIsImNvdW50IiwiY2hhbmdlSGVpZ2h0VXAiLCJ0YWJsZSIsInJlcGxhY2VXaXRoIiwic2xvdCIsImNvbEluZGV4IiwicmVwbGFjZW1lbnQiLCJFZGl0YWJsZVJvdyIsIkVkZ2UiLCJzeiIsInZhbCIsIlNlbGVjdG9yIiwib25TZWxlY3QiLCJSb3dTZWxlY3RvciIsIkNvbFNlbGVjdG9yIiwiUmVzaXplciIsInN0cm9rZURhc2hhcnJheSIsIkNvbFJlc2l6ZXIiLCJSb3dSZXNpemVyIiwiY2VsbCIsInBhcnRzIiwiQ2VsbCIsImJvcmRlcnMiLCJFZGdlcyIsIkVkaXRhYmxlRWRnZXMiLCJBbmNob3IiLCJ3cmFwRnVuYyIsIndyYXBUZXh0IiwibXIiLCJtbCIsImFwcGx5V3JhcFRleHQiLCJ3cmFwVGlnaHQiLCJ3cmFwQ2xlYXIiLCJjcmVhdGVFbGVtZW50IiwiZmFtaWxpZXMiLCJmYW1pbHkiLCJib2xkcyIsIml0YWxpY3MiLCJiaSIsImZvbnQiLCJmYW1pbHlOYW1lIiwiZnVsbE5hbWUiLCJmb250U2l6ZSIsInVuaXRzUGVyRW0iLCJhc2NlbnQiLCJsaW5lR2FwIiwiYWR2YW5jZVdpZHRoIiwiZXh0ZW5kIiwic3ViZmFtaWx5TmFtZSIsIkZvbnRNYW5hZ2VyIiwibmFtZXMiLCJyZWxlYXNlIiwiaXRlcmF0ZUxvY2FsIiwiVVJMIiwicmVsZWFzZU9iamVjdFVSTCIsInN0YXJ0c1dpdGgiLCJmcm9tQnJvd3NlciIsImxvYWRlciIsIlByb21pc2UiLCJmaWxlcyIsImZpbGUiLCJyZXNvbHZlIiwiY3JlYXRlT2JqZWN0VVJMIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImRhdGEiLCJGb250S2l0IiwiQnVmZmVyIiwicHV0Iiwib25lcnJvciIsInJlYWRBc0FycmF5QnVmZmVyIiwidGhlbiIsIm1ha2VXZWJGb250IiwiZnJvbVBhdGgiLCJsb2FkMSIsIm9wZW4iLCJlcnIiLCJyZWplY3QiLCJyZWFkZGlyIiwiZnJvbVJlbW90ZSIsInNlcnZpY2UiLCJmZXRjaCIsInJlcyIsImxpc3QiLCJKU09OIiwicGFyc2UiLCJ0cmltIiwib2siLCJhcnJheUJ1ZmZlciIsImJ1ZmZlciIsImxvYWQiLCJzdGF0dXNUZXh0IiwiYXNTZXJ2aWNlIiwic3ciLCJuYXZpZ2F0b3IiLCJfZnJvbUJyb3dzZXIiLCJwb3N0TWVzc2FnZSIsInNlcnZpY2VXb3JrZXIiLCJyZWdpc3RlciIsInJlZyIsImNsdCIsIndlYkZvbnRzIiwiYm9keSIsImFwcGVuZENoaWxkIiwibG9hZGVkIiwic2hlZXQiLCJydWxlcyIsImZvbnRGYW1pbHkiLCJhZGRSdWxlIiwiZm9udEZhbWlseXMiLCJmb250V2VpZ2h0IiwiZm9udFN0eWxlIiwiZG9uZSIsImFXaWR0aCIsInRlc3RlciIsIlNWR01lYXN1cmUiLCJjb250YWluZXIiLCJpbm5lckhUTUwiLCJzZXRTdHlsZSIsImNzc1N0eWxlIiwiZmlyc3RDaGlsZCIsImdldEJCb3giLCJGb250TWVhc3VyZSIsImdldEZvbnQiLCJpbnB1dCIsInVubG9hZGVkIiwiaXNOb2RlIiwiZXhpc3RzU3luYyIsIlJFX1RSQU5TTEFURSIsIk91dHB1dCIsInBpcGUiLCJQYXJzZXIiLCJXcml0YWJsZVN0cmVhbSIsInhtbE1vZGUiLCJhdHRycyIsIm9ucmVzZXQiLCJvbkRvY3VtZW50Iiwib25QYWdlIiwib25Hcm91cCIsIl9jdXJyZW50VGV4dCIsIm9uQ29udGVudCIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwib25Hcm91cEVuZCIsIm9uVGV4dCIsIl9vZmZzZXRzIiwiX2FzeW5jSm9icyIsIm9uRG9jdW1lbnRFbmQiLCJtYXRjaCIsIkVtaXR0ZXIiLCJGb3JtYXQiLCJCYXNlIiwicmVwcmVzZW50YXRpb24iLCJTVkciLCJkZXB0aCIsImRlZnMiLCJTZXQiLCJzdHJlYW0iLCJ3cml0ZSIsInBnQ29sb3IiLCJocmVmIiwiYnRvYSIsImpvYiIsInZpZXciLCJzcHJlYWQiLCJVaW50OEFycmF5IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYnl0ZUxlbmd0aCIsImFkZEFzeW5jSm9iIiwiZXh0IiwiY3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdCIsImRlZmF1bHRGb250IiwiUGFnaW5hdGlvbiIsImZvbnRzTG9hZGVkIiwicmVxdWlyZWRGb250cyIsImRvYyIsImdldEZvbnRMaXN0IiwibWVzc2FnZSIsInJlcXVpcmVGb250cyIsIlZpZXdlclR5cGVzIiwiVmlld2VycyIsIkVkaXRvclR5cGVzIiwiRWRpdG9ycyIsIlJlcHJlc2VudGF0aW9uIiwiaW5zdGFsbCIsInVuaW5zdGFsbCJdLCJtYXBwaW5ncyI6IjJCQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQTBEZixPQXJEQUYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sS0FRdkRyQixFQUFvQnNCLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRckIsRUFBb0JxQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQTFCLEVBQW9Ca0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUks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TCxJQUFNQyxFQUFVNW1DLEVBQUU0bUMsVUFBVXZuQyxLQUFLVyxHQUNqQ0EsRUFBRTRtQyxVQUFVLFdBQ1hBLEVBQVMsV0FBVCxFQUFhMW1DLFdBQ2J5a0MsR0FBSWlDLGFBVk4sQ0FZR2IsSUFFSEEsR0FBV1kiLCJmaWxlIjoicmVwcmVzZW50YXRpb24tcGFnaW5hdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzMSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZ2V0UHJvdG90eXBlT2ZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW5oZXJpdHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwid2UtZWRpdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtZW1vaXplLW9uZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVjb21wb3NlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvY29uc3RydWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvdHlwZW9mXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZvbnRraXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaXMtbm9kZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC13YXlwb2ludFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL29iamVjdERlc3RydWN0dXJpbmdFbXB0eVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9yZWdlbmVyYXRvclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJsaW5lYnJlYWtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN2Z3BhdGhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic2ltcGxpZnktcGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJzdmctcGF0aC1jb250b3Vyc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodG1scGFyc2VyMlwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJnZXQtc3lzdGVtLWZvbnRzXCIpOyIsIlxuLyoqXG4gKiBpdCdzIHRvIG1ha2Ugc2VxdWVudGlhbCByZW5kZXIsIGNoZWNrIGhhc0NoaWxkcmVuLnJlbmRlclxuICogSXQncyBhIEtFWSBmb3Igd2hvbGUgY29tcG9zYWJsZSBcbiAqICoqKipldmVyeSBjdXN0b21pemVkIHJlbmRlciBzaG91bGQgdXNlIHRoaXMgY29tcG9uZW50IGFzIGxhc3Qgb25lKioqXG4gKi9cbmV4cG9ydCBkZWZhdWx0ICh7aG9zdH0pPT4oaG9zdC5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKSxudWxsKVxuIiwiXG5pbXBvcnQgUmVhY3QsIHtDaGlsZHJlbixGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IENvbXBvc2VkQWxsVHJpZ2dlciBmcm9tIFwiLi9jb21wb3NlZC1hbGwtdHJpZ2dlclwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuZXhwb3J0IGRlZmF1bHQgQT0+e1xuICAgIGlmKEEuYWxyZWFkeSlcbiAgICAgICAgcmV0dXJuIEFcbiAgICByZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEF7XG4gICAgICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gY29tcG9zYWJsZS0ke0EuZGlzcGxheU5hbWV9YFxuICAgICAgICBzdGF0aWMgYWxyZWFkeT1mdW5jdGlvbihjYXBhYmxlKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlOYW1lLnNwbGl0KFwiLVwiKS5pbmNsdWRlcyhjYXBhYmxlKVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAgICAgLi4uQS5jb250ZXh0VHlwZXMsXG4gICAgICAgICAgICBkZWJ1ZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgICAgICAgICBNb2RlbFR5cGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIGNoaWxkQ29udGV4dFR5cGVzID0ge1xuICAgICAgICAgICAgLi4uKEEuY2hpbGRDb250ZXh0VHlwZXN8fHt9KSxcbiAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLm9iamVjdFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQgPSB7Y29tcG9zZWQ6IFtdICwgYWxsQ29tcG9zZWQ6dW5kZWZpbmVkfVxuICAgICAgICAgICAgaWYodGhpcy5kZWJ1Zyl7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZT17Y29tcHV0ZWQ6dGhpcy5jb21wdXRlZH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXG4gICAgICAgICAgICBsZXQgc3VwZXJDaGlsZENvbnRleHQ9c3VwZXIuZ2V0Q2hpbGRDb250ZXh0ID8gc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCkgOiB7fVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5zdXBlckNoaWxkQ29udGV4dCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB1c3VhbGx5IE5vQ2hpbGQgY29udGVudCBzaG91bGQgYmUgY29tcG9zZWQgYWNjb3JkaW5nIHRvIG5leHRBdmFpbGFibGVTcGFjZSxcbiAgICAgICAgICogYW5kIHRoZW4gYXBwZW5kIHRvIGl0c2VsZi5jb21wb3NlZFtdIGFuZCBwYXJlbnQuYXBwZW5kQ29tcG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgIHt0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikvKioqKk1VU1QgdXNlIHRvQXJyYXkoY2hpbGRyZW4pLCBzaW5jZSByZWNvbXBvc2UgdXNlIHRoaXMgd2F5IHRvIGNvbXBvc2UgcGFydCBvZiBjaGlsZHJlbiovfVxuICAgICAgICAgICAgICAgICAgICA8Q29tcG9zZWRBbGxUcmlnZ2VyIGhvc3Q9e3RoaXN9Lz5cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoaWxkcmVuIHNob3VsZCBjYWxsIGFmdGVyIGEgbGluZSBjb21wb3NlZCBvdXRcbiAgICAgICAgICogYSBjaGFuY2UgdG8gYWRkIHRvIHNlbGYncyBjb21wb3NlZFxuICAgICAgICAgKi9cbiAgICAgICAgYXBwZW5kQ29tcG9zZWQobGluZSkge1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hpbGRyZW4gc2hvdWxkIGNhbGwgYmVmb3JlIGNvbXBvc2luZyBsaW5lLFxuICAgICAgICAgKiByZXR1cm4gbmV4dCBsaW5lIHJlY3Qgeyp3aWR0aCwgW2hlaWdodF19XG4gICAgICAgICAqL1xuICAgICAgICBuZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSkge1xuXG4gICAgICAgIH1cblxuICAgICAgICBpc0FsbENoaWxkcmVuQ29tcG9zZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZFxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFsbENvbXBvc2VkIGlzIHZlcnkgaW1wb3J0YW50XG4gICAgICAgICAqIGlmIGNvbnRlbnQgaXMgc2tpcHBlZCBjb21wb3NlZCwgaXRzZWxmIGFuZCBncmFuZCBjb250ZW50IHNob3VsZCBiZSBzZXQgYXMgZmFsc2UsIFxuICAgICAgICAgKiB0aGVuIHRoaXMgZXZlbnQgb2YgZ3JhbmQgY29udGVudCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgICAgICogQGNoZWNrIHRoaXMubm90aWZ5Tm90QWxsQ29tcG9zZWRcbiAgICAgICAgICogXG4gICAgICAgICAqIEBjaGVjayBSZWNvbXBvc2FibGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlOiByZXNldCBhbGxDb21wb3NlZCB3aGVuIG5vdCBpc0FsbENoaWxkcmVuQ29tcG9zZWQsXG4gICAgICAgICAqIHNvIHRoaXMgZXZlbnQgY2FuIHdvcmtzIGFnYWluIFxuICAgICAgICAgKi9cbiAgICAgICAgb25BbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuICAgICAgICAgICAgaWYodGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZCE9PWZhbHNlKVxuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9dHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgbm90aWZ5Tm90QWxsQ29tcG9zZWQoY3VycmVudCl7XG4gICAgICAgICAgICBjdXJyZW50LmNvbXB1dGVkLmFsbENvbXBvc2VkPWZhbHNlXG4gICAgICAgICAgICB3aGlsZShjdXJyZW50PWN1cnJlbnQuY29udGV4dC5wYXJlbnQpe1xuICAgICAgICAgICAgICAgIGN1cnJlbnQuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9ZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWF0ZUNvbXBvc2VkMlBhcmVudChjb250ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudFxuICAgICAgICB9XG5cbiAgICAgICAgZ2V0IGRlYnVnKCl7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRleHQuZGVidWd8fHRoaXMucHJvcHMuZGVidWdcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2xvc2VzdCh0eXBlKXtcbiAgICAgICAgICAgIHZhciBmbj10eXBlXG4gICAgICAgICAgICBpZih0eXBlb2YodHlwZSk9PVwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgZm49YT0+YS5nZXRDb21wb3NlVHlwZSgpPT10eXBlXG5cbiAgICAgICAgICAgIHZhciBjdXJyZW50PXRoaXNcbiAgICAgICAgICAgIHdoaWxlKGN1cnJlbnQpe1xuICAgICAgICAgICAgICAgIGlmKCEhZm4oY3VycmVudCkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50XG4gICAgICAgICAgICAgICAgaWYoY3VycmVudC5jb250ZXh0KVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50PWN1cnJlbnQuY29udGV4dC5wYXJlbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY2hpbGRyZW5BcnJheT1tZW1vaXplKChjaGlsZHJlbj10aGlzLnByb3BzLmNoaWxkcmVuKT0+Q2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikpXG4gICAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgSGFzQ2hpbGQgZnJvbSBcIi4vaGFzQ2hpbGRcIlxuXG5leHBvcnQgZGVmYXVsdCBBPT57XG5cdGNvbnN0IFN1cGVyPUhhc0NoaWxkKEEpXG4gICAgcmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBTdXBlcntcbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcyA9IHtcbiAgICAgICAgICAgIC4uLlN1cGVyLmNvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIHBhcmVudDogUHJvcFR5cGVzLm9iamVjdFxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGlsZHJlbiBzaG91bGQgY2FsbCBiZWZvcmUgY29tcG9zaW5nIGxpbmUsXG4gICAgICAgICAqIHJldHVybiBuZXh0IGxpbmUgcmVjdCB7KndpZHRoLCBbaGVpZ2h0XSwgW2dyZWVkeSh0ZXh0KT10cnVlXSwgW3dvcmR5KHRleHQpPXRydWVdfVxuICAgICAgICAgKi9cbiAgICAgICAgbmV4dEF2YWlsYWJsZVNwYWNlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5wYXJlbnQubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGlsZHJlbiBzaG91bGQgY2FsbCBhZnRlciBhIGxpbmUgY29tcG9zZWQgb3V0XG4gICAgICAgICAqIGEgY2hhbmNlIHRvIGFkZCB0byBzZWxmJ3MgY29tcG9zZWRcbiAgICAgICAgICovXG4gICAgICAgIGFwcGVuZENvbXBvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQoLi4uYXJndW1lbnRzKSlcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IEhhc1BhcmVudEFuZENoaWxkIGZyb20gXCIuL2hhc1BhcmVudEFuZENoaWxkXCJcbmV4cG9ydCBkZWZhdWx0IEE9PntcbiAgICBjb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChBKVxuICAgIHJldHVybiBjbGFzcyBfXyQxIGV4dGVuZHMgU3VwZXJ7XG4gICAgICAgIGdldCBpc0F0b20oKXtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpc0F0b21DaGFuZ2VkKHtoYXNoLGNoYW5nZWQ9aGFzaD09dGhpcy5wcm9wcy5oYXNofSl7XG4gICAgICAgICAgICByZXR1cm4gY2hhbmdlZFxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZENvbXBvc2VkKClcbiAgICAgICAgICAgIHRoaXMub25BbGxDaGlsZHJlbkNvbXBvc2VkKClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50LENoaWxkcmVufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcbmltcG9ydCBDb21wb3NlZEFsbFRyaWdnZXIgZnJvbSBcIi4vY29tcG9zZWQtYWxsLXRyaWdnZXJcIlxuLyoqXG4gKiBtYWtlIGNvbXBvbmVudCBhbHdheXMgdXBkYXRlIChieSBjYWxsaW5nIC5yZW5kZXIpLCBzbyBBbGxDb21wb3NlZFRyaWdnZXIgd291bGQgYmUgdHJpZ2dlcmVkIHRvIGNvcnJlY3RseSBzZXQgYWxsQ29tcG9zZWRcbiAqIGJ1dCBhdCBmaXJzdCBjbGVhciBsYXN0IGNvbXBvc2VkIFxuICogXG4gKiBSZWNvbXBvc2U6XG4gKiAxLiBjYW5jZWwgYW5kIGtlZXAgbGFzdCBjb21wb3NlZCBhY2NvcmRpbmcgdG8gcHJvcHMvc3RhdGUvY29tcHV0ZWQvY29udGV4dFxuICogaW4gcmVuZGVyOlxuICogMi4gYXBwZW5kIGxhc3QgY29tcG9zZWRcbiAqIDMuIGNvbXBvc2Ugbm90IGNvbXBvc2VkXG5cbiAqIFRvIG1ha2UgZXZlcnl0aGluZyBjYWNoZWFibGUsIGNvbXBvbmVudCBjYW4gY3VzdG9taXplIGFwcGVuZExhc3RDb21wb3NlZCB0byBkZWZpbmUgaXRzZWxmIGNhY2hlIHBvbGljeVxuICogc2hvdWwgbGFzdENvbXBvc2VkIGJlIGNsZWFyZWRcbiAqIFxuICogQXRvbUNvbGxlY3RvcjogaXMgaW5saW5lIGNvbmFpbmVyIGFuZCBOb0NoaWxkIGluIFBhcmFncmFwaCwgUGFyYWdyYXBoLm5leHRBdmFpbGFibGVTcGFjZSB3b3VsZCBnaXZlIG51bGwgZm9yIEF0b21Db2xsZWN0b3IgdGVzdC5cbiAqIEF0b21Db2xsZWN0b3IgaXMganVzdCB0byBjb2xsZWN0IGF0b20gd2l0aG91dCBlaXRoZXIgYmxvY2sgb3IgaW5saW5lIGxheW91dCwgc28gdGhlIGNhY2hlIHBvbGljeSBpcyBzdXJlIGFzXG4gKiAqKiBpZiBub3QgY2hhbmdlLCBjYWNoZSBjYW4gYWx3YXlzIGJlIGFwcGxpY2FibGVcbiAqICoqIEF0b21Db2xsZWN0b3Igc2hvdWxkIGJlIGVpdGhlciBhbGwgY29tcG9zZWQsIG9yIG5vdGhpbmcgY29tcG9zZWRcbiAqICoqIE5vQ2hpbGQgYWxzbyB3b3JrcyBsaWtlIEF0b21Db2xsZWN0b3IgZnJvbSBjYWNoZSBwZXJzcGVjdGl2ZVxuICovXG5leHBvcnQgZGVmYXVsdCBBPT57XG4gICAgY2xhc3MgUmVjb21wb3NhYmxlIGV4dGVuZHMgQXtcbiAgICAgICAgc3RhdGljIGRpc3BsYXlOYW1lPWByZWNvbXBvc2FibGUtJHtBLmRpc3BsYXlOYW1lfWBcblxuICAgICAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2FjaGUgbGFzdCBjb21wb3NlZCBmb3IgbmV4dCB0aW1lXG4gICAgICAgIGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuICAgICAgICAgICAgY29uc3QgY29tcG9zZWQ9c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLnB1c2goY29tcG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gY29tcG9zZWRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vYWx3YXlzIGNhbGwgcmVuZGVyIHRvIGNvbXBvc2UgdG8gc3luYyBvbkFsbENoaWxkcmVuQ29tcG9zZWRcbiAgICAgICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHQpe1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBjb21wb3NlZFVVSUQgdG8gaWRlbnRpZnkgZWFjaCBjb21wb3NlLCBzbyBjcmVhdGVDb21wb3NlZDJQYXJlbnQgY2FuIGJlIGNhY2hlZC5cbiAgICAgICAgICAgICAqLyAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkVVVJRD1EYXRlLm5vdygpXG4gICAgICAgICAgICBpZighdGhpcy5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSl7XG4gICAgICAgICAgICAgICAgLy9jbGVhciBsYXN0IGFsbENvbXBvc2VkLCBzbyBpdCBjYW4gYmUgcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkPXVuZGVmaW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5jb250ZXh0LnNob3VsZENvbnRpbnVlQ29tcG9zZSAmJiAhdGhpcy5jb250ZXh0LnNob3VsZENvbnRpbnVlQ29tcG9zZSh0aGlzKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogdG8gcmVtb3ZlIHVudXNhYmxlIGNvbXBvc2VkLCBhbmQga2VlcCB1c2FibGUsIHRoZW4gYXBwZW5kIHVzYWJsZSB0byBwYXJlbnQgaW4gcmVuZGVyIFxuICAgICAgICAgKiBhbGwgY29tcHV0ZWQgc2hvdWxkIGJlIHN5bmNlZCBoZXJlXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbmV4dFByb3BzIFxuICAgICAgICAgKiBAcGFyYW0geyp9IG5leHRTdGF0ZSBcbiAgICAgICAgICovXG4gICAgICAgIGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKHByb3BzKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNBdG9tQ29sbGVjdG9yKCkgJiYgIXRoaXMuaXNBdG9tQ2hhbmdlZCguLi5hcmd1bWVudHMpKXtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5jb21wb3NlZD1bXVxuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWQ9dW5kZWZpbmVkXG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogKiBhbGwgY29tcHV0ZWQgc2hvdWxkIGJlIHN5bmNlZCBoZXJlIGFnYWluIGJhc2VkIG9uIGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkXG4gICAgICAgICAqIEByZXR1cm5cbiAgICAgICAgICogbnVtYmVyOiBuZWVkIHJlbmRlciBmcm9tIHRoZSBpbmRleFxuICAgICAgICAgKiB0cnVlOiBzdWNjZXNzLCByZW5kZXIgbm90aGluZyxcbiAgICAgICAgICogb3RoZXJzOiBmYWlsLCByZW5kZXIgYWxsXG4gICAgICAgICAqL1xuICAgICAgICBhcHBlbmRMYXN0Q29tcG9zZWQoKXtcbiAgICAgICAgICAgIGlmKHRoaXMuaXNBdG9tQ29sbGVjdG9yKCkpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmZvckVhY2goYT0+dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZChhKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy9sYXN0IGNvbXBvc2VkICsgbGVmdFxuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIGlmKHRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmxlbmd0aD4wKXtcbiAgICAgICAgICAgICAgICBjb25zdCBhcHBlbmRlZD10aGlzLmFwcGVuZExhc3RDb21wb3NlZCgpXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGFwcGVuZGVkKT09XCJudW1iZXJcIiAmJiBhcHBlbmRlZD4tMSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkICR7YXBwZW5kZWQrMX0gY2hpbGRyZW4gY2FjaGVzYClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLnNsaWNlKGFwcGVuZGVkKzEpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDb21wb3NlZEFsbFRyaWdnZXIgaG9zdD17dGhpc30vPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGFwcGVuZGVkPT09dHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkIGFsbCBjaGlsZHJlbiBjYWNoZXNgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5nZXRDb21wb3NlVHlwZSgpfVske3RoaXMucHJvcHMuaWR9XSB1c2VkIDAgY2hpbGRyZW4gY2FjaGVzYClcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZW5kZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRJZE9mKGNvbXBvc2VkLGlkKXtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3Q9KHtwcm9wczp7XCJkYXRhLWNvbnRlbnRcIjphLGNoaWxkcmVufX0pPT4oaWQ9YSkhPXVuZGVmaW5lZCA/IFxuICAgICAgICAgICAgICAgIHRydWUgOiAgQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikuZmluZEluZGV4KGV4dHJhY3QpIT0tMTtcbiAgICAgICAgICAgIGV4dHJhY3QoY29tcG9zZWQpXG4gICAgICAgICAgICBpZih0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikuZmluZEluZGV4KGE9PmEgJiYgYS5wcm9wcy5pZD09aWQpIT0tMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkcmVuTmVlZFJlY29tcG9zZT1tZW1vaXplKChiLGEpPT57XG4gICAgICAgICAgICBjb25zdCBuZXh0PUNoaWxkcmVuLnRvQXJyYXkoYi5jaGlsZHJlbilcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQ9dGhpcy5jaGlsZHJlbkFycmF5KGEuY2hpbGRyZW4pXG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkSW5kZXg9Y3VycmVudC5maW5kSW5kZXgoKHtwcm9wczp7aWQsaGFzaH19LGksXywkLGI9bmV4dFtpXSk9PlxuICAgICAgICAgICAgICAgICEoYiAmJiBiLnByb3BzLmlkPT1pZCAmJiBiLnByb3BzLmhhc2g9PWhhc2gpKVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQuc2xpY2UoY2hhbmdlZEluZGV4KS5tYXAoYT0+YSAmJiBhLnByb3BzLmlkKVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBiYXNlZCBvbiBQYXJhZ3JhcGgncyBuZXh0QXZhaWxhYmxlU3BhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICovXG4gICAgICAgIGlzQXRvbUNvbGxlY3Rvcigpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNBdG9tIHx8IHRoaXMucHJvcHMuaXNJbmxpbmVDb250YWluZXJcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBSZWNvbXBvc2FibGVcbn1cbiIsIlxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuLyoqSXQgdG8gbWFrZSBjb21wb3NlZCByZXN1bHQgbG9jYXRhYmxlIHRocm91Z2ggaWQgYW5kIHR5cGUgKi9cbmZ1bmN0aW9uIExvY2F0YWJsZShBKXtcblx0cmV0dXJuIGNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuXHRcdHN0YXRpYyBkaXNwbGF5TmFtZT1gbG9jYXRhYmxlLSR7QS5kaXNwbGF5TmFtZX1gXG5cdFx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0XHQuLi5BLnByb3BUeXBlcyxcblx0XHRcdGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcblx0XHR9XG5cbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgICAgICAuLi5BLmNvbnRleHRUeXBlcyxcbiAgICAgICAgICAgIG1vdW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgICAgIHVubW91bnQ6IFByb3BUeXBlcy5mdW5jLFxuXHRcdFx0Z2V0Q29tcG9zZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5tb3VudCAmJiB0aGlzLnByb3BzLmlkICYmIHRoaXMuY29udGV4dC5tb3VudCh0aGlzKVxuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcbiAgICAgICAgICAgIC8vdGhpcy5jb250ZXh0LnVubW91bnQgJiYgdGhpcy5jb250ZXh0LnVubW91bnQodGhpcylcbiAgICAgICAgfVxuXG5cdFx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0XHRjb25zdCBlbGVtZW50PXN1cGVyLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCguLi5hcmd1bWVudHMpXG5cdFx0XHRpZihSZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSAmJiB0aGlzLnByb3BzLmlkKXtcblx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LHtcblx0XHRcdFx0XHRcdFwiZGF0YS1jb250ZW50XCI6dGhpcy5wcm9wcy5pZCxcblx0XHRcdFx0XHRcdFwiZGF0YS10eXBlXCI6dGhpcy5nZXRDb21wb3NlVHlwZSgpXG5cdFx0XHRcdFx0fSlcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm4gZWxlbWVudFxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBMb2NhdG9yaXplKEEpe1xuXHRyZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEF7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPWBsb2NhdG9yLSR7QS5kaXNwbGF5TmFtZX1gXG5cdFx0c3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcblx0XHRcdC4uLkEuY2hpbGRDb250ZXh0VHlwZXMsXG5cdFx0XHRtb3VudDogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0XHR1bm1vdW50OiBQcm9wVHlwZXMuZnVuYyxcblx0XHRcdGdldENvbXBvc2VyOiBQcm9wVHlwZXMuZnVuYyxcblx0XHR9XG5cblx0XHRjb25zdHJ1Y3Rvcigpe1xuXHRcdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdFx0Y29uc3QgY29tcG9zZXJzPXRoaXMuY29tcG9zZXJzPW5ldyBNYXAoW1t0aGlzLnByb3BzLmlkLHRoaXNdXSlcblx0XHRcdHRoaXMubW91bnQ9YT0+Y29tcG9zZXJzLnNldChhLnByb3BzLmlkLGEpXG5cdFx0XHR0aGlzLnVubW91bnQ9YT0+e1xuXHRcdFx0XHRpZihjb21wb3NlcnMuZ2V0KGEucHJvcHMuaWQpPT1hKXtcblx0XHRcdFx0XHRjb21wb3NlcnMuZGVsZXRlKGEucHJvcHMuaWQpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0Q29tcG9zZXI9aWQ9PmNvbXBvc2Vycy5nZXQoaWQpXG5cdFx0fVxuXG5cdFx0Z2V0Q2hpbGRDb250ZXh0KCl7XG5cdFx0XHRjb25zdCB7bW91bnQsdW5tb3VudCxnZXRDb21wb3Nlcn09dGhpc1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Li4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG5cdFx0XHRcdG1vdW50LHVubW91bnQsZ2V0Q29tcG9zZXJcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuTG9jYXRhYmxlLkxvY2F0b3JpemU9TG9jYXRvcml6ZVxuXG5leHBvcnQgZGVmYXVsdCBMb2NhdGFibGVcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuZXhwb3J0IGRlZmF1bHQgKEEsYWx3YXlzPXRydWUpPT5jbGFzcyBfXyQxIGV4dGVuZHMgQXtcbiAgICBzdGF0aWMgZGlzcGxheU5hbWU9YHN0b3BwYWJsZS0ke0EuZGlzcGxheU5hbWV9YFxuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAuLi5BLmNvbnRleHRUeXBlcyxcbiAgICAgICAgc2hvdWxkQ29udGludWVDb21wb3NlOiBQcm9wVHlwZXMuZnVuY1xuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZih0aGlzLmNvbnRleHQuc2hvdWxkQ29udGludWVDb21wb3NlKXtcbiAgICAgICAgICAgIGlmKGFsd2F5cyB8fCB0aGlzLnByb3BzLnN0b3BwYWJsZSl7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2UodGhpcykpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMuZ2V0Q29tcG9zZVR5cGUoKX1bJHt0aGlzLnByb3BzLmlkfV0gc2tpcCBjb21wb3NlZGApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlcigpXG4gICAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5cbmV4cG9ydCBkZWZhdWx0IEE9PmNsYXNzIF9fJDEgZXh0ZW5kcyBBe1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1gY29udGludWFibGUtJHtBLmRpc3BsYXlOYW1lfWBcblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG5cdFx0Li4uQS5jaGlsZENvbnRleHRUeXBlcyxcblx0XHRzaG91bGRDb250aW51ZUNvbXBvc2U6IFByb3BUeXBlcy5mdW5jXG5cdH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIuZ2V0Q2hpbGRDb250ZXh0KCksXG4gICAgICAgICAgICBzaG91bGRDb250aW51ZUNvbXBvc2U6dGhpcy5zaG91bGRDb250aW51ZUNvbXBvc2UuYmluZCh0aGlzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvdWxkQ29udGludWVDb21wb3NlKGN1cnJlbnQpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzaG91bGRDb250aW51ZUNvbXBvc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCwgYW5kIG5vdGlmeU5vdEFsbENvbXBvc2VkIHdoZW4gZmFsc2VcIilcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtGcmFnbWVudCwgUHVyZUNvbXBvbmVudCBhcyBDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0IGV4dGVuZHMgQ29tcG9uZW50e1xuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7XG5cdFx0XHRjaGlsZHJlbiwgd2hpdGVTcGFjZSwgY29sb3I6ZmlsbCwgaGlnaGxpZ2h0LGJvcmRlcix1bmRlcmxpbmUsc3RyaWtlLFxuXHRcdFx0ZGVzY2VudCxtaW5XaWR0aCwgaGVpZ2h0LCB3aWR0aCwgYmxvY2tPZmZzZXQsbWVyZ2VPcHBvcnR1bml0eSwvL2lnbm9yZVxuXHRcdFx0eSxcblx0XHRcdC4uLm90aGVyc309dGhpcy5wcm9wc1xuXG5cdFx0bGV0IGJhY2tncm91bmQ9bnVsbFxuXHRcdGlmKGhpZ2hsaWdodCB8fCBib3JkZXIpe1xuXHRcdFx0bGV0IHByb3BzPXtcblx0XHRcdFx0XHR3aWR0aDpNYXRoLmNlaWwod2lkdGgpLFxuXHRcdFx0XHRcdGhlaWdodDpNYXRoLmNlaWwoaGVpZ2h0KSxcblx0XHRcdFx0XHRmaWxsOmhpZ2hsaWdodHx8XCJub25lXCIsXG5cdFx0XHRcdFx0eDowLHk6eS1oZWlnaHQrZGVzY2VudFxuXHRcdFx0XHR9XG5cdFx0XHRpZihib3JkZXIpe1xuXHRcdFx0XHRwcm9wcy5zdHJva2U9XCJibGFja1wiXG5cdFx0XHRcdHByb3BzLnN0cm9rZVdpZHRoPTAuNVxuXHRcdFx0fVxuXHRcdFx0YmFja2dyb3VuZD0oPHJlY3Qgey4uLnByb3BzfS8+KVxuXHRcdH1cblx0XHRsZXQgZGVjb3JhdGlvbj1udWxsXG5cdFx0aWYodW5kZXJsaW5lKXtcblx0XHRcdGxldCB5PU1hdGguY2VpbChkZXNjZW50LzIpXG5cdFx0XHRsZXQgc3Ryb2tlV2lkdGg9KGE9Pntcblx0XHRcdFx0XHRzd2l0Y2godW5kZXJsaW5lKXtcblx0XHRcdFx0XHRcdGNhc2UgXCJkb3VibGVcIjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGEqMjtcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KSgwLjUpXG5cdFx0XHRkZWNvcmF0aW9uPSg8bGluZSB5MT17eX0geDI9e3dpZHRofSB5Mj17eX0gc3Ryb2tlPVwiYmxhY2tcIiBzdHJva2VXaWR0aD17c3Ryb2tlV2lkdGh9Lz4pXG5cdFx0fVxuXG5cdFx0bGV0IHN0cmlrZWxpbmU9bnVsbFxuXHRcdGlmKHN0cmlrZSl7XG5cdFx0XHRsZXQgeT0tZGVzY2VudFxuXHRcdFx0c3RyaWtlbGluZT0oPGxpbmUgeTE9e3l9IHgyPXt3aWR0aH0geTI9e3l9IHN0cm9rZT1cImJsYWNrXCIgc3Ryb2tlV2lkdGg9ezAuNX0vPilcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0e2JhY2tncm91bmR9XG5cdFx0XHRcdHtzdHJpa2VsaW5lfVxuXHRcdFx0XHR7ZGVjb3JhdGlvbn1cblx0XHRcdFx0PHRleHQgc3R5bGU9e3t1c2VyU2VsZWN0Olwibm9uZVwiLHdoaXRlU3BhY2U6XCJwcmVcIixjdXJzb3I6XCJ0ZXh0XCJ9fVxuXHRcdFx0XHRcdHk9e3l8fDB9XG5cdFx0XHRcdFx0ey4uLm90aGVyc31cblx0XHRcdFx0XHRmaWxsPXtmaWxsfT5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvdGV4dD5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHR9XG5cblx0c3RhdGljIER5bmFtaWM9KHtjaGlsZHJlbiwgLi4ucHJvcHN9KT0+PFRleHQgey4uLnByb3BzfSBjaGlsZHJlbj17Y2hpbGRyZW4oKX0vPlxufSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnQsIENoaWxkcmVufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge3doZW5TZWxlY3Rpb25DaGFuZ2V9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExheWVyIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1cImxheWVyXCJcbiAgICBzdGF0aWMgcHJvcFR5cGVzPXtcbiAgICAgICAgejpQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBhY3RpdmU6IFByb3BUeXBlcy5ib29sLFxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7YWN0aXZlPXRydWUsY2hpbGRyZW59PXRoaXMucHJvcHNcbiAgICAgICAgaWYoIWFjdGl2ZSl7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxHcm91cCBzdHlsZT17e29wYWNpdHk6MC40fX0gb25Eb3VibGVDbGljaz17ZT0+ZX0+XG4gICAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICg8R3JvdXA+e2NoaWxkcmVufTwvR3JvdXA+KVxuICAgIH1cblxuICAgIHN0YXRpYyBDb250YWluZXI9d2hlblNlbGVjdGlvbkNoYW5nZSgoe3NlbGVjdGlvbn0pPT57XG4gICAgICAgIGlmKCFzZWxlY3Rpb24pXG4gICAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgY29uc3QgcHJvcHM9c2VsZWN0aW9uLnByb3BzKFwicGFnZVwiKVxuICAgICAgICBjb25zdCBhY3RpdmU9cHJvcHMgPyBwcm9wcy5sYXllciA6IHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4ge2FjdGl2ZX1cbiAgICB9KShjbGFzcyBMYXllckNvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudHtcbiAgICAgICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgICAgICBlZGl0YWJsZTogUHJvcFR5cGVzLmFueVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpe1xuICAgICAgICAgICAgaWYoIXRoaXMuY29udGV4dC5lZGl0YWJsZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxGcmFnbWVudD57dGhpcy5wcm9wcy5jaGlsZHJlbn08L0ZyYWdtZW50PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qge2FjdGl2ZX09dGhpcy5wcm9wc1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW49Q2hpbGRyZW4udG9BcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6YX0se3Byb3BzOmJ9KT0+YS56LWIueilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY2hpbGRyZW4uZmlsdGVyKGE9PmEucHJvcHMueiE9YWN0aXZlKS5tYXAoYT0+UmVhY3QuY2xvbmVFbGVtZW50KGEsIHthY3RpdmU6ZmFsc2V9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5maW5kKGE9PmEucHJvcHMuej09YWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICBdLmZpbHRlcihhPT4hIWEpfVxuICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxufSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgQ2hpbGRyZW4sIEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi90ZXh0XCJcbmltcG9ydCBMYXllciBmcm9tIFwiLi9sYXllclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR3aWR0aDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0eDpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHk6UHJvcFR5cGVzLm51bWJlcixcblx0XHR6OlByb3BUeXBlcy5udW1iZXIsXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRkZWJ1ZzogUHJvcFR5cGVzLmJvb2xcblx0fVxuXG5cdHN0YXRpYyBMYXllcj1MYXllclxuXHRzdGF0aWMgTGF5ZXJzPUxheWVyLkNvbnRhaW5lclxuXG4gICAgcmVuZGVyKCl7XG5cdFx0bGV0IHtcblx0XHRcdGlubmVyUmVmLCAvL2ZvciB3YXlwb2ludFxuXHRcdFx0cm90YXRlLFxuXHRcdFx0eD0wLHk9MCxcblx0XHRcdGNoaWxkcmVuLFxuXHRcdFx0YmFja2dyb3VuZCxcblx0XHRcdG1hcmdpbixtaW5XaWR0aCwgd2lkdGgsIGhlaWdodCwgaW5kZXgsIGNoaWxkSW5kZXgsZ2VvbWV0cnksYmFzZWxpbmUsbGluZURlc2NlbnQsaXNMYXN0UmFua09mUm93LGlzRmlyc3RSb3dJblBhZ2UsXG5cdFx0XHRjb250ZW50V2lkdGgsd3JhcCxwYWdpbmF0aW9uLGFuY2hvcixibG9ja09mZnNldCxuYW1lZCxkZXNjZW50LG1lcmdlT3Bwb3J0dW5pdHksIHNwYWNlSGVpZ2h0LGVkaXRhYmxlLGRpc3BhdGNoLFxuXHRcdFx0Ly9jbGFzc05hbWUsaWQsXG5cdFx0XHRJLFxuXHRcdFx0Li4ub3RoZXJzfT10aGlzLnByb3BzXG5cdFx0Y29uc3QgcHJvcHM9e31cblxuXHRcdGlmKGlubmVyUmVmKXtcblx0XHRcdHByb3BzLnJlZj1pbm5lclJlZlxuXHRcdH1cblxuXHRcdGxldCB0cmFuc2Zvcm09XCJcIlxuXG5cdFx0aWYoeHx8eSl7XG5cdFx0XHR0cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3BhcnNlSW50KHh8fDApfSAke3BhcnNlSW50KHl8fDApfSlgXG5cdFx0fVxuXG5cdFx0aWYocm90YXRlKXtcblx0XHRcdHRyYW5zZm9ybT1gJHt0cmFuc2Zvcm19IHJvdGF0ZSgke3JvdGF0ZX0pYFxuXHRcdH1cblxuXHRcdGlmKHRyYW5zZm9ybS5sZW5ndGg+MCl7XG5cdFx0XHRwcm9wcy50cmFuc2Zvcm09dHJhbnNmb3JtXG5cdFx0fVxuXG5cdFx0Y29uc3QgY29udGVudD1bXG5cdFx0XHRiYWNrZ3JvdW5kJiZiYWNrZ3JvdW5kIT1cInRyYW5zcGFyZW50XCImJiAoPHJlY3Qgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gZmlsbD17YmFja2dyb3VuZH0ga2V5PVwiYmFja2dyb3VuZFwiLz4pLFxuXHRcdFx0Li4uQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbikubWFwKChhLGkpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7a2V5Oml9KSlcblx0XHRdLmZpbHRlcihhPT5hKVxuXG5cdFx0aWYodGhpcy5jb250ZXh0LmRlYnVnKXtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxnIHsuLi5vdGhlcnN9IHsuLi5wcm9wc30+XG5cdFx0XHRcdFx0e2NvbnRlbnR9XG5cdFx0XHRcdDwvZz5cblx0XHRcdClcblx0XHR9XG5cblx0XHRjb25zdCBrZXlzPU9iamVjdC5rZXlzKHByb3BzKVxuXHRcdGlmKGtleXMubGVuZ3RoPT0wKXtcblx0XHRcdHJldHVybiA8RnJhZ21lbnQ+e2NvbnRlbnR9PC9GcmFnbWVudD5cblx0XHR9ZWxzZSBpZihjb250ZW50Lmxlbmd0aD09MSAmJiBrZXlzLmxlbmd0aD09MSAmJiBrZXlzWzBdPT1cInRyYW5zZm9ybVwiICYmICFyb3RhdGUpe1xuXHRcdFx0Y29uc3Qge3Byb3BzOnt4OngxPTAseTp5MT0wfSx0eXBlfT1jb250ZW50WzBdXHRcblx0XHRcdHN3aXRjaCh0eXBlKXtcblx0XHRcdFx0Y2FzZSBUZXh0OlxuXHRcdFx0XHRjYXNlIHRoaXMuY29uc3RydWN0b3I6XG5cdFx0XHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjb250ZW50WzBdLHt4OngxK3gseTp5MSt5fSlcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGcgey4uLnByb3BzfT5cblx0XHRcdFx0e2NvbnRlbnR9XG5cdFx0XHQ8L2c+XG5cdFx0KVxuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IFdheXBvaW50IGZyb20gXCJyZWFjdC13YXlwb2ludFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4vZ3JvdXBcIlxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvc2VkRG9jdW1lbnRDYW52YXMgZXh0ZW5kcyBDb21wb25lbnR7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cImNvbXBvc2VkLWRvY3VtZW50LWRlZmF1bHQtY2FudmFzXCJcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0bWVkaWE6IFByb3BUeXBlcy5zdHJpbmcsXG5cdH1cblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0cGFnZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vYmplY3QpLFxuXHRcdHBhZ2VHYXA6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0c2NhbGU6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0ZG9jdW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cblxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHRwYWdlR2FwOjI0LFxuXHRcdHNjYWxlOjEsXG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtkb2N1bWVudCwuLi5tZX0pe1xuICAgICAgICBjb25zdCB7cGFnZXMscHJvcHM6e3NjYWxlPW1lLnNjYWxlLHBhZ2VHYXA9bWUucGFnZUdhcCxwcmVjaXNpb249bWUucHJlY2lzaW9ufX09ZG9jdW1lbnRcbiAgICAgICAgcmV0dXJuIHtwYWdlcyxwcmVjaXNpb24sc2NhbGUscGFnZUdhcH1cblx0fVxuXHRcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17fVxuXHR9XG5cblx0Z2V0Q29tcG9zZWQ9bWVtb2l6ZSgocGFnZXMscGFnZUdhcCk9Pntcblx0XHRjb25zdCBjb250ZW50PXBhZ2VzLm1hcChwYWdlPT5wYWdlLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKVxuXHRcdHJldHVybiBjb250ZW50LnJlZHVjZSgoc2l6ZSx7cHJvcHM6e3dpZHRoLGhlaWdodH19KT0+e1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihzaXplLHtcblx0XHRcdFx0XHR3aWR0aDpNYXRoLm1heChzaXplLndpZHRoLHdpZHRoKSxcblx0XHRcdFx0XHRoZWlnaHQ6c2l6ZS5oZWlnaHQraGVpZ2h0K3BhZ2VHYXAsXG5cdFx0XHRcdH0pXG5cdFx0XHR9LHt3aWR0aDowLGhlaWdodDpwYWdlR2FwLGNvbXBvc2VkOmNvbnRlbnR9KVxuXHR9KVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtcblx0XHRcdHN0YXRlOntwYWdlcywgcGFnZUdhcCwgc2NhbGUscHJlY2lzaW9uPTF9LCBcblx0XHRcdHByb3BzOntzdHlsZSxjaGlsZHJlbixpbm5lclJlZixkb2N1bWVudCxwYWdlczpfMSxwYWdlR2FwOl8yLHNjYWxlOl8zLHByZWNpc2lvbjpfNCxwYXBlcixfX3NlcXVlbnRpYWxDb21wb3NlLCAuLi5wcm9wc31cblx0XHR9PXRoaXNcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LGNvbXBvc2VkfT10aGlzLmdldENvbXBvc2VkKHBhZ2VzLCBwYWdlR2FwKVxuXHRcdHJldHVybiAgIChcblx0XHRcdDxzdmdcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRyZWY9e2lubmVyUmVmfVxuXHRcdFx0XHRwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwieE1pZFlNaW5cIlxuXHRcdFx0XHR2aWV3Qm94PXtgMCAwICR7d2lkdGh9ICR7aGVpZ2h0fWB9XG5cdFx0XHRcdHN0eWxlPXt7YmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsIHdpZHRoOndpZHRoKnNjYWxlKnByZWNpc2lvbiwgaGVpZ2h0OmhlaWdodCpzY2FsZSpwcmVjaXNpb24sIC4uLnN0eWxlfX1cblx0XHRcdFx0PlxuXHRcdFx0XHR7dGhpcy5wb3NpdGlvblBhZ2VzKGNvbXBvc2VkLCB3aWR0aCl9XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvc3ZnPlxuXHRcdClcblx0fVxuXG5cdHBvc2l0aW9uUGFnZXMocGFnZXMsY2FudmFzV2lkdGgpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7cGFnZUdhcCwgcHJlY2lzaW9ufSwgcHJvcHM6e3BhcGVyfSxjb250ZXh0OnttZWRpYX19PXRoaXNcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEdyb3VwIHk9e3BhZ2VHYXB9IHg9ezB9PlxuXHRcdFx0XHR7cGFnZXMucmVkdWNlKChwb3NpdGlvbmVkLCBwYWdlKT0+e1xuXHRcdFx0XHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsbWFyZ2luLEl9PXBhZ2UucHJvcHNcblx0XHRcdFx0XHRwb3NpdGlvbmVkLnB1c2goLy91c2UgZyB0byBtYWtlIEdyb3VwIGlnbm9yZSBjbGFzc05hbWUgYW5kIGlkIGZvciBiZXR0ZXIgbWVyZ2Vcblx0XHRcdFx0XHRcdDxnIGtleT17SX0gY2xhc3NOYW1lPXtcInBhZ2VcIn0gaWQ9e2BwYWdlJHtJfWB9PlxuXHRcdFx0XHRcdFx0XHQ8R3JvdXAgey4uLnt5OnBvc2l0aW9uZWQueSx4OihjYW52YXNXaWR0aC13aWR0aCkvMn19PlxuXHRcdFx0XHRcdFx0XHRcdHttZWRpYT09XCJmaWxlXCIgPyBwYWdlIDpcblx0XHRcdFx0XHRcdFx0XHQ8U21hcnRTaG93IHsuLi57XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpwYWdlLFxuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGgsaGVpZ2h0LG1hcmdpbixcblx0XHRcdFx0XHRcdFx0XHRcdHByZWNpc2lvbixwYXBlcixcblx0XHRcdFx0XHRcdFx0XHR9fS8+fVxuXHRcdFx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHRcdFx0PC9nPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHRwb3NpdGlvbmVkLnkrPShoZWlnaHQrcGFnZUdhcClcblx0XHRcdFx0XHRyZXR1cm4gcG9zaXRpb25lZFxuXHRcdFx0XHR9LE9iamVjdC5hc3NpZ24oW10se3k6MH0pKX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG5cdC8vZm9sbG93IHNhbWUgbGF5b3V0IG9mIHBvc2l0aW9uUGFnZXNcblx0c3RhdGljIGNvbXBvc2VkWShwYWdlcywgcGFnZUdhcCl7XG4gICAgICAgIGNvbnN0IGxhc3Q9cGFnZXNbcGFnZXMubGVuZ3RoLTFdXG4gICAgICAgIGlmKCFsYXN0KVxuICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgY29uc3QgaGVpZ2h0T2ZMYXN0PWxhc3QuY29udGV4dC5wYXJlbnQuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCkgPyBsYXN0LnByb3BzLmhlaWdodCA6IGxhc3QuY29tcG9zZWRIZWlnaHRcbiAgICAgICAgcmV0dXJuIHBhZ2VzLnNsaWNlKDAscGFnZXMubGVuZ3RoLTEpLnJlZHVjZSgodyxwYWdlKT0+dytwYWdlLnByb3BzLmhlaWdodCtwYWdlR2FwLGhlaWdodE9mTGFzdClcblx0fVxuXG5cdHN0YXRpYyBwYWdlUmVjdChJLCBzdmcpe1xuXHRcdGNvbnN0IHBhZ2U9c3ZnLnF1ZXJ5U2VsZWN0b3IoXCIjcGFnZVwiK0kpXG4gICAgICAgIHJldHVybiBwYWdlICYmIHBhZ2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblx0fVxufVxuXG5cbmNsYXNzIFNtYXJ0U2hvdyBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGU9e2Rpc3BsYXk6ZmFsc2V9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtkaXNwbGF5fT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge2NoaWxkcmVuLHdpZHRoLGhlaWdodCxtYXJnaW4scHJlY2lzaW9uLHBhcGVyfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcblx0XHRcdDxXYXlwb2ludCBmaXJlT25SYXBpZFNjcm9sbD17ZmFsc2V9XG5cdFx0XHRcdG9uRW50ZXI9e2U9Pnt0aGlzLnNldFN0YXRlKHtkaXNwbGF5OnRydWV9KX19XG5cdFx0XHRcdG9uTGVhdmU9e2U9PnRoaXMuc2V0U3RhdGUoe2Rpc3BsYXk6ZmFsc2V9KX0+XG5cdFx0XHRcdDxnPlxuXHRcdFx0XHRcdHtwYXBlciAmJiA8UGFwZXIgey4uLnt3aWR0aCxoZWlnaHQsbWFyZ2luLGZpbGw6XCJ3aGl0ZVwiLCBwcmVjaXNpb24sLi4ucGFwZXJ9fS8+fVxuXHRcdFx0XHRcdHtkaXNwbGF5ID8gY2hpbGRyZW4gOiBudWxsfVxuXHRcdFx0XHQ8L2c+XG5cdFx0XHQ8L1dheXBvaW50PlxuXHRcdClcblx0fVxufVxuXG5jb25zdCBQYXBlcj0oe3dpZHRoLGhlaWdodCwgbWFyZ2luOntsZWZ0PTAscmlnaHQ9MCx0b3A9MCxib3R0b209MH09e30sIHByZWNpc2lvbiwgYm9yZGVyPXRydWUsXG5cdHN0cm9rZVdpZHRoPTEqcHJlY2lzaW9uLCBtYXJnaW5XaWR0aD0yMCpwcmVjaXNpb24sIC4uLnByb3BzfSk9PihcbiAgIDxnIGNsYXNzTmFtZT1cInBhcGVyXCI+XG5cdCAgIDxyZWN0IHsuLi5wcm9wc30gey4uLnt3aWR0aCxoZWlnaHR9fS8+XG5cdCAgIHtib3JkZXIgJiYgPHBhdGggc3Ryb2tlV2lkdGg9e3N0cm9rZVdpZHRofSBzdHJva2U9XCJsaWdodGdyYXlcIiBmaWxsPVwibm9uZVwiIGQ9e2Bcblx0XHQgICBcdFx0TTAgMCBoJHt3aWR0aH0gdiR7aGVpZ2h0fSBoJHstd2lkdGh9elxuXHRcdFx0XHRNJHtsZWZ0LU1hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSAke3RvcH0gaCR7TWF0aC5taW4obGVmdCxtYXJnaW5XaWR0aCl9IHYkey1NYXRoLm1pbih0b3AsbWFyZ2luV2lkdGgpfVxuXHRcdFx0XHRNJHtsZWZ0LU1hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSAke2hlaWdodC1ib3R0b219IGgke01hdGgubWluKGxlZnQsbWFyZ2luV2lkdGgpfSB2JHtNYXRoLm1pbihib3R0b20sbWFyZ2luV2lkdGgpfVxuXHRcdFx0XHRNJHt3aWR0aC1yaWdodCtNYXRoLm1pbihyaWdodCxtYXJnaW5XaWR0aCl9ICR7aGVpZ2h0LWJvdHRvbX0gaCR7LU1hdGgubWluKHJpZ2h0LG1hcmdpbldpZHRoKX0gdiR7TWF0aC5taW4oYm90dG9tLG1hcmdpbldpZHRoKX1cblx0XHRcdFx0TSR7d2lkdGgtcmlnaHQrTWF0aC5taW4ocmlnaHQsbWFyZ2luV2lkdGgpfSAke3RvcH0gaCR7LU1hdGgubWluKHJpZ2h0LG1hcmdpbldpZHRoKX0gdiR7LU1hdGgubWluKHRvcCxtYXJnaW5XaWR0aCl9XG5cdFx0XHRgfS8+XG5cdFx0fVxuICAgPC9nPlxuKVxuIiwiaW1wb3J0IFJlYWN0LHtQdXJlQ29tcG9uZW50IGFzIENvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5cbmV4cG9ydCBjbGFzcyBJbWFnZSBleHRlbmRzIENvbXBvbmVudHtcblx0cmVuZGVyKCl7XG5cdFx0cmV0dXJuIDxpbWFnZSB7Li4udGhpcy5wcm9wc30gLz5cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFwZSBleHRlbmRzIENvbXBvbmVudHtcbiAgICByZW5kZXIoKXtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG59XG4iLCIvKipcbiAqIGl0J3MgdG8gZGVzY3JpYmUgc3BhY2UgdGhhdCBsYXlvdXQgZW5naW5lIHVzZVxuICogbGVmdCA8LS0+IHJpZ2h0OiBpbmxpbmUgc2l6ZVxuICogYmxvY2tPZmZzZXQ6IGN1cnJlbnQgYmxvY2sgb2Zmc2V0XG4gKiBoZWlnaHQ6IGF2YWlsYWJsZSBibG9jayBzaXplLCBibG9ja09mZnNldCA8LS0tPmxhc3QgYmxvY2sgbGF5b3V0IG9wcG9ydHVuaXRpZXNcbiAqIHdyYXBwZWVzOiBleGNsdWRlZCBhcmVhcyBpbiBhIHNwYWNlXG4gKi9cblxuLyoqXG4gKiBzcGFjZSBjYW4gYmUgY29uc3RyYWluZWQgYnkgaW5saW5lIHNpemUsIGJsb2NrIHNpemUsIG9yIGJvdGgsIFxuICogYW5kIGV4Y2x1c2l2ZSB3cmFwcGVlc1xuICovXG4gZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BhY2V7XG4gICAgc3RhdGljIGNyZWF0ZShzb3VyY2Upe1xuICAgICAgICBpZihzb3VyY2UgaW5zdGFuY2VvZiBTcGFjZSlcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2VcbiAgICAgICAgcmV0dXJuIG5ldyBTcGFjZSguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgIGNvbnN0cnVjdG9yKHt3aWR0aCxsZWZ0PTAscmlnaHQsLi4ucHJvcHN9PXt9KXtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLHByb3BzKVxuICAgICAgICB0aGlzLnByb3BzPWFyZ3VtZW50c1swXXx8e31cbiAgICAgfVxuXG4gICAgIGdldCB3aWR0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5yaWdodC10aGlzLmxlZnRcbiAgICAgfVxuXG4gICAgIGdldCBsZWZ0KCl7XG4gICAgICAgICBjb25zdCB7bGVmdD0wfT10aGlzLnByb3BzXG4gICAgICAgICByZXR1cm4gbGVmdFxuICAgICB9XG5cbiAgICAgZ2V0IHJpZ2h0KCl7XG4gICAgICAgICBjb25zdCB7d2lkdGgscmlnaHQ9d2lkdGh9PXRoaXMucHJvcHNcbiAgICAgICAgIHJldHVybiByaWdodFxuICAgICB9XG5cbiAgICAgY2xvbmUobW9kaWZpZXIpe1xuICAgICAgICAgaWYobW9kaWZpZXIgaW5zdGFuY2VvZiBTcGFjZSl7XG4gICAgICAgICAgICBtb2RpZmllcj1tb2RpZmllci5wcm9wc1xuICAgICAgICAgfVxuICAgICAgICAgcmV0dXJuIG5ldyBTcGFjZSh7Li4udGhpcy5wcm9wcywgLi4ubW9kaWZpZXIsZWRnZXM6ey4uLnRoaXMucHJvcHMuZWRnZXMsIC4uLm1vZGlmaWVyLmVkZ2VzLH19KVxuICAgICB9XG5cbiAgICAgYW5jaG9yKHtiYXNlLCBvZmZzZXQ9MCwgYWxpZ259LHt3aWR0aD0wLGhlaWdodD0wfT17fSl7XG4gICAgICAgIGNvbnN0IHtlZGdlc309dGhpcy5wcm9wc1xuICAgICAgICBpZighZWRnZXMgfHwgIWVkZ2VzW2Jhc2VdIHx8ICEoYWxpZ24gaW4gZWRnZXNbYmFzZV0pKVxuICAgICAgICAgICAgcmV0dXJuIG9mZnNldFxuICAgICAgICBcbiAgICAgICAgY29uc3Qge1tiYXNlXTp7W2FsaWduXTp2PTB9PXt9fT1lZGdlc1xuICAgICAgICBzd2l0Y2goYWxpZ24pe1xuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6IFxuICAgICAgICAgICAgICAgIHJldHVybiB2LW9mZnNldC13aWR0aFxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOiBcbiAgICAgICAgICAgICAgICByZXR1cm4gdi1vZmZzZXQtaGVpZ2h0XG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm4gditvZmZzZXQgXG4gICAgICAgIH1cbiAgICAgfVxuXG4gICAgIGlzSW5saW5lU2l6ZURpZmZlcmVudCh0aGF0KXtcbiAgICAgICAgaWYoISF0aGlzLmNvbHMhPT0hIXRoYXQuY29scylcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIGNvbnN0IHt3aWR0aCxjb2xzfT10aGF0XG4gICAgICAgIGlmKCFjb2xzKVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoIT10aGlzLndpZHRoXG4gICAgICAgIGlmKGNvbHMubGVuZ3RoIT10aGlzLmNvbHMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgaWYodGhpcy5jb2xzLmZpbmQoKGEsaSxfLCQsYj1jb2xzW2ldKT0+YS53aWR0aCE9Yi53aWR0aCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICB9XG5cbiAgICAgZXF1YWxzKHRoYXQpe1xuICAgICAgICAgaWYoIXRoaXMuaXNJbmxpbmVTaXplRGlmZmVyZW50KHRoYXQpKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhlaWdodD09dGhhdC5oZWlnaHRcbiAgICAgICAgIH1cbiAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICB9XG4gfVxuIFxuIiwiLyoqXG4gKiBTaW1wbGUgUG9pbnQgY2xhc3MuXG4gKlxuICogQW55IG1ldGhvZCB0aGF0IHRha2VzIGFuIHggYW5kIHkgbWF5IGFsc28gdGFrZSBhIHBvaW50LlxuICovXG5mdW5jdGlvbiBQb2ludCh4LCB5KSB7XG4gIHRoaXMuc2V0KHgsIHkpO1xufVxuXG5Qb2ludC5wcm90b3R5cGUgPSB7XG4gIGNsb25lOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcbiAgfSxcblxuICBzZXQ6IGZ1bmN0aW9uIHNldCh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIGVxdWFsczogZnVuY3Rpb24gZXF1YWxzKHgsIHkpIHtcbiAgICByZXR1cm4gdGhpcy54ID09IHggJiYgdGhpcy55ID09IHk7XG4gIH0sXG5cbiAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBcIihcIiArIHRoaXMueCArIFwiLFwiICsgdGhpcy55ICsgXCIpXCI7XG4gIH0sXG5cbiAgbWFwOiBmdW5jdGlvbiBtYXAoZikge1xuICAgIHRoaXMueCA9IGYuY2FsbCh0aGlzLCB0aGlzLngpO1xuICAgIHRoaXMueSA9IGYuY2FsbCh0aGlzLCB0aGlzLnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIGFkZDogZnVuY3Rpb24gYWRkKHgsIHkpIHtcbiAgICB0aGlzLnggKz0geDtcbiAgICB0aGlzLnkgKz0geTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3QoeCwgeSkge1xuICAgIHRoaXMueCAtPSB4O1xuICAgIHRoaXMueSAtPSB5O1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHNjYWxlOiBmdW5jdGlvbiBzY2FsZShzKSB7XG4gICAgdGhpcy54ICo9IHM7XG4gICAgdGhpcy55ICo9IHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgaXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLnggPT0gMCAmJiB0aGlzLnkgPT0gMDtcbiAgfSxcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdGFrZVBvaW50T3JBcmdzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYXJnMSwgYXJnMikge1xuICAgICAgaWYgKGFyZzIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGYuY2FsbCh0aGlzLCBhcmcxLngsIGFyZzEueSk7XG4gICAgICByZXR1cm4gZi5jYWxsKHRoaXMsIGFyZzEsIGFyZzIpO1xuICAgIH07XG4gIH1cblxuICBmb3IgKGxldCBmIG9mIFtcImFkZFwiLCBcInN1YnRyYWN0XCIsIFwiZXF1YWxzXCIsIFwic2V0XCJdKVxuICAgIFBvaW50LnByb3RvdHlwZVtmXSA9IHRha2VQb2ludE9yQXJncyhQb2ludC5wcm90b3R5cGVbZl0pO1xufSkoKTtcblxuXG4vKipcbiAqIFJlY3QgaXMgYSBzaW1wbGUgZGF0YSBzdHJ1Y3R1cmUgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVjdGFuZ2xlIHN1cHBvcnRpbmdcbiAqIG1hbnkgYmFzaWMgZ2VvbWV0cmljIG9wZXJhdGlvbnMuXG4gKlxuICogTk9URTogU2luY2UgaXRzIG9wZXJhdGlvbnMgYXJlIGNsb3NlZCwgcmVjdGFuZ2xlcyBtYXkgYmUgZW1wdHkgYW5kIHdpbGwgcmVwb3J0XG4gKiBub24tcG9zaXRpdmUgd2lkdGhzIGFuZCBoZWlnaHRzIGluIHRoYXQgY2FzZS5cbiAqL1xuXG5mdW5jdGlvbiBSZWN0KHgsIHksIHcsIGgpIHtcbiAgdGhpcy5sZWZ0ID0geDtcbiAgdGhpcy50b3AgPSB5O1xuICB0aGlzLnJpZ2h0ID0geCArIHc7XG4gIHRoaXMuYm90dG9tID0geSArIGg7XG59XG5cblJlY3QuZnJvbVJlY3QgPSBmdW5jdGlvbiBmcm9tUmVjdChyKSB7XG4gIHJldHVybiBuZXcgUmVjdChyLmxlZnQsIHIudG9wLCByLnJpZ2h0IC0gci5sZWZ0LCByLmJvdHRvbSAtIHIudG9wKTtcbn07XG5cblJlY3QucHJvdG90eXBlID0ge1xuICBnZXQgeCgpIHsgcmV0dXJuIHRoaXMubGVmdDsgfSxcbiAgZ2V0IHkoKSB7IHJldHVybiB0aGlzLnRvcDsgfSxcbiAgZ2V0IHdpZHRoKCkgeyByZXR1cm4gdGhpcy5yaWdodCAtIHRoaXMubGVmdDsgfSxcbiAgZ2V0IGhlaWdodCgpIHsgcmV0dXJuIHRoaXMuYm90dG9tIC0gdGhpcy50b3A7IH0sXG4gIHNldCB4KHYpIHtcbiAgICBsZXQgZGlmZiA9IHRoaXMubGVmdCAtIHY7XG4gICAgdGhpcy5sZWZ0ID0gdjtcbiAgICB0aGlzLnJpZ2h0IC09IGRpZmY7XG4gIH0sXG4gIHNldCB5KHYpIHtcbiAgICBsZXQgZGlmZiA9IHRoaXMudG9wIC0gdjtcbiAgICB0aGlzLnRvcCA9IHY7XG4gICAgdGhpcy5ib3R0b20gLT0gZGlmZjtcbiAgfSxcbiAgc2V0IHdpZHRoKHYpIHsgdGhpcy5yaWdodCA9IHRoaXMubGVmdCArIHY7IH0sXG4gIHNldCBoZWlnaHQodikgeyB0aGlzLmJvdHRvbSA9IHRoaXMudG9wICsgdjsgfSxcblxuICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmxlZnQgPj0gdGhpcy5yaWdodCB8fCB0aGlzLnRvcCA+PSB0aGlzLmJvdHRvbTtcbiAgfSxcblxuICBzZXRSZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLmxlZnQgPSB4O1xuICAgIHRoaXMudG9wID0geTtcbiAgICB0aGlzLnJpZ2h0ID0geCArIHc7XG4gICAgdGhpcy5ib3R0b20gPSB5ICsgaDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIHNldEJvdW5kcyhsLCB0LCByLCBiKSB7XG4gICAgdGhpcy50b3AgPSB0O1xuICAgIHRoaXMubGVmdCA9IGw7XG4gICAgdGhpcy5ib3R0b20gPSBiO1xuICAgIHRoaXMucmlnaHQgPSByO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICByZXR1cm4gb3RoZXIgIT0gbnVsbCAmJlxuICAgICAgICAgICAgKHRoaXMuaXNFbXB0eSgpICYmIG90aGVyLmlzRW1wdHkoKSB8fFxuICAgICAgICAgICAgdGhpcy50b3AgPT0gb3RoZXIudG9wICYmXG4gICAgICAgICAgICB0aGlzLmxlZnQgPT0gb3RoZXIubGVmdCAmJlxuICAgICAgICAgICAgdGhpcy5ib3R0b20gPT0gb3RoZXIuYm90dG9tICYmXG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID09IG90aGVyLnJpZ2h0KTtcbiAgfSxcblxuICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWN0KHRoaXMubGVmdCwgdGhpcy50b3AsIHRoaXMucmlnaHQgLSB0aGlzLmxlZnQsIHRoaXMuYm90dG9tIC0gdGhpcy50b3ApO1xuICB9LFxuXG4gIGNlbnRlcjogZnVuY3Rpb24gY2VudGVyKCkge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSlcbiAgICAgIHRocm93IFwiRW1wdHkgcmVjdGFuZ2xlcyBkbyBub3QgaGF2ZSBjZW50ZXJzXCI7XG4gICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmxlZnQgKyAodGhpcy5yaWdodCAtIHRoaXMubGVmdCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcCArICh0aGlzLmJvdHRvbSAtIHRoaXMudG9wKSAvIDIpO1xuICB9LFxuXG4gIGNvcHlGcm9tKG90aGVyKSB7XG4gICAgdGhpcy50b3AgPSBvdGhlci50b3A7XG4gICAgdGhpcy5sZWZ0ID0gb3RoZXIubGVmdDtcbiAgICB0aGlzLmJvdHRvbSA9IG90aGVyLmJvdHRvbTtcbiAgICB0aGlzLnJpZ2h0ID0gb3RoZXIucmlnaHQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICB0cmFuc2xhdGUoeCwgeSkge1xuICAgIHRoaXMubGVmdCArPSB4O1xuICAgIHRoaXMucmlnaHQgKz0geDtcbiAgICB0aGlzLnRvcCArPSB5O1xuICAgIHRoaXMuYm90dG9tICs9IHk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gXCJbXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiLFwiICsgdGhpcy53aWR0aCArIFwiLFwiICsgdGhpcy5oZWlnaHQgKyBcIl1cIjtcbiAgfSxcblxuICAvKiogcmV0dXJuIGEgbmV3IHJlY3QgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhhdCBvbmUgYW5kIHRoaXMgb25lICovXG4gIHVuaW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5leHBhbmRUb0NvbnRhaW4ob3RoZXIpO1xuICB9LFxuXG4gIGNvbnRhaW5zKG90aGVyKSB7XG4gICAgaWYgKG90aGVyLmlzRW1wdHkoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gKG90aGVyLmxlZnQgPj0gdGhpcy5sZWZ0ICYmXG4gICAgICAgICAgICBvdGhlci5yaWdodCA8PSB0aGlzLnJpZ2h0ICYmXG4gICAgICAgICAgICBvdGhlci50b3AgPj0gdGhpcy50b3AgJiZcbiAgICAgICAgICAgIG90aGVyLmJvdHRvbSA8PSB0aGlzLmJvdHRvbSk7XG4gIH0sXG5cbiAgaW50ZXJzZWN0KG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5yZXN0cmljdFRvKG90aGVyKTtcbiAgfSxcblxuICBpbnRlcnNlY3RzKG90aGVyKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpIHx8IG90aGVyLmlzRW1wdHkoKSlcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGxldCB4MSA9IE1hdGgubWF4KHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHgyID0gTWF0aC5taW4odGhpcy5yaWdodCwgb3RoZXIucmlnaHQpO1xuICAgIGxldCB5MSA9IE1hdGgubWF4KHRoaXMudG9wLCBvdGhlci50b3ApO1xuICAgIGxldCB5MiA9IE1hdGgubWluKHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIHJldHVybiB4MSA8IHgyICYmIHkxIDwgeTI7XG4gIH0sXG5cbiAgLyoqIFJlc3RyaWN0IGFyZWEgb2YgdGhpcyByZWN0YW5nbGUgdG8gdGhlIGludGVyc2VjdGlvbiBvZiBib3RoIHJlY3RhbmdsZXMuICovXG4gIHJlc3RyaWN0VG86IGZ1bmN0aW9uIHJlc3RyaWN0VG8ob3RoZXIpIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkgfHwgb3RoZXIuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIHRoaXMuc2V0UmVjdCgwLCAwLCAwLCAwKTtcblxuICAgIGxldCB4MSA9IE1hdGgubWF4KHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHgyID0gTWF0aC5taW4odGhpcy5yaWdodCwgb3RoZXIucmlnaHQpO1xuICAgIGxldCB5MSA9IE1hdGgubWF4KHRoaXMudG9wLCBvdGhlci50b3ApO1xuICAgIGxldCB5MiA9IE1hdGgubWluKHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCBpcyAwLCB0aGUgaW50ZXJzZWN0aW9uIHdhcyBlbXB0eS5cbiAgICByZXR1cm4gdGhpcy5zZXRSZWN0KHgxLCB5MSwgTWF0aC5tYXgoMCwgeDIgLSB4MSksIE1hdGgubWF4KDAsIHkyIC0geTEpKTtcbiAgfSxcblxuICAvKiogRXhwYW5kIHRoaXMgcmVjdGFuZ2xlIHRvIHRoZSB1bmlvbiBvZiBib3RoIHJlY3RhbmdsZXMuICovXG4gIGV4cGFuZFRvQ29udGFpbjogZnVuY3Rpb24gZXhwYW5kVG9Db250YWluKG90aGVyKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gdGhpcy5jb3B5RnJvbShvdGhlcik7XG4gICAgaWYgKG90aGVyLmlzRW1wdHkoKSkgcmV0dXJuIHRoaXM7XG5cbiAgICBsZXQgbCA9IE1hdGgubWluKHRoaXMubGVmdCwgb3RoZXIubGVmdCk7XG4gICAgbGV0IHIgPSBNYXRoLm1heCh0aGlzLnJpZ2h0LCBvdGhlci5yaWdodCk7XG4gICAgbGV0IHQgPSBNYXRoLm1pbih0aGlzLnRvcCwgb3RoZXIudG9wKTtcbiAgICBsZXQgYiA9IE1hdGgubWF4KHRoaXMuYm90dG9tLCBvdGhlci5ib3R0b20pO1xuICAgIHJldHVybiB0aGlzLnNldFJlY3QobCwgdCwgciAtIGwsIGIgLSB0KTtcbiAgfSxcblxuICAvKipcbiAgICogRXhwYW5kcyB0byB0aGUgc21hbGxlc3QgcmVjdGFuZ2xlIHRoYXQgY29udGFpbnMgb3JpZ2luYWwgcmVjdGFuZ2xlIGFuZCBpcyBib3VuZGVkXG4gICAqIGJ5IGxpbmVzIHdpdGggaW50ZWdlciBjb2VmZmljaWVudHMuXG4gICAqL1xuICBleHBhbmRUb0ludGVnZXJzOiBmdW5jdGlvbiByb3VuZCgpIHtcbiAgICB0aGlzLmxlZnQgPSBNYXRoLmZsb29yKHRoaXMubGVmdCk7XG4gICAgdGhpcy50b3AgPSBNYXRoLmZsb29yKHRoaXMudG9wKTtcbiAgICB0aGlzLnJpZ2h0ID0gTWF0aC5jZWlsKHRoaXMucmlnaHQpO1xuICAgIHRoaXMuYm90dG9tID0gTWF0aC5jZWlsKHRoaXMuYm90dG9tKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBzY2FsZTogZnVuY3Rpb24gc2NhbGUoeHNjbCwgeXNjbCkge1xuICAgIHRoaXMubGVmdCAqPSB4c2NsO1xuICAgIHRoaXMucmlnaHQgKj0geHNjbDtcbiAgICB0aGlzLnRvcCAqPSB5c2NsO1xuICAgIHRoaXMuYm90dG9tICo9IHlzY2w7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgbWFwOiBmdW5jdGlvbiBtYXAoZikge1xuICAgIHRoaXMubGVmdCA9IGYuY2FsbCh0aGlzLCB0aGlzLmxlZnQpO1xuICAgIHRoaXMudG9wID0gZi5jYWxsKHRoaXMsIHRoaXMudG9wKTtcbiAgICB0aGlzLnJpZ2h0ID0gZi5jYWxsKHRoaXMsIHRoaXMucmlnaHQpO1xuICAgIHRoaXMuYm90dG9tID0gZi5jYWxsKHRoaXMsIHRoaXMuYm90dG9tKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICAvKiogRW5zdXJlIHRoaXMgcmVjdGFuZ2xlIGlzIGluc2lkZSB0aGUgb3RoZXIsIGlmIHBvc3NpYmxlLiBQcmVzZXJ2ZXMgdywgaC4gKi9cbiAgdHJhbnNsYXRlSW5zaWRlOiBmdW5jdGlvbiB0cmFuc2xhdGVJbnNpZGUob3RoZXIpIHtcbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgaWYgKHRoaXMubGVmdCA8PSBvdGhlci5sZWZ0KVxuICAgICAgb2Zmc2V0WCA9IG90aGVyLmxlZnQgLSB0aGlzLmxlZnQ7XG4gICAgZWxzZSBpZiAodGhpcy5yaWdodCA+IG90aGVyLnJpZ2h0KVxuICAgICAgb2Zmc2V0WCA9IG90aGVyLnJpZ2h0IC0gdGhpcy5yaWdodDtcblxuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBpZiAodGhpcy50b3AgPD0gb3RoZXIudG9wKVxuICAgICAgb2Zmc2V0WSA9IG90aGVyLnRvcCAtIHRoaXMudG9wO1xuICAgIGVsc2UgaWYgKHRoaXMuYm90dG9tID4gb3RoZXIuYm90dG9tKVxuICAgICAgb2Zmc2V0WSA9IG90aGVyLmJvdHRvbSAtIHRoaXMuYm90dG9tO1xuXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpO1xuICB9LFxuXG4gIC8qKiBTdWJ0cmFjdCBvdGhlciBhcmVhIGZyb20gdGhpcy4gUmV0dXJucyBhcnJheSBvZiByZWN0cyB3aG9zZSB1bmlvbiBpcyB0aGlzLW90aGVyLiAqL1xuICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3Qob3RoZXIpIHtcbiAgICBsZXQgciA9IG5ldyBSZWN0KDAsIDAsIDAsIDApO1xuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBvdGhlciA9IG90aGVyLmludGVyc2VjdCh0aGlzKTtcbiAgICBpZiAob3RoZXIuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIFt0aGlzLmNsb25lKCldO1xuXG4gICAgLy8gbGVmdCBzdHJpcFxuICAgIHIuc2V0Qm91bmRzKHRoaXMubGVmdCwgdGhpcy50b3AsIG90aGVyLmxlZnQsIHRoaXMuYm90dG9tKTtcbiAgICBpZiAoIXIuaXNFbXB0eSgpKVxuICAgICAgcmVzdWx0LnB1c2goci5jbG9uZSgpKTtcbiAgICAvLyBpbnNpZGUgc3RyaXBcbiAgICByLnNldEJvdW5kcyhvdGhlci5sZWZ0LCB0aGlzLnRvcCwgb3RoZXIucmlnaHQsIG90aGVyLnRvcCk7XG4gICAgaWYgKCFyLmlzRW1wdHkoKSlcbiAgICAgIHJlc3VsdC5wdXNoKHIuY2xvbmUoKSk7XG4gICAgci5zZXRCb3VuZHMob3RoZXIubGVmdCwgb3RoZXIuYm90dG9tLCBvdGhlci5yaWdodCwgdGhpcy5ib3R0b20pO1xuICAgIGlmICghci5pc0VtcHR5KCkpXG4gICAgICByZXN1bHQucHVzaChyLmNsb25lKCkpO1xuICAgIC8vIHJpZ2h0IHN0cmlwXG4gICAgci5zZXRCb3VuZHMob3RoZXIucmlnaHQsIHRoaXMudG9wLCB0aGlzLnJpZ2h0LCB0aGlzLmJvdHRvbSk7XG4gICAgaWYgKCFyLmlzRW1wdHkoKSlcbiAgICAgIHJlc3VsdC5wdXNoKHIuY2xvbmUoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBCbGVuZHMgdHdvIHJlY3RhbmdsZXMgdG9nZXRoZXIuXG4gICAqIEBwYXJhbSByZWN0IFJlY3RhbmdsZSB0byBibGVuZCB0aGlzIG9uZSB3aXRoXG4gICAqIEBwYXJhbSBzY2FsYXIgUmF0aW8gZnJvbSAwIChyZXR1cm5zIGEgY2xvbmUgb2YgdGhpcyByZWN0KSB0byAxIChjbG9uZSBvZiByZWN0KS5cbiAgICogQHJldHVybiBOZXcgYmxlbmRlZCByZWN0YW5nbGUuXG4gICAqL1xuICBibGVuZDogZnVuY3Rpb24gYmxlbmQocmVjdCwgc2NhbGFyKSB7XG4gICAgcmV0dXJuIG5ldyBSZWN0KFxuICAgICAgdGhpcy5sZWZ0ICsgKHJlY3QubGVmdCAtIHRoaXMubGVmdCApICogc2NhbGFyLFxuICAgICAgdGhpcy50b3AgKyAocmVjdC50b3AgLSB0aGlzLnRvcCApICogc2NhbGFyLFxuICAgICAgdGhpcy53aWR0aCArIChyZWN0LndpZHRoIC0gdGhpcy53aWR0aCApICogc2NhbGFyLFxuICAgICAgdGhpcy5oZWlnaHQgKyAocmVjdC5oZWlnaHQgLSB0aGlzLmhlaWdodCkgKiBzY2FsYXIpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHcm93cyBvciBzaHJpbmtzIHRoZSByZWN0YW5nbGUgd2hpbGUga2VlcGluZyB0aGUgY2VudGVyIHBvaW50LlxuICAgKiBBY2NlcHRzIHNpbmdsZSBtdWx0aXBsZXIsIG9yIHNlcGFyYXRlIGZvciBib3RoIGF4ZXMuXG4gICAqL1xuICBpbmZsYXRlOiBmdW5jdGlvbiBpbmZsYXRlKHhzY2wsIHlzY2wpIHtcbiAgICBsZXQgeEFkaiA9ICh0aGlzLndpZHRoICogeHNjbCAtIHRoaXMud2lkdGgpIC8gMjtcbiAgICBsZXQgcyA9IChhcmd1bWVudHMubGVuZ3RoID4gMSkgPyB5c2NsIDogeHNjbDtcbiAgICBsZXQgeUFkaiA9ICh0aGlzLmhlaWdodCAqIHMgLSB0aGlzLmhlaWdodCkgLyAyO1xuICAgIHRoaXMubGVmdCAtPSB4QWRqO1xuICAgIHRoaXMucmlnaHQgKz0geEFkajtcbiAgICB0aGlzLnRvcCAtPSB5QWRqO1xuICAgIHRoaXMuYm90dG9tICs9IHlBZGo7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdyb3dzIG9yIHNocmlua3MgdGhlIHJlY3RhbmdsZSBieSBmaXhlZCBhbW91bnQgd2hpbGUga2VlcGluZyB0aGUgY2VudGVyIHBvaW50LlxuICAgKiBBY2NlcHRzIHNpbmdsZSBmaXhlZCBhbW91bnRcbiAgICovXG4gIGluZmxhdGVGaXhlZDogZnVuY3Rpb24gaW5mbGF0ZUZpeGVkKGZpeGVkKSB7XG4gICAgdGhpcy5sZWZ0IC09IGZpeGVkO1xuICAgIHRoaXMucmlnaHQgKz0gZml4ZWQ7XG4gICAgdGhpcy50b3AgLT0gZml4ZWQ7XG4gICAgdGhpcy5ib3R0b20gKz0gZml4ZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG59O1xuXG5leHBvcnQgIHtQb2ludCxSZWN0fVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7IGRvbSwgUmVhY3RRdWVyeSB9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCB7IEhhc1BhcmVudEFuZENoaWxkIH0gZnJvbSBcIi4uLy4uXCJcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkXCJcbmltcG9ydCBDb25zdHJhaW50U3BhY2UgZnJvbSBcIi4uL2NvbnN0cmFpbnQtc3BhY2VcIlxuaW1wb3J0IHtSZWN0fSBmcm9tIFwiLi4vLi4vLi4vdG9vbC9nZW9tZXRyeVwiXG4vKipcbiAqIExheW91dCBlbmdpbmUgaXMgaG93IHRvIGxheW91dCBjb250ZW50IGluIGEgY29uc3RyYWludCBzcGFjZVxuICogc28gaXQgaW5jbHVkZXM6IGEgY29uc3RyYWludCBzcGFjZSArIGxheW91dCBhbGdvcml0aG0gKyBjb250ZW50XG4gKiBMYXlvdXQgYWxnb3JpdGhtIGluY2x1ZGVzIEJsb2NrIGFsZ29yaXRobSBhbmQgSW5saW5lIGFsZ29yaXRobVxuICogQmxvY2sgYWxnb3JpdGhtIGlzIHRvIGxheW91dCBpbiBibG9jayBkaXJlY3Rpb24sIG1vdmUgYnkgYmxvY2sgc2l6ZSxcbiAqIFx0XHRcdGVhY2ggYmxvY2sgZWxlbWVudCBzaG91bGQgYXQgZmlyc3QgZGVjaWRlIGJsb2NrIG9mZnNldCBpbiBzcGFjZSwgdGhlbiBsYXlvdXQgY29udGVudFxuICogSW5saW5lIGFsZ29yaXRobSBpcyB0byBsYXlvdXQgY29udGVudCBpbiBpbmxpbmUgZGlyZWN0aW9uLCBtb3ZlIGJ5IGlubGluZSBzaXplLFxuICogXHRcdFx0ZWFjaCBsYXlvdXQgZWxlbWVudCBzaG91bGQgaGF2ZSBhbiBpbmxpbmUgb2Zmc2V0XG4gKi9cbi8qKlxuICogc3BhY2UgaXMgaW1tdXRhYmxlLCBhbmQgc2hvdWxkIE5PVCBwcm92aWRlIGFueSBsYXlvdXQgZnVuY3Rpb24sXG4gKiBidXQgY2FuIGhlbHAgZGVjaWRlIG9uIGdlb21ldHJ5IGZ1bmN0aW9ucywgc3VjaCBhcyBpbnRlcnNlY3Rpb25cbiAqL1xuLyoqXG4gKiBsYXlvdXQgY29udGVudCBpbiBhIHNwYWNlIHdpdGggZXhjbHVkYWJsZSBhcmVhc1xuICogaW5saW5lIGV4Y2x1ZGFibGUgJiBibG9jayBleGNsdWRhYmxlXG4gKiBleGNsdWRhYmxlIGFyZWFzIGlzIGNoYW5naW5nIGFsb25nIHdpdGggY29udGVudCBhcHBlbmRlZCwgdGhlblxuICogaW5saW5lIHJlLWxheW91dCBhbmQvb3IgYmxvY2sgcmUtbGF5b3V0XG4gKiBleGNsdWRhYmxlIHNwYWNlIGNhbiBhbnN3ZXIgaWYgY29udGVudCBjYW4gbGF5b3V0IHdpdGhvdXQvd2l0aCBzcGFjZSBjaGFuZ2VcbiAqIGxheW91dCBhbGdvcml0aG0gaXRzZWxmKHN1Y2ggYXMgbGluZSwgcGFnZSwgYW5kIGV0YykgZGVjaWRlIGhvdyB0byByZS1sYXlvdXRcbiAqIGNvbnN0cmFpbnQgc3BhY2U6e2xlZnQscmlnaHQsIGhlaWdodCwgYmxvY2tPZmZzZXR9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3cgZXh0ZW5kcyBIYXNQYXJlbnRBbmRDaGlsZChkb20uQ29udGFpbmVyKSB7XG5cdHN0YXRpYyBJTU1FRElBVEVfU1RPUCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXHRzdGF0aWMgcHJvcFR5cGVzID0ge1xuXHRcdGJhbGFuY2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuZnVuY10pLFxuXHRcdGJhbGFuY2VUaHJlc2hvbGQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0c3BhY2U6IFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHRsZWZ0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0cmlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRibG9ja09mZnNldDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdGhlaWdodDogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdHdyYXBwZWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KVxuXHRcdH0pLFxuXHRcdGNvbHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHR4OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0eTogUHJvcFR5cGVzLm51bWJlcixcblx0XHRcdHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdH0pKSxcblx0XHRpbmhlcml0RXhjbHVzaXZlczogUHJvcFR5cGVzLmJvb2wsXG5cdFx0YWxsb3dPdmVyZmxvdzogUHJvcFR5cGVzLmJvb2wsXG5cdH07XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cyk7XG5cdFx0dGhpcy5jb21wdXRlZC5hbmNob3JzID0gW107XG5cdFx0dGhpcy5kZWZpbmVQcm9wZXJ0aWVzKCk7XG5cdH1cblx0ZGVmaW5lUHJvcGVydGllcygpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRmaXJzdExpbmU6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXNbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvKippdCBwcm92aWRlcyByZXBsYWNlV2l0aCBhbmQgZGV0YWNoICovXG5cdFx0XHRsYXN0TGluZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCBsaW5lcyA9IHRoaXMubGluZXM7XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRsaW5lczoge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb21wb3NlZDtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHZhbHVlcykge1xuXHRcdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQgPSB2YWx1ZXM7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR0b3RhbExpbmVzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGJsb2NrT2Zmc2V0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCB7IGJsb2NrT2Zmc2V0ID0gMCB9ID0gdGhpcy5nZXRTcGFjZSgpO1xuXHRcdFx0XHRcdHJldHVybiBibG9ja09mZnNldCArIHRoaXMuY29udGVudEhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGF2YWlsYWJsZUJsb2NrU2l6ZToge1xuXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRjb25zdCB7IGhlaWdodD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB9ID0gdGhpcy5nZXRTcGFjZSgpO1xuXHRcdFx0XHRcdHJldHVybiBoZWlnaHQgLSB0aGlzLmNvbnRlbnRIZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbmNob3JzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5hbmNob3JzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXQodmFsdWVzKSB7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5hbmNob3JzID0gdmFsdWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0d3JhcHBlZXM6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYW5jaG9ycy5maWx0ZXIoKHsgcHJvcHM6IHsgd3JhcCB9IH0pID0+ICEhd3JhcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb250ZW50SGVpZ2h0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmxpbmVzLnJlZHVjZSgoSCwgeyBwcm9wczogeyBoZWlnaHQ6IGggPSAwIH0gfSkgPT4gaCArIEgsIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCkge1xuXHRcdGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpO1xuXHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQoY29udGVudCk7XG5cdFx0c3VwZXIub25BbGxDaGlsZHJlbkNvbXBvc2VkKCk7XG5cdH1cblx0YXBwZW5kQ29tcG9zZWQobGluZSkge1xuXHRcdGNvbnN0IHsgcHJvcHM6IHsgeTogcG9zaXRpb25lZCB9IH0gPSBsaW5lO1xuXHRcdGlmIChwb3NpdGlvbmVkICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5hbmNob3JzLnB1c2gobGluZSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5saW5lcy5wdXNoKGxpbmUpO1xuXHRcdH1cblx0fVxuXHQvL2RlZmF1bHQgdXNlIHByb3BzLnNwYWNlXG5cdGdldFNwYWNlKCkge1xuXHRcdHJldHVybiB0aGlzLnByb3BzLnNwYWNlXG5cdH1cblxuXHRwb3NpdGlvbkxpbmVzKGxpbmVzKSB7XG5cdFx0dmFyIHkgPSAwO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBsaW5lcy5tYXAoKGEsIGksIG1lLCBjdHgsIHsgcHJvcHM6IHsgaGVpZ2h0ID0gMCB9IH0gPSBhKSA9PiB7XG5cdFx0XHRjb25zdCBiID0gUmVhY3QuY2xvbmVFbGVtZW50KGEsIHsga2V5OiBpLCB5IH0pO1xuXHRcdFx0eSArPSBoZWlnaHQ7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9KTtcblx0XHRyZXR1cm4gKDxHcm91cCBoZWlnaHQ9e3l9Pntjb250ZW50fTwvR3JvdXA+KTtcblx0fVxuICAgIC8qKlxuICAgICAqIG9ubHkgd2hlbiB0aGVyZSBhcmUgYXZhaWFsYWJsZSBibG9ja1xuICAgICAqIE5vdCBhbGxvdyBlbXB0eSBmcmFtZVxuICAgICAqIEBwYXJhbSB7Kn0gcGFyYW0wXG4gICAgICovXG5cdG5leHRBdmFpbGFibGVTcGFjZSh7IGhlaWdodDogcmVxdWlyZWRCbG9ja1NpemUgPSAxIH0gPSB7fSkge1xuXHRcdGNvbnN0IHsgYWxsb3dPdmVyZmxvdyA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKVxuXHRcdFx0fHwgdGhpcy5hdmFpbGFibGVCbG9ja1NpemUgPj0gcmVxdWlyZWRCbG9ja1NpemUpIHtcblx0XHRcdGNvbnN0IHNwYWNlPXRoaXMuZ2V0U3BhY2UoKVxuXHRcdFx0cmV0dXJuIENvbnN0cmFpbnRTcGFjZS5jcmVhdGUoc3BhY2V8fHt9KS5jbG9uZSh7XG5cdFx0XHRcdGJsb2NrT2Zmc2V0OiB0aGlzLmJsb2NrT2Zmc2V0LFxuXHRcdFx0XHRoZWlnaHQ6ICFhbGxvd092ZXJmbG93ID8gdGhpcy5hdmFpbGFibGVCbG9ja1NpemUgOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcblx0XHRcdFx0ZnJhbWU6IHRoaXMsXG5cdFx0XHRcdGZpbmRJbmxpbmVTZWdtZW50czogKHJlcXVpcmVkQmxvY2tTaXplLCBsZWZ0LCByaWdodCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGJsb2NrT2Zmc2V0ID0gdGhpcy5ibG9ja09mZnNldDtcblx0XHRcdFx0XHR2YXIgd3JhcHBlZXMgPSB0aGlzLmV4Y2x1c2l2ZShibG9ja09mZnNldCwgYmxvY2tPZmZzZXQgKyByZXF1aXJlZEJsb2NrU2l6ZSwgbGVmdCwgcmlnaHQpO1xuXHRcdFx0XHRcdHZhciB0b3AgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICh0eXBlb2YgKHdyYXBwZWVzKSA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHR0b3AgPSB3cmFwcGVlcztcblx0XHRcdFx0XHRcdHdyYXBwZWVzID0gdGhpcy5leGNsdXNpdmUodG9wLCB0b3AgKyByZXF1aXJlZEJsb2NrU2l6ZSwgbGVmdCwgcmlnaHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzcGFjZSA9IHRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKHsgaGVpZ2h0OiB0b3AgLSBibG9ja09mZnNldCArIHJlcXVpcmVkQmxvY2tTaXplIH0pO1xuXHRcdFx0XHRcdGlmIChzcGFjZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0dG9wLFxuXHRcdFx0XHRcdFx0XHRzZWdtZW50czogd3JhcHBlZXMucmVkdWNlKChvcHMsIHsgeCwgd2lkdGggfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IFtsYXN0XSA9IG9wcy5zcGxpY2UoLTEpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBbLi4ub3BzLCB7IHg6IGxhc3QueCwgd2lkdGg6IHggLSBsYXN0LnggfSwgeyB4OiB4ICsgd2lkdGgsIHdpZHRoOiByaWdodCAtIHggLSB3aWR0aCB9XTtcblx0XHRcdFx0XHRcdFx0fSwgW3sgeDogbGVmdCwgd2lkdGg6IHJpZ2h0IC0gbGVmdCB9XSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzcGFjZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0aXNBbmNob3JlZDogaWQgPT4gdGhpcy5pc0FuY2hvcmVkKGlkKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuICAgIC8qKlxuICAgICAqIGV4Y2x1ZGUgYXJlYSBpbiByZWN0IHt4MSx5MSwgeDIseTJ9XG4gICAgICogQHBhcmFtIHsqfSB5MVxuICAgICAqIEBwYXJhbSB7Kn0geTJcbiAgICAgKiBAcGFyYW0geyp9IHgxXG4gICAgICogQHBhcmFtIHsqfSB4MlxuICAgICAqIEByZXR1cm5zXG4gICAgICogXHRbe3gsd2lkdGh9LC4uLl06IGV4Y2x1ZGUgYXJlYXNcbiAgICAgKiBcdG51bWJlcjogdGhlcmUncyBvcHBvcnR1bml0eSB1bnRpbCB0aGUgdmFsdWVcbiAgICAgKi9cblx0ZXhjbHVzaXZlKHkxLCB5MiwgeDEsIHgyKSB7XG5cdFx0Y29uc3QgbGluZSA9IHsgeDEsIHgyLCB5MSwgeTIgfTtcblx0XHR2YXIgZXhjbHVkZXMgPSB0aGlzLndyYXBwZWVzLnJlZHVjZSgoY29sbGVjdGVkLCB7IHByb3BzOiB7IHdyYXAgfSB9KSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSB3cmFwKGxpbmUpO1xuXHRcdFx0Y29sbGVjdGVkLnNwbGljZShjb2xsZWN0ZWQubGVuZ3RoLCAwLCAuLi4oQXJyYXkuaXNBcnJheShibG9ja3MpID8gYmxvY2tzIDogW2Jsb2Nrc10pKTtcblx0XHRcdHJldHVybiBjb2xsZWN0ZWQ7XG5cdFx0fSwgW10pXG5cdFx0XHQuZmlsdGVyKGEgPT4gISFhKVxuXHRcdFx0LmZpbHRlcihhID0+IGEud2lkdGggPiAwKVxuXHRcdFx0LnNvcnQoKGEsIGIpID0+IGEueCAtIGIueCk7XG5cdFx0Y29uc3QgY2xlYXJzID0gZXhjbHVkZXMuZmlsdGVyKGEgPT4gYS50eXBlID09IFwiY2xlYXJcIik7XG5cdFx0aWYgKGNsZWFycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gTWF0aC5tYXgoLi4uY2xlYXJzLm1hcChhID0+IGEueSkpO1xuXHRcdH1cblx0XHRpZiAoZXhjbHVkZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly9tZXJnZSBzdWNoIGFzIFt7eDozLHdpZHRoOjV9LHt4OjQsd2lkdGg6Nn1dPT5be3g6Myx3aWR0aDo3fV1cblx0XHRcdGV4Y2x1ZGVzLmZvckVhY2goYSA9PiBhLngyID0gYS54ICsgYS53aWR0aCk7XG5cdFx0XHRleGNsdWRlcyA9IGV4Y2x1ZGVzLnJlZHVjZSgod3JhcGVlcywgYSkgPT4ge1xuXHRcdFx0XHRjb25zdCBiID0gd3JhcGVlc1t3cmFwZWVzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRpZiAoYS54MiA+IGIueDIpIHtcblx0XHRcdFx0XHRpZiAoYS54ID4gYi54MikgeyAvL3NlcGVyYXRlZFxuXHRcdFx0XHRcdFx0d3JhcGVlcy5wdXNoKGEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHsgLy9pbnRlcnNlY3Rcblx0XHRcdFx0XHRcdGIueDIgPSBhLngyO1xuXHRcdFx0XHRcdFx0Yi53aWR0aCA9IGIueDIgLSBiLng7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB3cmFwZWVzO1xuXHRcdFx0fSwgW2V4Y2x1ZGVzWzBdXSk7XG5cdFx0XHRleGNsdWRlcy5mb3JFYWNoKGEgPT4gZGVsZXRlIGEueDIpO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhjbHVkZXM7XG5cdH1cbiAgICAvKipcbiAgICAgKiByZWNvbXBvc2UgZm9yIHNwYWNlIHNpbmNlIGxheW91dGVkIHNwYWNlIHdpbGwgYmUgY2hhbmdlZCwgc3VjaCBhcyB3cmFwIGFuZCBiYWxhbmNlXG5cdCAqIGxheW91dCBhZnRlciBwcmUoKSBmb3Igb25seSBhbHJlYWR5IGxheW91dGVkIGxpbmVzXG4gICAgICogSXQncyBwcmVzdW1lZDogKioqIGFsbCBjb250ZW50IGFyZSBpbiBwYXJhZ3JhcGhzLCBvdGhlcndpc2UganVzdCBhcHBlbmQgaXQgZGlyZWN0bHkqKipcbiAgICAgKiBzbyBpdCBzaG91bGQgd29yayB0byByZWNvbW1pdCBhbHJlYXkgbGF5b3V0ZWQgcGFyYWdyYXBoc1xuICAgICAqIEByZXR1cm5zOiBmdW5jdGlvbiB0byByb2xsYmFjay9yZWNvdmVyIHRvIGxhc3Qgc3RhdGVcbiAgICAgKi9cblx0cmVjb21wb3NlKGluaXQgPSBhID0+IGEpIHtcblx0XHRpZighdGhpcy5yZWNvbXBvc2UuZGVhZExvb3ApXG5cdFx0XHR0aGlzLnJlY29tcG9zZS5kZWFkTG9vcD0xXG5cdFx0aWYoKyt0aGlzLnJlY29tcG9zZS5kZWFkTG9vcD4xMDAwMCl7XG5cdFx0XHRkZWJ1Z2dlclxuXHRcdH1cblx0XHQvKipcbiAgICAgICAgICogaWYgaXQncyBlbXB0eSBmcmFtZSwgcmVjb21wb3NlIHdvdWxkIG5vdCBoYXBwZW5cbiAgICAgICAgICovXG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRpbml0KFtdLFtdKTtcblx0XHRcdHJldHVybiBhID0+IGE7XG5cdFx0fVxuXHRcdGNvbnN0IGxhc3RMaW5lcyA9IFsuLi50aGlzLmxpbmVzXTtcblx0XHRjb25zdCBsYXN0QW5jaG9ycyA9IFsuLi50aGlzLmFuY2hvcnNdO1xuXHRcdGNvbnN0IGxhc3RDb2x1bW5zID0gdGhpcy5jb2xzID8gWy4uLnRoaXMuY29sdW1uc10gOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgcm9sbGJhY2sgPSAoKSA9PiB7XG5cdFx0XHR0aGlzLmxpbmVzID0gbGFzdExpbmVzO1xuXHRcdFx0dGhpcy5hbmNob3JzID0gbGFzdEFuY2hvcnM7XG5cdFx0XHRpZiAobGFzdENvbHVtbnMpXG5cdFx0XHRcdHRoaXMuY29sdW1ucyA9IGxhc3RDb2x1bW5zO1xuXHRcdH07XG5cdFx0dHJ5IHtcblx0XHRcdC8vcmVzZXQgY29tcG9zZWRcblx0XHRcdHRoaXMubGluZXMgPSBbXTtcblx0XHRcdHRoaXMuYW5jaG9ycyA9IFtdO1xuXHRcdFx0dGhpcy5jb2x1bW5zPVtdXG5cblx0XHRcdC8vaW5pdGlhbGl6ZSBmb3IgcmVjb21wb3NlXG5cdFx0XHRjb25zdCBsaW5lcyA9IFsuLi5sYXN0TGluZXNdXG5cdFx0XHR0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nID0gaW5pdChsaW5lcywgWy4uLmxhc3RBbmNob3JzXSk7XG5cblx0XHRcdGNvbnN0IGdldFBhcmFncmFwaElkPWxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cInBhcmFncmFwaFwiXWApLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcblx0XHRcdC8qKlxuXHRcdFx0ICogVG8gcmVjb21taXQgZWFjaCBwYXJhZ3JhcGgncyBsaW5lcyBpbiB0aGlzIGJsb2NrIGZyb20gdG9wIHRvIGJvdHRvbVxuXHRcdFx0ICogRXZlcnkgdGltZSBsaW5lIHBhcmFncmFwaCBjaGFuZ2VkLCBsYXN0IHBhcmFncmFwaCB3b3VsZCByZWNvbW1pdCBcblx0XHRcdCAqL1xuXHRcdFx0dmFyIGN1cnJlbnRQYXJhZ3JhcGggPSBudWxsO1xuXHRcdFx0dmFyIGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGxpbmU7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRsaW5lID0gbGluZXNbaV07XG5cdFx0XHRcdGNvbnN0IHBhcmFncmFwaE9mTGluZSA9IGdldFBhcmFncmFwaElkKGxpbmUpXG5cdFx0XHRcdGlmICghcGFyYWdyYXBoT2ZMaW5lKSB7IC8vbm90IHBhcmFncmFwaCwgdGhlbiBhcHBlbmQgZGlyZWN0bHlcblx0XHRcdFx0XHRpZiAoY3VycmVudFBhcmFncmFwaCkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGN1cnJlbnRQYXJhZ3JhcGgpLnJlY29tbWl0KGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyk7XG5cdFx0XHRcdFx0XHRjdXJyZW50UGFyYWdyYXBoID0gbnVsbDtcblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmFwcGVuZENvbXBvc2VkKGxpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmICghY3VycmVudFBhcmFncmFwaCkge1xuXHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaCA9IHBhcmFncmFwaE9mTGluZTtcblx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcy5wdXNoKGxpbmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChwYXJhZ3JhcGhPZkxpbmUgIT09IGN1cnJlbnRQYXJhZ3JhcGgpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGN1cnJlbnRQYXJhZ3JhcGgpLnJlY29tbWl0KGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyk7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGggPSBwYXJhZ3JhcGhPZkxpbmU7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRQYXJhZ3JhcGhMaW5lcyA9IFtsaW5lXTtcblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFBhcmFncmFwaExpbmVzLnB1c2gobGluZSk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly9sYXN0IHBhcmFncmFwaCBcblx0XHRcdGlmIChjdXJyZW50UGFyYWdyYXBoKSB7XG5cdFx0XHRcdHRoaXMuY29udGV4dC5nZXRDb21wb3NlcihjdXJyZW50UGFyYWdyYXBoKS5yZWNvbW1pdChjdXJyZW50UGFyYWdyYXBoTGluZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjYXRjaCAoZSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHR9XG5cdFx0ZmluYWxseSB7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wdXRlZC5yZWNvbXBvc2luZztcblx0XHRcdHJldHVybiByb2xsYmFjaztcblx0XHR9XG5cdH1cbiAgICAvKipcbiAgICAgKiB0byByZS1sYXlvdXQgbGFzdCBuIGxpbmVzXG4gICAgICogYW5jaG9ycyBpbiBsaW5lIHNob3VsZCBiZSByZW1vdmVkIHRvb1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuXG4gICAgICogQHJldHVybnMgWy4uLnJlbW92ZWQgbGluZV0uYW5jaHJvcz1bLi4ucmVtb3ZlZCBhbmNob3IgaWRdXG4gICAgICovXG5cdHJvbGxiYWNrTGluZXMobikge1xuXHRcdHJldHVybiBuPT0wID8gW10gOiB0aGlzLmxpbmVzLnNwbGljZSgtbik7XG5cdH1cblxuXHRpc0VtcHR5KCl7XG5cdFx0cmV0dXJuICh0aGlzLmxpbmVzLmxlbmd0aCt0aGlzLmFuY2hvcnMubGVuZ3RoKT09MFxuXHR9XG5cdFxuXHRpc0FuY2hvcmVkKGlkKXtcblx0XHRyZXR1cm4gISF0aGlzLmFuY2hvcnMuZmluZChhPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLWNvbnRlbnQ9XCIke2lkfVwiXWApLmxlbmd0aD09MSlcblx0fVxuXG5cdF9pc0ludGVyc2VjdChBLEIpe1xuXHRcdHJldHVybiBuZXcgUmVjdChBLngsIEEueSwgQS53aWR0aCwgQS5oZWlnaHQpLmludGVyc2VjdHMobmV3IFJlY3QoQi54LCBCLnksIEIud2lkdGgsIEIuaGVpZ2h0KSlcblx0fVxufVxuIiwiaW1wb3J0IHsgUmVhY3RRdWVyeSB9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBGbG93IGZyb20gXCIuL2Zsb3dcIlxuaW1wb3J0IHtSZWN0fSBmcm9tIFwiLi4vLi4vLi4vdG9vbC9nZW9tZXRyeVwiXG5cbi8qKlxuICogYW5jaG9yYWJsZSBjYW4gbGF5b3V0IHBvc2l0aW9uZWQgY29udGVudCwgYW5kICoqKk1BWSBjaGFuZ2Ugc3BhY2UgaWYgc3VwcG9ydGluZyB3cmFwKioqXG4gKiBkYXRhLWFuY2hvcjogY2hlY2sgaW5saW5lLmFwcGVuZEFuY2hvckF0b20sIHRvIGlkZW50aWZ5IGFuY2hvciBwbGFjZWhvbGRlciBpbiBwYXJhZ3JhcGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5jaG9yYWJsZSBleHRlbmRzIEZsb3cge1xuXHQvKipcbiAgICAgKiBsaW5lIHdpdGgvd2l0aG91dCBhbmNob3JzXG4gICAgICogYW5jaG9ycyB3aXRoIHdyYXAgY2FuIGFmZmVjdCBleGNsdXNpdmVzLCBzbyBpdCBuZWVkIHJlLWxheW91dFxuICAgICAqIGFuY2hvciBuZWVkIGtub3cgYW5jaG9yIGhvc3QgdG8gcG9zaXRpb24gaXRzZWxmXG4gICAgICogYW5jaG9yIGhvc3RcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyp9IGxpbmVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGludDogcm9sbGJhY2sgbiB1bnBvc2l0aW9uZWQgbGluZXNcbiAgICAgKiBmYWxzZTogc3BhY2UgY2FuJ3QgZmxvdyBtb3JlIGNvbnRlbnRcbiAgICAgKiBOdW1iZXIuU0FGRV9NQVhfSU5URUdFUjogbGV0IGRlc2NlbmRhbnQgc3RvcCBsYXlvdXRcbiAgICAgKiBlbHNlOiBnb29kXG4gICAgICovXG5cdGFwcGVuZENvbXBvc2VkKGxpbmUpIHtcblx0XHRjb25zdCB7IHByb3BzOiB7IGFuY2hvciwgaGVpZ2h0OiByZXF1aXJlZEJsb2NrU2l6ZSA9IDAgfSB9ID0gbGluZTtcblx0XHRjb25zdCBzcGFjZSA9IHRoaXMubmV4dEF2YWlsYWJsZVNwYWNlKHsgaGVpZ2h0OiByZXF1aXJlZEJsb2NrU2l6ZSB9KTtcblx0XHRpZiAoc3BhY2UgPT0gZmFsc2UpIHtcblx0XHRcdGlmICh0aGlzLmNvbXB1dGVkLnJlY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogd2hlbiBzcGFjZSBpbmZlYXNpYmxlIGFuZCByZWNvbXBvc2luZ1xuICAgICAgICAgICAgICAgICAqIHBhcmFncmFwaCBtdXN0IGltbWVkaWF0ZSBzdG9wLCBzbyB0byByZXR1cm4gYmFjayB0byBvdXRlciBsYXlvdXRcbiAgICAgICAgICAgICAgICAgKi9cblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuSU1NRURJQVRFX1NUT1A7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG5cdFx0Ly9kYXRhLWFuY2hvciBpcyBwbGFjZWhvbGRlciBzcGVjaWZpY2F0aW9uIGluIGlubGluZSBsYXlvdXRcbiAgICAgICAgY29uc3QgYW5jaG9yUGxhY2VkID0gKGFuY2hvcklkLCBsaW5lKSA9PiBuZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3QoYFtkYXRhLWFuY2hvcj1cIiR7YW5jaG9ySWR9XWApLmxlbmd0aCA9PSAxO1xuXHRcdGlmICghYW5jaG9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb21wdXRlZC5yZWNvbXBvc2luZykge1xuXHRcdFx0XHRpZiAoYW5jaG9yUGxhY2VkKHRoaXMuY29tcHV0ZWQucmVjb21wb3NpbmcsIGxpbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBhbmNob3IgYW5kIHBsYWNlaG9sZGVyIGJlIGluIHNhbWUgZnJhbWUsIHNvIHN0b3AgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgICAgICogKiogdGhlIHBsYWNlaG9sZGVyIGxpbmUgc2hvdWxkIGJlIGFwcGVuZGVkLCBzaW5jZSBsYXRlciBcbiAgICAgICAgICAgICAgICAgICAgICogYnkgY2hlY2tpbmcgdGhpcyBwbGFjZWhvbGRlciBleGlzdGVuY2UgdG8gZGVjaWRlIGlmIHJlY29tcG9zZSBzdWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAqIGJ1dCB0aGlzIGxpbmUgd2lsbCBiZSByb2xsYmFja2VkXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzdXBlci5hcHBlbmRDb21wb3NlZCguLi5hcmd1bWVudHMpXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuSU1NRURJQVRFX1NUT1A7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzdXBlci5hcHBlbmRDb21wb3NlZCguLi5hcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpdCdzIG9ubHkgdG8gYXBwZW5kIGFuY2hvcmVkIGNvbnRlbnQsXG4gICAgICAgICAqIGFuY2hvciBwbGFjZWhvbGRlciBpbiBsaW5lIHdpbGwgYmUgcmVsYXlvdXRlZCBsYXRlcixcbiAgICAgICAgICogc28gZnJvbSBoZXJlXG4gICAgICAgICAqIHJldHVybiAxIHRvIGlnbm9yZSBhbmQgcmVsYXlvdXQgY3VycmVudCBsaW5lIG9yXG4gICAgICAgICAqIHJldHVybiBmYWxzZSB0byBub3RpZnkgaW5mZWFzaWJsZSBzcGFjZSwgYW5kIGlnbm9yZSBhbmQgcmUtbGF5b3V0IGN1cnJlbnQgbGluZSBhbmQgYW5jaG9yXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBhbmNob3JlZCA9IGFuY2hvcihzcGFjZS5jbG9uZSh7XG4gICAgICAgICAgICBlZGdlczp7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoOntcbiAgICAgICAgICAgICAgICAgICAgdG9wOigoaWQsbGluZT10aGlzLmxpbmVzLmZpbmQoYT0+YS5wcm9wcy5wYWdpbmF0aW9uLmlkPT1pZCkpPT50aGlzLmxpbmVYWShsaW5lKS55KShsaW5lLnByb3BzLnBhZ2luYXRpb24uaWQpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsaW5lOnt0b3A6c3BhY2UuYmxvY2tPZmZzZXR9LFxuICAgICAgICAgICAgICAgIGNoYXJhY3Rlcjp7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6c3BhY2UubGVmdCsoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmaXJzdCxwYXJlbnRzfT1uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3RBbmRQYXJlbnRzKGBbZGF0YS1hbmNob3JdYClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbLi4ucGFyZW50cyxmaXJzdC5nZXQoMCldLnJlZHVjZSgoWCx7cHJvcHM6e3g9MH19KT0+WCt4LDApXG4gICAgICAgICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgICAgY29uc3QgeyB3cmFwLCBnZW9tZXRyeSwgXCJkYXRhLWNvbnRlbnRcIjogYW5jaG9ySWQgfSA9IGFuY2hvcmVkLnByb3BzO1xuICAgICAgICAvKipcbiAgICAgICAgICogQFRPRE86IHdyYXAgZWFjaCBvdGhlciB3aXRoIGFscmVhZHkgYW5jaG9yZWQgd3JhcHBlZXMsIGFuZCB0aGlzIHdyYXBwZWVzXG4gICAgICAgICAqL1xuXHRcdGlmICghKHdyYXAgJiYgdGhpcy5fX2lzRGlydHlJbihnZW9tZXRyeSkpKSB7XG5cdFx0XHRzdXBlci5hcHBlbmRDb21wb3NlZChhbmNob3JlZCk7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGUgYXJlYSBhYm92ZSBjdXJyZW50IGJsb2NrIG9mZnNldCBpcyBhZmZlY3RlZCBieSB0aGlzIHdyYXAgYXJlYVxuICAgICAgICAgKiB0ZW1wb3JhcmlseSBhbmNob3IgaXQgdG8gZXhjbHVkZSB0aGUgd3JhcCBhcmVhLCBhbmQgcmVsYXlvdXQgd2hvbGUgdG8gc2VlOlxuICAgICAgICAgKiBpZiB0aGUgYW5jaG9yIGNhbiBiZSBsYXlvdXRlZCB3aXRoaW4gdGhlIHNwYWNlLCBrZWVwIHJlbGF5b3V0ZWQsIHJlbGF5b3V0IGxhc3QgbGluZVxuICAgICAgICAgKiBpZiBub3QsIHJvbGxiYWNrIHRvIGxhc3QgbGF5b3V0IHJlc3VsdCwgYW5kIHJldHVybiBmYWxzZVxuICAgICAgICAgKi9cblx0XHRjb25zdCByb2xsYmFjayA9IHRoaXMucmVjb21wb3NlKChyZWNvbXBvc2luZ0xpbmVzLCBhbmNob3JzKSA9PiB7XG4gICAgICAgICAgICAvL2tlZXAgYWxsIGFuY2hvcnMsIEBUT0RPOiBpdCdzIHN1cHBvc2VkOiBsYXRlciBhbmNob3IgY2FuJ3QgYWZmZWN0IHByZXZpb3VzIGFuY2hvcnMgbGF5b3V0Pz8/P1xuICAgICAgICAgICAgdGhpcy5hbmNob3JzPWFuY2hvcnNcbiAgICAgICAgICAgIHN1cGVyLmFwcGVuZENvbXBvc2VkKGFuY2hvcmVkKVxuICAgICAgICAgICAgLy9yZWNvbXBvc2UgdW50aWwgdGhpcyBhbmNob3JcbiAgICAgICAgICAgIHJlY29tcG9zaW5nTGluZXMucHVzaChsaW5lKVxuXHRcdFx0cmV0dXJuIGFuY2hvcklkO1xuXHRcdH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogdGhlbiBjaGVjayBpZiB0aGlzIGFuY2hvciBpcyBpbiB0aGlzIGJsb2NrLCBzcGVjaWZpY2FsbHkgaW4gbGFzdCBsaW5lXG4gICAgICAgICAqICovXG5cdFx0aWYgKGFuY2hvclBsYWNlZChhbmNob3JJZCwgdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aC0xXSkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogYW5jaG9yIGFuZCBwbGFjZWhvbGRlciBjYW4gYmUgb24gc2FtZSBibG9jaywgXG4gICAgICAgICAgICAgKiBzbyBrZWVwIHJlY29tcG9zZWQgbGluZXMgYW5kIGFuY2hvcnMgKGluY2x1ZGluZyBhcHBlbmRpbmcgYW5jaG9yKSxcbiAgICAgICAgICAgICAqIGFuZCByZS1sYXlvdXQgbGFzdCBsaW5lIHRoYXQgY29udGFpbnMgYW5jaG9yIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgKioqIHRoZSBsYXN0IGxpbmUgaW4gcGFyYWdyYXBoIE1BWSBub3QgZXF1YWwgdG8gYXBwZW5kaW5nIGxpbmUgc2luY2UgcmVjb21wb3NlIGNoYW5nZXMgaXRcbiAgICAgICAgICAgICAqKiogd2hpbGUgcGFyYWdyYXBoIHNob3VsZCBhbHJlYWR5IGJlIHN5bmNlZCB3aXRoIHJlY29tcG9zZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmxpbmVzLnBvcCgpLy9yb2xsYmFjayBsYXN0IGxpbmUgZGVmaW5pdGVseSBpbiB0aGlzIGJsb2NrXG5cdFx0XHRyZXR1cm4gMCArIDE7Ly9yb2xsYmFjayBsYXN0IGxpbmUgb2YgcGFyYWdycGFoIGFjY29yZGluZ2x5XG5cdFx0fVxuXHRcdGVsc2Uge1xuICAgICAgICAgICAgLy9hbmNob3IgYW5kIHBsYWNlaG9sZGVyIGNhbiBOT1QgYmUgb24gc2FtZSBmcmFtZSwgc28gdGhyb3cgdG8gcGFyZW50XG5cdFx0XHRyb2xsYmFjaygpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cbiAgICB9XG4gICAgXG4gICAgcm9sbGJhY2tMaW5lcygpe1xuICAgICAgICBjb25zdCByZW1vdmVkTGluZXM9c3VwZXIucm9sbGJhY2tMaW5lcyguLi5hcmd1bWVudHMpXG4gICAgICAgIGNvbnN0IHJlbW92ZWRBbmNob3JzID0gKGxpbmVzID0+IHtcblx0XHRcdGNvbnN0IHJlbW92ZSA9IGEgPT4gdGhpcy5hbmNob3JzLnNwbGljZSh0aGlzLmFuY2hvcnMuaW5kZXhPZihhKSwgMSlbMF07XG4gICAgICAgICAgICBjb25zdCBhbmNob3JJZCA9IGE9Pm5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdChgW2RhdGEtdHlwZT1cImFuY2hvclwiXWApLmF0dHIoJ2RhdGEtY29udGVudCcpXG4gICAgICAgICAgICBjb25zdCBhbmNob3JzSW5MaW5lPWxpbmU9PiBuZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kKCdbZGF0YS1hbmNob3JdJykudG9BcnJheSgpLm1hcChhPT5hLnByb3BzW1wiZGF0YS1hbmNob3JcIl0pXG5cdFx0XHRjb25zdCByZW1vdmluZ0FuY2hvcklkcyA9IGxpbmVzLm1hcChhPT5hbmNob3JzSW5MaW5lKGEpKS5mbGF0KClcblx0XHRcdHJldHVybiB0aGlzLmFuY2hvcnMuZmlsdGVyKGEgPT4gcmVtb3ZpbmdBbmNob3JJZHMuaW5jbHVkZXMoYW5jaG9ySWQoYSkpKS5tYXAocmVtb3ZlKTtcbiAgICAgICAgfSkocmVtb3ZlZExpbmVzKTtcblxuICAgICAgICAvL2lmIHJlbW92ZWQgYW5jaG9ycyBhZmZlY3Qgd3JhcCBhcmVhcyBhYm92ZSByZW1vdmVkIGxpbmVzLFxuICAgICAgICBjb25zdCBibG9ja09mZnNldD10aGlzLmJsb2NrT2Zmc2V0XG4gICAgICAgIGNvbnN0IHJlbW92ZWRXcmFwcGVlc0FmZmVjdGVkTGF5b3V0ZWRTcGFjZT10aGlzLndyYXBwZWVzLmZpbHRlcihhPT5yZW1vdmVkQW5jaG9ycy5pbmNsdWRlcyhhKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHtwcm9wczp7Z2VvbWV0cnk6e3k9MCxoZWlnaHQ9MH19fSk9PnkraGVpZ2h0PGJsb2NrT2Zmc2V0KVxuICAgICAgICBpZihyZW1vdmVkV3JhcHBlZXNBZmZlY3RlZExheW91dGVkU3BhY2UubGVuZ3RoPjApe1xuICAgICAgICAgICAgdGhpcy5yZWNvbXBvc2UoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZW1vdmVkTGluZXMsIHthbmNob3JzOnJlbW92ZWRBbmNob3JzfSlcbiAgICB9XG5cblxuXHRfX2lzRGlydHlJbihyZWN0KXtcbiAgICAgICAgY29uc3QgaXNJbnRlcnNlY3Q9KEEsQik9Pm5ldyBSZWN0KEEueCwgQS55LCBBLndpZHRoLCBBLmhlaWdodCkuaW50ZXJzZWN0cyhuZXcgUmVjdChCLngsIEIueSwgQi53aWR0aCwgQi5oZWlnaHQpKVxuXHRcdC8vd3JhcHBlZSBhbHJlYWR5IHRha2UgdXBcblx0XHRpZih0aGlzLndyYXBwZWVzLmZpbmQoKHtwcm9wczp7eCx5LHdpZHRoLGhlaWdodH19KT0+aXNJbnRlcnNlY3QocmVjdCx7eCx5LHdpZHRoLGhlaWdodH0pKSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdC8vY29udGVudCBhbHJlYWR5IHRha2UgdXBcblx0XHRpZihpc0ludGVyc2VjdChyZWN0LHt4OjAseTowLHdpZHRoOnRoaXMucHJvcHMud2lkdGgsaGVpZ2h0OnRoaXMuYmxvY2tPZmZzZXR9KSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblxuXHRcdGlmKHRoaXMuY29scyl7XG5cdFx0XHQvL2lmIGFueSBub24tY3VycmVudCBjb2x1bW4gY29udGVudCBhbHJlYWR5IHRha2UgdXBcblx0XHRcdHJldHVybiAhIXRoaXMuY29sdW1uc1xuXHRcdFx0XHQuZmlsdGVyKGE9PmEhPXRoaXMuY3VycmVudENvbHVtbikvL2N1cnJlbnQgYmxvY2sgaGFzIGFscmVhZHkgY2hlY2tlZCBpbiBzdXBlciBhcyBub3JtYWwgc3BhY2Vcblx0XHRcdFx0LmZpbmQoKHt4PTAseT0wLHdpZHRoLGJsb2NrT2Zmc2V0OmhlaWdodH0pPT5pc0ludGVyc2VjdChyZWN0LHt4LHksd2lkdGgsaGVpZ2h0fSkpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlXG4gICAgfVxufVxuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgQW5jaG9yYWJsZSBmcm9tIFwiLi9hbmNob3JhYmxlXCJcbi8qKlxuICogd2lkb3cgYW5kIG9ycGFobiBjb250cm9sIGxheW91dFxuICogdGhlcmUgbXVzdCBiZSBwcmV2TGF5b3V0LCBvdGhlcndpc2UgaXQncyBub3Qgc3VwcG9ydGVkXG4gKiBpdCBzdXBwb3J0IGxpbmUucHJvcHMucGFnaW5hdGlvbj17XG4gKiB3aWRvdywgYm9vbGVhbiwgaWRlbnRpZnkgaWYgd2lkb3cgaXMgc3VwcG9ydGVkXG4gKiBvcnBoYW4sIGJvb2xlYW4sIGlkZW50aWZ5IGlmIG9ycGhhbiBpcyBzdXBwb3J0ZWRcbiAqIGtlZXBMaW5lcywgYm9vbGVhbiwgaWRlbnRpZnkgaWYgYWxsIGxpbmVzIHNob3VsZCBiZSBsYXlvdXRlZCB0b2dldGhlclxuICpcbiAqIC8vdGhpcyBsYXlvdXQgYWxzbyBkZXBlbmRzIG9uIGZvbGxvd2luZyBsaW5lIGluZGljYXRvcjpcbiAqIGxhc3QsIGJvb2xlYW4sIGlkZW50aWZ5IGlmIGl0J3MgbGFzdCBsaW5lIG9mIHBhcmFncmFwaFxuICogaTogbnVtYmVyW3N0YXJ0IGZyb20gaV0sIGlkZW50aWZ5IGlmIGl0J3MgbnRoIGxpbmUgb2YgcGFyYWdyYXBoXG4gKiB9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9ycGhhbkNvbnRyb2xhYmxlIGV4dGVuZHMgQW5jaG9yYWJsZSB7XG5cdHN0YXRpYyBjb250ZXh0VHlwZXMgPSB7XG5cdFx0Li4uQW5jaG9yYWJsZS5jb250ZXh0VHlwZXMsXG5cdFx0cHJldkxheW91dDogUHJvcFR5cGVzLmZ1bmMsXG5cdH07XG5cdGRlZmluZVByb3BlcnRpZXMoKSB7XG5cdFx0c3VwZXIuZGVmaW5lUHJvcGVydGllcygpO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtcblx0XHRcdHByZXY6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHZhciB7IHBhcmVudCwgcHJldkxheW91dCB9ID0gdGhpcy5jb250ZXh0O1xuXHRcdFx0XHRcdHByZXZMYXlvdXQgPSBwcmV2TGF5b3V0IHx8IChwYXJlbnQgJiYgcGFyZW50LmNvbnRleHQgJiYgcGFyZW50LmNvbnRleHQucHJldkxheW91dCkgfHwgKGEgPT4gbnVsbCk7XG5cdFx0XHRcdFx0cmV0dXJuIHByZXZMYXlvdXQodGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG4gICAgLyoqXG4gICAgICogaG93IG1hbnkgbGFzdCBsaW5lcyBmcm9tIHNhbWUgcGFyYWdyYXBoIG9mIGlucHV0IGxpbmVcbiAgICAgKiBAcGFyYW0geyp9IGxpbmVcbiAgICAgKi9cblx0b3JwaGFuQ291bnQobGluZSA9IHRoaXMubGFzdExpbmUpIHtcblx0XHRjb25zdCBwaWQgPSBnZXRMaW5lUGFyYWdyYXBoSWQobGluZSwgJ1tkYXRhLXR5cGU9XCJwYXJhZ3JhcGhcIl0nKTtcblx0XHRpZiAoIXBpZClcblx0XHRcdHJldHVybiAwO1xuXHRcdGNvbnN0IGxpbmVzID0gdGhpcy5saW5lcztcblx0XHRjb25zdCBpID0gbGluZXMuZmluZExhc3RJbmRleChhID0+IGdldExpbmVQYXJhZ3JhcGhJZChhKSAhPT0gcGlkKTtcblx0XHRyZXR1cm4gaSA9PSAtMSA/IGxpbmVzLmxlbmd0aCA6IGkgKyAxO1xuXHR9XG4gICAgLyoqXG4gICAgICogc3RhcnQgZnJvbSBuZXcgbGF5b3V0XG4gICAgICogQHBhcmFtIHt9IGxpbmVcbiAgICAgKi9cblx0YXBwZW5kQ29tcG9zZWQobGluZSkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLnByZXYpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY3VycmVudCBsaW5lIG11c3QgYmUgcmVjb21wb3NlZCBpZiBhbnkgcm9sbGJhY2sgaGFwcGVuc1xuICAgICAgICAgICAgICovXG5cdFx0XHRjb25zdCB7IHBhZ2luYXRpb24gPSB7fSB9ID0gbGluZS5wcm9wcztcblx0XHRcdGNvbnN0IHsgd2lkb3csIG9ycGhhbiwga2VlcExpbmVzLCBsYXN0IH0gPSBwYWdpbmF0aW9uO1xuXHRcdFx0aWYgKGtlZXBMaW5lcykge1xuXHRcdFx0XHRpZiAodGhpcy5wcmV2LnNob3VsZEtlZXBMaW5lc1dpdGgobGluZSkpIHsgLy9pIT0xXG5cdFx0XHRcdFx0bGV0IGxpbmVDb3VudCA9IHRoaXMucHJldi5vcnBoYW5Db3VudCgpO1xuXHRcdFx0XHRcdHRoaXMucHJldi5yb2xsYmFja0xpbmVzKGxpbmVDb3VudCk7XG5cdFx0XHRcdFx0cmV0dXJuIGxpbmVDb3VudCArIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRpZiAob3JwaGFuKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJldi5vcnBoYW5Db3VudChsaW5lKSA9PSAxICYmIHRoaXMucHJldi5saW5lcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXYucm9sbGJhY2tMaW5lcygxKTtcblx0XHRcdFx0XHRcdHJldHVybiAxICsgMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHdpZG93KSB7XG5cdFx0XHRcdFx0aWYgKGxhc3QpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9ycGhhbkNvdW50ID0gdGhpcy5wcmV2Lm9ycGhhbkNvdW50KGxpbmUpO1xuXHRcdFx0XHRcdFx0aWYgKG9ycGhhbkNvdW50ID4gMCAmJiB0aGlzLnByZXYubGluZXMubGVuZ3RoID4gb3JwaGFuQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2LnJvbGxiYWNrTGluZXMoMSk7XG5cdFx0XHRcdFx0XHRcdGlmIChvcnBoYW4pIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAob3JwaGFuQ291bnQgPT0gMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2LnJvbGxiYWNrTGluZXMoMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gMiArIDE7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxICsgMTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnByZXYuc2hvdWxkS2VlcFdpdGhOZXh0KGxpbmUpKSB7XG5cdFx0XHRcdGxldCByZW1vdmVkTGluZXMgPSB0aGlzLnByZXYucm9sbGJhY2tMaW5lcyh0aGlzLnByZXYub3JwaGFuQ291bnQoKSk7XG5cdFx0XHRcdC8vcmUtc3VibWl0IGxhc3QgcGFyYWdyYXBoXG5cdFx0XHRcdGNvbnN0IHBpZCA9IGdldExpbmVQYXJhZ3JhcGhJZChyZW1vdmVkTGluZXNbMF0pO1xuXHRcdFx0XHR0aGlzLmNvbnRleHQuZ2V0Q29tcG9zZXIocGlkKS5yZWNvbW1pdCgpO1xuXHRcdFx0XHRyZXR1cm4gMCArIDE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzdXBlci5hcHBlbmRDb21wb3NlZCguLi5hcmd1bWVudHMpO1xuXHR9XG5cdHNob3VsZEtlZXBMaW5lc1dpdGgobGluZSkge1xuXHRcdGNvbnN0IHBpZCA9IGdldExpbmVQYXJhZ3JhcGhJZChsaW5lKTtcblx0XHRyZXR1cm4gZ2V0TGluZVBhcmFncmFwaElkKHRoaXMubGFzdExpbmUpID09IHBpZCAmJlxuXHRcdFx0Z2V0TGluZVBhcmFncmFwaElkKHRoaXMuZmlyc3RMaW5lKSAhPSBwaWQ7XG5cdH1cblx0c2hvdWxkS2VlcFdpdGhOZXh0KGxpbmUpIHtcblx0XHRjb25zdCBzaG91bGQgPSAodGhpcy5sYXN0TGluZS5wcm9wcy5wYWdpbmF0aW9uIHx8IHt9KS5rZWVwV2l0aE5leHQgJiZcblx0XHRcdHRoaXMub3JwaGFuQ291bnQobGluZSkgPT0gMCAmJlxuXHRcdFx0Z2V0TGluZVBhcmFncmFwaElkKHRoaXMuZmlyc3RMaW5lKSAhPT0gZ2V0TGluZVBhcmFncmFwaElkKHRoaXMubGFzdExpbmUpO1xuXHRcdHJldHVybiBzaG91bGQ7XG5cdH1cblx0c3RhdGljIEZpeGVkID0gT3JwaGFuQ29udHJvbGFibGU7XG59XG5cbmNvbnN0IGdldExpbmVQYXJhZ3JhcGhJZD1saW5lPT5uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3QoYFtkYXRhLXR5cGU9XCJwYXJhZ3JhcGhcIl1gKS5hdHRyKFwiZGF0YS1jb250ZW50XCIpXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBPcnBoYW5Db250cm9sYWJsZSBmcm9tIFwiLi9vcnBoYW4tY29udHJvbGFibGVcIlxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkXCJcbmltcG9ydCBDb250cmFpbnRTcGFjZSBmcm9tIFwiLi4vY29uc3RyYWludC1zcGFjZVwiXG4vKipcbiAqIHtwcm9wczp7c3BhY2UsIGNvbHM9W3t4LHdpZHRoLFt5LGhlaWdodF19LCAuLi5dfX1cbiAqIHNwYWNlIGlzIHNoYXJlZCBieSBjb2xzLCBpbmNsdWRpbmcgd3JhcHBlZXMsIGxlZnQscmlnaHQsIGJsb2NrT2Zmc2V0LCBhbmQgaGVpZ2h0XG4gKiBlYWNoIGNvbCBpcyBhIHJlY3QgcmVsYXRpdmUgdG8gc3BhY2UobGVmdCwgdGhpcy5ibG9ja09mZnNldCkgaWYgc3BhY2UgZXhpc3RcbiAqIG90aGVyd2lzZSBlYWNoIGNvbCBzaGFwZSBhIHNwYWNlIHt4IGFzIGxlZnQsIHJpZ2h0Ongrd2lkdGgsIGhlaWdodCwgeSBhcyBibG9ja09mZnNldH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sdW1uYWJsZSBleHRlbmRzIE9ycGhhbkNvbnRyb2xhYmxlIHtcblx0ZGVmaW5lUHJvcGVydGllcygpIHtcblx0XHRzdXBlci5kZWZpbmVQcm9wZXJ0aWVzKCk7XG5cdFx0aWYgKCF0aGlzLnByb3BzLmNvbHMpXG5cdFx0XHRyZXR1cm47XG5cdFx0dGhpcy5jb21wdXRlZC5jb2x1bW5zID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywge1xuXHRcdFx0YmxvY2tPZmZzZXQ6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmN1cnJlbnRDb2x1bW4uYmxvY2tPZmZzZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhdmFpbGFibGVCbG9ja1NpemU6IHtcblx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY3VycmVudENvbHVtbi5hdmFpbGFibGVCbG9ja1NpemU7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb250ZW50SGVpZ2h0OiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5jb2x1bW5zLm1hcChhID0+IGEuaGVpZ2h0KSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50Q29sdW1uOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cdFx0XHRcdFx0aWYgKGNvbHVtbnMubGVuZ3RoID09IDApXG5cdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZUNvbHVtbigpO1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb2xzOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnByb3BzLmNvbHM7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRjb2x1bW5zOiB7XG5cdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0Z2V0KCkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbHVtbnM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2YWx1ZXMpIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb21wdXRlZC5jb2x1bW5zID0gdmFsdWVzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y3JlYXRlQ29sdW1uKCkge1xuXHRcdGNvbnN0IGNvbHVtbiA9IHtcblx0XHRcdC4uLnRoaXMuY29sc1t0aGlzLmNvbHVtbnMubGVuZ3RoXSxcblx0XHRcdGxpbmVzOiBDb2x1bW5DaGlsZHJlbi5jcmVhdGUodGhpcywgLi4uYXJndW1lbnRzKSxcblx0XHRcdGdldCBpc0VtcHR5KCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggPT0gMDtcblx0XHRcdH0sXG5cdFx0XHRnZXQgYXZhaWxhYmxlQmxvY2tTaXplKCkge1xuXHRcdFx0XHRjb25zdCB7bWF4SGVpZ2h0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBoZWlnaHQgPSBtYXhIZWlnaHQsIHkgPSAwIH0gPSB0aGlzO1xuXHRcdFx0XHRyZXR1cm4gaGVpZ2h0IC0gKHRoaXMuYmxvY2tPZmZzZXQgLSB5KTtcblx0XHRcdH0sXG5cdFx0XHRnZXQgYmxvY2tPZmZzZXQoKSB7XG5cdFx0XHRcdGNvbnN0IHsgeSA9IDAgfSA9IHRoaXM7XG5cdFx0XHRcdHJldHVybiB5K3RoaXMuY29udGVudEhlaWdodDtcblx0XHRcdH0sXG5cdFx0XHRnZXQgY29udGVudEhlaWdodCgpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMubGluZXMucmVkdWNlKChILCB7IHByb3BzOiB7IGhlaWdodDogaCA9IDAgfSB9KSA9PiBoICsgSCwgMCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLmNvbHVtbnMucHVzaChjb2x1bW4pO1xuXHRcdHJldHVybiBjb2x1bW47XG5cdH1cblxuXHQvKipjaGVjayBjbGFzcyBleHBsYWluYXRpb24gKi9cblx0Z2V0U3BhY2UoY29sdW1uKSB7XG5cdFx0dmFyIHNwYWNlID0gc3VwZXIuZ2V0U3BhY2UoLi4uYXJndW1lbnRzKTtcblx0XHRpZiAoIXRoaXMuY29scylcblx0XHRcdHJldHVybiBzcGFjZTtcblx0XHRpZighc3BhY2UpXG5cdFx0XHRzcGFjZT1Db250cmFpbnRTcGFjZS5jcmVhdGUoe30pXG5cdFx0Y29uc3QgeyBsZWZ0ID0gMCwgcmlnaHQgPSAwLCBibG9ja09mZnNldCA9IDAsIGhlaWdodDogSCB9ID0gc3BhY2U7XG5cdFx0Y29uc3QgeyB3aWR0aCA9IHJpZ2h0IC0gbGVmdCwgeCA9IGxlZnQsIGhlaWdodCA9IEgsIHkgPSBibG9ja09mZnNldCB9ID0gY29sdW1ufHx0aGlzLmN1cnJlbnRDb2x1bW47XG5cdFx0cmV0dXJuIHNwYWNlLmNsb25lKHtcblx0XHRcdGxlZnQ6IHgsXG5cdFx0XHRyaWdodDogeCArIHdpZHRoLFxuXHRcdFx0YmxvY2tPZmZzZXQ6IHksXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHRlZGdlczp7XG5cdFx0XHRcdGNvbHVtbjp7bGVmdDp4LHRvcDp5LHJpZ2h0Ongrd2lkdGgsYm90dG9tOnkraGVpZ2h0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblx0bmV4dEF2YWlsYWJsZVNwYWNlKCkge1xuXHRcdGNvbnN0IHNwYWNlID0gc3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cyk7XG5cdFx0aWYgKHNwYWNlID09IGZhbHNlICYmIHRoaXMuY29scykge1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudENvbHVtbi5pc0VtcHR5KSB7XG5cdFx0XHRcdC8qKiBub3QgYWxsb3cgZW1wdHkgY29sdW1uLCBzbyBpZ25vcmUgcmVxdWlyZWQqL1xuXHRcdFx0XHRyZXR1cm4gc3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBoYXNNb3JlQ29sdW1uID0gdGhpcy5jb2xzLmxlbmd0aCA+IHRoaXMuY29sdW1ucy5sZW5ndGg7XG5cdFx0XHRpZiAoaGFzTW9yZUNvbHVtbikge1xuXHRcdFx0XHR0aGlzLmNyZWF0ZUNvbHVtbigpO1xuXHRcdFx0XHQvKiogaWdub3JlIHJlcXVpcmVkIGZvciBhIG5ldyBjb2x1bW4qL1xuXHRcdFx0XHRyZXR1cm4gc3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzcGFjZTtcblx0fVxuXG5cdHBvc2l0aW9uTGluZXMoKSB7XG5cdFx0aWYoIXRoaXMuY29scylcblx0XHRcdHJldHVybiBzdXBlci5wb3NpdGlvbkxpbmVzKC4uLmFyZ3VtZW50cylcblx0XHRjb25zdCBoZWlnaHQ9TWF0aC5tYXgoLi4udGhpcy5jb2x1bW5zLm1hcCgoe2NvbnRlbnRIZWlnaHQsIGhlaWdodD1jb250ZW50SGVpZ2h0fSk9PmhlaWdodCkpXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCBoZWlnaHQ9e2hlaWdodH0+XG5cdFx0XHRcdHt0aGlzLmNvbHVtbnMubWFwKCh7eCx5LHdpZHRoLGNvbnRlbnRIZWlnaHQsIGhlaWdodD1jb250ZW50SGVpZ2h0LGxpbmVzfSxpKT0+e1xuXHRcdFx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoc3VwZXIucG9zaXRpb25MaW5lcyhsaW5lcykse3gseSx3aWR0aCxoZWlnaHQsa2V5Oml9KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG5cblx0cm9sbGJhY2tMaW5lcygpe1xuXHRcdGNvbnN0IHJlbW92ZWRMaW5lcz1zdXBlci5yb2xsYmFja0xpbmVzKC4uLmFyZ3VtZW50cylcblx0XHRpZih0aGlzLmNvbHMgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aD4xKXtcblx0XHRcdGNvbnN0IG1heD10aGlzLmxpbmVzLmxlbmd0aC0xXG5cdFx0XHRjb25zdCBpPXRoaXMuY29sdW1ucy5maW5kSW5kZXgoYT0+YS5saW5lcy5zdGFydEluZGV4Pm1heClcblx0XHRcdGlmKGkhPS0xKXtcblx0XHRcdFx0dGhpcy5jb2x1bW5zLnNwbGljZShpKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZW1vdmVkTGluZXNcblx0fVxufVxuXG5jbGFzcyBDb2x1bW5DaGlsZHJlbntcbiAgICBjb25zdHJ1Y3RvcihmcmFtZSxzdGFydEluZGV4PWZyYW1lLmNvbXB1dGVkLmNvbXBvc2VkLmxlbmd0aCl7XG5cdFx0dGhpcy5mcmFtZT1mcmFtZVxuICAgICAgICB0aGlzLnN0YXJ0SW5kZXg9c3RhcnRJbmRleFxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgY3JlYXRlKCl7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkobmV3IENvbHVtbkNoaWxkcmVuKC4uLmFyZ3VtZW50cykse1xuICAgICAgICAgICAgZ2V0KG9iaiwgcHJvcCl7XG4gICAgICAgICAgICAgICAgc3dpdGNoKHByb3Ape1xuICAgICAgICAgICAgICAgIGNhc2UgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWUgXG4gICAgICAgICAgICAgICAgY2FzZSBcInRhcmdldFwiOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYocHJvcCBpbiBvYmopXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW3Byb3BdXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zPW9iai5pdGVtc1xuICAgICAgICAgICAgICAgICAgICBpZihwcm9wIGluIGl0ZW1zKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGY9aXRlbXNbcHJvcF1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihmKT09XCJmdW5jdGlvblwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5iaW5kKGl0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCk9Pm9iai51bnN1cHBvcnQoYG5vdCBzdXBwb3J0ZWQgQ29sdW1uQ2hpbGRyZW5bJHtwcm9wfV1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cblx0Z2V0IGVuZEluZGV4KCl7XG5cdFx0Y29uc3QgY29sdW1ucz10aGlzLmZyYW1lLmNvbHVtbnNcblx0XHRjb25zdCBpPWNvbHVtbnMuZmluZEluZGV4KGE9PmEubGluZXMudGFyZ2V0PT10aGlzKVxuXHRcdGNvbnN0IG5leHRDb2x1bW49Y29sdW1uc1tpKzFdXG5cdFx0cmV0dXJuIG5leHRDb2x1bW4gPyBuZXh0Q29sdW1uLmxpbmVzLnN0YXJ0SW5kZXggOiB0aGlzLmZyYW1lLmxpbmVzLmxlbmd0aFxuICAgIH1cbiAgICBcbiAgICBnZXQgaXRlbXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWUubGluZXMuc2xpY2UodGhpcy5zdGFydEluZGV4LHRoaXMuZW5kSW5kZXgpXG4gICAgfVxuXG4gICAgZ2V0IGxlbmd0aCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5lbmRJbmRleC10aGlzLnN0YXJ0SW5kZXhcbiAgICB9XG5cbiAgICB1bnN1cHBvcnQobXNnKXtcbiAgICAgICAgY29uc29sZS5lcnJvcihtc2cpXG4gICAgfVxuXG4gICAgcHVzaCgpe1xuXHRcdHRoaXMuZnJhbWUubGluZXMuc3BsaWNlKHRoaXMuZW5kSW5kZXgsMCwuLi5hcmd1bWVudHMpXG4gICAgfVxuICAgIFxuICAgIHNwbGljZShpLGosLi4uYXMpe1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkXCIpXG4gICAgfVxufSIsImltcG9ydCBDb2x1bW5hYmxlIGZyb20gXCIuL2NvbHVtbmFibGVcIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFsYW5jZWFibGUgZXh0ZW5kcyBDb2x1bW5hYmxlIHtcblx0ZGVmaW5lUHJvcGVydGllcygpIHtcblx0XHRzdXBlci5kZWZpbmVQcm9wZXJ0aWVzKClcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtcblx0XHRcdGJhbGFuY2VhYmxlOntcblx0XHRcdFx0Z2V0KCl7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29scyAmJiB0aGlzLmNvbHMubGVuZ3RoID4gMSAmJiB0aGlzLnByb3BzLmJhbGFuY2UgJiYgdGhpcy5saW5lcy5sZW5ndGg+MVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpIHtcblx0XHRpZiAodGhpcy5iYWxhbmNlYWJsZSkge1xuXHRcdFx0dGhpcy5iYWxhbmNlKCk7XG5cdFx0fVxuXHRcdHN1cGVyLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCguLi5hcmd1bWVudHMpO1xuXHR9XG5cdFxuXHRiYWxhbmNlKCkge1xuXHRcdGNvbnN0IHsgYmFsYW5jZSB9ID0gdGhpcy5wcm9wcztcblx0XHRpZiAodHlwZW9mIChiYWxhbmNlKSA9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiBiYWxhbmNlLmNhbGwodGhpcyk7XG5cdFx0fVxuXHRcdGNvbnN0IHsgYmFsYW5jZVRocmVzaG9sZCA9IDEgfSA9IHRoaXMucHJvcHM7XG5cdFx0Y29uc3Qgd2lkdGggPSB0aGlzLmNvbHNbMF0ud2lkdGg7XG5cdFx0aWYgKCF0aGlzLmNvbHMuZmluZChhID0+IE1hdGguYWJzKHdpZHRoIC0gYS53aWR0aCkgPiBiYWxhbmNlVGhyZXNob2xkKSkge1xuXHRcdFx0dGhpcy5lcXVhbEJhbGFuY2UoKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHR0aGlzLmFueUJhbGFuY2UoKTtcblx0XHR9XG5cdH1cbiAgICAvKipcbiAgICAqanVzdCByZWxvY2F0ZSBsaW5lcyBiZXR3ZWVuIGFsbCBjb2x1bW5zXG4gICAgKi9cblx0ZXF1YWxCYWxhbmNlKCkge1xuXHRcdGNvbnN0IHRvdGFsSGVpZ2h0ID0gdGhpcy5saW5lcy5yZWR1Y2UoKGgsIHsgcHJvcHM6e2hlaWdodD0wfSB9KSA9PiBoICsgaGVpZ2h0LCAwKTtcblx0XHRjb25zdCBjb2xIZWlnaHQgPSB0b3RhbEhlaWdodCAvIHRoaXMuY29scy5sZW5ndGg7XG5cdFx0dGhpcy5jb2x1bW5zID0gW107XG5cdFx0Y29uc3Qgc2VnbWVudHM9dGhpcy5saW5lcy5yZWR1Y2UoKHN0YXRlLCB7IHByb3BzOiB7IGhlaWdodCA9IDAgfSB9LCBpKSA9PiB7XG5cdFx0XHRpZiAoc3RhdGUuaCA8IGNvbEhlaWdodCkge1xuXHRcdFx0XHRzdGF0ZS5oICs9IGhlaWdodDtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS5jb2x1bW5zLnB1c2goaSk7XG5cdFx0XHRcdHN0YXRlLmggPSBoZWlnaHQ7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0fSwgeyBjb2x1bW5zOiBbMF0sIGg6IDAgfSkuY29sdW1ucy5zbGljZSgwLHRoaXMuY29scy5sZW5ndGgpXG5cdFx0XG5cdFx0cmV0dXJuIHNlZ21lbnRzLmZvckVhY2goc3RhcnRJbmRleCA9PiB0aGlzLmNyZWF0ZUNvbHVtbihzdGFydEluZGV4KSk7XG5cdH1cbiAgICAvKipcbiAgICAgKiByZS1sYXlvdXQgYnkgdG90YWwgY29scycgd2lkdGggdG8gZ2V0IGxheW91dCBoZWlnaHRcbiAgICAgKiB0aGVuIHVzZSBpdCBhcyBlYWNoIGJsb2NrIGhlaWdodCB0byByZS1sYXlvdXQgYWdhaW5cbiAgICAgKi9cblx0YW55QmFsYW5jZSgpIHtcblx0XHRjb25zdCBjcmVhdGVDb2x1bW4gPSB0aGlzLmNyZWF0ZUNvbHVtbjtcblx0XHR0cnkge1xuXHRcdFx0Ly9yZWNvbXBvc2UgaW50byBjb2wgd2l0aCB0b3RhbFdpZHRoIHRvIGdldCB0b3RhbCBoZWlnaHRcblx0XHRcdGNvbnN0IHRvdGFsV2lkdGggPSB0aGlzLmNvbHMucmVkdWNlKCh3LCBhKSA9PiB3ICsgYS53aWR0aCwgMCk7XG5cdFx0XHR0aGlzLmNyZWF0ZUNvbHVtbiA9ICgpID0+IE9iamVjdC5hc3NpZ24oY3JlYXRlQ29sdW1uLmNhbGwodGhpcyksIHsgd2lkdGg6IHRvdGFsV2lkdGgsIGhlaWdodDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfSk7XG5cdFx0XHR0aGlzLnJlY29tcG9zZSgpO1xuXHRcdFx0Y29uc3QgdG90YWxIZWlnaHQgPSB0aGlzLmJsb2NrT2Zmc2V0O1xuXHRcdFx0dGhpcy5jcmVhdGVDb2x1bW4gPSAoKSA9PiBPYmplY3QuYXNzaWduKGNyZWF0ZUNvbHVtbi5jYWxsKHRoaXMpLCB7IGhlaWdodDogdG90YWxIZWlnaHQgfSk7XG5cdFx0XHR0aGlzLnJlY29tcG9zZSgpO1xuXHRcdH1cblx0XHRmaW5hbGx5IHtcblx0XHRcdGRlbGV0ZSB0aGlzLmNyZWF0ZUNvbHVtbjtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkL2dyb3VwXCJcbmltcG9ydCB7IFJlYWN0UXVlcnkgfSBmcm9tIFwid2UtZWRpdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmxpbmVTZWdtZW50cyBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgbGVmdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgc2VnbWVudHM6IFByb3BUeXBlcy5hcnJheU9mKElubGluZVNlZ21lbnQpXG4gICAgfTtcbiAgICBzdGF0aWMgY3JlYXRlKHsgc2VnbWVudHMgPSBbXSwgLi4ucHJvcHMgfSkge1xuICAgICAgICByZXR1cm4gbmV3IElubGluZVNlZ21lbnRzKHsgc2VnbWVudHM6IHNlZ21lbnRzLm1hcChhID0+IG5ldyBJbmxpbmVTZWdtZW50KGEpKSwgLi4ucHJvcHMgfSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHsgc2VnbWVudHMgPSBbXSB9ID0geyBzZWdtZW50czogW10gfSkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gc2VnbWVudHM7XG4gICAgfVxuICAgIGdldCBpdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VnbWVudHMucmVkdWNlKChhbGwsIHNlZ21lbnQpID0+IFsuLi5hbGwsIC4uLnNlZ21lbnQuaXRlbXNdLCBbXSk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWdtZW50cy5maW5kTGFzdCgoYSwgaSkgPT4gYS5pdGVtcy5sZW5ndGggPiAwIHx8IGkgPT0gMCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50WCgpIHtcbiAgICAgICAgY29uc3QgeyB4ID0gMCwgaXRlbXMgfSA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoWCwgeyBwcm9wczogeyB3aWR0aCA9IDAgfSB9KSA9PiBYICsgd2lkdGgsIHgpO1xuICAgIH1cbiAgICBzaG91bGRSZWxheW91dCh7IHNlZ21lbnRzIH0pIHtcbiAgICAgICAgY29uc3QgYlNhbWUgPSBzZWdtZW50c1xuICAgICAgICAgICAgJiYgdGhpcy5zZWdtZW50cy5sZW5ndGggPT0gc2VnbWVudHMubGVuZ3RoXG4gICAgICAgICAgICAmJiAhdGhpcy5zZWdtZW50cy5maW5kKCh7IHByb3BzOiBhIH0sIGksIGMsIGIgPSBzZWdtZW50c1tpXSkgPT4gIShiICYmIGEueCA9PSBiLnggJiYgYS53aWR0aCA9PSBiLndpZHRoKSk7XG4gICAgICAgIHJldHVybiBzZWdtZW50cyAmJiAhYlNhbWU7XG4gICAgfVxuICAgIHJlbGF5b3V0KHByb3BzLCAuLi5hdG9tcykge1xuICAgICAgICBjb25zdCByZWxheW91dCA9IHRoaXMuY29uc3RydWN0b3IuY3JlYXRlKHsgLi4udGhpcy5wcm9wcywgLi4ucHJvcHMgfSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLnRoaXMuaXRlbXMsIC4uLmF0b21zXTtcbiAgICAgICAgbGV0IGkgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSAwLCBsID0gcmVsYXlvdXQuc2VnbWVudHMubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgICBsZXQgc2VnbWVudCA9IHJlbGF5b3V0LnNlZ21lbnRzW2pdO1xuICAgICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQucHVzaChpdGVtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPCBsZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVsYXlvdXQ7XG4gICAgfVxuICAgIHB1c2goKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLnNlZ21lbnRzLmZpbmRMYXN0SW5kZXgoKGEsIGkpID0+IGEuaXRlbXMubGVuZ3RoID4gMCB8fCBpID09IDApO1xuICAgICAgICByZXR1cm4gISF0aGlzLnNlZ21lbnRzLnNsaWNlKGkpLmZpbmQoYSA9PiB7XG4gICAgICAgICAgICBpZiAoYS5wdXNoKC4uLmFyZ3VtZW50cykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwdXNoQXRvbWljKCkge1xuICAgIH1cbiAgICBwdXNoVGFiKCkge1xuICAgIH1cbiAgICBwdXNoTGluZWJyZWFrKCkge1xuICAgIH1cbiAgICBwdXNoSHlwaGVuKCkge1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCA9IDAgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgZmxhdCB9ID0gdGhpcy5zZWdtZW50c1xuICAgICAgICAgICAgLnJlZHVjZSgoeyBYLCBmbGF0IH0sIHsgaXRlbXMsIHByb3BzOiB7IHggPSAwLCB3aWR0aCA9IDAgfSB9LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgLyoqbm9uIHRleHQgYXRvbSBzZXQgeT0taGVpZ2h0LCBzbyBsaW5lIGJhc2VkIGJhc2VsaW5lIGluIEBzdG9yeSBjYW4gYmUgaW1wbGVtZW50ZWQsICAgKi9cbiAgICAgICAgICAgICAgICBpdGVtcz1pdGVtcy5tYXAoYT0+YS5wcm9wcy5oZWlnaHQgJiYgIWlzVGV4dChhKSA/ICBSZWFjdC5jbG9uZUVsZW1lbnQoYSx7eTotYS5wcm9wcy5oZWlnaHR9KSA6IGEpXG4gICAgICAgICAgICAgICAgZmxhdC5zcGxpY2UoZmxhdC5sZW5ndGgsIDAsIC4uLihYICE9IHggPyBbPEdyb3VwIHg9e1ggLSBsZWZ0fSB3aWR0aD17eCAtIFh9IC8+LCAuLi5pdGVtc10gOiBpdGVtcykpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IFg6IHggKyB3aWR0aCwgZmxhdCB9O1xuICAgICAgICAgICAgfSwgeyBmbGF0OiBbXSwgWDogbGVmdCB9KTtcbiAgICAgICAgcmV0dXJuIDxHcm91cCB7Li4ueyB4OiBsZWZ0LCBjaGlsZHJlbjogZmxhdCB9fSAvPjtcbiAgICB9XG59XG5cbmNsYXNzIElubGluZVNlZ21lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIHg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH07XG4gICAgY29uc3RydWN0b3IoeyB4LCB3aWR0aCB9KSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IGNvbnRlbnRXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChYLCBhKSA9PiBYICsgYS5wcm9wcy53aWR0aCwgMCk7XG4gICAgfVxuICAgIGdldCBhdmFpbGFibGVXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMud2lkdGggLSB0aGlzLmNvbnRlbnRXaWR0aDtcbiAgICB9XG4gICAgcHVzaChhdG9tLCBtdXN0KSB7XG4gICAgICAgIGlmIChtdXN0KSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goYXRvbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aWR0aCA9IDAsIG1pbldpZHRoID0gd2lkdGggfSA9IGF0b20ucHJvcHM7XG4gICAgICAgIGlmIChtaW5XaWR0aCA9PSAwIHx8IHRoaXMuYXZhaWxhYmxlV2lkdGggPj0gbWluV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChhdG9tKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyoqKipJbmxpbmVTZWdtZW50cyBkb2Vzbid0IHVzZSBpdFxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyB4ID0gMCwgd2lkdGggfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGxldCBYID0geDtcbiAgICAgICAgcmV0dXJuICg8R3JvdXAgeD17eH0gd2lkdGg9e3dpZHRofT5cbiAgICAgICAgICAgIHt0aGlzLml0ZW1zLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhdGVkID0gUmVhY3QuY2xvbmVFbGVtZW50KGEsIHsgeDogWCB9KTtcbiAgICAgICAgICAgICAgICBYICs9IChhLnByb3BzLndpZHRoIHx8IDApO1xuICAgICAgICAgICAgICAgIGlmKCFpc1RleHQoYSkgJiYgYS5wcm9wcy5oZWlnaHQpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGxvY2F0ZWQse3k6LWEucHJvcHMuaGVpZ2h0fSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0ZWQ7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9Hcm91cD4pO1xuICAgIH1cbn1cblxuY29uc3QgaXNUZXh0PWE9PmEucHJvcHMuZGVzY2VudCE9PXVuZGVmaW5lZFxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvc2VkXCJcblxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZSBleHRlbmRzIENvbXBvbmVudHtcblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2NoaWxkcmVuLHh9PXRoaXMucHJvcHNcblx0XHRjb25zdCBtZXJnZWQ9dGhpcy5nZXRNZXJnZWQoY2hpbGRyZW4pXG5cdFx0aWYobWVyZ2VkLmxlbmd0aD09MSl7XG5cdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KG1lcmdlZFswXSx7eH0pXG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgeD17eH0+XG5cdFx0XHRcdHt0aGlzLmdldE1lcmdlZChjaGlsZHJlbil9XG5cdFx0XHQ8L0dyb3VwPlxuXHRcdClcblx0fVxuXHRnZXRNZXJnZWQ9bWVtb2l6ZSgoY2hpbGRyZW4pPT57XG5cdFx0cmV0dXJuIFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pXG5cdFx0LnJlZHVjZSgoc3RhdGUscGllY2Usa2V5KT0+e1xuXHRcdFx0Y29uc3QgcGllY2VQYXRoPXBhdGgocGllY2UpXG5cdFx0XHRpZighcGllY2VQYXRoLmJUZXh0KXtcblx0XHRcdFx0c3RhdGUubWVyZ2VUcnVuayhrZXkpXG5cdFx0XHRcdHN0YXRlLnBpZWNlcy5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChwaWVjZSx7eDpzdGF0ZS54LGtleX0pKVxuXHRcdFx0XHRzdGF0ZS54Kz1waWVjZS5wcm9wcy53aWR0aFxuXHRcdFx0fWVsc2V7XG5cdFx0XHRcdGlmKHBpZWNlUGF0aC5qb2luKFwiLFwiKT09c3RhdGUudHJ1bmtQYXRoKXtcblx0XHRcdFx0XHRzdGF0ZS50cnVuay5wdXNoKHBpZWNlKVxuXHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0c3RhdGUubWVyZ2VUcnVuayhrZXkpXG5cdFx0XHRcdFx0c3RhdGUudHJ1bmsucHVzaChwaWVjZSlcblx0XHRcdFx0XHRzdGF0ZS50cnVua1BhdGg9cGllY2VQYXRoLmpvaW4oXCIsXCIpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdH0se1x0cGllY2VzOltdLFxuXHRcdFx0eDowLFxuXHRcdFx0dHJ1bms6W10sXG5cdFx0XHR0cnVua1BhdGg6bnVsbCxcblx0XHRcdG1lcmdlVHJ1bmsoa2V5PS0xKXtcblx0XHRcdFx0aWYodGhpcy50cnVuay5sZW5ndGg9PTEpe1xuXHRcdFx0XHRcdGNvbnN0IHBpZWNlPXRoaXMudHJ1bmtbMF1cblx0XHRcdFx0XHR0aGlzLnBpZWNlcy5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChwaWVjZSx7eDp0aGlzLngsa2V5fSkpXG5cdFx0XHRcdFx0dGhpcy54Kz1waWVjZS5wcm9wcy53aWR0aFxuXHRcdFx0XHR9ZWxzZSBpZih0aGlzLnRydW5rLmxlbmd0aD4xKXtcblx0XHRcdFx0XHRjb25zdCBleHRyYWN0PWE9PnBhdGgoYSxiPT5iKS5wb3AoKVxuXHRcdFx0XHRcdGNvbnN0IHRleHRzPXRoaXMudHJ1bmsubWFwKGV4dHJhY3QpXG5cdFx0XHRcdFx0Y29uc3QgcHJvcHM9dGV4dHMucmVkdWNlKChwcm9wcyxhKT0+e1xuXHRcdFx0XHRcdFx0XHRwcm9wcy53aWR0aCs9YS5wcm9wcy53aWR0aFxuXHRcdFx0XHRcdFx0XHRwcm9wcy5jaGlsZHJlbis9YS5wcm9wcy5jaGlsZHJlblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJvcHNcblx0XHRcdFx0XHRcdH0se1xuXHRcdFx0XHRcdFx0XHR3aWR0aDowLFxuXHRcdFx0XHRcdFx0XHRjaGlsZHJlbjpcIlwiLFxuXHRcdFx0XHRcdFx0XHRcImRhdGEtZW5kYXRcIjp0ZXh0c1t0ZXh0cy5sZW5ndGgtMV0ucHJvcHNbXCJkYXRhLWVuZGF0XCJdLFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU6dW5kZWZpbmVkLG1pbldpZHRoOnVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRjb25zdCBwYXJlbnRzPXBhdGgodGhpcy50cnVua1swXSxhPT5hLGE9PnRydWUpLnNsaWNlKDAsLTEpXG5cdFx0XHRcdFx0Y29uc3QgbWVyZ2VkPXBhcmVudHMucmVkdWNlUmlnaHQoKGNoaWxkLGEpPT5SZWFjdC5jbG9uZUVsZW1lbnQoYSx7d2lkdGg6cHJvcHMud2lkdGh9LGNoaWxkKSxSZWFjdC5jbG9uZUVsZW1lbnQodGV4dHNbMF0scHJvcHMpKVxuXHRcdFx0XHRcdHRoaXMucGllY2VzLnB1c2goUmVhY3QuY2xvbmVFbGVtZW50KG1lcmdlZCx7eDp0aGlzLngsa2V5fSkpXG5cdFx0XHRcdFx0dGhpcy54Kz1wcm9wcy53aWR0aFxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudHJ1bms9W11cblx0XHRcdFx0dGhpcy50cnVua1BhdGg9bnVsbFxuXHRcdFx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0Lm1lcmdlVHJ1bmsoKVxuXHRcdC5waWVjZXNcblx0fSlcbn1cblxuXG5mdW5jdGlvbiBwYXRoKGEsaW5mbz1hPT5hLnByb3BzW1wiZGF0YS1jb250ZW50XCJdLHRlc3Q9YT0+ISFhLnByb3BzW1wiZGF0YS1jb250ZW50XCJdLGlkcz1bXSl7XG5cdGlmKFJlYWN0LmlzVmFsaWRFbGVtZW50KGEpKXtcblx0XHRpZih0ZXN0KGEpKXtcblx0XHRcdGlkcy5wdXNoKGluZm8oYSkpXG5cdFx0XHRpZHMuYlRleHQ9YS5wcm9wc1tcImRhdGEtdHlwZVwiXT09XCJ0ZXh0XCJcblx0XHR9XG5cdFx0aWYoUmVhY3QuaXNWYWxpZEVsZW1lbnQoYS5wcm9wcy5jaGlsZHJlbikpe1xuXHRcdFx0cGF0aChSZWFjdC5DaGlsZHJlbi5vbmx5KGEucHJvcHMuY2hpbGRyZW4pLGluZm8sdGVzdCxpZHMpXG5cdFx0fVxuXHR9XG5cdHJldHVybiBpZHNcbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7UmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQge0dyb3VwLFRleHR9IGZyb20gXCIuLi8uLi8uLi9jb21wb3NlZFwiXG5cbmltcG9ydCBNZXJnZSBmcm9tIFwiLi9tZXJnZVwiXG5cbi8qKlxuICogMS4gYWxpZ25cbiAqIDIuIHNldCBiYXNlbGluZTogYmFzZWxpbmUgc2V0IG9uIHN0b3J5IGlzIGltcG9ydGFudCBmb3Igcm90YXRpb25cbiAqIDMuIG1lcmdlIHRvIHNpbXBsaWZ5IGRvbSBzdHJ1Y3R1cmUgZm9yIHBlcmZvcm1hbmNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3J5IGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9XCJzdG9yeVwiXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtjaGlsZHJlbiwgYWxpZ249XCJsZWZ0XCJ9PXRoaXMucHJvcHNcblx0XHRjb25zdCBkZXNjZW50PWNoaWxkcmVuLnJlZHVjZSgoaCx7cHJvcHM6e2Rlc2NlbnQ9MH19KT0+TWF0aC5tYXgoaCxkZXNjZW50KSwwKVxuXHRcdGNvbnN0IGJhc2VsaW5lPWNoaWxkcmVuLnJlZHVjZSgoaCx7cHJvcHM6e2hlaWdodD0wLGRlc2NlbnQ9MH19KT0+TWF0aC5tYXgoaCxoZWlnaHQtZGVzY2VudCksMClcblx0XHRjb25zdCBhbGlnbmVkPXRoaXNbYWxpZ25dKClcblx0XHRyZXR1cm4gKDxHcm91cCBjbGFzc05hbWU9XCJzdG9yeVwiIHk9e2Jhc2VsaW5lfSBsaW5lRGVzY2VudD17ZGVzY2VudH0gY2hpbGRyZW49e2FsaWduZWR9Lz4pXG5cdH1cblxuXHQvKipcblx0ICogR3JvdXAgdW5wb3NpdGlvbmVkIGZvciBlYWNoIHBvc2l0aW9uZWRcblx0ICogKioqIGxhc3QgZ3JvdXAgc2hvdWxkIGlnbm9yZSBtaW5XaWR0aD09MCBlbGVtZW50IGZvciBhbGlnbm1lbnRcblx0ICogQHBhcmFtIHsqfSByaWdodCBcblx0ICovXG5cdGdyb3VwKHJpZ2h0PWZhbHNlKXtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuXHRcdFx0LnJlZHVjZSgoZ3JvdXBzLGEpPT57XG5cdFx0XHRcdGlmKGEucHJvcHMueCE9dW5kZWZpbmVkKXtcblx0XHRcdFx0XHRpZihyaWdodCl7XG5cdFx0XHRcdFx0XHRncm91cHMucHVzaCh7bG9jYXRlZDphLHdvcmRzOltdfSlcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdGdyb3Vwc1tncm91cHMubGVuZ3RoLTFdLmxvY2F0ZWQ9YVxuXHRcdFx0XHRcdFx0Z3JvdXBzLnB1c2goe3dvcmRzOltdfSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdGdyb3Vwc1tncm91cHMubGVuZ3RoLTFdLndvcmRzLnB1c2goYSlcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZ3JvdXBzXG5cdFx0XHR9LFt7d29yZHM6W119XSlcblx0XHRcdC5tYXAoKGdyb3VwLF9pLF9hLGlzTGFzdD1faT09X2EubGVuZ3RoLTEpPT57XG5cdFx0XHRcdGxldCBpPWdyb3VwLndvcmRzLmxlbmd0aC1cblx0XHRcdFx0XHRcdEFycmF5LmZyb20oZ3JvdXAud29yZHMpXG5cdFx0XHRcdFx0XHRcdC5yZXZlcnNlKClcblx0XHRcdFx0XHRcdFx0LmZpbmRJbmRleChhPT5pc0xhc3QgPyBhLnByb3BzLm1pbldpZHRoIT09MCA6ICFpc1doaXRlc3BhY2UoYSkgKVxuXG5cdFx0XHRcdGdyb3VwLmVuZGluZ1doaXRlc3BhY2VzPWdyb3VwLndvcmRzLnNsaWNlKGkpXG5cdFx0XHRcdGdyb3VwLndvcmRzPWdyb3VwLndvcmRzLnNsaWNlKDAsaSlcblx0XHRcdFx0cmV0dXJuIGdyb3VwXG5cdFx0XHR9KVxuXHR9XG5cblx0bGVmdCgpe1xuXHRcdHJldHVybiB0aGlzLmdyb3VwKClcblx0XHRcdC5yZWR1Y2UoKHN0YXRlLCB7d29yZHMsIGVuZGluZ1doaXRlc3BhY2VzLGxvY2F0ZWR9KT0+e1xuXHRcdFx0XHRpZih3b3Jkcy5sZW5ndGgrZW5kaW5nV2hpdGVzcGFjZXMubGVuZ3RoKXtcblx0XHRcdFx0XHRzdGF0ZS5hbGlnbmVkLnB1c2goXG5cdFx0XHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG5ldyBNZXJnZSh7XG5cdFx0XHRcdFx0XHRcdFx0eDpzdGF0ZS54LFxuXHRcdFx0XHRcdFx0XHRcdGNoaWxkcmVuOlsuLi53b3JkcywuLi5lbmRpbmdXaGl0ZXNwYWNlc10ubWFwKChhLGtleSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXl9KSlcblx0XHRcdFx0XHRcdFx0fSkucmVuZGVyKCksXG5cdFx0XHRcdFx0XHRcdHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGxvY2F0ZWQpe1xuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQobG9jYXRlZCx7a2V5OnN0YXRlLmFsaWduZWQubGVuZ3RofSkpXG5cdFx0XHRcdFx0c3RhdGUueD1sb2NhdGVkLnByb3BzLngrbG9jYXRlZC5wcm9wcy53aWR0aFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdFx0fSx7eDowLCBhbGlnbmVkOltdfSlcblx0XHRcdC5hbGlnbmVkXG5cdH1cblx0cmlnaHQoKXtcblx0XHRyZXR1cm4gdGhpcy5ncm91cCh0cnVlKVxuXHRcdFx0LnJlZHVjZVJpZ2h0KChzdGF0ZSwge2xvY2F0ZWQsd29yZHMsZW5kaW5nV2hpdGVzcGFjZXN9KT0+e1xuXHRcdFx0XHRpZihlbmRpbmdXaGl0ZXNwYWNlcy5sZW5ndGg+MCl7XG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFxuXHRcdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRuZXcgTWVyZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdHg6c3RhdGUueCxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjplbmRpbmdXaGl0ZXNwYWNlcy5tYXAoKGEsa2V5KT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleX0pKVxuXHRcdFx0XHRcdFx0XHR9KS5yZW5kZXIoKSxcblx0XHRcdFx0XHRcdFx0e2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYod29yZHMubGVuZ3RoKXtcblx0XHRcdFx0XHRzdGF0ZS54PXdvcmRzLnJlZHVjZSgoeCxhKT0+eC1hLnByb3BzLndpZHRoLHN0YXRlLngpXG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFxuXHRcdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KFxuXHRcdFx0XHRcdFx0XHRuZXcgTWVyZ2Uoe1xuXHRcdFx0XHRcdFx0XHRcdHg6c3RhdGUueCxcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbjp3b3Jkcy5tYXAoKGEsa2V5KT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleX0pKVxuXHRcdFx0XHRcdFx0XHR9KS5yZW5kZXIoKSxcblx0XHRcdFx0XHRcdFx0e2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYobG9jYXRlZCl7XG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChsb2NhdGVkLHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9KSlcblx0XHRcdFx0XHRzdGF0ZS54PWxvY2F0ZWQucHJvcHMueFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdFx0fSx7eDp0aGlzLnByb3BzLndpZHRoLGFsaWduZWQ6W119KVxuXHRcdFx0LmFsaWduZWRcblx0XHRcdC5yZXZlcnNlKClcblx0fVxuXG5cdGNlbnRlcigpe1xuXHRcdGNvbnN0IGNvbnRlbnRXaWR0aD1waWVjZXM9PnBpZWNlcy5yZWR1Y2UoKHcsYSk9PncrYS5wcm9wcy53aWR0aCwwKVxuXHRcdHJldHVybiB0aGlzXG5cdFx0XHQuZ3JvdXAoKVxuXHRcdFx0LnJlZHVjZSgoc3RhdGUsIHt3b3JkcywgZW5kaW5nV2hpdGVzcGFjZXMsbG9jYXRlZH0pPT57XG5cdFx0XHRcdGlmKHdvcmRzLmxlbmd0aCtlbmRpbmdXaGl0ZXNwYWNlcy5sZW5ndGgpe1xuXHRcdFx0XHRcdGNvbnN0IHdpZHRoPShsb2NhdGVkID8gbG9jYXRlZC5wcm9wcy54IDogdGhpcy5wcm9wcy53aWR0aCktc3RhdGUueFxuXHRcdFx0XHRcdGNvbnN0IHdvcmRzV2lkdGg9Y29udGVudFdpZHRoKHdvcmRzKVxuXHRcdFx0XHRcdHN0YXRlLmFsaWduZWQucHVzaChcblx0XHRcdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0bmV3IE1lcmdlKHtcblx0XHRcdFx0XHRcdFx0XHR4OnN0YXRlLngrKHdpZHRoLXdvcmRzV2lkdGgpLzIsXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW46Wy4uLndvcmRzLC4uLmVuZGluZ1doaXRlc3BhY2VzXS5tYXAoKGEsa2V5KT0+UmVhY3QuY2xvbmVFbGVtZW50KGEse2tleX0pKVxuXHRcdFx0XHRcdFx0XHR9KS5yZW5kZXIoKSxcblx0XHRcdFx0XHRcdFx0e2tleTpzdGF0ZS5hbGlnbmVkLmxlbmd0aH1cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYobG9jYXRlZCl7XG5cdFx0XHRcdFx0c3RhdGUuYWxpZ25lZC5wdXNoKFJlYWN0LmNsb25lRWxlbWVudChsb2NhdGVkLHtrZXk6c3RhdGUuYWxpZ25lZC5sZW5ndGh9KSlcblx0XHRcdFx0XHRzdGF0ZS54PWxvY2F0ZWQucHJvcHMueCtsb2NhdGVkLnByb3BzLndpZHRoXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHN0YXRlXG5cdFx0XHR9LHt4OjAsIGFsaWduZWQ6W119KS5hbGlnbmVkXG5cdH1cblxuXHRqdXN0aWZ5KCl7XG5cdFx0cmV0dXJuIHRoaXNcblx0XHRcdC5ncm91cCgpXG5cdFx0XHQucmVkdWNlKChzdGF0ZSx7d29yZHMsZW5kaW5nV2hpdGVzcGFjZXMsbG9jYXRlZH0pPT57XG5cdFx0XHRcdGxldCBsZW49c3RhdGUuanVzdGlmaWVkLmxlbmd0aFxuXHRcdFx0XHRjb25zdCB3aWR0aD0obG9jYXRlZCA/IGxvY2F0ZWQucHJvcHMueCA6IHRoaXMucHJvcHMud2lkdGgpLXN0YXRlLnhcblx0XHRcdFx0Y29uc3Qge3doaXRlc3BhY2VzLGNvbnRlbnRXaWR0aH09d29yZHMucmVkdWNlKChzdGF0dXMsYSxpKT0+e1xuXHRcdFx0XHRcdGlmKGlzV2hpdGVzcGFjZShhKSl7XG5cdFx0XHRcdFx0XHRzdGF0dXMud2hpdGVzcGFjZXMucHVzaChpKVxuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0c3RhdHVzLmNvbnRlbnRXaWR0aCs9YS5wcm9wcy53aWR0aFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc3RhdHVzXG5cdFx0XHRcdH0se2NvbnRlbnRXaWR0aDowLHdoaXRlc3BhY2VzOltdfSlcblx0XHRcdFx0Y29uc3Qgd2hpdGVzcGFjZVdpZHRoPXdoaXRlc3BhY2VzLmxlbmd0aD4wID8gKHdpZHRoLWNvbnRlbnRXaWR0aCkvd2hpdGVzcGFjZXMubGVuZ3RoIDogMDtcblx0XHRcdFx0Wy4uLndvcmRzLC4uLmVuZGluZ1doaXRlc3BhY2VzXS5yZWR1Y2UoKHgsd29yZCxpKT0+e1xuXHRcdFx0XHRcdHN0YXRlLmp1c3RpZmllZC5wdXNoKFJlYWN0LmNsb25lRWxlbWVudCh3b3JkLHt4LGtleTpsZW4rK30pKVxuXHRcdFx0XHRcdHJldHVybiB4Kyh3aGl0ZXNwYWNlcy5pbmNsdWRlcyhpKSA/IHdoaXRlc3BhY2VXaWR0aCA6IHdvcmQucHJvcHMud2lkdGgpXG5cdFx0XHRcdH0sc3RhdGUueClcblxuXHRcdFx0XHRpZihsb2NhdGVkKXtcblx0XHRcdFx0XHRzdGF0ZS5qdXN0aWZpZWQucHVzaChSZWFjdC5jbG9uZUVsZW1lbnQobG9jYXRlZCx7a2V5OmxlbisrfSkpXG5cdFx0XHRcdFx0c3RhdGUueD1sb2NhdGVkLnByb3BzLngrbG9jYXRlZC5wcm9wcy53aWR0aFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdFx0fSx7eDowLGp1c3RpZmllZDpbXX0pLmp1c3RpZmllZFxuXHR9XG5cblx0Ym90aCgpe1xuXHRcdHJldHVybiB0aGlzLmp1c3RpZnkoKVxuXHR9XG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShhKXtcblx0cmV0dXJuIG5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdChgLndoaXRlc3BhY2VgKS5sZW5ndGg+MFxufVxuIiwiaW1wb3J0IEJsb2NrIGZyb20gXCIuL2Jsb2NrL2JhbGFuY2VhYmxlXCJcbmltcG9ydCBJbmxpbmUgZnJvbSBcIi4vaW5saW5lXCJcbmltcG9ydCBDb25zdHJhaW50U3BhY2UgZnJvbSBcIi4vY29uc3RyYWludC1zcGFjZVwiXG5cbmV4cG9ydCBkZWZhdWx0IHtCbG9jaywgSW5saW5lLCBDb25zdHJhaW50U3BhY2UsIElNTUVESUFURV9TVE9QOkJsb2NrLklNTUVESUFURV9TVE9QfSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7UmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IElubGluZVNlZ21lbnRzIGZyb20gXCIuL2xubGluZS1zcGFjZS1zZWdtZW50c1wiXG5pbXBvcnQgU3RvcnkgZnJvbSBcIi4vc3RvcnlcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi8uLi9jb21wb3NlZC9ncm91cFwiXG5cbi8qKlxuICogaGVpZ2h0OiBsaW5lIGJveCBoZWlnaHRcbiAqIGNvbnRlbnRIZWlnaHQ6IG1heCBvZiBhbGwgYXRvbXMnIGhlaWdodFxuICogdGV4dEhlaWdodDogbWF4IG9mIHRleHQgYXRvbXMnIGhlaWdodCwgcGVyY2VudGFnZSBsaW5lIGJveCBoZWlnaHQgc2hvdWxkIGJlIGJhc2VkIG9uIHRleHRIZWlnaHRcbiAqIGxpbmUgYmxvY2sgaGVpZ2h0OiB0b3BUb0Jsb2NrT2Zmc2V0ICsgaGVpZ2h0IChjb250ZW50IGhlaWdodCksIHBhcmVudCBjYW4gYWRkIGl0cyBvd24gbG9naWMgdG8gY2hhbmdlIGxpbmUgaGVpZ2h0XG4gKiBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRjb25zdHJ1Y3Rvcih7c3BhY2U6e2xlZnQsIHJpZ2h0LCBmaW5kSW5saW5lU2VnbWVudHN9fSl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuZmluZElubGluZVNlZ21lbnRzPWZpbmRJbmxpbmVTZWdtZW50c1xuXHRcdFx0fHwoKCk9Pih7c2VnbWVudHM6W3t4OmxlZnQsIHdpZHRoOnRoaXMud2lkdGh9XX0pKTsvL0BUT0RPOiB3aHkgaXMgdGhlcmUgbm8gZmluZElubGluZVNlZ21lbnRzIHNvbWUgdGltZXM/IFRFU1QgPz8/XG5cdFx0Y29uc3Qgc2VnbWVudHM9dGhpcy5maW5kSW5saW5lU2VnbWVudHModGhpcy50b3BUb0Jsb2NrT2Zmc2V0LGxlZnQscmlnaHQpXG5cdFx0dGhpcy5pbmxpbmVTZWdtZW50cz1JbmxpbmVTZWdtZW50cy5jcmVhdGUoe2xlZnQsLi4uc2VnbWVudHN9KVxuXHR9XG5cblx0Z2V0IHNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMucHJvcHMuc3BhY2Vcblx0fVxuXG5cdC8qKiBpbmxpbmUgYm94IGhlaWdodCwgY29uc2lkZXJpbmcgcHJvcHMubGluZUhlaWdodCwgY29udGVudC90ZXh0IGhlaWdodCAqL1xuXHRnZXQgaGVpZ2h0KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TGluZUhlaWdodCgpXG5cdH1cblx0LyoqbWF4IG9mIGFsbCBhdG9tcycgaGVpZ2h0ICovXG5cdGdldCBjb250ZW50SGVpZ2h0KCkge1xuXHRcdHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgoSCwgeyBwcm9wczogeyBoZWlnaHQgPSAwIH0gfSkgPT4gTWF0aC5tYXgoSCwgaGVpZ2h0KSwgMCk7XG4gICAgfVxuXG5cdC8qKm1heCBvZiB0ZXh0IGF0b21zJyBoZWlnaHQsIHBlcmNlbnRhZ2UgbGluZSBib3ggaGVpZ2h0IHNob3VsZCBiZSBiYXNlZCBvbiB0ZXh0SGVpZ2h0ICovXG4gICAgZ2V0IHRleHRIZWlnaHQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChILCB7IHByb3BzOiB7IGhlaWdodCA9IDAsIGRlc2NlbnQ6aXNUZXh0IH0gfSkgPT4gTWF0aC5tYXgoSCwgaXNUZXh0ID8gaGVpZ2h0IDogMCksIDApO1xuXHR9XHRcblxuXHQvKiogaW5saW5lIGxheW91dCB3aWR0aCAqL1xuXHRnZXQgd2lkdGgoKXtcblx0XHRjb25zdCB7c3BhY2U6e3dpZHRoPTAsbGVmdD0wLCByaWdodD13aWR0aH19PXRoaXMucHJvcHNcblx0XHRyZXR1cm4gcmlnaHQtbGVmdFxuXHR9XG5cdFx0XG5cdGdldCBmaXJzdEF0b20oKXtcblx0XHRjb25zdCBmaXJzdD10aGlzLmlubGluZVNlZ21lbnRzLml0ZW1zLmZpbmQoYT0+YS5wcm9wcy54PT09dW5kZWZpbmVkKVxuXHRcdGlmKGZpcnN0ICYmIGZpcnN0LnByb3BzLmF0b20pXG5cdFx0XHRyZXR1cm4gZmlyc3QucHJvcHMuYXRvbVxuXHRcdGlmKGZpcnN0ICYmIGZpcnN0LnByb3BzLmRlc2NlbnQ9PXVuZGVmaW5lZClcblx0XHRcdHJldHVybiBmaXJzdC5wcm9wcy5jaGlsZHJlblxuXHRcdHJldHVybiBmaXJzdFxuXHR9XG5cblx0Z2V0IGxhc3RBdG9tKCl7XG5cdFx0Y29uc3QgbGFzdD10aGlzLmlubGluZVNlZ21lbnRzLml0ZW1zLmZpbmRMYXN0KGE9PmEucHJvcHMueD09PXVuZGVmaW5lZClcblx0XHRpZihsYXN0ICYmIGxhc3QucHJvcHMuYXRvbSlcblx0XHRcdHJldHVybiBsYXN0LnByb3BzLmF0b21cblx0XHRyZXR1cm4gbGFzdFxuXHR9XG5cblx0Z2V0IGF0b21zKCl7XG5cdFx0cmV0dXJuIHRoaXMuaW5saW5lU2VnbWVudHMuaXRlbXMubWFwKGE9PmEgJiYgYS5wcm9wcy5hdG9tIHx8YSlcblx0fVxuXG5cdGdldCBpdGVtcygpe1xuXHRcdHJldHVybiBbLi4udGhpcy5wcm9wcy5wb3NpdGlvbmVkLC4uLnRoaXMuaW5saW5lU2VnbWVudHMuaXRlbXNdXG5cdH1cblxuXHQvKiogdGhlIGRpc3RhbmNlIGJldHdlZW4gbGluZSBibG9ja09mZnNldCAgYW5kIGxpbmUgY29udGVudCB0b3AqL1xuXHRnZXQgdG9wVG9CbG9ja09mZnNldCgpe1xuXHRcdGNvbnN0IHtwcm9wczp7dG9wOmxpbmVUb3A9MH0sIGlubGluZVNlZ21lbnRzOntwcm9wczp7dG9wOm9wcG9ydHVuaXR5VG9wPTB9fT17cHJvcHM6e319fT10aGlzXG5cdFx0cmV0dXJuIG9wcG9ydHVuaXR5VG9wK2xpbmVUb3Bcblx0fVxuXG5cdGlzRW1wdHkoKXtcblx0XHRyZXR1cm4gISEhdGhpcy5maXJzdEF0b21cblx0fVxuXG5cdC8qKlxuXHQgKiBhbmNob3IgY29udGVudCBtYXkgYWxyZWF5IGFuY2hvcmVkLCBvciBtYXkgbm90XG5cdCAqIGlmIGFscmVhZHkgYW5jaG9yZWQsIGNvbnRpbnVlIG5leHQgYXRvbVxuXHQgKiBpZiBub3QsIGxldCBwYXJlbnQgYmxvY2sgbGF5b3V0IGl0IHNpbmNlIGl0IHBvc3NpYmx5IGFmZmVjdCBsYXlvdXQgc3BhY2UsIGJsb2NrIG9mZnNldFxuXHQgKi9cblx0YXBwZW5kQW5jaG9yQXRvbShhdG9tKXtcblx0XHRjb25zdCAkYXRvbT1uZXcgUmVhY3RRdWVyeShhdG9tKVxuXHRcdGNvbnN0ICRhbmNob3I9JGF0b20uZmluZEZpcnN0KCdbZGF0YS10eXBlPVwiYW5jaG9yXCJdJylcblx0XHRjb25zdCBhbmNob3JJZD0kYW5jaG9yLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcblx0XHRjb25zdCBwbGFjZWhvbGRlcj1SZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHQkYXRvbS5yZXBsYWNlKCRhbmNob3IuZ2V0KDApLDxHcm91cC8+KS5nZXQoMCksXG5cdFx0XHR7YXRvbSx3aWR0aDowLFwiZGF0YS1hbmNob3JcIjphbmNob3JJZH1cblx0XHQpXG5cdFx0Ly9SZWFjdC5jbG9uZUVsZW1lbnQoJGFuY2hvci5nZXQoMCkse2F0b20sd2lkdGg6MCxcImRhdGEtYW5jaG9yXCI6YW5jaG9ySWR9KVxuXHRcdHRoaXMuaW5saW5lU2VnbWVudHMucHVzaChwbGFjZWhvbGRlcilcblx0XHRpZighdGhpcy5zcGFjZS5pc0FuY2hvcmVkKGFuY2hvcklkKSl7Ly9sZXQgZnJhbWUgYW5jaG9yIHRoaXMgYXRvbSBmaXJzdFxuXHRcdFx0LyoqXG5cdFx0XHQgKiBhbmNob3IgcG9zaXRpb24gTUFZIG5vdCBkZWNpZGVkLCBzbyBpdCdzIE5PVCBzdXJlIGlmIHNwYWNlIGNhbiBob2xkIGFuY2hvclxuXHRcdFx0ICogdG8gTGV0IGl0IHNpbXBseSwgbGV0IGJsb2NrL3BhcmVudCBsYXlvdXQgZW5naW5lIGxheW91dCBpdCBpbW1lZGlhdGx5IFxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmFuY2hvcj1hdG9tLnByb3BzLmFuY2hvclxuXHRcdFx0Ly9jb21taXQgZm9yIGFuY2hvciwgdGhpcyBsaW5lIHNob3VsZCBiZSByb2xsYmFja1xuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0fWVsc2V7XG5cdFx0XHQvL25vdCBmdWxsLCBjb250aW51ZSBuZXh0IGF0b21cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogaW5saW5lIGxheW91dCBkb2Vzbid0IGNvbnNpZGVyIGJsb2NrIGxheW91dCBjYXBhY2l0eSxcblx0ICogbGVhdmUgaXQgdG8gYmxvY2sgbGF5b3V0IGVuZ2luZSBkZWNpZGUgaG93IHRvIGhhbmRsZSBvdmVyZmxvdyBibG9jayBzaXplXG5cdCAqL1xuXHRhcHBlbmRBdG9tKGF0b20pe1xuXHRcdGlmKGF0b20ucHJvcHMuYW5jaG9yKXtcblx0XHRcdHJldHVybiB0aGlzLmFwcGVuZEFuY2hvckF0b20oYXRvbSlcblx0XHR9XG5cdFx0XG5cdFx0Y29uc3QgYXBwZW5kZWQ9KG5ld0hlaWdodD0+e1xuXHRcdFx0aWYoKG5ld0hlaWdodC10aGlzLmhlaWdodCk+MSl7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBsaW5lIHJlY3QgY2hhbmdlIG1heSBsZWFkIHRvIGRpZmZlcmVudCBpbmxpbmUgb3Bwb3J0dW5pdGllcyBhbmQgdG9wXG5cdFx0XHRcdCAqIGdldCBvcHBvcnR1bml0aWVzIGFnYWluXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCB7c3BhY2U6e2xlZnQscmlnaHR9LHRvcD0wfT10aGlzLnByb3BzXG5cdFx0XHRcdGNvbnN0IHNlZ21lbnRzPXRoaXMuZmluZElubGluZVNlZ21lbnRzKHRoaXMudG9wVG9CbG9ja09mZnNldCtuZXdIZWlnaHQsbGVmdCxyaWdodClcblx0XHRcdFx0aWYodGhpcy5pbmxpbmVTZWdtZW50cy5zaG91bGRSZWxheW91dChzZWdtZW50cykpe1xuXHRcdFx0XHRcdGNvbnN0IHJlbGF5b3V0ZWQ9dGhpcy5pbmxpbmVTZWdtZW50cy5yZWxheW91dChzZWdtZW50cyxhdG9tKVxuXHRcdFx0XHRcdGlmKHJlbGF5b3V0ZWQhPT1mYWxzZSl7XG5cdFx0XHRcdFx0XHR0aGlzLmlubGluZVNlZ21lbnRzPXJlbGF5b3V0ZWRcblx0XHRcdFx0XHRcdC8vbmV3IGlubGluZSBvcHBvcnR1bml0aWVzIGNhbiBob2xkIGxheW91dGVkIGFuZCBhdG9tLCByZXBsYWNlIGlubGluZVNlZ21lbnRzLCBhbmQgdG9wXG5cdFx0XHRcdFx0XHQvL25vdCBmdWxsLCBjb250aW51ZSBuZXh0IGF0b21cblx0XHRcdFx0XHRcdHJldHVybiBcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdC8vbmV3IGlubGluZSBvcHBvcnR1bml0aWVzIGNhbiBOT1QgaG9sZCBhdG9tLCBjb21taXQgdG8gYmxvY2sgbGF5b3V0XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vc2FtZSBpbmxpbmUgb3Bwb3J0dW5pdGllcywgY29udGludWUgbm9ybWFsIGlubGluZSBsYXlvdXQgbGF0ZXIgXG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHQvL2xpbmUgcmVjdCBkb2Vzbid0IGNoYW5nZSwgY29udGludWUgbm9ybWFsIGlubGluZSBsYXlvdXQgbGF0ZXIgXG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHJldHVybiB0aGlzLmlubGluZVNlZ21lbnRzLnB1c2goYXRvbSlcblx0XHR9KSh0aGlzLmdldExpbmVIZWlnaHQoYXRvbS5wcm9wcy5oZWlnaHQpKTtcblxuXHRcdGlmKGFwcGVuZGVkPT09ZmFsc2UgJiYgdGhpcy5pc0VtcHR5KCkpe1xuXHRcdFx0Ly9lbXB0eSBpbmxpbmUgbGF5b3V0IGlzIG5vdCBhbGxvd2VkXG5cdFx0XHR0aGlzLmlubGluZVNlZ21lbnRzLnB1c2goYXRvbSx0cnVlLyphcHBlbmQgYXRvbSB3aXRob3V0IGNvbnNpZGVyaW5nIGlubGluZSBzaXplKi8pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRyZXR1cm4gYXBwZW5kZWRcblx0fVxuXHRcblx0Z2V0TGluZUhlaWdodChjb250ZW50SGVpZ2h0PXRoaXMuY29udGVudEhlaWdodCl7XG5cdFx0Y29uc3Qge2xpbmVIZWlnaHR9PXRoaXMucHJvcHNcblx0XHRpZih0eXBlb2YobGluZUhlaWdodCk9PSdzdHJpbmcnKXtcblx0XHRcdHJldHVybiBjb250ZW50SGVpZ2h0Kyh0eXBlb2YobGluZUhlaWdodCk9PSdzdHJpbmcnID8gdGhpcy50ZXh0SGVpZ2h0KihwYXJzZUludChsaW5lSGVpZ2h0KS0xMDApLzEwMC4wOiAwKVxuXHRcdH1lbHNlIGlmKHR5cGVvZihsaW5lSGVpZ2h0KT09XCJudW1iZXJcIil7XG5cdFx0XHRyZXR1cm4gbGluZUhlaWdodFxuXHRcdH1cblx0XHRyZXR1cm4gY29udGVudEhlaWdodFxuICAgICAgICBcblx0fVxuXG5cdGZyZWV6ZSgpe1xuXHRcdGNvbnN0IHtwcm9wczp7Y2hpbGRyZW59fT10aGlzLmlubGluZVNlZ21lbnRzLnJlbmRlcigpXG5cdFx0dGhpcy5jaGlsZHJlbj1bLi4udGhpcy5wcm9wcy5wb3NpdGlvbmVkLC4uLmNoaWxkcmVuXVxuXHRcdHJldHVybiB0aGlzXG5cdH1cblxuXHRyZW5kZXIoYkxhc3RMaW5lKXtcblx0XHRjb25zdCB7cHJvcHM6e2FsaWdufX09dGhpc1xuXHRcdGNvbnN0IHN0b3J5PW5ldyBTdG9yeSh7XG5cdFx0XHRjaGlsZHJlbjp0aGlzLmNoaWxkcmVuLCBcblx0XHRcdHdpZHRoOnRoaXMud2lkdGgsXG5cdFx0XHRhbGlnbjpiTGFzdExpbmUgJiYgW1wianVzdGlmeVwiLFwiYm90aFwiXS5pbmNsdWRlcyhhbGlnbikgPyB1bmRlZmluZWQgOiBhbGlnbixcblx0XHR9KVxuXHRcdHJldHVybiBzdG9yeS5yZW5kZXIoKVxuXHR9XG5cblx0aXNGaXRUbyhzcGFjZSl7XG5cdFx0aWYoIXNwYWNlKVxuXHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0aWYodGhpcy5zcGFjZS53aWR0aCE9c3BhY2Uud2lkdGgpXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRjb25zdCB7c2VnbWVudHN9PXNwYWNlLmZpbmRJbmxpbmVTZWdtZW50cyh0aGlzLnRvcFRvQmxvY2tPZmZzZXQrdGhpcy5oZWlnaHQsc3BhY2UubGVmdCxzcGFjZS5yaWdodClcblxuXHRcdHJldHVybiB0aGlzLmlubGluZVNlZ21lbnRzLnNlZ21lbnRzLmxlbmd0aD09c2VnbWVudHMubGVuZ3RoICYmXG5cdFx0XHQhISF0aGlzLmlubGluZVNlZ21lbnRzLnNlZ21lbnRzLmZpbmQoKHtwcm9wczp7eCx3aWR0aH19LGksXywkLGI9c2VnbWVudHNbaV0pPT5iLnghPXggJiYgYi53aWR0aCE9d2lkdGgpXG5cdH1cblxuXHRjbG9uZTRTcGFjZShzcGFjZSl7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3Ioey4uLnRoaXMucHJvcHMsc3BhY2V9KSx7aW5saW5lU2VnbWVudHM6dGhpcy5pbmxpbmVTZWdtZW50cyxjaGlsZHJlbjp0aGlzLmNoaWxkcmVufSlcblx0fVxufVxuIiwiaW1wb3J0IEhhc0NoaWxkIGZyb20gXCIuL2hhc0NoaWxkXCJcbmltcG9ydCBIYXNQYXJlbnRBbmRDaGlsZCBmcm9tIFwiLi9oYXNQYXJlbnRBbmRDaGlsZFwiXG5pbXBvcnQgTm9DaGlsZCBmcm9tIFwiLi9ub0NoaWxkXCJcblxuaW1wb3J0IFJlY29tcG9zYWJsZSBmcm9tIFwiLi9yZWNvbXBvc2FibGVcIlxuaW1wb3J0IExvY2F0YWJsZSBmcm9tIFwiLi9sb2NhdGFibGVcIlxuaW1wb3J0IFN0b3BwYWJsZSBmcm9tIFwiLi9zdG9wcGFibGVcIlxuaW1wb3J0IENvbnRpbnVhYmxlIGZyb20gXCIuL2NvbnRpbnVhYmxlXCJcbmltcG9ydCBDb21wb3NlZEFsbFRyaWdnZXIgZnJvbSBcIi4vY29tcG9zZWQtYWxsLXRyaWdnZXJcIlxuXG5pbXBvcnQgTGF5b3V0IGZyb20gXCIuL2xheW91dFwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2FibGUoQSx7bG9jYXRhYmxlLHN0b3BwYWJsZSxjb250aW51YWJsZSxyZWNvbXBvc2FibGV9KXtcblx0aWYobG9jYXRhYmxlICYmICFBLmFscmVhZHkoXCJsb2NhdGFibGVcIikpe1xuXHRcdEE9TG9jYXRhYmxlKEEsbG9jYXRhYmxlKVxuXHR9XG5cblx0aWYocmVjb21wb3NhYmxlICYmICFBLmFscmVhZHkoXCJyZWNvbXBvc2FibGVcIikpe1xuXHRcdEE9UmVjb21wb3NhYmxlKEEscmVjb21wb3NhYmxlKVxuXHR9XG5cblx0aWYoc3RvcHBhYmxlICYmICFBLmFscmVhZHkoXCJzdG9wcGFibGVcIikpe1xuICAgICAgICBBPVN0b3BwYWJsZShBLHN0b3BwYWJsZSlcbiAgICB9XG5cblx0aWYoY29udGludWFibGUgJiYgIUEuYWxyZWFkeShcImNvbnRpbnVhYmxlXCIpKXtcbiAgICAgICAgQT1Db250aW51YWJsZShBLENvbnRpbnVhYmxlKVxuICAgIH1cblxuICAgIHJldHVybiBBXG59XG5cblxuLyoqXG4gKiAgaXQncyBhIHZlcnkgY29tcGxpY2F0ZWQgam9iLCBzbyB3ZSBuZWVkIGEgdmVyeSBzaW1wbGUgZGVzaWduLCBvbmUgc2VudGVuY2UgZGVzY3JpYmVkIHNvbHV0aW9uLiBvcHRpb25zOlxuICogIDEuIHJlbW92ZSBhbGwgY29tcG9zZWQsIGFuZCByZS1jb21wb3NlIGFsbFxuICogIFx0LSBuZWVkIGZpbmQgYSB0aW1lIHRvIHJlY29tcG9zZVxuICogIFx0LSBsb2dpYyBpcyBtb3N0IHNpbXBsZVxuICogIFx0LSBwZXJmb3JtYW5jZSBpcyBtb3N0IGJhZFxuICpcbiAqICAyLiByZW1vdmUgYWxsIGNvbXBvc2VkIGZyb20gdGhpcyBjb250ZW50LCBhbmQgcmUtY29tcG9zZSByZW1vdmFsc1xuICogIFx0LSBOZWVkIGxvY2F0ZSBjb21wb3NlZCBvZiB0aGlzIGNvbnRlbnQgaW4gcGFnZVxuICogIFx0LSBOZWVkIGZpbmQgYSB0aW1lIHRvIHJlY29tcG9zZVxuICogIFx0XHQ+IGNvbXBvbmVudERpZFVwZGF0ZVxuICogIFx0XHRcdC4gYW55IHN0YXRlIHVwZGF0ZSxcbiAqICBcdFx0XHQuIGFuZCBjYXJlZnVsbHkgdHVuZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dClcbiAqICBcdC0gcGVyZm9ybWFuY2UgaXMgYmV0dGVyIHRoYW4gIzFcbiAqXG4gKiAgMy4gcmVjb21wb3NlIHRoaXMgY29udGVudCwgYW5kIGNoZWNrIGlmIG5ldyBjb21wb3NlZCBmaXRzIGxhc3QgY29tcG9zZWQgc3BhY2UgKGhpdCByYXRpbyBpcyBsb3cpXG4gKiAgXHQtIFllczoganVzdCByZXBsYWNlXG4gKiAgXHQtIE5vOiAjMSwgb3IgIzJcbiAqICBcdC0gYW5kIHRoZW4gbG9vcCB3aXRoIGFsbCBmb2xsb3dpbmcgY29udGVudCB3aXRoIHRoZSBzYW1lIGxvZ2ljXG4gKlxuICogIFx0My5hOiByZWNvbXBvc2UgdGhpcyBjb250ZW50IGxpbmUgYnkgbGluZSAuLi4sIG11Y2ggbG9naWNzIGhlcmVcbiAqL1xuXG5mdW5jdGlvbiBlZGl0YWJsZShBLCBlbmFibGVzPXt9KXtcblx0cmV0dXJuIGNvbXBvc2FibGUoQSx7bG9jYXRhYmxlOnRydWUscmVjb21wb3NhYmxlOnRydWUsLi4uZW5hYmxlc30pXG59XG5cbmNvbnN0IGVuYWJsaWZ5PWZ1bmM9Pih0YXJnZXRzLCBleGNsdWRlcyk9Pk9iamVjdC5rZXlzKHRhcmdldHMpXG5cdC5yZWR1Y2UoKGVuYWJsZWQsIGspPT57XG5cdFx0aWYoIWVuYWJsZWRba10pe1xuXHRcdFx0ZW5hYmxlZFtrXT1mdW5jKHRhcmdldHNba10pXG5cdFx0fVxuXHRcdHJldHVybiBlbmFibGVkXG5cdH0sey4uLmV4Y2x1ZGVzfSk7XG5cbltIYXNDaGlsZCwgSGFzUGFyZW50QW5kQ2hpbGQsIE5vQ2hpbGQsUmVjb21wb3NhYmxlLCBMb2NhdGFibGUsU3RvcHBhYmxlLENvbnRpbnVhYmxlLGVkaXRhYmxlXVxuXHQuZm9yRWFjaChhPT5hLmVuYWJsZT1lbmFibGlmeShhKSlcblxuZXhwb3J0IHtlbmFibGlmeSwgZWRpdGFibGUsXG5cdExheW91dCxcblx0SGFzQ2hpbGQsIEhhc1BhcmVudEFuZENoaWxkLCBOb0NoaWxkLCBDb21wb3NlZEFsbFRyaWdnZXIsXG5cdFJlY29tcG9zYWJsZSxMb2NhdGFibGUsU3RvcHBhYmxlLENvbnRpbnVhYmxlXG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQge0xheW91dCwgSGFzUGFyZW50QW5kQ2hpbGQsIGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vY29tcG9zZWRcIlxuXG5jbGFzcyBGcmFtZSBleHRlbmRzIExheW91dC5CbG9ja3tcblx0c3RhdGljIGRpc3BsYXlOYW1lPUhhc1BhcmVudEFuZENoaWxkKGRvbS5GcmFtZSkuZGlzcGxheU5hbWVcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHR1dWlkOntcblx0XHRcdFx0Z2V0KCl7XG5cdFx0XHRcdFx0Y29uc3Qge3Byb3BzOntpLGlkfX09dGhpc1xuXHRcdFx0XHRcdHJldHVybiBgJHtpZH0ke2khPXVuZGVmaW5lZCA/IFwiX1wiK2kgOiBcIlwifWBcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRnZXQgaXNGcmFtZSgpe1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRnZXRTcGFjZSgpe1xuXHRcdHJldHVybiB0aGlzLl9fZ2V0U3BhY2UodGhpcy5wcm9wcylcblx0fVxuXG5cdF9fZ2V0U3BhY2U9bWVtb2l6ZShwcm9wcz0+e1xuXHRcdGNvbnN0IHNwYWNlPXN1cGVyLmdldFNwYWNlKClcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG1hcmdpbjp7bGVmdD0wLHJpZ2h0PTAsdG9wPTAsYm90dG9tPTB9PXt9LHg9MCx5PTB9PXRoaXMucHJvcHNcblx0XHRjb25zdCBlZGdlcz17XG5cdFx0XHRbdGhpcy5nZXRDb21wb3NlVHlwZSgpXTp7bGVmdDp4LHRvcDp5LHJpZ2h0Ongrd2lkdGgsYm90dG9tOnkraGVpZ2h0fSxcblx0XHRcdG1hcmdpbjp7bGVmdDp4K2xlZnQsdG9wOnkrdG9wLHJpZ2h0OndpZHRoK3gtcmlnaHQsYm90dG9tOnkraGVpZ2h0LWJvdHRvbX1cblx0XHR9XG5cdFx0aWYodGhpcy5jb2xzKVxuXHRcdFx0cmV0dXJuIExheW91dC5Db25zdHJhaW50U3BhY2UuY3JlYXRlKHNwYWNlKS5jbG9uZSh7ZWRnZXN9KVxuXG5cdFx0cmV0dXJuIExheW91dC5Db25zdHJhaW50U3BhY2UuY3JlYXRlKHNwYWNlKS5jbG9uZSh7XG5cdFx0XHRsZWZ0OngrbGVmdCxcblx0XHRcdHJpZ2h0Ongrd2lkdGgtcmlnaHQsXG5cdFx0XHRibG9ja09mZnNldDp5K3RvcCxcblx0XHRcdGhlaWdodDpoZWlnaHQtdG9wLWJvdHRvbSxcblx0XHRcdGVkZ2VzXG5cdFx0fSlcblx0fSlcblxuXHRkZWZpbmVQcm9wZXJ0aWVzKCl7XG5cdFx0c3VwZXIuZGVmaW5lUHJvcGVydGllcygpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHRjb21wb3NlZEhlaWdodDp7XG5cdFx0XHRcdGVudW1lcmFibGU6dHJ1ZSxcblx0XHRcdFx0Y29uZmlndXJhYmxlOnRydWUsXG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdGlmKHRoaXMuY29scylcblx0XHRcdFx0XHRcdHJldHVybiBNYXRoLm1heCguLi50aGlzLmNvbHVtbnMubWFwKGE9PmEuYmxvY2tPZmZzZXQpKVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLmJsb2NrT2Zmc2V0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cdFxuXHQvKipcblx0ICogYWx3YXlzIHVzZSBzcGFjZSB0byBsb2NhdGUgc2luY2UgbGF5b3V0IHVzaW5nIGl0IFxuXHQgKi9cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0Y29uc3QgYWxpZ25ZPWNvbnRlbnRIZWlnaHQ9Pntcblx0XHRcdGNvbnN0IHtoZWlnaHQ9Y29udGVudEhlaWdodCwgdmVydEFsaWdufT10aGlzLnByb3BzXG5cdFx0XHRpZihjb250ZW50SGVpZ2h0PT11bmRlZmluZWQpXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWRcblx0XHRcdHN3aXRjaCh2ZXJ0QWxpZ24pe1xuXHRcdFx0XHRjYXNlIFwiYm90dG9tXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGhlaWdodC1jb250ZW50SGVpZ2h0XG5cdFx0XHRcdGNhc2UgXCJjZW50ZXJcIjpcblx0XHRcdFx0Y2FzZSBcIm1pZGRsZVwiOlxuXHRcdFx0XHRcdHJldHVybiAoaGVpZ2h0LWNvbnRlbnRIZWlnaHQpLzJcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gMFxuXHRcdFx0fVxuXHRcdH1cblx0XHR2YXIgY29udGVudD10aGlzLnBvc2l0aW9uTGluZXModGhpcy5saW5lcylcblx0XHRjb25zdCBjb250ZW50SGVpZ2h0PWNvbnRlbnQucHJvcHMuaGVpZ2h0XG5cdFx0Y29udGVudD1SZWFjdC5jbG9uZUVsZW1lbnQoY29udGVudCx7eTphbGlnblkoY29udGVudEhlaWdodCl9KVxuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQ9Y29udGVudEhlaWdodCxtYXJnaW46e2xlZnQ9MCx0b3A9MH09e30sIHgseSx6LG5hbWVkfT10aGlzLnByb3BzXG5cdFx0aWYoIXRoaXMuY29scyAmJiAobGVmdHx8dG9wKSl7XG5cdFx0XHRjb250ZW50PSg8R3JvdXAgeD17bGVmdH0geT17dG9wfT57Y29udGVudH08L0dyb3VwPilcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB7Li4ue3dpZHRoLGhlaWdodCx4LHkseixuYW1lZCwgY2xhc3NOYW1lOlwiZnJhbWVcIiwgXCJkYXRhLWZyYW1lXCI6dGhpcy51dWlkfX0+XG5cdFx0XHRcdHtbXG5cdFx0XHRcdFx0UmVhY3QuY2xvbmVFbGVtZW50KGNvbnRlbnQse2tleTpcImNvbnRlbnRcIn0pLFxuXHRcdFx0XHRcdC4uLnRoaXMuYW5jaG9ycy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXk6aX0pKSxcblx0XHRcdFx0XS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6e3o6ejE9MH19LHtwcm9wczp7ejp6Mj0wfX0sKT0+ejEtejIpfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cblxuXHRsaW5lWFkobGluZSl7XG5cdFx0aWYoIXRoaXMuY29scyl7XG5cdFx0XHRjb25zdCB7bWFyZ2luOnt0b3A9MCxsZWZ0PTB9PXt9fT10aGlzLnByb3BzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OmxlZnQsXG5cdFx0XHRcdHk6dGhpcy5saW5lcy5zbGljZSgwLHRoaXMubGluZXMuaW5kZXhPZihsaW5lKSkucmVkdWNlKChZLHtwcm9wczp7aGVpZ2h0PTB9fSk9PlkraGVpZ2h0LHRvcClcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qge3k6eTA9MCx4PTAsbGluZXN9PXRoaXMuY29sdW1ucy5maW5kKGE9PmEubGluZXMuaW5jbHVkZXMobGluZSkpfHx0aGlzLmN1cnJlbnRDb2x1bW5cblx0XHRyZXR1cm4ge1xuXHRcdFx0eCxcblx0XHRcdHk6bGluZXMuc2xpY2UoMCxsaW5lcy5pbmRleE9mKGxpbmUpKS5yZWR1Y2UoKFkse3Byb3BzOntoZWlnaHQ9MH19KT0+WStoZWlnaHQseTApXG5cdFx0fVxuXHR9XG5cblx0Y29sdW1uSW5kZXhPZihsaW5lSW5kZXgpe1xuXHRcdGlmKCF0aGlzLmNvbHMpXG5cdFx0XHRyZXR1cm4gMFxuXHRcdHJldHVybiB0aGlzLmNvbHVtbnMuZmluZEluZGV4KGE9PmEubGluZXMuc3RhcnRJbmRleD49bGluZUluZGV4KVxuXHR9XG5cblx0bGF5b3V0T2YoKXtcblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LG1hcmdpbn09dGhpcy5wcm9wc1xuXHRcdHJldHVybiB7d2lkdGgsaGVpZ2h0LG1hcmdpbixjb2xzOnRoaXMuY29sc31cblx0fVxuXG5cdGNsb25lKHByb3BzPXt9KXtcblx0XHRjb25zdCB7Y29tcHV0ZWR9PXRoaXNcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcih7Li4udGhpcy5wcm9wcywgLi4ucHJvcHN9LHRoaXMuY29udGV4dCkse2NvbXB1dGVkfSlcblx0fVxufVxuXG4vKipcbiAqIEEgZnJhbWUgd291bGQgZmluYWxseSBhcHBlbmQgY29tcG9zZWQgdG8gcGFyZW50IG9uY2UsIFxuICogc28gbGFzdENvbXBvc2VkIHNob3VsZCBoYXZlIG9ubHkgb25lIGl0ZW1cbiAqIEZyYW1lIGNhY2hlIGtleSBzaG91bGQgYmFzZWQgb24gXG4gKiAxLiBzcGFjZSB7d2lkdGgsaGVpZ2h0LCB3cmFwcGVlcyxjb2xzfTogd2lkdGggb3IgY29sc1sqXS53aWR0aCBpcyBjaGFuZ2VkLCB0aGUgY2FjaGUgdXN1c2FsbHkgY2FuIE5PVCBiZSB1c2VkXG4gKiAyLiBjb250ZW50OiBzcGFjZSBpcyBub3QgY2hhbmdlLCBjb250ZW50IGNhbiByZWxheW91dCBmcm9tIGNoYW5nZWQgY29udGVudFxuICogXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlRnJhbWUgZXh0ZW5kcyBlZGl0YWJsZShGcmFtZSx7c3RvcHBhYmxlOnRydWUsIGNvbnRpbnVhYmxlOnRydWV9KXtcblx0X19fY3JlYXRlQ29tcG9zZWQyUGFyZW50PW1lbW9pemUoY29tcG9zZWRVVUlEPT5zdXBlci5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSlcblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0cmV0dXJuIHRoaXMuX19fY3JlYXRlQ29tcG9zZWQyUGFyZW50KHRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEfHx0aGlzLmNvbnRleHQucGFyZW50LmNvbXB1dGVkLmNvbXBvc2VkVVVJRClcblx0fVxuXHRcblx0LyoqXG5cdCAqIEBjb250aW51YWJsZVxuXHQgKiBtdWx0aXBsZSBjb2xzIG1vZGVsIHNob3VsZCBjaGVjayBvbiBsYXN0IGNvbHVtblxuXHQgKiBAcGFyYW0geyp9IGEgXG5cdCAqL1xuXHRzaG91bGRDb250aW51ZUNvbXBvc2UoKXtcblx0XHRpZighdGhpcy5jb2xzIHx8IC8vbm9uLWNvbHVtbiBtb2RlbFxuXHRcdFx0dGhpcy5jb2x1bW5zLmxlbmd0aD09dGhpcy5jb2xzLmxlbmd0aCl7Ly9sYXN0IGNvbHVtblxuXHRcdFx0aWYoIXRoaXMuY29udGV4dC5zaG91bGRDb250aW51ZUNvbXBvc2UoLi4uYXJndW1lbnRzKSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRpZih0aGlzLmF2YWlsYWJsZUJsb2NrU2l6ZTw9MClcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHQvL25vbi1sYXN0IGNvbHVtbiBhbHdheXMgY29udGludWVcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0LyoqXG5cdCAqIGxhc3RDb21wb3NlZCBpcyB1c2VsZXNzIGZvciBmcmFtZSwgc2luY2UgaXQgb25seSBjb21taXQgb25jZVxuXHQgKiB0byBzeW5jIGxpbmVzLCBhbmNob3JzLCBcblx0ICovXG4gICAgY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2lkLC4uLm5leHRQcm9wc30pe1xuXHRcdC8vKipyZW1vdmUgaWQgdG8gYXZvaWQgcmVwbGFjZSB0aGlzIHJlYWwgY29tcG9zZXIgKi9cblx0XHRjb25zdCBzcGFjZT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihuZXh0UHJvcHMsdGhpcy5jb250ZXh0KS5nZXRTcGFjZSgpXG5cdFx0XG5cdFx0Y29uc3QgaXNJbmxpbmVTaXplQ2hhbmdlZD10aGlzLmdldFNwYWNlKCkuaXNJbmxpbmVTaXplRGlmZmVyZW50KHNwYWNlKVxuXHRcdGlmKGlzSW5saW5lU2l6ZUNoYW5nZWQpe1xuXHRcdFx0Ly9pZiBpbmxpbmUgc2l6ZSBjaGFuZ2UsIGFsbCBoYXZlIHRvIGJlIHJlY29tcG9zZWRcblx0XHRcdHRoaXMuY29tcHV0ZWQuYW5jaG9ycz1bXVxuXHRcdFx0cmV0dXJuIHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0XHR9XG5cblx0XHQvL2xhc3QgY29tcG9zZWQgaXMgc3RpbGwgdmFsaWQgaWYgYmxvY2sgc2l6ZSBjaGFuZ2UgXG5cdFx0Ly9AVE9ETzogd3JhcHBlZXMgY2hhbmdlLCBidXQgb3VyIHdyYXBwZWVzIGFyZSBmdW5jdGlvbnMsIGhvdyB0byBjb21wYXJlPz8/XG5cblx0XHRjb25zdCBjaGFuZ2VkPW5leHRQcm9wcy5oYXNoIT10aGlzLnByb3BzLmhhc2hcblx0XHRpZihjaGFuZ2VkKXtcblx0XHRcdHRoaXMuX2NhbmNlbENoYW5nZWRQYXJ0KC4uLmFyZ3VtZW50cylcblx0XHR9XG5cdFx0dGhpcy5fY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCguLi5hcmd1bWVudHMpXG5cdH1cblxuXHRfY2FuY2VsQ2hhbmdlZFBhcnQobmV4dCl7XG5cdFx0Y29uc3QgY2hpbGRyZW5OZWVkUmVjb21wb3NlPXRoaXMuY2hpbGRyZW5OZWVkUmVjb21wb3NlKG5leHQsdGhpcy5wcm9wcylcblx0XHRjb25zdCBmaXJzdExpbmVOZWVkUmVjb21wb3NlPXRoaXMubGluZXMuZmluZEluZGV4KGE9PmNoaWxkcmVuTmVlZFJlY29tcG9zZS5pbmNsdWRlcyh0aGlzLmNoaWxkSWRPZihhKSkpXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbShmaXJzdExpbmVOZWVkUmVjb21wb3NlKVxuXHR9XG5cdFxuXHRfY2FuY2VsVW50aWxMYXN0QWxsQ2hpbGRyZW5Db21wb3NlZCgpe1xuICAgICAgIGNvbnN0IGxhc3RMaW5lT2ZBbGxDaGlsZHJlbkNvbXBvc2VkPXRoaXMubGluZXMuZmluZExhc3RJbmRleCgoYSxpLF8sJCxpZD10aGlzLmNoaWxkSWRPZihhKSk9Pntcblx0XHRcdGNvbnN0IGNvbXBvc2VyPXRoaXMuY29udGV4dC5nZXRDb21wb3NlcihpZClcblx0XHRcdHJldHVybiBjb21wb3NlciAmJiBjb21wb3Nlci5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHRcdH0pXG5cdFx0dGhpcy5yZW1vdmVGcm9tKGxhc3RMaW5lT2ZBbGxDaGlsZHJlbkNvbXBvc2VkKzEpXG5cdH1cblxuICAgIGFwcGVuZExhc3RDb21wb3NlZCgpe1xuXHRcdGlmKCF0aGlzLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcblx0XHRcdGlmKHRoaXMubGFzdExpbmUpe1xuXHRcdFx0XHRjb25zdCBsYXN0SWQ9dGhpcy5sYXN0TGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbkFycmF5KHRoaXMucHJvcHMuY2hpbGRyZW4pLmZpbmRJbmRleChhPT5hICYmIGEucHJvcHMuaWQ9PWxhc3RJZClcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0cmVtb3ZlRnJvbShsaW5lSW5kZXgpe1xuXHRcdGNvbnN0IHJlbW92ZWQ9c3VwZXIucm9sbGJhY2tMaW5lcyh0aGlzLmxpbmVzLmxlbmd0aC1saW5lSW5kZXgpXG5cdFx0aWYocmVtb3ZlZC5sZW5ndGg+MCl7XG5cdFx0XHRkZWxldGUgdGhpcy5jb21wdXRlZC5hbGxDb21wb3NlZFxuXHRcdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9W11cblx0XHR9XG5cdFx0cmV0dXJuIHJlbW92ZWRcblx0fVxufVxuIiwiXG5pbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsIEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgRnJhbWUgZnJvbSBcIi4vZnJhbWVcIlxuXG5jbGFzcyBVc2UgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG4gICAgICAgIGdldENvbXBvc2VkVGVtcGxhdGU6UHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCBjb21wb3NlZFRlbXBsYXRlPXRoaXMuY29udGV4dC5nZXRDb21wb3NlZFRlbXBsYXRlKHRoaXMucHJvcHMueGhyZWYpXG4gICAgICAgIGlmKCFjb21wb3NlZFRlbXBsYXRlKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgICByZXR1cm4gKDxGcmFnbWVudD57Y29tcG9zZWRUZW1wbGF0ZS5wcm9wcy5jaGlsZHJlbn08L0ZyYWdtZW50PilcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgRnJhbWV7XG4gICAgc3RhdGljIFVzZT1Vc2VcbiAgICBjcmVhdGVDb21wb3NlZDJQYXJlbnQoKXtcbiAgICAgICAgY29uc3Qge3hocmVmLG1hc3Rlcn09dGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHN5bWJvbCBpZD17eGhyZWZ9PlxuICAgICAgICAgICAgICAgIHttYXN0ZXIgPyA8VXNlIHhocmVmPXttYXN0ZXJ9Lz4gOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzdXBlci5jcmVhdGVDb21wb3NlZDJQYXJlbnQoLi4uYXJndW1lbnRzKX1cbiAgICAgICAgICAgIDwvc3ltYm9sPlxuICAgICAgICApXG4gICAgfSBcbiAgICBzdGF0aWMgaXNUZW1wbGF0ZShhKXtcbiAgICAgICAgcmV0dXJuIGEgJiYgYS50eXBlPT09XCJzeW1ib2xcIlxuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7Y3JlYXRlUG9ydGFsfSBmcm9tIFwicmVhY3QtZG9tXCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vZ3JvdXBcIlxuXG4vKipcbiAqIGRpc3BsYXkgY2hpbGRyZW4gdG8gbW9zdCB0b3BcbiAqID4gd2hlbiB4LCB5IHNwZWNpZmllZCwgdG9wIGlzIGF0IGFic29sdXRlIHBvc2l0aW9uLCBvdGhlcndpc2UgaXQgbmVlZCBnZXQgcG9zaXRpb24gYXMgZm9sbG93aW5nXG4gKiAxLiBnZXQgaXRzZWxmIHBvc2l0aW9uIHdoZW4gbW91bnRpbmdcbiAqIDIuIGNyZWF0ZSBwb3J0YWwgYXQgdGhlIHBvc3Rpb2luXG4gKiBcbiAqIEBUT0RPOiB3aGF0IGlmIHByb3BzLngveSBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcCBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyh7eCx5fSxzdGF0ZSl7XG5cdFx0cmV0dXJuIHt4LHksLi4uc3RhdGV9XG5cdH1cblxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cdH1cblxuICAgIHJlbmRlcigpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7eD0wLCB5PTAsIHN2Z30sIHByb3BzOnt9fT10aGlzXG5cdFx0Y29uc3QgaWdub3JlRXZlbnQ9ZT0+ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdGNvbnN0IGNvbnRlbnQ9KFxuXHRcdFx0PEdyb3VwIGlubmVyUmVmPXthPT50aGlzLmVsPWF9IHg9e3h9IHk9e3l9IFxuXHRcdFx0XHRvbk1vdXNlRG93bj17aWdub3JlRXZlbnR9XG5cdFx0XHRcdG9uTW91c2VNb3ZlPXtpZ25vcmVFdmVudH1cblx0XHRcdFx0b25Nb3VzZVVwPXtpZ25vcmVFdmVudH1cblx0XHRcdFx0PlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICAgICAgPC9Hcm91cD5cblx0XHQpXG5cblx0XHRyZXR1cm4gc3ZnID8gY3JlYXRlUG9ydGFsKGNvbnRlbnQsICBzdmcpIDogY29udGVudFxuICAgIH1cblxuXHRjb21wb25lbnREaWRNb3VudCgpe1xuXHRcdGNvbnN0IHtzdGF0ZTp7eCx5LCB1c2VSZWxhdGl2ZVBvc2l0aW9uPXg9PXVuZGVmaW5lZCAmJiB5PT11bmRlZmluZWR9LGVsfT10aGlzXG5cdFx0Y29uc3Qgc3ZnPWVsLnZpZXdwb3J0RWxlbWVudFxuXHRcdGlmKCF1c2VSZWxhdGl2ZVBvc2l0aW9uKVxuXHRcdFx0cmV0dXJuIHRoaXMuc2V0U3RhdGUoe3N2Z30pXG5cdFx0XG5cdFx0bGV0IG89ZWwudmlld3BvcnRFbGVtZW50LmNyZWF0ZVNWR1BvaW50KClcblx0XHRvLng9MCxvLnk9MFxuXHRcdG89by5tYXRyaXhUcmFuc2Zvcm0oZWwuZ2V0Q1RNKCkpXG5cdFx0dGhpcy5zZXRTdGF0ZSh7c3ZnLCB4Om8ueCwgeTpvLnl9KVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnQsRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgVG9wIGZyb20gXCIuL3RvcFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE92ZXJsYXkgZXh0ZW5kcyBDb21wb25lbnR7XG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbiwuLi5wcm9wc309dGhpcy5wcm9wc1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8VG9wIHg9ezB9IHk9ezB9PlxuXHRcdFx0XHRcdDxyZWN0IHsuLi57d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLGZpbGw6XCJ0cmFuc3BhcmVudFwifX0gey4uLnByb3BzfS8+XG5cdFx0XHRcdDwvVG9wPlxuICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgKVxuICAgIH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCxGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5pbXBvcnQgVG9wIGZyb20gXCIuL3RvcFwiXG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi9vdmVybGF5XCJcbmltcG9ydCBHcm91cCBmcm9tIFwiLi4vZ3JvdXBcIlxuXG4vKipcbiAqIDEuIGFuY2hvciBtb3ZlOiBtb3ZlIHRvIGFyYml0YXJ5IHgseSwgd2hpY2ggY2FuIGJlIGNvbXBvc2luZyBkdXJpbmcgbW92aW5nLCB3aXRob3V0IHBsYWNlaG9sZGVyXG4gKiAyLiBmbG93IG1vdmU6IG1vdmUgdG8gYSBmbG93YWJsZSBwb3NpdGlvbiwgd2hpY2ggY2FuIHVzZSBwbGFjZWhvbGRlciB0byBpZGVudGlmeSB0aGUgZGVzdFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb3ZhYmxlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHRhcm91bmQ6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG9uTW92ZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0aXNBbmNob3I6IFByb3BUeXBlcy5ib29sLFxuXHR9XG5cblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0cG9zaXRpb25pbmc6IFByb3BUeXBlcy5vYmplY3Rcblx0fVxuXG5cdHN0YXRlPXttb3Zpbmc6ZmFsc2V9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHttb3ZpbmcsIHgsIHl9PXRoaXMuc3RhdGVcblx0XHRjb25zdCB7Y2hpbGRyZW4sIGlzQW5jaG9yfT10aGlzLnByb3BzXG5cdFx0aWYoIW1vdmluZyl7XG5cdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLHtcblx0XHRcdFx0b25Nb3VzZURvd246ZT0+e1xuXHRcdFx0XHRcdGlmKGUuYnV0dG9ucyYweDEpe1xuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0Y29uc3Qge3gseX09dGhpcy5jb250ZXh0LnBvc2l0aW9uaW5nLmFzQ2FudmFzUG9pbnQoe2xlZnQ6ZS5jbGllbnRYLHRvcDplLmNsaWVudFl9KVxuXHRcdFx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh7bW92aW5nOnRydWUseCx5fSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8T3ZlcmxheSBjdXJzb3I9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRvbk1vdXNlVXA9e2U9PnRoaXMub25FbmRNb3ZlKGUpfVxuXHRcdFx0XHRcdG9uTW91c2VNb3ZlPXtlPT50aGlzLm1vdmluZyhlKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0eyFpc0FuY2hvciAmJiA8TW92aW5nUGxhY2Vob2xkZXIgey4uLnt4LHl9fS8+fVxuXHRcdFx0XHQ8L092ZXJsYXk+XG5cdFx0XHQ8L0ZyYWdtZW50PlxuXHRcdClcblx0XHRcdFxuXHR9XG5cbiAgICBvbkVuZE1vdmUoZSl7XG5cdFx0aWYoIXRoaXMuc3RhdGUubW92aW5nKVxuXHRcdFx0cmV0dXJuXG5cdFx0Y29uc3Qge2NsaWVudFg6bGVmdCwgY2xpZW50WTp0b3B9PWVcblx0XHR0aGlzLnNldFN0YXRlKHttb3Zpbmc6ZmFsc2V9LCgpPT57XG5cdFx0XHRjb25zdCB7cHJvcHM6e2lzQW5jaG9yLG9uTW92ZX0sIHN0YXRlOnt4LHl9fT10aGlzXG5cdFx0XHRpZihpc0FuY2hvcil7XG5cdFx0XHRcdGNvbnN0IGRlc3Q9dGhpcy5jb250ZXh0LnBvc2l0aW9uaW5nLmFzQ2FudmFzUG9pbnQoe2xlZnQsIHRvcH0pXG5cdFx0XHRcdG9uTW92ZSh7ZGVzdDp7ZHg6ZGVzdC54LXgsIGR5OmRlc3QueS15fX0pXG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0b25Nb3ZlKHtkZXN0OnRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hcm91bmQobGVmdCx0b3ApfSlcblx0XHRcdH1cblx0XHR9KVxuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG5cbiAgICBtb3ZpbmcoZSl7XG5cdFx0Y29uc3Qge3N0YXRlOnttb3ZpbmcseCx5fSxwcm9wczp7b25Nb3ZlLGlzQW5jaG9yfX09dGhpc1xuXHRcdGlmKG1vdmluZyl7XG5cdFx0XHRjb25zdCB7Y2xpZW50WDpsZWZ0LCBjbGllbnRZOnRvcH09ZVxuXHRcdFx0aWYoaXNBbmNob3Ipe1xuXHRcdFx0XHRjb25zdCBkZXN0PXRoaXMuY29udGV4dC5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0LCB0b3B9KVxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHsuLi5kZXN0fSwoKT0+e1xuXHRcdFx0XHRcdG9uTW92ZSh7ZGVzdDp7ZHg6ZGVzdC54LXgsIGR5OmRlc3QueS15fX0pXG5cdFx0XHRcdH0pXG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0Y29uc3Qge2lkLGF0fT10aGlzLmNvbnRleHQucG9zaXRpb25pbmcuYXJvdW5kKGxlZnQsdG9wKVxuXHRcdFx0XHRpZihpZCl7XG5cdFx0XHRcdFx0Y29uc3Qge3gseX09dGhpcy5jb250ZXh0LnBvc2l0aW9uaW5nLnBvc2l0aW9uKGlkLGF0KVxuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe3gseSxpZCxhdH0pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbn1cblxuY29uc3QgTW92aW5nUGxhY2Vob2xkZXI9KHt4PTAseT0wfSk9Pihcblx0PFRvcD5cblx0XHQ8R3JvdXAgIHg9e3h9IHk9e3l9PlxuXHRcdFx0PHJlY3QgeD17NX0geT17MjB9IHdpZHRoPXsxMH0gaGVpZ2h0PXs1fVxuXHRcdFx0XHRcdGZpbGw9XCJ0cmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0c3Ryb2tlPXtcImdyYXlcIn1cblx0XHRcdFx0XHRzdHJva2VXaWR0aD1cIjFcIi8+XG5cdFx0XHQ8cmVjdCB3aWR0aD17Mn0gaGVpZ2h0PXsyMH0gZmlsbD17XCJibGFja1wifS8+XG5cdFx0PC9Hcm91cD5cblx0PC9Ub3A+XG4pXG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZSxBQ1RJT059IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBNb3ZhYmxlIGZyb20gXCIuL21vdmFibGVcIlxuXG5leHBvcnQgZGVmYXVsdCB3aGVuU2VsZWN0aW9uQ2hhbmdlKCh7c2VsZWN0aW9ufSk9Pntcblx0cmV0dXJuIHNlbGVjdGlvbiA/IHtzZWxlY3Rpb24scmVjdHM6c2VsZWN0aW9uLmdldFJhbmdlUmVjdHMoKX0gOiB7fVxufSx1bmRlZmluZWQsdW5kZWZpbmVkLHt3aXRoUmVmOnRydWV9KShjbGFzcyBTZWxlY3Rpb25TaGFwZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5hbnlcblx0fVxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLmFyZWE9UmVhY3QuY3JlYXRlUmVmKClcblx0XHR0aGlzLnN0YXRlPXt9XG5cdFx0dGhpcy5vblNocmluaz10aGlzLm9uU2hyaW5rLmJpbmQodGhpcylcblx0XHR0aGlzLm9uTW92ZT10aGlzLm9uTW92ZS5iaW5kKHRoaXMpXG5cdH1cblxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7c3RhdGU6e3JlY3RzPVtdLCBzZWxlY3Rpbmd9LCBwcm9wczp7fX09dGhpc1xuXHRcdGNvbnN0IHtlZGl0YWJsZX09dGhpcy5jb250ZXh0XG5cdFx0Y29uc3QgcmFuZ2U9PEFyZWEgcmVjdHM9e3JlY3RzfSBpbm5lclJlZj17dGhpcy5hcmVhfS8+XG5cdFx0aWYoc2VsZWN0aW5nKVxuXHRcdFx0cmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChyYW5nZSx7b25Nb3VzZU1vdmU6dGhpcy5vblNocmlua30pXG5cdFx0XG5cdFx0cmV0dXJuIGVkaXRhYmxlID8gPE1vdmFibGUgY2hpbGRyZW49e3JhbmdlfSBvbk1vdmU9e3RoaXMub25Nb3ZlfS8+IDogcmFuZ2Vcblx0fVxuXG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe3JlY3RzfSx7c2VsZWN0aW5nfSl7XG5cdFx0aWYoIXNlbGVjdGluZylcblx0XHRcdHJldHVybiB7cmVjdHN9XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdG9uU2hyaW5rKHtidXR0b25zLCBjbGllbnRYOmxlZnQsIGNsaWVudFk6IHRvcH0pe1xuXHRcdGlmKCEoYnV0dG9ucyYweDEpKVxuXHRcdFx0cmV0dXJuXG5cdFx0Y29uc3Qge3NlbGVjdGlvbn09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IHtyZWN0c309dGhpcy5zdGF0ZVxuXHRcdGNvbnN0IHt4LHl9PXNlbGVjdGlvbi5wb3NpdGlvbmluZy5hc0NhbnZhc1BvaW50KHtsZWZ0LHRvcH0pXG5cblx0XHRsZXQgaT1yZWN0cy5maW5kSW5kZXgoKHtsZWZ0LHRvcCxyaWdodCxib3R0b219KT0+eTw9Ym90dG9tICYmIGxlZnQ8PXggJiYgeDw9cmlnaHQpXG5cdFx0bGV0IG5ld1JlY3RzPXJlY3RzLnNsaWNlKDAsaSsxKVxuXHRcdGlmKGkhPS0xKXtcblx0XHRcdG5ld1JlY3RzW25ld1JlY3RzLmxlbmd0aC0xXS5yaWdodD14LTJcblx0XHR9XG5cdFx0dGhpcy5zZXRTdGF0ZSh7cmVjdHM6bmV3UmVjdHN9KVxuXHR9XG5cblx0b25Nb3ZlKGUpe1xuXHRcdHRoaXMucHJvcHMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5NT1ZFKGUpKVxuXHR9XG5cblx0Y29tcG9uZW50RGlkTW91bnQoKXtcblx0XHR0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSh7fSlcblx0fVxuXG5cdGNvbXBvbmVudERpZFVwZGF0ZShwcmV2KXtcblx0XHRjb25zdCBzZWxlY3Rpb249dGhpcy5wcm9wcy5zZWxlY3Rpb25cblx0XHRpZihwcmV2LnNlbGVjdGlvbiE9c2VsZWN0aW9uICYmIHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uaXNSYW5nZSl7XG5cdFx0XHRpZihzZWxlY3Rpb24uaXNTZWxlY3Rpb25DaGFuZ2VkKHByZXYuc2VsZWN0aW9uKSl7XG5cdFx0XHRcdGNvbnN0IHNoYXBlPXRoaXMuYXJlYS5jdXJyZW50XG5cdFx0XHRcdGlmKHNoYXBlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpXG5cdFx0XHRcdFx0c2hhcGUuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0c2hhcGUuc2Nyb2xsSW50b1ZpZXcoKVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSlcblxuZXhwb3J0IGNvbnN0IEFyZWE9KHtyZWN0cywgaW5uZXJSZWYsLi4ucHJvcHN9KT0+KFxuXHQ8cGF0aFxuXHRcdHJlZj17aW5uZXJSZWZ9XG5cdFx0ZmlsbD1cIiMzMjk3RkRcIlxuXHRcdGNsYXNzTmFtZT1cInNlbGVjdGlvblNoYXBlXCJcblx0XHRzdHlsZT17e2ZpbGxPcGFjaXR5OjAuNX19XG5cdFx0ZD17XG5cdFx0XHQocmVjdHN8fFtdKS5tYXAoKHtsZWZ0LHRvcCxyaWdodCxib3R0b219KT0+YE0ke2xlZnR9ICR7dG9wfSBMJHtyaWdodH0gJHt0b3B9IEwke3JpZ2h0fSAke2JvdHRvbX0gTCR7bGVmdH0gJHtib3R0b219IFpgKS5qb2luKFwiIFwiKVxuXHRcdH1cblx0XHR7Li4ucHJvcHN9XG5cdFx0b25DbGljaz17ZT0+Y29uc29sZS5sb2coMSl9XG5cdFx0Lz5cbilcbiIsImltcG9ydCBSZWFjdCx7Q29tcG9uZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHt3aGVuU2VsZWN0aW9uQ2hhbmdlfSBmcm9tIFwid2UtZWRpdFwiXG5cbmV4cG9ydCBkZWZhdWx0IHdoZW5TZWxlY3Rpb25DaGFuZ2UoKShcbiAgICBjbGFzcyBDdXJzb3JTaGFwZSBleHRlbmRzIENvbXBvbmVudHtcbiAgICAgICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIHRoaXMuc2hhcGU9UmVhY3QuY3JlYXRlUmVmKClcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKXtcbiAgICAgICAgICAgIGNvbnN0IHtzZWxlY3Rpb24sIHN0eWxlIH09dGhpcy5wcm9wc1xuICAgICAgICAgICAgY29uc3Qge3Bvc2l0aW9uOnt5ID0gMCwgeCA9IDAsIGhlaWdodCA9IDAsIGNvbG9yID0gXCJibGFja1wifSwgaXNDdXJzb3IsIGlzRm9jdXNhYmxlfT1zZWxlY3Rpb258fHtwb3NpdGlvbjp7fX1cbiAgICAgICAgICAgIHJldHVybiAoPHBhdGggcmVmPXt0aGlzLnNoYXBlfSBkPXtgTSR7eH0gJHt5fSB2JHtpc0N1cnNvciYmIWlzRm9jdXNhYmxlID8gaGVpZ2h0OiAwfWB9IHN0cm9rZVdpZHRoPXsxfSBzdHJva2U9e2NvbG9yfSBzdHlsZT17c3R5bGV9IC8+KVxuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50RGlkTW91bnQoKXtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlKHt9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50RGlkVXBkYXRlKHByZXYpe1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uPXRoaXMucHJvcHMuc2VsZWN0aW9uXG4gICAgICAgICAgICBpZihwcmV2LnNlbGVjdGlvbiE9c2VsZWN0aW9uICYmIHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24uaXNDdXJzb3Ipe1xuICAgICAgICAgICAgICAgIGlmKHNlbGVjdGlvbi5pc1NlbGVjdGlvbkNoYW5nZWQocHJldi5zZWxlY3Rpb24pKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhcGU9dGhpcy5zaGFwZS5jdXJyZW50XG4gICAgICAgICAgICAgICAgICAgIGlmKHNoYXBlLnNjcm9sbEludG9WaWV3SWZOZWVkZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLnNjcm9sbEludG9WaWV3KClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4pXG4iLCJpbXBvcnQge1NlbGVjdGlvblN0eWxlfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0aW9uU2VsZWN0aW9uU3R5bGUgZXh0ZW5kcyBTZWxlY3Rpb25TdHlsZXtcbiAgICBjb25zdHJ1Y3Rvcihwb3NpdGlvbiwgc3RhcnQsIGVuZCxwb3NpdGlvbmluZykge1xuICAgICAgICBzdXBlcihwb3NpdGlvbiwgc3RhcnQsIGVuZClcbiAgICAgICAgdGhpcy5wb3NpdGlvbmluZz1wb3NpdGlvbmluZ1xuICAgICAgICBpZiAoc3RhcnQuaWQgIT0gZW5kLmlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDb250ZW50KHN0YXJ0LmlkKS5mb3J3YXJkRmlyc3QoYCMke2VuZC5pZH1gKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBzdGFydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRm9jdXNhYmxlPXN0YXJ0LmlkPT1lbmQuaWQgJiYgcG9zaXRpb25pbmcuZ2V0Q29tcG9zZXIoc3RhcnQuaWQpLmZvY3VzYWJsZVxuICAgICAgICB0aGlzLmlzUmFuZ2U9IXRoaXMuaXNDdXJzb3IgJiYgIXRoaXMuaXNGb2N1c2FibGVcbiAgICB9XG5cbiAgICBpc1NlbGVjdGlvbkNoYW5nZWQoYil7XG4gICAgICAgIHJldHVybiAhYiB8fCAhKGIuc3RhcnQuaWQ9PXRoaXMuc3RhcnQuaWQgJiYgYi5zdGFydC5hdD09dGhpcy5zdGFydC5hdCAmJiBiLmVuZC5pZD09dGhpcy5lbmQuaWQgJiYgYi5lbmQuYXQ9PXRoaXMuZW5kLmF0KVxuICAgIH1cblxuICAgIGdldENvbXBvc2VyKCl7XG4gICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25pbmcuZ2V0Q29tcG9zZXIoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGdldENvbnRlbnQoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25pbmcuZ2V0Q29udGVudCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgZ2V0UmFuZ2VSZWN0cygpe1xuICAgICAgICByZXR1cm4gdGhpcy5fX2dldFJhbmdlUmVjdHModGhpcy5zdGFydCx0aGlzLmVuZClcbiAgICB9XG5cbiAgICBfX2dldFJhbmdlUmVjdHM9bWVtb2l6ZSgoc3RhcnQsIGVuZCk9PntcbiAgICAgICAgaWYodGhpcy5pc1JhbmdlKXtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uaW5nLmdldFJhbmdlUmVjdHMoc3RhcnQsIGVuZClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UmFuZ2VSZWN0cygpXG4gICAgfSlcblxuICAgIHByb3BzPW1lbW9pemUoKHR5cGUsIGdldEZyb21Db250ZW50ID0gdHJ1ZSk9PntcbiAgICAgICAgaWYgKHR5cGUudG9Mb3dlckNhc2UoKSA9PSBcInBhZ2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9wcygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUudG9Mb3dlckNhc2UoKSA9PSBcImxheW91dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0UHJvcHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3BzPXN1cGVyLnByb3BzKHR5cGUsZ2V0RnJvbUNvbnRlbnQpXG4gICAgICAgIGlmKCFwcm9wcylcbiAgICAgICAgICAgIHJldHVybiBwcm9wc1xuICAgICAgICBjb25zdCB7aGFzaCxpZCxjb250ZW50LGNoaWxkcmVuLC4uLmF9PXByb3BzXG4gICAgICAgIHJldHVybiBhXG4gICAgfSlcblxuICAgIF9sYXlvdXRQcm9wcz1tZW1vaXplKCgpPT57XG4gICAgICAgIGlmICghdGhpcy5wb3NpdGlvbmluZy5yZWFkeSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBwYWdlID0gdGhpcy5wb3NpdGlvbmluZy5wYWdlcy5maW5kKGEgPT4gYS5wcm9wcy5JID09IHRoaXMucG9zaXRpb24ucGFnZSk7XG4gICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBwYWdlLmxheW91dE9mKHRoaXMucG9zaXRpb24pXG4gICAgfSlcblxuICAgIC8qKlxuICAgICAqIHgsIHkgb2YgcGFnZSxsaW5lLGNvbHVtblxuICAgICAqIHNpemUsIG1hcmdpblxuICAgICAqL1xuICAgIF9wYWdlUHJvcHM9bWVtb2l6ZSgoKT0+e1xuICAgICAgICBpZiAoIXRoaXMucG9zaXRpb25pbmcucmVhZHkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMucG9zaXRpb25pbmcucGFnZXMuZmluZChhID0+IGEucHJvcHMuSSA9PSB0aGlzLnBvc2l0aW9uLnBhZ2UpO1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZ2VZID0gKCkgPT4gdGhpcy5wb3NpdGlvbmluZy5wYWdlWFkodGhpcy5wb3NpdGlvbi5wYWdlKS55O1xuICAgICAgICBjb25zdCBsaW5lID0gKCkgPT4gdGhpcy5wb3NpdGlvbi5saW5lXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9ICgpID0+IHBhZ2UuY29sdW1uSW5kZXhPZihsaW5lKCksdGhpcy5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbHMgPSAoKSA9PiBbLi4ucGFnZS5jb2xzXTtcbiAgICAgICAgY29uc3QgeyBtYXJnaW4sIHdpZHRoLCBoZWlnaHQgfSA9IHBhZ2UucHJvcHM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50aGlzLnBvc2l0aW9uLFxuICAgICAgICAgICAgZ2V0IHBhZ2VZKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYWdlWSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBsaW5lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGNvbHVtbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IGNvbHMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IG1hcmdpbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFyZ2luO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pXG59XG4iLCJpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2Nvbm5lY3QsQUNUSU9OfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQge2NvbXBvc2V9IGZyb20gXCJyZWNvbXBvc2VcIlxuaW1wb3J0IFNlbGVjdGlvblN0eWxlIGZyb20gXCIuL3NlbGVjdGlvbi1zdHlsZVwiXG5cbi8qKlxuICogVG8gdXBkYXRlIGN1cnNvciwgc2VsZWN0aW9uLCBhbmQgZm9jdXMgc2hhcGUgb25seSB3aGVuXG4gKiBjYW52YXMgaXMgcmVhZHksIHdoaWNoIG1lYW5zIGRvY3VtZW50IGNvbXBvc2VkLCBhbmQgYmUgdXBkYXRlZCBpbiBjYW52YXNcbiAqIFxuICogdGhlcmUgYXJlIDMgc3RhdGVzOiBbbmV4dCwgY3VycmVudCwgYW5kIGxhc3RdW2NvbnRlbnQsc2VsZWN0aW9uXVxuICogaWYgYW55IG9mIG5leHQgaXMgZGlmZmVyZW50IGZyb20gbGFzdCBvciBjdXJyZW50LCBzaG91bGQgdXBkYXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2UoXG4gICAgY29ubmVjdChcbiAgICAgICAgc3RhdGU9Pih7XG4gICAgICAgICAgICBjb250ZW50OnN0YXRlLmdldChcImNvbnRlbnRcIiksXG4gICAgICAgICAgICBzZWxlY3Rpb246c3RhdGUuZ2V0KFwic2VsZWN0aW9uXCIpLFxuICAgICAgICB9KSxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHt3aXRoUmVmOnRydWV9XG4gICAgKSxcbikoY2xhc3MgV2hlblNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5zdGF0ZT17Y29tcG9zZWRDb250ZW50Om51bGx9XG4gICAgfVxuXG5cdHJlbmRlcigpe1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZSh7Y29udGVudCxzZWxlY3Rpb24sIGNhbnZhcywgcG9zaXRpb25pbmc9Y2FudmFzLnBvc2l0aW9uaW5nfSx7Y29tcG9zZWRDb250ZW50fSl7XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkQ29udGVudElzU3luY2VkPWNvbnRlbnQuZXF1YWxzKGNvbXBvc2VkQ29udGVudClcbiAgICAgICAgaWYoIWNvbXBvc2VkQ29udGVudElzU3luY2VkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgY29uc3QgY29udGVudEFuZFNlbGVjdGlvbklzTm90Q2hhbmdlZD1cbiAgICAgICAgICAgIGNvbnRlbnQuZXF1YWxzKHRoaXMucHJvcHMuY29udGVudCkgJiZcbiAgICAgICAgICAgIHNlbGVjdGlvbi5lcXVhbHModGhpcy5wcm9wcy5zZWxlY3Rpb24pICYmIFxuICAgICAgICAgICAgY29udGVudC5lcXVhbHModGhpcy5sYXN0LmNvbnRlbnQpICYmIFxuICAgICAgICAgICAgc2VsZWN0aW9uLmVxdWFscyh0aGlzLmxhc3Quc2VsZWN0aW9uKVxuXG4gICAgICAgIGlmKGNvbnRlbnRBbmRTZWxlY3Rpb25Jc05vdENoYW5nZWQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAvL2luaXRpYWxpemVcbiAgICAgICAgdGhpcy5zdHlsZT1udWxsXG5cbiAgICAgICAgY29uc3Qge2N1cnNvckF0LCAuLi5hfT1zZWxlY3Rpb24udG9KUygpXG4gICAgICAgIGNvbnN0IHtpZCxhdH09YVtjdXJzb3JBdF1cbiAgICAgICAgaWYoIWlkKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgdGhpcy5zdHlsZT1uZXcgU2VsZWN0aW9uU3R5bGUocG9zaXRpb25pbmcucG9zaXRpb24oaWQsIGF0LCB0cnVlKSwgYS5zdGFydCwgYS5lbmQscG9zaXRpb25pbmcpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7ZGlzcGF0Y2gsY29udGVudCxzZWxlY3Rpb259LCBzdHlsZX09dGhpc1xuICAgICAgICBkaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNUWUxFKHN0eWxlKSlcbiAgICAgICAgdGhpcy5sYXN0PXtjb250ZW50LCBzZWxlY3Rpb259XG4gICAgfVxufSlcblxuXG4iLCIvKipcbiAqIFRlcm1zOlxuICogUG9zaXRpb246IG9iamVjdCBtdXN0IHdpdGggY29vcmRpbmF0ZSBmaWd1cmVzIGxpa2Uge3gseSxsZWZ0LHRvcCwgLi4ufSBvbiBjYW52YXNcbiAqIExvY2F0aW9uOiB7aWQsIGF0fVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3NpdGlvbmluZ3tcbiAgICBjb25zdHJ1Y3RvcihyZXNwb25zaWJsZSl7XG4gICAgICAgIHRoaXMucmVzcG9uc2libGU9cmVzcG9uc2libGVcbiAgICB9XG5cbiAgICBnZXRDb21wb3NlcigpeyAgXG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNpYmxlLmdldENvbXBvc2VyKC4uLmFyZ3VtZW50cylcbiAgICB9XG4gICAgZ2V0Q29udGVudCgpe1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5nZXRDb250ZW50KC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBhc0NhbnZhc1BvaW50KHtsZWZ0LHRvcH0pe1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5hc0NhbnZhc1BvaW50KC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBhc1ZpZXdwb3J0UG9pbnQoe3gseX0pe1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5hc1ZpZXdwb3J0UG9pbnQoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIHBhZ2VYWShJPTApe1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5wYWdlWFkoLi4uYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGdldCBwYWdlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJsZS5wYWdlc1xuICAgIH1cblxuICAgIGdldCBmcmFtZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNcbiAgICB9XG5cbiAgICBnZXQgcmVhZHkoKXtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5yZXNwb25zaWJsZS5jYW52YXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBnZXQgcG9zaXRpb257cGFnZSxsaW5lLCB4LHksbGVmdCx0b3AsfSBmb3IgYSBsb2NhdGlvbntpZCxhdH1cbiAgICAgKiBcbiAgICAgKi9cbiAgICBwb3NpdGlvbihpZCxhdCl7XG4gICAgICAgIHJldHVybiB7cGFnZTowfVxuICAgIH1cblxuICAgIC8qKmdldCBhIGxvY2F0aW9ue2lkLGF0fSBmcm9tIGEgcG9zaXRpb257bGVmdCx0b3B9Ki9cbiAgICBhcm91bmQobGVmdCx0b3Ape1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvKipnZXQgcmFuZ2UgcmVjdHMgZnJvbSBwb3NpdGlvbiBzdGFydCB0byBwb3NpdGlvbiBlbmQqL1xuICAgIGdldFJhbmdlUmVjdHMoc3RhcnQsZW5kKXtcbiAgICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgLyoqZ2V0IGxvY2F0aW9uIG9mIG5leHQgbGluZSBmb3IgYSBsb2NhdGlvbiBcbiAgICAgKiBzaW1wbGU6IGZpbmQgbG9jYXRpb24gZnJvbSAxIHBpeGVsIGJlbG93IHRoZSBsaW5lLCB3aGF0IGFib3V0IGlmIGl0J3MgbGFzdCBsaW5lIG9mIGZyYW1lXG4gICAgKi9cbiAgICBuZXh0TGluZShpZCxhdCl7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uPXRoaXMucG9zaXRpb24oaWQsYXQpXG4gICAgICAgIGlmKCFwb3NpdGlvbiAmJiBuZXh0RnJhbWUpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kKGxlZnQsbmV4dEZyYW1lLmZpcnN0TGluZS55KzEpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kKGxlZnQsdG9wK2xpbmVIZWlnaHQrMSlcbiAgICB9XG4gICAgLyoqZ2V0IGxvY2F0aW9uIG9mIHByZXYgbGluZSBmb3IgYSBsb2NhdGlvbiAqL1xuICAgIHByZXZMaW5lKGlkLGF0KXtcbiAgICAgICAgY29uc3QgcG9zaXRpb249dGhpcy5wb3NpdGlvbihpZCxhdClcbiAgICAgICAgaWYoIXBvc2l0aW9uICYmIHByZXZGcmFtZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcm91bmQobGVmdCxwcmV2RnJhbWUubGFzdExpbmUueS0xKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFyb3VuZChsZWZ0LHRvcC0xKVxuICAgIH1cblxuICAgIHBvc2l0aW9uQXRMaW5lRW5kKGlkLGF0KXtcbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cbiAgICBwb3NpdGlvbkF0TGluZVN0YXJ0KGlkLGF0KXtcbiAgICAgICAgcmV0dXJuIHtpZCxhdH1cbiAgICB9XG5cblxuXG4gICAgLyoqZXh0ZW5kIHNlbGVjdGlvbiBmcm9tIGxvY2F0aW9uIHRvIHdvcmQgcmFuZ2UqL1xuICAgIGV4dGVuZFdvcmQoaWQsYXQpe1xuICAgICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvKipleHRlbmQgc2VsZWN0aW9uIGZyb20gbG9jYXRpb24gdG8gbGluZSByYW5nZSovXG4gICAgZXh0ZW5kTGluZShpZCxhdCl7XG4gICAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIHN0YXRpYyBtYWtlU2FmZT1BPT5jbGFzcyBTYWZlUG9zaXRpb25pbmcgZXh0ZW5kcyBBe1xuICAgICAgICBjb25zdHJ1Y3RvciguLi5hcmdzKXtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpXG4gICAgICAgICAgICBcInBvc2l0aW9uLGFyb3VuZCxuZXh0TGluZSxwcmV2TGluZSxleHRlbmRXb3JkXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goaz0+e1xuICAgICAgICAgICAgICAgIHRoaXNba109KC4uLmFyZ3MpPT57XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcltrXSguLi5hcmdzKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgXG4gICAgICAgIH1cbiAgICAgICAgZ2V0UmFuZ2VSZWN0cyguLi5hcmdzKXtcbiAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0UmFuZ2VSZWN0cyguLi5hcmdzKVxuICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKVxuICAgICAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSAgICBcbn0iLCJpbXBvcnQgUmVhY3Qse0ZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtSZWFjdFF1ZXJ5fSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgUG9zaXRpb25pbmcgZnJvbSBcIi4vYmFzZVwiXG5cbi8qKlxuICogbGF5b3V0ZWQgaXMgYSBmcmFtZSB0cmVlXG4gKiB0b3AgZnJhbWUodG9wRnJhbWUpIGlzIHRoZSB0b3AgZnJhbWVcbiAqIGxlYWZGcmFtZSBpcyBhIGZyYW1lIHdpdGhvdXQgbmVzdGVkIGZyYW1lXG4gKiBpdCdzIGJhc2VkIG9uIHNvbWUga25vd2xlZGdlOlxuICogMS4gZGF0YS1mcmFtZT1mcmFtZS51dWlkXG4gKiAyLiBpbmxpbmUgbGF5b3V0IHN0b3J5LCBhbmQgaXRzIGJhc2VsaW5lXG4gKiBcbiAqIHRoZSBwb3NpdGlvbmluZyBiYXNpYyBpZGVhIGlzIHRvIHBvc2l0aW9uaW5nIGluIGxlYWZGcmFtZShzbyB0aGUgY29udGVudCBpcyBleGFjdCBhdG9tcywgb3IgbWVyZ2luZyB1cCB3aXRoIGF0b21zKSwgXG4gKiBhbmQgdGhlbiBjb21wdXRlZCB3aXRoIHRvcEZyYW1lLm9mZnNldCwgYW5kIGxlYWZGcmFtZS5vZmZzZXRcbiAqL1xuY2xhc3MgUG9zaXRpb25pbmdIZWxwZXIgZXh0ZW5kcyBQb3NpdGlvbmluZ3tcbiAgICBnZXRUb3BGcmFtZVhZKHRvcEZyYW1lKXtcbiAgICAgICAgY29uc3Qge3gseX09dGhpcy5wYWdlWFkodG9wRnJhbWUucHJvcHMuSSlcbiAgICAgICAgcmV0dXJuIHt4LHksdG9wOnksYm90dG9tOnkrdG9wRnJhbWUucHJvcHMuaGVpZ2h0fVxuICAgIH1cblxuICAgIGdldFRvcEZyYW1lQnlQb3NpdGlvbih4LHkpe1xuICAgICAgICB2YXIgeHlcbiAgICAgICAgY29uc3QgdG9wRnJhbWU9dGhpcy5mcmFtZXMuZmluZCgoeyBwcm9wczogeyB3aWR0aCwgaGVpZ2h0LCBJIH0gfSkgPT4ge1xuICAgICAgICAgICAgeHkgPSB0aGlzLnBhZ2VYWShJKTtcbiAgICAgICAgICAgIHJldHVybiB4ID49IHh5LnggJiYgeCA8PSB4eS54ICsgd2lkdGggJiYgeSA+PSB4eS55ICYmIHkgPD0geHkueSArIGhlaWdodDtcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHt0b3BGcmFtZSwgdG9wRnJhbWVPZmZzZXQ6eHl9IFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHN0YXJ0IGFuZCBlbmQgbXVzdCBiZSBpbiBzYW1lIGJsb2NrIGxldmVsIChOT1Qgc2FtZSBmcmFtZSwgQlVUIHNhbWUgbGV2ZWwgb2YgZ3JhbmQgY29udGVudCksIFxuICAgICAqIGlmIG5vdCwgc3RhcnQgYW5kIGVuZCBtdXN0IGJlIGV4dGVuZGVkIHVwIHRvIHNhbWUgYmxvY2sgbGV2ZWxcbiAgICAgKiBcbiAgICAgKiB0aGVyZSBhcmUgdHdvIHR5cGUgb2YgYmxvY2sgbGluZVxuICAgICAqIDEuIHBhcmFncmFwaCBsaW5lXG4gICAgICogMi4gdGFibGUgcm93XG4gICAgICogdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBmcmFtZSBcbiAgICAgKiAxLiBmcmFtZSBjb250ZW50LCBcbiAgICAgKiAyLiBmaXNzaW9uIGZyYW1lIGFzIGxheW91dCBlbmdpbmVcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0geyp9IHN0YXJ0IFxuICAgICAqIEBwYXJhbSB7Kn0gZW5kIFxuICAgICAqL1xuICAgIG5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmIChzdGFydC5pZCA9PSBlbmQuaWQpXG4gICAgICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH1cbiAgICAgICAgY29uc3QgZ2V0R3JhbmRCbG9ja0NvbnRlbnRzPShjdXJyZW50LGJsb2Nrcz1bXSk9PntcbiAgICAgICAgICAgIHdoaWxlKGN1cnJlbnQpe1xuICAgICAgICAgICAgICAgIGlmKGN1cnJlbnQuaXNTZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHx8Y3VycmVudC5pc0ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHx8W1wicm93XCIsXCJkb2N1bWVudFwiXS5pbmNsdWRlcyhjdXJyZW50LmdldENvbXBvc2VUeXBlKCkpXG4gICAgICAgICAgICAgICAgICAgICl7XG4gICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGN1cnJlbnQucHJvcHMuaWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnQ9Y3VycmVudC5jb250ZXh0ID8gY3VycmVudC5jb250ZXh0LnBhcmVudCA6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBibG9ja3NcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgYmxvY2tzQSA9IGdldEdyYW5kQmxvY2tDb250ZW50cyh0aGlzLmdldENvbXBvc2VyKHN0YXJ0LmlkKSlcbiAgICAgICAgY29uc3QgYmxvY2tzQiA9IGdldEdyYW5kQmxvY2tDb250ZW50cyh0aGlzLmdldENvbXBvc2VyKGVuZC5pZCkpXG4gICAgICAgIGNvbnN0IGkgPSBibG9ja3NBLmZpbmRMYXN0SW5kZXgoKGEsIGkpID0+IGEgPT0gYmxvY2tzQltpXSk7XG4gICAgICAgIGlmIChpICE9IC0xKSB7XG4gICAgICAgICAgICBibG9ja3NBLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgICBibG9ja3NCLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2Nrc0FbMF0pIHtcbiAgICAgICAgICAgIHN0YXJ0ID0geyBpZDogYmxvY2tzQVswXSwgYXQ6IDEgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmxvY2tzQlswXSkge1xuICAgICAgICAgICAgZW5kID0geyBpZDogYmxvY2tzQlswXSwgYXQ6IDEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG4gICAgfVxuXG4gICAgZ2V0T3JkZXJlZFBvc2l0aW9uKHN0YXJ0LGVuZCl7XG4gICAgICAgIC8vYXQgZmlyc3Qgc3RhcnQgYW5kIGVuZCBtdXN0IGJlIG5vcm1hbGl6ZWQgdG8gc2FtZSBibG9jayBsZXZlbFxuICAgICAgICAoeyBzdGFydCwgZW5kIH0gPSB0aGlzLm5vcm1hbGl6ZVNlbGVjdGlvbihzdGFydCxlbmQpKTtcbiAgICAgICAgY29uc3QgcDA9dGhpcy5wb3NpdGlvbihzdGFydC5pZCxzdGFydC5hdCwgdHJ1ZSlcbiAgICAgICAgY29uc3QgcDE9dGhpcy5wb3NpdGlvbihlbmQuaWQsIGVuZC5hdCx0cnVlKVxuICAgICAgICBjb25zdCByZXZlcnRlZD17cDA6cDEscDE6cDB9XG4gICAgICAgIGlmKHAwLnRvcEZyYW1lLnByb3BzLmk+cDEudG9wRnJhbWUucHJvcHMuaSl7XG4gICAgICAgICAgICByZXR1cm4gcmV2ZXJ0ZWRcbiAgICAgICAgfWVsc2UgaWYocDAudG9wRnJhbWUucHJvcHMuaT09cDEudG9wRnJhbWUucHJvcHMuaSl7XG4gICAgICAgICAgICBpZihwMC5sZWFmRnJhbWU9PXAxLmxlYWZGcmFtZSl7XG4gICAgICAgICAgICAgICAgaWYocDAubGluZUluZGV4SW5MZWFmRnJhbWU+cDEubGluZUluZGV4SW5MZWFmRnJhbWUpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2ZXJ0ZWRcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihwMC5saW5lSW5kZXhJbkxlYWZGcmFtZT09cDEubGluZUluZGV4SW5MZWFmRnJhbWUpe1xuICAgICAgICAgICAgICAgICAgICBpZihwMC54PnAxLngpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmVydGVkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZSBpZihwMC5sZWFmRnJhbWUucHJvcHMuaT5wMS5sZWFmRnJhbWUucHJvcHMuaSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmVydGVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwMCxwMX1cbiAgICB9XG5cbiAgICBnZXRGcmFtZU9mZnNldEdyYW5kRnJhbWUoZ3JhbmRGcmFtZSxmcmFtZSl7XG4gICAgICAgIGlmKGdyYW5kRnJhbWU9PWZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHt4OjAseTowfVxuICAgICAgICBjb25zdCBncmFuZEZyYW1lTGF5b3V0ZWQ9Z3JhbmRGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKVxuICAgICAgICBjb25zdCB7Zmlyc3QscGFyZW50c309bmV3IFJlYWN0UXVlcnkoZ3JhbmRGcmFtZUxheW91dGVkKS5maW5kRmlyc3RBbmRQYXJlbnRzKGBbZGF0YS1mcmFtZT0ke2ZyYW1lLnV1aWR9XWApXG4gICAgICAgIHJldHVybiBbLi4ucGFyZW50cyxmaXJzdC5nZXQoMCldLmZpbHRlcihhPT4hIWEpLnJlZHVjZSgoeHkse3Byb3BzOnt4PTAseT0wfX0pPT4oeHkueCs9eCwgeHkueSs9eSwgeHkpLHt4OjAseTowfSlcbiAgICB9XG5cbiAgICBfdGFyZ2V0RnJhbWVDb250YWluc0ZyYW1lPWZyYW1lPT50YXJnZXRGcmFtZT0+e1xuICAgICAgICBjb25zdCBwYXJlbnRzPSgoYSxmb3VuZD1bXSk9PntcbiAgICAgICAgICAgIHdoaWxlKGE9YS5jb250ZXh0LnBhcmVudCl7XG4gICAgICAgICAgICAgICAgZm91bmQucHVzaChhLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgIH0pKHRoaXMuZ2V0Q29tcG9zZXIoZnJhbWUucHJvcHMuaWQpKVxuXG4gICAgICAgIHJldHVybiBuZXcgUmVhY3RRdWVyeSh0YXJnZXRGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSkuZmluZEZpcnN0KG5vZGU9PntcbiAgICAgICAgICAgIGlmKCEobm9kZSAmJiBub2RlLnByb3BzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1jb250ZW50XCI6aWQsXCJkYXRhLWZyYW1lXCI6aXNGcmFtZX19PW5vZGVcbiAgICAgICAgICAgIGlmKCFpc0ZyYW1lKSBcbiAgICAgICAgICAgICAgICByZXR1cm4gXG5cbiAgICAgICAgICAgIGlmKGlzRnJhbWU9PWZyYW1lLnV1aWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZighcGFyZW50cy5pbmNsdWRlcyhpZCkpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5sZW5ndGg9PTEgIFxuICAgIH1cblxuICAgLyoqXG4gICAgICogdHJhdmVsIHVwXG4gICAgICogdG8gZmluZCB1cCBmcmFtZSBsYXlvdXQgb3IgZmlzc2lvbmFibGUncyBmaXNzaW9uIGJhc2VkIG9uIGZvbGxvd2luZyBrbm93bGVkZ2VcbiAgICAgKiAxLiBjb21wb3NlZCBmcmFtZSBtdXN0IGdpdmUgZGF0YS1mcmFtZT1mcmFtZS51dWlkIG9uIGNvbnRlbnRcbiAgICAgKiAyLiBlYWNoIGZyYW1lIGxheW91dCBtdXN0IGhhdmUgY29udGV4dC5mcmFtZShmb3IgZmlzc2lvbil8LnBhcmVudChmb3IgZnJhbWUgY29udGVudCkgdG8gdHJhdmVsIHVwIGZyYW1lIHRyZWVcbiAgICAgKiBAcGFyYW0geyp9IGZyYW1lLCBzdGFydCBwb2ludCBcbiAgICAgKiBAcGFyYW0geyp9IGNoZWNrKGZyYW1lKSBcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZpcnN0OiByZXR1cm4gZmlyc3QgZm91bmQgb3IgdG9wRnJhbWVcbiAgICAgKiBARGVmYXVsdCBmb3IgdG9wRnJhbWVcbiAgICAgKi9cbiAgICBnZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUoZnJhbWUsY2hlY2ssIGZpcnN0LCBmaW5kPVwiZmluZFwiKXtcbiAgICAgICAgaWYoIWNoZWNrKXsvL2RlZmF1bHQ6IGZyYW1lIG9yIGFueSBncmFuZEZyYW1lIGluY2x1ZGluZyBmcmFtZVxuICAgICAgICAgICAgY29uc3QgZnJhbWVDb250YWluZWRCeT10aGlzLl90YXJnZXRGcmFtZUNvbnRhaW5zRnJhbWUoZnJhbWUpXG4gICAgICAgICAgICBjaGVjaz10YXJnZXRGcmFtZT0+dGFyZ2V0RnJhbWU9PWZyYW1lIHx8IGZyYW1lQ29udGFpbmVkQnkodGFyZ2V0RnJhbWUpXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgY3VycmVudD1mcmFtZSwgZ3JhbmRNYXliZT1udWxsXG4gICAgICAgIHdoaWxlKGN1cnJlbnQpe1xuICAgICAgICAgICAgaWYoY3VycmVudC5pc0ZyYW1lICYmIGNoZWNrKGN1cnJlbnQpKXtcbiAgICAgICAgICAgICAgICBncmFuZE1heWJlPWN1cnJlbnQgXG4gICAgICAgICAgICB9ZWxzZSBpZihjdXJyZW50LmlzU2VjdGlvbil7XG4gICAgICAgICAgICAgICAgZ3JhbmRNYXliZT1jdXJyZW50LmNvbXB1dGVkLmNvbXBvc2VkW2ZpbmRdKGNoZWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihmaXJzdCAmJiBncmFuZE1heWJlKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JhbmRNYXliZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihjdXJyZW50LmNvbnRleHQpXG4gICAgICAgICAgICAgICAgY3VycmVudD1jdXJyZW50LmNvbnRleHQuZnJhbWV8fGN1cnJlbnQuY29udGV4dC5wYXJlbnRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JhbmRNYXliZVxuICAgIH1cblxuIFxuICAgIC8qKlxuICAgICAqIHRyYXZlbCBkb3duIGNvbXBvc2VkIHRvIGZpbmQgbm9kZSxcbiAgICAgKiAqKiBpdCBzaG91bGQgYWx3YXlzIGZpbmQgZnJvbSBsYXN0IHRvIGNvbnNpZGVyIHogb3JkZXJcbiAgICAgKiBAcGFyYW0geyp9IGNvbXBvc2VkIFxuICAgICAqIEBwYXJhbSB7Kn0gY2hlY2socmVjdCwgbm9kZSksIHJlY3Qoe2luaXRpYWwgYm91bmFyeX0pIGlzIGZ1bmNpdG9uIHRvIHJldHVybiBub2RlIGJvdW5kYXJ5XG4gICAgICogQHBhcmFtIHt9IGZvcm1hdE5vZGUobm9kZSkgIFxuICAgICAqL1xuICAgIGdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoY29tcG9zZWQsY2hlY2ssZm9ybWF0Tm9kZT1hPT5hKXtcbiAgICAgICAgY29uc3QgcmVjdD0obm9kZXMsc2l6ZT17fSk9Pm5vZGVzLmZpbHRlcihhPT5hIT1jb21wb3NlZClcbiAgICAgICAgLnJlZHVjZSgoYm91bmQsIHtwcm9wczp7aGVpZ2h0LHdpZHRoLHg9MCx5PTAsXCJkYXRhLXR5cGVcIjp0eXBlfT17fX09e30pPT57XG4gICAgICAgICAgICBib3VuZC54Kz14XG4gICAgICAgICAgICBpZih0eXBlIT09XCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgYm91bmQueSs9eVxuICAgICAgICAgICAgaWYodHlwZT09XCJwYXJhZ3JhcGhcIilcbiAgICAgICAgICAgICAgICBib3VuZC5oZWlnaHQ9aGVpZ2h0XG4gICAgICAgICAgICBpZih3aWR0aCE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJvdW5kLndpZHRoPXdpZHRoXG4gICAgICAgICAgICByZXR1cm4gYm91bmRcbiAgICAgICAgfSx7Li4uc2l6ZSx4OjAseTowfSlcbiAgICAgICAgXG4gICAgICAgIHZhciBjdXJyZW50PW5ldyBSZWFjdFF1ZXJ5KGNvbXBvc2VkKSwgYWxsUGFyZW50cz1bXVxuICAgICAgICB3aGlsZSh0cnVlKXsvL2ZpbmQgbW9zdCBpbm5lciBub2RlIHRoYXQgaW5jbHVkZXMgdGhlIHBvaW50XG4gICAgICAgICAgICBjb25zdCBmb3VuZD1jdXJyZW50LmZpbmRMYXN0QW5kUGFyZW50cygobm9kZSxwYXJlbnRzKT0+e1xuICAgICAgICAgICAgICAgIGlmKCFub2RlIHx8ICFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSkgXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKG5vZGUucHJvcHMgJiYgbm9kZS5wcm9wc1tcImRhdGEtbm9jb250ZW50XCJdKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICBpZihub2RlPT1jdXJyZW50LmdldCgwKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgICAgIHJldHVybiBjaGVjayhvPT5yZWN0KFsuLi5hbGxQYXJlbnRzLCAuLi5wYXJlbnRzLG5vZGVdLG8pLG5vZGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYoZm91bmQubGFzdC5sZW5ndGg9PTEpe1xuICAgICAgICAgICAgICAgIGFsbFBhcmVudHM9Wy4uLmFsbFBhcmVudHMsLi4uZm91bmQucGFyZW50c11cbiAgICAgICAgICAgICAgICBjdXJyZW50PWZvdW5kLmxhc3RcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWxsUGFyZW50cz1hbGxQYXJlbnRzLmZpbHRlcihhPT5hIT1jb21wb3NlZClcbiAgICAgICAgcmV0dXJuIFsuLi5hbGxQYXJlbnRzLGN1cnJlbnQuZ2V0KDApXS5maWx0ZXIoYT0+ISFhKVxuICAgICAgICAgICAgLnJlZHVjZSgoeHkse3Byb3BzOnt4PTAseT0wfX0pPT4oeHkueCs9eCx4eS55Kz15LHh5KSx7XG4gICAgICAgICAgICAgICAgeDowLHk6MCxcbiAgICAgICAgICAgICAgICBub2RlOmZvcm1hdE5vZGUoY3VycmVudC5nZXQoMCksYWxsUGFyZW50cyksXG4gICAgICAgICAgICAgICAgcGFyZW50czogYWxsUGFyZW50c1xuICAgICAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0byBhcm91bmQgdG8geCBpbiBhIGxpbmUgb2YgZnJhbWUsIHRoZSBsaW5lIG1heSBjb250YWluIGZyYW1lXG4gICAgICogc2NvcGUgaXQgdG8gbGVhZkZyYW1lLCBhbmQgcHJveHkgdG8gYW91cm5kSW5JbmxpbmVcbiAgICAgKiBAcGFyYW0geyp9IHRvcEZyYW1lIFxuICAgICAqIEBwYXJhbSB7Kn0gbGluZSBcbiAgICAgKiBAcGFyYW0geyp9IHBhcmFtMiBcbiAgICAgKi8gICAgXG4gICAgYXJvdW5kSW5CbG9ja0xpbmUoe3g9MCx5PTB9PXt9LGxpbmUsIHRvcEZyYW1lLCBibG9ja0ZyYW1lPXRvcEZyYW1lKXtcbiAgICAgICAgaWYoIWxpbmUgfHwgIXRvcEZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBub3cgbmV4dCBsaW5lIGZvdW5kLCB0aGVuIGxvY2F0ZSB3aXRoIG9uZSBvZiBmb2xsb3dpbmcgd2F5c1xuICAgICAgICAgKiAxLiB0byByb3VuZChsZWZ0LCB0b3ArMSk/Pz8/IHdoYXQgaWYgaXQncyBvbiB0b3AgbWFyZ2luL2JvcmRlclxuICAgICAgICAgKiAyLiAqKmZpbmQgbW9zdCBpbm5lciBub2RlIHRoYXQgaW5jbHVkZXMgKGxlZnQsKiksIGFuZCB0aGVuIHBvc2l0aW9uIGluIHBhcmFncmFwaCBsaW5lXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0PWJsb2NrRnJhbWUubGluZVhZKGxpbmUpXG4gICAgICAgIGNvbnN0IHRvcEZyYW1lT2Zmc2V0PXRoaXMuZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSlcbiAgICAgICAgY29uc3QgYmxvY2tGcmFtZU9mZnNldD10aGlzLmdldEZyYW1lT2Zmc2V0R3JhbmRGcmFtZSh0b3BGcmFtZSxibG9ja0ZyYW1lKVxuICAgICAgICB4PXgtdG9wRnJhbWVPZmZzZXQueC1ibG9ja0ZyYW1lT2Zmc2V0LngtbGluZU9mZnNldC54XG4gICAgICAgIGNvbnN0IGlzSW5jbHVkZVg9KHJlY3QpPT5yZWN0Lng8PXggJiYgKHJlY3QueCtyZWN0LndpZHRoKT49eFxuICAgICAgICB2YXIge25vZGUscGFyZW50cywuLi5pbmxpbmVPZmZzZXR9PXRoaXMuZ2V0Qm91bmRhcnlDaGVja2VkTW9zdElubmVyTm9kZShcbiAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICAvL29ubHkgY29udGVudCBpbmNsdWRlIHhcbiAgICAgICAgICAgIChyZWN0LHtwcm9wczp7d2lkdGh9fSk9PntcbiAgICAgICAgICAgICAgICBpZih3aWR0aCE9dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm91bmFyeT1yZWN0KHt3aWR0aH0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0luY2x1ZGVYKGJvdW5hcnkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIHZhciAkcGFyYWdyYXBoXG4gICAgICAgIGNvbnN0IHBvc3NpYmxlUGFyYWdyYXBoPW5ldyBSZWFjdFF1ZXJ5KG5vZGUpLmZpbmRGaXJzdEFuZFBhcmVudHMoJ1tkYXRhLXR5cGU9cGFyYWdyYXBoXScpXG4gICAgICAgIGNvbnN0IGlzSW5saW5lTm9kZT1wb3NzaWJsZVBhcmFncmFwaC5maXJzdC5sZW5ndGg9PTBcbiAgICAgICAgaWYoaXNJbmxpbmVOb2RlKXtcbiAgICAgICAgICAgIC8vZmluZCBwYXJhZ3JhcGggYmxvY2sgdXBcbiAgICAgICAgICAgIGNvbnN0IGo9cGFyZW50cy5maW5kTGFzdEluZGV4KGE9PmEucHJvcHMucGFnaW5hdGlvbilcbiAgICAgICAgICAgIGlmKGo9PS0xKXtcbiAgICAgICAgICAgICAgICAvL25leHRMaW5lIHNob3VsZCBiZSBwYXJhZ3JhcGggbGluZVxuICAgICAgICAgICAgICAgICRwYXJhZ3JhcGg9bGluZVxuICAgICAgICAgICAgICAgIGlubGluZU9mZnNldD17eDowLHk6MH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICRwYXJhZ3JhcGg9cGFyZW50c1tqXVxuICAgICAgICAgICAgICAgIGlubGluZU9mZnNldD1wYXJlbnRzLnNsaWNlKDAsaisxKS5yZWR1Y2UoKHh5LHtwcm9wczp7eD0wLHk9MH19KT0+KHh5LngrPXgseHkueSs9eSx4eSkse3g6MCx5OjB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXsvL25lc3RlZCBwYXJhZ3JhcGgsIHdoaWNoIG1lYW5zIGZyYW1lIGluIHBhcmFncmFwaFxuICAgICAgICAgICAgaW5saW5lT2Zmc2V0PVsuLi5wb3NzaWJsZVBhcmFncmFwaC5wYXJlbnRzLHBvc3NpYmxlUGFyYWdyYXBoLmZpcnN0LmdldCgwKV1cbiAgICAgICAgICAgICAgICAucmVkdWNlKCh4eSx7cHJvcHM6e3g9MCx5PTB9fSk9Pih4eS54Kz14LHh5LnkrPXkseHkpLGlubGluZU9mZnNldClcbiAgICAgICAgICAgICRwYXJhZ3JhcGg9cG9zc2libGVQYXJhZ3JhcGguZmlyc3QuZ2V0KDApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge3BhZ2luYXRpb246e2lkOnBpZCxpfSxwYXJhZ3JhcGg9dGhpcy5nZXRDb21wb3NlcihwaWQpfT0kcGFyYWdyYXBoLnByb3BzXG4gICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluSW5saW5lKHBhcmFncmFwaC5jb21wdXRlZC5sYXN0Q29tcG9zZWRbaS0xXSwgeC1pbmxpbmVPZmZzZXQueClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0byBhcm91bmQgdG8geCBpbiBhIGxpbmUgb2YgcGFyYWdyYXBoLCB0aGUgcGFyYWdyYXBoIGxpbmUgbXVzdCBiZSBpbiAgbGVhZkZyYW1lXG4gICAgICogQHBhcmFtIHsqfSBjb21wb3NlZExpbmUgXG4gICAgICogQHBhcmFtIHsqfSBYIFxuICAgICAqL1xuICAgIGFyb3VuZEluSW5saW5lKGNvbXBvc2VkTGluZSxYKXtcbiAgICAgICAgLy9maW5kIGF0b20gbm9kZSB0aGF0IGluY2x1ZGUgeFxuICAgICAgICBjb25zdCB7bm9kZSwgcGFyZW50cywgLi4ub2Zmc2V0fT10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICBjb21wb3NlZExpbmUsXG4gICAgICAgICAgICAocmVjdCx7cHJvcHM6e3dpZHRofX0pPT57XG4gICAgICAgICAgICAgICAgaWYod2lkdGghPXVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt4fT1yZWN0KClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg8PVggJiYgKHgrd2lkdGgpPj1YXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGU9Pm5vZGU9PWNvbXBvc2VkTGluZSA/IHVuZGVmaW5lZCA6IG5vZGVcbiAgICAgICAgKVxuXG4gICAgICAgIGlmKG5vZGUpe1xuICAgICAgICAgICAgY29uc3QgJG5vZGU9bmV3IFJlYWN0UXVlcnkobm9kZSlcbiAgICAgICAgICAgIGlmKCRub2RlLmF0dHIoXCJjbGFzc05hbWVcIik9PVwiZW5kZXJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4ge2lkOmNvbXBvc2VkTGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXSxhdDoxfVxuICAgICAgICAgICAgY29uc3QgdGV4dE5vZGU9JG5vZGUuZmluZEZpcnN0KGBbZGF0YS10eXBlPVwidGV4dFwiXWApLmdldCgwKVxuICAgICAgICAgICAgaWYodGV4dE5vZGUpey8vdGV4dFxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9wczp7Y2hpbGRyZW46dGV4dCwgXCJkYXRhLWNvbnRlbnRcIjppZCxcImRhdGEtZW5kYXRcIjplbmRhdH0sY29tcG9zZXI9dGhpcy5nZXRDb21wb3NlcihpZCl9PXRleHROb2RlXG4gICAgICAgICAgICAgICAgY29uc3QgaT1jb21wb3Nlci5tZWFzdXJlLndpZHRoU3RyaW5nKFgtb2Zmc2V0LngsdGV4dClcbiAgICAgICAgICAgICAgICByZXR1cm4ge2lkLCBhdDplbmRhdC10ZXh0Lmxlbmd0aCtpfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQ9JG5vZGUuZmluZEZpcnN0KGBbZGF0YS1jb250ZW50XWApLmF0dHIoXCJkYXRhLWNvbnRlbnRcIilcbiAgICAgICAgICAgIGlmKGlkKVxuICAgICAgICAgICAgICAgIHJldHVybiB7aWR9XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyPXBhcmVudHMuZmluZExhc3QoYT0+YS5wcm9wc1tcImRhdGEtY29udGVudFwiXSlcbiAgICAgICAgICAgIGlmKHdyYXBwZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDp3cmFwcGVyLnByb3BzW1wiZGF0YS1jb250ZW50XCJdfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbnN0ICRsaW5lPW5ldyBSZWFjdFF1ZXJ5KGNvbXBvc2VkTGluZS5wcm9wcy5jaGlsZHJlbilcbiAgICAgICAgICAgIGNvbnN0IHtmaXJzdCxwYXJlbnRzfT0kbGluZS5maW5kRmlyc3RBbmRQYXJlbnRzKCdbZGF0YS1jb250ZW50XScpXG4gICAgICAgICAgICBpZihmaXJzdC5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgaWYoWDw9Wy4uLnBhcmVudHMsZmlyc3QuZ2V0KDApXS5yZWR1Y2UoKHgwLHtwcm9wczp7eD0wfX0pPT54MCt4LDApKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpmaXJzdC5hdHRyKCdkYXRhLWNvbnRlbnQnKSxhdDowfVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7bGFzdCxwYXJlbnRzfT0kbGluZS5maW5kTGFzdEFuZFBhcmVudHMoJ1tkYXRhLWNvbnRlbnRdJylcbiAgICAgICAgICAgICAgICAgICAgaWYobGFzdC5hdHRyKCdkYXRhLXR5cGUnKT09XCJ0ZXh0XCIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Lng9Wy4uLnBhcmVudHMsbGFzdC5nZXQoMCldLnJlZHVjZSgoeDAse3Byb3BzOnt4PTB9fSk9PngwK3gsMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKFg+PShvZmZzZXQueCtsYXN0LmF0dHIoJ3dpZHRoJykpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOmxhc3QuYXR0cignZGF0YS1jb250ZW50JyksYXQ6bGFzdC5hdHRyKCdkYXRhLWVuZGF0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e2NoaWxkcmVuOnRleHQsIFwiZGF0YS1jb250ZW50XCI6aWQsXCJkYXRhLWVuZGF0XCI6ZW5kYXR9LGNvbXBvc2VyPXRoaXMuZ2V0Q29tcG9zZXIoaWQpfT1sYXN0LmdldCgwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGk9Y29tcG9zZXIubWVhc3VyZS53aWR0aFN0cmluZyhYLW9mZnNldC54LHRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZCwgYXQ6ZW5kYXQtdGV4dC5sZW5ndGgraX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2lkOmxhc3QuYXR0cignZGF0YS1jb250ZW50JyksYXQ6MX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL2xhc3QgY2hhbmNlIGF0IGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIHN1Y2ggYXMgZW1wdHkgcGFyYWdyYXBoXG4gICAgICAgIHJldHVybiB7aWQ6Y29tcG9zZWRMaW5lLnByb3BzW1wiZGF0YS1jb250ZW50XCJdLGF0OjB9XG4gICAgfVxuXG4gICAgLy90byBtYWtlIHBvc2l0aW9uaW5nIG9ubHkgYmFzZWQgb24gY29tcG9zZSwgbm90IGNvbnRlbnRcbiAgICBfX2ZpbmRGaXJzdFBhcmFncmFwaEluVGFyZ2V0KHRhcmdldCl7XG4gICAgICAgIGNvbnN0IGdldFBhcmFncmFwaEluQ2VsbD1hPT5uZXcgUmVhY3RRdWVyeShhLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpKS5maW5kRmlyc3QoYFtkYXRhLXR5cGU9XCJwYXJhZ3JhcGhcIl1gKS5hdHRyKFwiZGF0YS1jb250ZW50XCIpXG4gICAgICAgIHZhciBwYXJhZ3JhcGhJbkNlbGw9bnVsbFxuICAgICAgICBpZih0YXJnZXQuZ2V0Q29tcG9zZVR5cGUoKT09XCJjZWxsXCIpe1xuICAgICAgICAgICAgdGFyZ2V0LmNvbXB1dGVkLmxhc3RDb21wb3NlZC5maW5kKGE9PnBhcmFncmFwaEluQ2VsbD1nZXRQYXJhZ3JhcGhJbkNlbGwoYSkpXG4gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoSW5DZWxsXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhEaXJlY3Q9bmV3IFJlYWN0UXVlcnkodGFyZ2V0LmNvbXB1dGVkLmxhc3RDb21wb3NlZCkuZmluZEZpcnN0KGE9PntcbiAgICAgICAgICAgICAgICBpZighYSB8fCAhYS5wcm9wcylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgICAgIGlmKGEucHJvcHNbXCJkYXRhLXR5cGVcIl09PVwicGFyYWdyYXBoXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgaWYoYS5pc0ZyYW1lKXsvL3RhYmxlIENlbGwgaXMgc3BlY2lhbCwgc2luY2UgdGFibGUgYW5kIHJvdyBsYXN0IGNvbXBvc2VkIGVsZW1lbnQgaW5jbHVkZXMgQ2VsbCBGcmFtZXMsIGluc3RlYWQgb2YgY2VsbCBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGhJbkNlbGw9Z2V0UGFyYWdyYXBoSW5DZWxsKGEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaEluQ2VsbCB8fCBwYXJhZ3JhcGhEaXJlY3QuYXR0cihcImRhdGEtY29udGVudFwiKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGluIHBhcmFncmFwaDogaWQtPnBhcmFncmFwaC0+bGluZVxuICAgICAqIHBhcmFncmFwaDpcbiAgICAgKiBsYXJnZXIgZnJhbWUgdGhhbiBwYXJhZ3JhcGg6XG4gICAgICogYW5jaG9yIG5vdCBpbiBwYXJhZ3JhcGg6XG4gICAgICogQHBhcmFtIHsqfSBpZCBcbiAgICAgKiBAcGFyYW0geyp9IGF0IFxuICAgICAqL1xuICAgIHBvc2l0aW9uVG9MZWFmRnJhbWVMaW5lKGlkLGF0KXtcbiAgICAgICAgY29uc3QgdGFyZ2V0PXRoaXMuZ2V0Q29tcG9zZXIoaWQpXG4gICAgICAgIGNvbnN0IHBhcmFncmFwaD10YXJnZXQuY2xvc2VzdChcInBhcmFncmFwaFwiKVxuICAgICAgICBjb25zdCAkZmluZD1hdD09MSA/ICdmaW5kTGFzdCcgOiAnZmluZEZpcnN0J1xuICAgICAgICBjb25zdCBmaW5kPWF0PT0xID8gXCJmaW5kTGFzdFwiIDogXCJmaW5kXCJcbiAgICAgICAgdmFyIGk9MCwgbGVhZkZyYW1lLGxpbmVJbkZyYW1lLCBwb3NpdGlvbiwgYW5jaG9yXG4gICAgICAgIC8vQFRPRE86IGhvdyB0byBmaW5kIHRhcmdldCdzIGZpcnN0IHBhcmFncmFwaD8/PyAvL1xuICAgICAgICBjb25zdCB0YXJnZXRIYXNQYXJhZ3JhcGg9IHRhcmdldCE9cGFyYWdyYXBoICYmIHRoaXMuX19maW5kRmlyc3RQYXJhZ3JhcGhJblRhcmdldCh0YXJnZXQpLy90aGlzLmdldENvbnRlbnQoaWQpWyRmaW5kXSgncGFyYWdyYXBoJykuYXR0cignaWQnKVxuICAgICAgICBpZihwYXJhZ3JhcGggJiYgIXRhcmdldEhhc1BhcmFncmFwaCl7XG4gICAgICAgICAgICBpZihwYXJhZ3JhcGgucHJvcHMuaWQ9PWlkKXtcbiAgICAgICAgICAgICAgICAvL3BhcmFncmFwaCBsZXZlbFxuICAgICAgICAgICAgICAgIGk9YXQ9PTEgPyBwYXJhZ3JhcGgubGluZXMubGVuZ3RoLTEgOiAwXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAvL2lubGluZSBsZXZlbFxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIGlubGluZSBjb250ZW50IGluY2x1ZGVzOiBcbiAgICAgICAgICAgICAgICAgKiAxLiBhdG9tcyxzdWNoIGFzIGltYWdlLHRleHQsLi4uLCB3aGljaCBpcyBub3Qgc2Vuc2l0aXZlIHRvIHF1ZXJ5LmZpbmRGaXJzdC9maW5kTGFzdFxuICAgICAgICAgICAgICAgICAqIDIuIGlubGluZSBjb250YWluZXI6IGl0J3Mgc2Vuc2l0aXZlIHRvIGF0KDA6Y29uYWluZXIgc3RhcnR8MTogY29udGFpbmVyIGVuZCkgdG8gcXVlcnkuZmluZEZpcnN0L2ZpbmRMYXN0XG4gICAgICAgICAgICAgICAgICogMy4gYW5jaG9yc1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGk9cGFyYWdyYXBoLmxpbmVzW2Ake2ZpbmR9SW5kZXhgXShsaW5lPT5saW5lLmF0b21zLmZpbmQoYXRvbT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCAkYXRvbT1uZXcgUmVhY3RRdWVyeShhdG9tKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlPSRhdG9tWyRmaW5kXShgW2RhdGEtY29udGVudD1cIiR7aWR9XCJdYClcbiAgICAgICAgICAgICAgICAgICAgaWYobm9kZS5sZW5ndGg9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYoKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1lbmRhdFwiOmVuZGF0LCBjaGlsZHJlbjp0ZXh0fX09bm9kZS5nZXQoMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVuZGF0PT11bmRlZmluZWQgLy9ub3QgdGV4dCwgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChhdD49ZW5kYXQtdGV4dC5sZW5ndGggJiYgYXQ8ZW5kYXQpKS8vaW5zaWRlIHRleHQsdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihhdD09ZW5kYXQgJiYgdGhpcy5nZXRDb21wb3NlcihpZCkudGV4dC5sZW5ndGg9PWVuZGF0KS8vbmV4dCBvZiBsYXN0IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KSgpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF0b20ucHJvcHMuYW5jaG9yKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I9JGF0b20uZmluZEZpcnN0KCdbZGF0YS10eXBlPVwiYW5jaG9yXCJdJykuYXR0cignZGF0YS1jb250ZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxlYWZGcmFtZT1wYXJhZ3JhcGgubGluZXNbaV0uc3BhY2UuZnJhbWVcbiAgICAgICAgICAgIGxpbmVJbkZyYW1lPWxlYWZGcmFtZS5saW5lcy5maW5kKCh7cHJvcHM6e3BhZ2luYXRpb246e2lkOnAsaTpJfT17fX19KT0+cD09cGFyYWdyYXBoLnByb3BzLmlkJiZJPT1pKzEpXG4gICAgICAgICAgICBwb3NpdGlvbj0oKT0+dGhpcy5wb3NpdGlvbkluSW5saW5lKGlkLGF0LHBhcmFncmFwaC5jb21wdXRlZC5sYXN0Q29tcG9zZWRbaV0pXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBiaWdnZXIgdGhhbiBwYXJhZ3JhcGggbGV2ZWxcbiAgICAgICAgICAgICAqIHdyYXBwZXIgb2YgcGFyYWdyYXBoXG4gICAgICAgICAgICAgKiB0YWJsZS9yb3cvY2VsbFxuICAgICAgICAgICAgICogZnJhbWUvc2hhcGVcbiAgICAgICAgICAgICAqIFxuICAgICAgICAgICAgICogdXNlIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGFyZ2V0LCBhbmQgZmluZCB1cCBmcmFtZSB0aGF0IGluY2x1ZGVzIHRhcmdldCBcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJhZ3JhcGg9dGhpcy5nZXRDb21wb3Nlcih0YXJnZXRIYXNQYXJhZ3JhcGgpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxlYWZGcmFtZT10aGlzLmdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZShcbiAgICAgICAgICAgICAgICBmaXJzdFBhcmFncmFwaC5saW5lc1thdD09MSA/IGZpcnN0UGFyYWdyYXBoLmxpbmVzLmxlbmd0aC0xIDogMF0uc3BhY2UuZnJhbWUsIFxuICAgICAgICAgICAgICAgIGE9Pm5ldyBSZWFjdFF1ZXJ5KGEuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpLmZpbmRGaXJzdChgW2RhdGEtY29udGVudD0ke2lkfV1gKS5sZW5ndGg9PTEsXG4gICAgICAgICAgICAgICAgdHJ1ZSwvL2ZpcnN0IGZyYW1lIGluY2x1ZGVzIGlkXG4gICAgICAgICAgICAgICAgZmluZFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgbGluZUluRnJhbWU9bGVhZkZyYW1lLmxpbmVzW2ZpbmRdKGxpbmU9Pm5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdChgW2RhdGEtY29udGVudD0ke2lkfV1gKS5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBpZighbGluZUluRnJhbWUpe1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uPSgpPT57XG4gICAgICAgICAgICAgICAgICAgIGlmKGF0PT0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHt3aWR0aCxoZWlnaHR9PWxlYWZGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKS5wcm9wc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt4OndpZHRoLHk6aGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7eDowLHk6MCx9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgcG9zaXRpb249KCk9PntcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge2ZpcnN0LGxhc3Qsbm9kZT1maXJzdHx8bGFzdCwgcGFyZW50c309bmV3IFJlYWN0UXVlcnkobGluZUluRnJhbWUpW2AkeyRmaW5kfUFuZFBhcmVudHNgXShgW2RhdGEtY29udGVudD0ke2lkfV1gKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4PVsuLi5wYXJlbnRzLG5vZGUuZ2V0KDApXS5yZWR1Y2UoKFgse3Byb3BzOnt4PTB9fSk9PngrWCwwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3g6YXQ9PTEgPyB4Kyhub2RlLmF0dHIoJ3dpZHRoJyl8fDApIDogeCwgeTowfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlYWZGcmFtZSwgXG4gICAgICAgICAgICBsaW5lOm5ldyBQcm94eShsaW5lSW5GcmFtZXx8e30se1xuICAgICAgICAgICAgICAgIGdldChsaW5lLHByb3Ape1xuICAgICAgICAgICAgICAgICAgICBpZihbXCJwb3NpdGlvblwiLFwicGFyYWdyYXBoXCIsXCJpXCIsXCJpbkZyYW1lXCIsXCJoZWlnaHRcIl0uaW5jbHVkZXMocHJvcCkpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaDpwYXJhZ3JhcGggPyBwYXJhZ3JhcGgucHJvcHMuaWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTpwYXJhZ3JhcGggPyBpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRnJhbWU6bGluZUluRnJhbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OmxpbmVJbkZyYW1lICYmIGxpbmVJbkZyYW1lLnByb3BzLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgfVtwcm9wXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lW3Byb3BdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBhbmNob3I6IGFuY2hvciAmJiAoe1xuICAgICAgICAgICAgICAgIGlkOmFuY2hvcixcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjpudWxsLC8vaW1wbGVtZW50ZWQgYnkgb2Zmc2V0IFxuICAgICAgICAgICAgICAgIG9mZnNldCh0b3BGcmFtZSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldD1ub2Rlcz0+bm9kZXMuZmlsdGVyKGE9PiEhYSkucmVkdWNlKChvLHtwcm9wczp7eD0wLHk9MH19KT0+KG8ueCs9eCwgby55Kz15LCBvKSx7eDowLHk6MH0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmaXJzdCwgcGFyZW50c309bmV3IFJlYWN0UXVlcnkodG9wRnJhbWUuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZEZpcnN0QW5kUGFyZW50cyhgW2RhdGEtY29udGVudD1cIiR7YW5jaG9yfVwiXWApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb249KCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGE9Zmlyc3QuZmluZEZpcnN0QW5kUGFyZW50cyhgW2RhdGEtY29udGVudD1cIiR7aWR9XWApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0KFsuLi5hLnBhcmVudHMsYS5maXJzdC5nZXQoMCldKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQoWy4uLnBhcmVudHNdKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuXHQgKiBwb3NpdGlvbiAoaWQsYXQpIG9uIHBhcmFncmFwaCBjb21wb3NlZExpbmUsIHBhcmFncmFwaCBsaW5lIG11c3QgYmUgaW4gYSAgbGVhZkZyYW1lXG5cdCAqIEBwYXJhbSB7Kn0gaWQgXG5cdCAqIEBwYXJhbSB7Kn0gYXQgXG5cdCAqIEBwYXJhbSB7Kn0gaSBcblx0ICovXG5cdHBvc2l0aW9uSW5JbmxpbmUoaWQsYXQsY29tcG9zZWRMaW5lKXtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoPXRoaXMuZ2V0Q29tcG9zZXIoY29tcG9zZWRMaW5lLnByb3BzW1wiZGF0YS1jb250ZW50XCJdKVxuXHRcdGNvbnN0IGRlZmF1bHRTdHlsZT1wYXJhZ3JhcGguZ2V0RGVmYXVsdE1lYXN1cmUoKS5kZWZhdWx0U3R5bGVcblx0XHQvL2NvdWxkIGl0IHNlYXJjaCBmcm9tIGxpbmUgZGlyZWN0bHkgdG8gdGFyZ2V0XG4gICAgICAgIGNvbnN0IHtmaXJzdDpzdG9yeSxwYXJlbnRzOnN0b3J5VXBzfT1uZXcgUmVhY3RRdWVyeShjb21wb3NlZExpbmUpLmZpbmRGaXJzdEFuZFBhcmVudHMoXCIuc3RvcnlcIilcbiAgICAgICAgY29uc3QgcG9zPXN0b3J5VXBzLnJlZHVjZSgoeHkse3Byb3BzOnt4PTAseT0wfX0pPT4oeHkueCs9eCx4eS55Kz15LHh5KSx7eDowLHk6MCwuLi5kZWZhdWx0U3R5bGV9KVxuICAgICAgICBjb25zdCBsaW5lRGVzY2VudD1zdG9yeS5hdHRyKCdsaW5lRGVzY2VudCcpXG4gICAgICAgIFxuXHRcdGNvbnN0IGlzUGFyYWdyYXBoU2VsZj1pZD09cGFyYWdyYXBoLnByb3BzLmlkXG5cdFx0Y29uc3Qge2ZpcnN0LGxhc3QsdGFyZ2V0PWZpcnN0fHxsYXN0LHBhcmVudHN9PXN0b3J5W2Ake2F0PT0xID8gXCJmaW5kTGFzdFwiIDogXCJmaW5kRmlyc3RcIn1BbmRQYXJlbnRzYF0oXG5cdFx0XHRpc1BhcmFncmFwaFNlbGYgPyBcblx0XHRcdGAuZW5kZXIke2F0PT0wID8gXCIsW2RhdGEtY29udGVudF1cIiA6IFwiXCJ9YCA6IFxuXHRcdFx0bm9kZT0+e1xuICAgICAgICAgICAgICAgIGlmKCFSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgY29uc3Qge3Byb3BzOntcImRhdGEtY29udGVudFwiOmNvbnRlbnQsXCJkYXRhLWVuZGF0XCI6ZW5kYXQsY2hpbGRyZW46dGV4dH19PW5vZGVcblx0XHRcdFx0aWYoY29udGVudCE9aWQpXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGlmKGVuZGF0PT11bmRlZmluZWQgfHwgKGF0PD1lbmRhdCAmJiBhdD49ZW5kYXQtdGV4dC5sZW5ndGgpKVxuXHRcdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRbdGFyZ2V0LmdldCgwKSwuLi5wYXJlbnRzXS5yZWR1Y2UoKG8se3Byb3BzOnt4PTAseT0wfX0pPT4oby54Kz14LCBvLnkrPXksIG8pLCBwb3MpO1xuICAgICAgICBcbiAgICAgICAgaWYoaXNQYXJhZ3JhcGhTZWxmKXtcbiAgICAgICAgICAgIHBvcy55PTBcblx0XHRcdHJldHVybiBwb3NcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3Qge2hlaWdodCx3aWR0aCxkZXNjZW50fT10YXJnZXQuZ2V0KDApLnByb3BzXG4gICAgICAgIGlmKGRlc2NlbnQhPXVuZGVmaW5lZCl7Ly90ZXh0IG9yIHRleHQgaW5saW5lIGNvbnRhaW5lclxuICAgICAgICAgICAgcG9zLnktPShoZWlnaHQtZGVzY2VudClcbiAgICAgICAgICAgIHBvcy5oZWlnaHQ9aGVpZ2h0XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcG9zLmhlaWdodD1oZWlnaHQrbGluZURlc2NlbnRcbiAgICAgICAgfVxuXG5cdFx0Y29uc3QgY29tcG9zZXI9dGhpcy5nZXRDb21wb3NlcihpZClcblx0XHRpZihjb21wb3Nlci5nZXRDb21wb3NlVHlwZSgpPT1cInRleHRcIil7XG5cdFx0XHRjb25zdCBlbmRhdD10YXJnZXQuYXR0cihcImRhdGEtZW5kYXRcIilcblx0XHRcdGNvbnN0IHRleHQ9dGFyZ2V0LmF0dHIoJ2NoaWxkcmVuJylcblx0XHRcdGlmKGVuZGF0Pj1hdCl7XG5cdFx0XHRcdGNvbnN0IGxlbj1hdC0oZW5kYXQtdGV4dC5sZW5ndGgpXG5cdFx0XHRcdGNvbnN0IG9mZnNldD1jb21wb3Nlci5tZWFzdXJlLnN0cmluZ1dpZHRoKHRleHQuc3Vic3RyaW5nKDAsbGVuKSlcblx0XHRcdFx0cG9zLngrPW9mZnNldFxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZSBpZihhdD09MSAmJiB3aWR0aCl7XG4gICAgICAgICAgICBwb3MueCs9d2lkdGhcbiAgICAgICAgfVxuICAgICAgICBcblx0XHRyZXR1cm4gcG9zXG4gICAgfVxuICAgIFxuICAgIGdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZSh7cHJvcHM6eydkYXRhLWNvbnRlbnQnOmlkLCdkYXRhLWZyYW1lJzpmcmFtZUlkLCBjb21wb3Nlcj10aGlzLmdldENvbXBvc2VyKGlkKX19KXtcbiAgICAgICAgcmV0dXJuIGZyYW1lSWQ9PWlkID8gY29tcG9zZXIgOiBjb21wb3Nlci5jb21wdXRlZC5jb21wb3NlZC5maW5kKGE9PmEudXVpZD09ZnJhbWVJZClcbiAgICB9XG59XG4vKipcbiAqIEl0IHV0aWxpemUgY29tcG9zZXIgdG8gZG8gcG9zaXRpb25pbmcsIFxuICogc28gZWFjaCBjb21wb3NlciBtdXN0IGltcGxlbWVudCBpdHNlbGYgcG9zaXRpb25pbmcgbWV0aG9kcywgd2hpY2ggYWN0dWFsbHkgbWFrZSBjb21wb3NlciBjb21wbGV4XG4gKiBDYW4gd2UgbWFrZSBhIHB1cmUgcG9zaXRpb25pbmcgaXNvbGF0ZWQgZnJvbSBjb21wb3Nlcj8/P1xuICogXG4gKi9cbmV4cG9ydCBkZWZhdWx0IFBvc2l0aW9uaW5nLm1ha2VTYWZlKGNsYXNzIFJlYWN0UG9zaXRpb25pbmcgZXh0ZW5kcyBQb3NpdGlvbmluZ0hlbHBlciB7XG4gICAgLyoqXG4gICAgICogMiBvcHRpb25zOlxuICAgICAqID4+YS4gcG9zaXRpb25pbmcgZnJvbSB1cCB0byBpZCwgc2NvcGUgZnJvbSBiaWcgdG8gc21hbGxcbiAgICAgKiA+PmIuIHBvc2l0aW9uaW5nIGZyb20gaWQgdXAsIHBlcmZvcm1hbmNlIHNob3VsZCBiZSBiZXR0ZXIsIGNob3NlblxuICAgICAqIHRoZSBsb2NhdGlvbiBtYXkgYmU6XG4gICAgICogSW5saW5lIExldmVsXG4gICAgICovXG4gICAgcG9zaXRpb24oaWQsYXQsIF9fcmV0dXJuRXZlcnl0aGluZyl7XG4gICAgICAgIC8vI2IgLCAoaWQsYXQpLT5saW5lLT5mcmFtZS0+dG9wRnJhbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIG1heWJlIG5vIGxpbmVcbiAgICAgICAgICogPiBhbmNob3JcbiAgICAgICAgICogPiB0b3BGcmFtZSBpdHNlbGZcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IHtsZWFmRnJhbWUsbGluZSwgYW5jaG9yfT10aGlzLnBvc2l0aW9uVG9MZWFmRnJhbWVMaW5lKGlkLGF0KVxuICAgICAgICBjb25zdCB0b3BGcmFtZT10aGlzLmdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZShsZWFmRnJhbWUpXG4gICAgICAgIGNvbnN0IHRvcEZyYW1lT2Zmc2V0PXRoaXMuZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSlcbiAgICAgICAgY29uc3QgbGVhZkZyYW1lT2Zmc2V0PSFhbmNob3IgPyB0aGlzLmdldEZyYW1lT2Zmc2V0R3JhbmRGcmFtZSh0b3BGcmFtZSxsZWFmRnJhbWUpIDogYW5jaG9yLm9mZnNldCh0b3BGcmFtZSxsZWFmRnJhbWUpXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQ9KCFhbmNob3IgJiYgbGluZS5wYXJhZ3JhcGgpID8gbGVhZkZyYW1lLmxpbmVYWShsaW5lLmluRnJhbWUpIDoge3g6MCx5OjB9XG4gICAgICAgIGNvbnN0IGlubGluZT0hYW5jaG9yID8gbGluZS5wb3NpdGlvbihpZCxhdCkgOiBhbmNob3IucG9zaXRpb24odG9wRnJhbWUsaWQsYXQpXG5cbiAgICAgICAgLy9maW5hbGx5XG4gICAgICAgIGNvbnN0IHg9dG9wRnJhbWVPZmZzZXQueCtsZWFmRnJhbWVPZmZzZXQueCtsaW5lT2Zmc2V0LngraW5saW5lLnhcbiAgICAgICAgY29uc3QgeT10b3BGcmFtZU9mZnNldC55K2xlYWZGcmFtZU9mZnNldC55K2xpbmVPZmZzZXQueStpbmxpbmUueVxuICAgICAgICBjb25zdCBwb3NpdGlvbj17XG4gICAgICAgICAgICBpZCxhdCxcbiAgICAgICAgICAgIC4uLmlubGluZSxcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgLi4udGhpcy5hc1ZpZXdwb3J0UG9pbnQoeyB4LHkgfSksXG4gICAgICAgICAgICBwYWdlOnRvcEZyYW1lLnByb3BzLkksXG4gICAgICAgICAgICBwYXJhZ3JhcGg6bGluZS5wYXJhZ3JhcGgsXG4gICAgICAgICAgICBsaW5lSW5kZXhPZlBhcmFncmFwaDpsaW5lLmksXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OmxpbmUuaGVpZ2h0XG4gICAgICAgIH1cblxuICAgICAgICBpZighX19yZXR1cm5FdmVyeXRoaW5nKVxuICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHBvc2l0aW9uLCB7XG4gICAgICAgICAgICB0b3BGcmFtZSwgXG4gICAgICAgICAgICBsZWFmRnJhbWUsIFxuICAgICAgICAgICAgZ2V0IGxpbmVJbmRleEluTGVhZkZyYW1lKCl7XG4gICAgICAgICAgICAgICAgaWYoIWxpbmUuaW5GcmFtZSAmJiAhYW5jaG9yKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0PT0wID8gMCA6IGxlYWZGcmFtZS5saW5lcy5sZW5ndGgtMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbGVhZkZyYW1lLmxpbmVzLmluZGV4T2YobGluZS5pbkZyYW1lKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBsaW5lKCl7XG4gICAgICAgICAgICAgICAgaWYodG9wRnJhbWU9PWxlYWZGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGluZUluZGV4SW5MZWFmRnJhbWVcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9wRnJhbWUubGluZXMuZmluZEluZGV4KGE9Pm5ldyBSZWFjdFF1ZXJ5KGEpLmZpbmRGaXJzdChgW2RhdGEtZnJhbWU9XCIke2xlYWZGcmFtZS51dWlkfVwiXWApLmxlbmd0aD09MSlcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBsYXllcigpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwYXJlbnRzfT1uZXcgUmVhY3RRdWVyeSh0b3BGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSkuZmluZEZpcnN0QW5kUGFyZW50cyhgW2RhdGEtY29udGVudD1cIiR7aWR9XWApXG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXI9cGFyZW50cy5maW5kKGE9PmEgJiYgYS50eXBlLmRpc3BsYXlOYW1lPT1cImxheWVyXCIpXG4gICAgICAgICAgICAgICAgaWYobGF5ZXIpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXIucHJvcHMuelxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwb3NpdGlvblRvTGluZUVuZChpZCxhdCl7XG4gICAgICAgIGNvbnN0IHBvcz10aGlzLnBvc2l0aW9uKGlkLGF0LHRydWUpXG4gICAgICAgIGNvbnN0IHtwYXJhZ3JhcGgsIGxpbmVJbmRleE9mUGFyYWdyYXBofT1wb3NcbiAgICAgICAgaWYobGluZUluZGV4T2ZQYXJhZ3JhcGghPS0xKXtcbiAgICAgICAgICAgIGNvbnN0ICRwPXRoaXMuZ2V0Q29tcG9zZXIocGFyYWdyYXBoKVxuICAgICAgICAgICAgY29uc3QgYXRvbT0kcC5saW5lc1tsaW5lSW5kZXhPZlBhcmFncmFwaF0ubGFzdEF0b21cbiAgICAgICAgICAgIGlmKGF0b209PSRwLmF0b21zWyRwLmF0b21zLmxlbmd0aC0xXSlcbiAgICAgICAgICAgICAgICByZXR1cm4ge2lkOnBhcmFncmFwaCwgYXQ6MX1cblxuICAgICAgICAgICAgY29uc3Qgbm9kZT1uZXcgUmVhY3RRdWVyeShhdG9tKS5maW5kTGFzdChub2RlPT57XG4gICAgICAgICAgICAgICAgaWYoIVJlYWN0LmlzVmFsaWRFbGVtZW50KG5vZGUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1jb250ZW50XCI6aXNDb250ZW50LCBcImRhdGEtdHlwZVwiOnR5cGUsIGNoaWxkcmVufX09bm9kZVxuICAgICAgICAgICAgICAgIGlmKGlzQ29udGVudCAmJiAodHlwZT09XCJ0ZXh0XCIgfHwgIWNoaWxkcmVuKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKG5vZGUubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICBpZihub2RlLmF0dHIoXCJkYXRhLXR5cGVcIik9PVwidGV4dFwiKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpub2RlLmF0dHIoJ2RhdGEtY29udGVudCcpLCBhdDpNYXRoLm1heCgwLG5vZGUuYXR0cihcImRhdGEtZW5kYXRcIiktMSl9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSxhdDoxfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge2lkLGF0fVxuICAgIH1cblxuICAgIHBvc2l0aW9uVG9MaW5lU3RhcnQoaWQsYXQpe1xuICAgICAgICBjb25zdCBwb3M9dGhpcy5wb3NpdGlvbihpZCxhdCx0cnVlKVxuICAgICAgICBjb25zdCB7cGFyYWdyYXBoLCBsaW5lSW5kZXhPZlBhcmFncmFwaH09cG9zXG4gICAgICAgIGlmKGxpbmVJbmRleE9mUGFyYWdyYXBoIT0tMSl7XG4gICAgICAgICAgICBjb25zdCAkcD10aGlzLmdldENvbXBvc2VyKHBhcmFncmFwaClcbiAgICAgICAgICAgIGNvbnN0IGF0b209JHAubGluZXNbbGluZUluZGV4T2ZQYXJhZ3JhcGhdLmZpcnN0QXRvbVxuICAgICAgICAgICAgaWYoYXRvbT09JHAuYXRvbXNbMF0pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpwYXJhZ3JhcGgsIGF0OjB9XG4gICAgICAgICAgICBjb25zdCBub2RlPW5ldyBSZWFjdFF1ZXJ5KGF0b20pLmZpbmRGaXJzdChub2RlPT57XG4gICAgICAgICAgICAgICAgaWYoIVJlYWN0LmlzVmFsaWRFbGVtZW50KG5vZGUpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1jb250ZW50XCI6aXNDb250ZW50LCBcImRhdGEtdHlwZVwiOnR5cGUsIGNoaWxkcmVufX09bm9kZVxuICAgICAgICAgICAgICAgIGlmKGlzQ29udGVudCAmJiAodHlwZT09XCJ0ZXh0XCIgfHwgIWNoaWxkcmVuKSl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmKG5vZGUubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICBpZihub2RlLmF0dHIoXCJkYXRhLXR5cGVcIik9PVwidGV4dFwiKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpub2RlLmF0dHIoJ2RhdGEtY29udGVudCcpLCBhdDpub2RlLmF0dHIoXCJkYXRhLWVuZGF0XCIpLW5vZGUuYXR0cignY2hpbGRyZW4nKS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7aWQ6bm9kZS5hdHRyKCdkYXRhLWNvbnRlbnQnKSxhdDowfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge2lkLGF0fVxuICAgIH1cblxuICAgIGFyb3VuZChsZWZ0LHRvcCl7XG4gICAgICAgIC8vY29udmVydCB0byBjYW52YXMgY28tb3JkaW5hdGVcbiAgICAgICAgdmFyIHsgeCwgeSB9ID0gdGhpcy5hc0NhbnZhc1BvaW50KHsgbGVmdCwgdG9wIH0pXG4gICAgICAgIFxuICAgICAgICBjb25zdCB7dG9wRnJhbWUsdG9wRnJhbWVPZmZzZXR9PXRoaXMuZ2V0VG9wRnJhbWVCeVBvc2l0aW9uKHgseSlcbiAgICAgICAgaWYoIXRvcEZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBwb2ludElzSW5zaWRlPSh7eDp4MD0wLHk6eTA9MCx3aWR0aCxoZWlnaHR9LC4uLm9mZnNldHMpPT57XG4gICAgICAgICAgICBjb25zdCBvPW9mZnNldHMucmVkdWNlKChvLHt4LHl9KT0+KG8ueC09eCxvLnktPXksbykse3gseX0pXG4gICAgICAgICAgICByZXR1cm4geDA8PW8ueCAmJiB5MDw9by55ICYmICh4MCt3aWR0aCk+PW8ueCAmJiAoeTAraGVpZ2h0KT49by55XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vZmlyc3QgY2hlY2sgaWYgaXQncyBhbmNob3JcbiAgICAgICAgY29uc3QgYW5jaG9yPXRvcEZyYW1lLmFuY2hvcnMuZmluZCgoe3Byb3BzOntnZW9tZXRyeTp7eD0wLHk9MCx3aWR0aD0wLGhlaWdodD0wfX19KT0+cG9pbnRJc0luc2lkZSh7eCx5LHdpZHRoLGhlaWdodH0sdG9wRnJhbWVPZmZzZXQpKVxuICAgICAgICBpZihhbmNob3Ipe1xuICAgICAgICAgICAgY29uc3QgJGFuY2hvcj1uZXcgUmVhY3RRdWVyeShhbmNob3IpXG4gICAgICAgICAgICBjb25zdCBub3RGcmFtZUFuY2hvcj0kYW5jaG9yLmZpbmRGaXJzdChgW2RhdGEtZnJhbWVdYCkubGVuZ3RoPT0wXG4gICAgICAgICAgICBpZihub3RGcmFtZUFuY2hvcil7XG4gICAgICAgICAgICAgICAgY29uc3Qge25vZGV9PXRoaXMuZ2V0Qm91bmRhcnlDaGVja2VkTW9zdElubmVyTm9kZShcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9yLCBcbiAgICAgICAgICAgICAgICAgICAgKHJlY3Qsbm9kZSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9wczp7d2lkdGgsaGVpZ2h0LCBcImRhdGEtbm9jb250ZW50XCI6bm9Db250ZW50fX09bm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9Db250ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYod2lkdGggJiYgaGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb2ludElzSW5zaWRlKHJlY3Qoe3dpZHRoLGhlaWdodH0pLHRvcEZyYW1lT2Zmc2V0LCBhbmNob3IucHJvcHMuZ2VvbWV0cnkpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChub2RlLHBhcmVudHMpPT5bbm9kZSwuLi5wYXJlbnRzXS5maW5kKGE9PmEgJiYgYS5wcm9wcyAmJiBcImRhdGEtY29udGVudFwiIGluIGEucHJvcHMpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtpZDpub2RlLnByb3BzW1wiZGF0YS1jb250ZW50XCJdfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgLy9jb250aW51ZSB1c2UgZnJhbWUgc2VhcmNoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90byBnZXQgbGVhZiBmcmFtZSB0aGF0IGluY2x1ZGVzIHRoZSBwb2ludCwgYW5kIHJldHVybiB0aGUgZnJhbWVcbiAgICAgICAgY29uc3Qge25vZGU6bGVhZkZyYW1lfT10aGlzLmdldEJvdW5kYXJ5Q2hlY2tlZE1vc3RJbm5lck5vZGUoXG4gICAgICAgICAgICB0b3BGcmFtZS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSwgXG4gICAgICAgICAgICAvL29ubHkgZnJhbWUgdGhhdCBjb250YWluIHRoZSBwb2ludFxuICAgICAgICAgICAgKHJlY3Qsbm9kZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1mcmFtZVwiOmlzRnJhbWUsIHdpZHRoLGhlaWdodH19PW5vZGVcbiAgICAgICAgICAgICAgICBpZihpc0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRJc0luc2lkZShyZWN0KHt3aWR0aCxoZWlnaHR9KSx0b3BGcmFtZU9mZnNldClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvL2dldCBmcmFtZSBmcm9tIGRhdGEtY29udGVudCBhbmQgZGF0YS1mcmFtZVxuICAgICAgICAgICAgbGF5b3V0ZWRGcmFtZU5vZGU9PnRoaXMuZ2V0RnJhbWVCeUxheW91dGVkRnJhbWVOb2RlKGxheW91dGVkRnJhbWVOb2RlKVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGxlYWZGcmFtZU9mZnNldD10aGlzLmdldEZyYW1lT2Zmc2V0R3JhbmRGcmFtZSh0b3BGcmFtZSxsZWFmRnJhbWUpXG5cbiAgICAgICAgLy9sb2NhdGUgdGhlIGxpbmUgdGhhdCBjb250YWluIHRoZSBwb2ludFxuICAgICAgICB2YXIgbGluZT1sZWFmRnJhbWUubGluZXMuZmluZChsaW5lPT57XG4gICAgICAgICAgICBjb25zdCB7cHJvcHM6e3dpZHRoPTAsIGhlaWdodD0wfX09bGluZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50SXNJbnNpZGUoey4uLmxlYWZGcmFtZS5saW5lWFkobGluZSksd2lkdGgsaGVpZ2h0fSxsZWFmRnJhbWVPZmZzZXQsdG9wRnJhbWVPZmZzZXQpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYoIWxpbmUpe1xuICAgICAgICAgICAgLy9lbmQgb2YgZnJhbWVcbiAgICAgICAgICAgIHJldHVybiB7aWQ6bGVhZkZyYW1lLnByb3BzLmlkLGF0OjF9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGxpbmVPZmZzZXQ9bGVhZkZyYW1lLmxpbmVYWShsaW5lKVxuICAgICAgICAvL3doYXQgaWYgbGVhZkZyYW1lIGlzIG5vdCBsZWFmIG5vZGU/Pz8/P1xuICAgICAgICBjb25zdCB7cGFnaW5hdGlvbjp7aWQsaX0sIHBhcmFncmFwaD10aGlzLmdldENvbXBvc2VyKGlkKX09bGluZS5wcm9wc1xuICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbklubGluZShwYXJhZ3JhcGguY29tcHV0ZWQubGFzdENvbXBvc2VkW2ktMV0seC10b3BGcmFtZU9mZnNldC54LWxlYWZGcmFtZU9mZnNldC54LWxpbmVPZmZzZXQueClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxLiBzdGFydCBhbmQgZW5kIG11c3QgYmUgbm9ybWFsaXplZCB0byBzYW1lIGxheW91dCBibG9ja1xuICAgICAqIDIuIGFwcGVuZCByZWN0IGxpbmUgYnkgbGluZSB1cCB0byBcbiAgICAgKiAzLiByZW1vdmUgbGVmdCBvZiBmaXJzdCBsaW5lLCBhbmQgcmlnaHQgb2YgZW5kIGxpbmVcbiAgICAgKiBAcGFyYW0geyp9IHN0YXJ0IFxuICAgICAqIEBwYXJhbSB7Kn0gZW5kIFxuICAgICAqL1xuICAgIGdldFJhbmdlUmVjdHMoc3RhcnQsZW5kKXtcbiAgICAgICAgY29uc3QgcmVjdHM9W11cbiAgICAgICAgY29uc3QgeyBwMCwgcDEgfSA9IHRoaXMuZ2V0T3JkZXJlZFBvc2l0aW9uKHN0YXJ0LCBlbmQpXG4gICAgICAgIFxuICAgICAgICBjb25zdCBzY29wZT0oZnVuY3Rpb24qIChmcmFtZTAsIGZyYW1lMSl7XG4gICAgICAgICAgICBjb25zdCBtYWtlUmVjdHM9KGZyYW1lLGZyb209MCx0bz1mcmFtZS5saW5lcy5sZW5ndGgtMSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BGcmFtZT10aGlzLmdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZShmcmFtZSlcbiAgICAgICAgICAgICAgICBjb25zdCBvPXRoaXMuZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSlcbiAgICAgICAgICAgICAgICBjb25zdCB7eCx5fT10aGlzLmdldEZyYW1lT2Zmc2V0R3JhbmRGcmFtZSh0b3BGcmFtZSxmcmFtZSkgXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmxpbmVzLnNsaWNlKGZyb20sdG8rMSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgobGluZSxfLF8xLHtwcm9wczp7d2lkdGgsaGVpZ2h0LHBhZ2luYXRpb246e2lkOmlzUGFyYWdyYXBoTGluZX09e319fT1saW5lKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeHk9ZnJhbWUubGluZVhZKGxpbmUpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpc1BhcmFncmFwaExpbmUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3J5PW5ldyBSZWFjdFF1ZXJ5KGxpbmUpLmZpbmRGaXJzdEFuZFBhcmVudHMoJy5zdG9yeScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeD1bLi4uc3RvcnkucGFyZW50cyxzdG9yeS5maXJzdC5nZXQoMCldLnJlZHVjZSgoWCx7cHJvcHM6e3g9MH19KT0+WCt4LDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3Q9c3RvcnkuZmlyc3QuZmluZEZpcnN0QW5kUGFyZW50cygnW2RhdGEtY29udGVudF0sLmVuZGVyJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4MD1bLi4uZmlyc3QucGFyZW50cyxmaXJzdC5maXJzdC5nZXQoMCldLnJlZHVjZSgoWCx7cHJvcHM6e3g9MH19KT0+WCt4LHgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdD1zdG9yeS5maXJzdC5maW5kTGFzdEFuZFBhcmVudHMoJ1tkYXRhLWNvbnRlbnRdLC5lbmRlcicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeDE9Wy4uLmxhc3QucGFyZW50cyxsYXN0Lmxhc3QuZ2V0KDApXS5yZWR1Y2UoKFgse3Byb3BzOnt4PTB9fSk9PlgreCx4K2xhc3QubGFzdC5hdHRyKCd3aWR0aCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Li4ueHkseDp4eS54K3gwLCB3aWR0aDp4MS14MCxoZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gey4uLnh5LHdpZHRoLGhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChhPT4oYS54Kz0oeCtvLngpLCBhLnkrPSh5K28ueSksIGEpKVxuICAgICAgICAgICAgICAgICAgICAubWFwKCh7eDpsZWZ0LHk6dG9wLHdpZHRoLGhlaWdodH0pPT4oe2xlZnQsdG9wLHJpZ2h0OmxlZnQrd2lkdGgsYm90dG9tOnRvcCtoZWlnaHR9KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGZyYW1lMD09ZnJhbWUxKXtcbiAgICAgICAgICAgICAgICB5aWVsZCBtYWtlUmVjdHMoZnJhbWUwLCBwMC5saW5lSW5kZXhJbkxlYWZGcmFtZSwgcDEubGluZUluZGV4SW5MZWFmRnJhbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgbWFrZVJlY3RzKGZyYW1lMCwgcDAubGluZUluZGV4SW5MZWFmRnJhbWUpXG4gICAgICAgICAgICBmb3IobGV0IGZyYW1lcz1mcmFtZTAuY29udGV4dC5wYXJlbnQuY29tcHV0ZWQuY29tcG9zZWQsaT1mcmFtZTAucHJvcHMuaSsxO2k8ZnJhbWUxLnByb3BzLmk7aSsrKXtcbiAgICAgICAgICAgICAgICB5aWVsZCBtYWtlUmVjdHMoZnJhbWVzW2ldKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgbWFrZVJlY3RzKGZyYW1lMSwgMCxwMC5saW5lSW5kZXhJbkxlYWZGcmFtZSlcbiAgICAgICAgfSkuY2FsbCh0aGlzLCBwMC5sZWFmRnJhbWUsIHAxLmxlYWZGcmFtZSk7XG5cbiAgICAgICAgZm9yKGNvbnN0IGJvdW5kcyBvZiBzY29wZSl7XG4gICAgICAgICAgICByZWN0cy5zcGxpY2UocmVjdHMubGVuZ3RoLCAwLCAuLi5ib3VuZHMpXG4gICAgICAgIH1cblxuICAgICAgICBpZihyZWN0cy5sZW5ndGg9PTApXG4gICAgICAgICAgICByZXR1cm4gcmVjdHNcbiAgICBcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZWN0c1swXSx7bGVmdDpwMC54fSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihyZWN0c1tyZWN0cy5sZW5ndGgtMV0sIHtyaWdodDpwMS54fSlcblxuICAgICAgICByZXR1cm4gcmVjdHMuZmlsdGVyKCh7bGVmdCxyaWdodH0pPT4obGVmdC1yaWdodCkhPTApXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdXNlIGNvbXBvc2VkIHRvIGxvY2F0ZSwgc28gZnJhbWUgd291bGQgbm90IFxuICAgICAqIEBwYXJhbSB7Kn0gaWQgXG4gICAgICogQHBhcmFtIHsqfSBhdCBcbiAgICAgKi9cbiAgICBuZXh0TGluZShpZCxhdCl7XG4gICAgICAgIC8vdG8gZ2V0IG5leHQgbGluZSBiZWxvdyBpbnB1dCBsaW5lIGluIHRoZSBmcmFtZVxuICAgICAgICBjb25zdCBuZXh0TGluZUJlbG93PShmcmFtZSxsaW5lLCBvZmZzZXQpPT57XG4gICAgICAgICAgICB2YXIgbmV4dExpbmU9KCgpPT57XG4gICAgICAgICAgICAgICAgaWYoZnJhbWUubGFzdExpbmU9PWxpbmUpLy9nbyB0byBuZXh0IHRvcCBmcmFtZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICBpZihmcmFtZS5jb2xzICYmIGZyYW1lLmNvbHMubGVuZ3RoPjEpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NvbHVtbkxhc3RMaW5lPWZyYW1lLmNvbHVtbnMucmVkdWNlKChpc0xhc3QsYSk9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0IHx8IChhLmxpbmVzLmxlbmd0aD4wICYmIGEubGluZXMubGVuZ3RoLTE9PWEubGluZXMuaW5kZXhPZihsaW5lKSksXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBpZihpc0NvbHVtbkxhc3RMaW5lKXsvL2dvIHRvIG5leHQgdG9wIGZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmxpbmVzW2ZyYW1lLmxpbmVzLmluZGV4T2YobGluZSkrMV1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBpZihuZXh0TGluZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dExpbmVcblxuICAgICAgICAgICAgLy9mcmFtZSBjYW4gYmUgY3VzdG9taXplZCB0byBicmVhayBCbG9jayBMYXlvdXQgc3RydWN0dXJlKHN1Y2ggYXMgV29yZCBjb250aW51b3VzIHNlY3Rpb24pLCBcbiAgICAgICAgICAgIC8vc28gdHJ5IHRvIGxvY2F0ZSBmcm9tIGxheW91dGVkIFxuICAgICAgICAgICAgY29uc3QgcG9pbnQ9W3RoaXMuZ2V0VG9wRnJhbWVYWSh0b3BGcmFtZSldLnJlZHVjZSgobyxhKT0+KHt4Om8ueC1hLngseTpvLnktYS55fSksb2Zmc2V0KVxuICAgICAgICAgICAgY29uc3QgZnJhbWVJc0JlbG93UG9pbnRBbmRDb250YWluUG9pbnRYPSh7eCx5LHdpZHRofSk9PnBvaW50Lng+PXggJiYgcG9pbnQueDw9eCt3aWR0aCAmJiB5PnBvaW50LnlcbiAgICAgICAgICAgIC8vdG8gZ2V0IG1vc3QgaW5uZXIgZnJhbWUgdGhhdCB1bmRlciBvZmZzZXQueSBhbmQgaW5jbHVkZSBvZmZzZXQueFxuICAgICAgICAgICAgY29uc3QgZm91bmQ9dGhpcy5nZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKFxuICAgICAgICAgICAgICAgIHRvcEZyYW1lLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpLCBcbiAgICAgICAgICAgICAgICAocmVjdCxub2RlKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1mcmFtZVwiOmlzRnJhbWUsIHdpZHRoLGhlaWdodH19PW5vZGVcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGcmFtZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShub2RlKT09ZnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVJc0JlbG93UG9pbnRBbmRDb250YWluUG9pbnRYKHJlY3Qoe3dpZHRoLGhlaWdodH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvL2dldCBmcmFtZSBmcm9tIGRhdGEtY29udGVudCBhbmQgZGF0YS1mcmFtZVxuICAgICAgICAgICAgICAgIChsYXlvdXRlZEZyYW1lTm9kZSxbbGF5b3V0ZWRUb3BGcmFtZV0pPT5cbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0ZWRGcmFtZU5vZGUgJiYgbGF5b3V0ZWRUb3BGcmFtZS8qbm90IHRvcCBmcmFtZSBvciBsYXlvdXRlZCBub3Qgc3luY2VkKi9cbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUobGF5b3V0ZWRGcmFtZU5vZGUpIDogbnVsbFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYoZm91bmQubm9kZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGluZUluY2x1ZGVYKGxlYWZGcmFtZT1mb3VuZC5ub2RlLCBwb2ludC54LWZvdW5kLngpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZUluY2x1ZGVYPShmcmFtZSxYKT0+e1xuICAgICAgICAgICAgaWYoIShmcmFtZS5jb2xzICYmIGZyYW1lLmNvbHMubGVuZ3RoPjEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS5maXJzdExpbmVcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbj1mcmFtZS5jb2x1bW5zLmZpbmQoKHt4LHdpZHRofSk9Plg+PXggJiYgWDw9eCt3aWR0aClcbiAgICAgICAgICAgIGlmKGNvbHVtbilcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmxpbmVzWzBdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VG9wRnJhbWU9YT0+dGhpcy5mcmFtZXNbdGhpcy5mcmFtZXMuaW5kZXhPZihhKSsxXVxuXG5cbiAgICAgICAgdmFyIHt4LHksIGxlYWZGcmFtZSwgbGluZUluZGV4SW5MZWFmRnJhbWUsIHRvcEZyYW1lfT10aGlzLnBvc2l0aW9uKGlkLGF0LHRydWUpXG4gICAgICAgIHZhciBsaW5lSW5MZWFmRnJhbWU9bGVhZkZyYW1lLmxpbmVzW2xpbmVJbmRleEluTGVhZkZyYW1lXVxuICAgICAgICBcbiAgICAgICAgdmFyIG5leHRMaW5lXG4gICAgICAgIC8vZmluZCBuZXh0IGxpbmUgaW4gY3VycmVudCBUT1AgZnJhbWVcbiAgICAgICAgd2hpbGUobGVhZkZyYW1lICYmIGxpbmVJbkxlYWZGcmFtZSl7XG4gICAgICAgICAgICBpZihuZXh0TGluZT1uZXh0TGluZUJlbG93KGxlYWZGcmFtZSwgbGluZUluTGVhZkZyYW1lLHt4LHl9KSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kSW5CbG9ja0xpbmUoe3gseX0sbmV4dExpbmUsIHRvcEZyYW1lLCBsZWFmRnJhbWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2RpcmVjdCBwYXJlbnQgZnJhbWVcbiAgICAgICAgICAgIGNvbnN0IGxlYWZGcmFtZUNvbnRhaW5lZEJ5PXRoaXMuX3RhcmdldEZyYW1lQ29udGFpbnNGcmFtZShsZWFmRnJhbWUpXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGcmFtZT10aGlzLmdldENoZWNrZWRHcmFuZEZyYW1lQnlGcmFtZShcbiAgICAgICAgICAgICAgICBsZWFmRnJhbWUsXG4gICAgICAgICAgICAgICAgYT0+YSE9bGVhZkZyYW1lICYmIGxlYWZGcmFtZUNvbnRhaW5lZEJ5KGEpLyoqLyxcbiAgICAgICAgICAgICAgICB0cnVlLypmaXJzdCovKVxuICAgICAgICAgICAgaWYocGFyZW50RnJhbWUpe1xuICAgICAgICAgICAgICAgIC8vbG9jYXRlIGxpbmUgaW5jbHVkZXMgZnJhbWVcbiAgICAgICAgICAgICAgICBsaW5lSW5MZWFmRnJhbWU9cGFyZW50RnJhbWUubGluZXMuZmluZChsaW5lPT5uZXcgUmVhY3RRdWVyeShsaW5lKS5maW5kRmlyc3QoYFtkYXRhLWZyYW1lPSR7bGVhZkZyYW1lLnV1aWR9XWApLmxlbmd0aD09MSlcbiAgICAgICAgICAgICAgICBsZWFmRnJhbWU9cGFyZW50RnJhbWVcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9maW5kIGZpcnN0IGxpbmUgaW4gbmV4dCBzaWJsaW5ncyBvZiBjdXJyZW50IHRvcCBmcmFtZVxuICAgICAgICB3aGlsZSh0b3BGcmFtZSAmJiAhbmV4dExpbmUgJiYgKHRvcEZyYW1lPW5leHRUb3BGcmFtZSh0b3BGcmFtZSkpKXtcbiAgICAgICAgICAgIGlmKG5leHRMaW5lPWZpcnN0TGluZUluY2x1ZGVYKHRvcEZyYW1lLHgpKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcm91bmRJbkJsb2NrTGluZSh7eCx5fSwgbmV4dExpbmUsIHRvcEZyYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cblxuICAgIHByZXZMaW5lKGlkLGF0KXtcbiAgICAgICAgLy90byBnZXQgcHJldiBsaW5lIGFib3ZlIGlucHV0IGxpbmUgaW4gdGhlIGZyYW1lXG4gICAgICAgIGNvbnN0IHByZXZMaW5lQWJvdmU9KGZyYW1lLGxpbmUsIG9mZnNldCk9PntcbiAgICAgICAgICAgIGNvbnN0IHByZXZMaW5lPSgoKT0+e1xuICAgICAgICAgICAgICAgIGlmKGZyYW1lLmZpcnN0TGluZT09bGluZSkvL2dvIHRvIHByZXYgdG9wIGZyYW1lXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIGlmKGZyYW1lLmNvbHMgJiYgZnJhbWUuY29scy5sZW5ndGg+MSl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sdW1uRmlyc3RMaW5lPWZyYW1lLmNvbHVtbnMucmVkdWNlKChpc0ZpcnN0LGEpPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRmlyc3QgfHwgYS5saW5lcy5pbmRleE9mKGxpbmUpPT0wLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNDb2x1bW5GaXJzdExpbmUpey8vZ28gdG8gbmV4dCB0b3AgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUubGluZXNbZnJhbWUubGluZXMuaW5kZXhPZihsaW5lKS0xXVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGlmKHByZXZMaW5lKVxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2TGluZVxuXG4gICAgICAgICAgICAvL2ZyYW1lIGNhbiBiZSBjdXN0b21pemVkIHRvIGJyZWFrIEJsb2NrIExheW91dCBzdHJ1Y3R1cmUoc3VjaCBhcyBXb3JkIGNvbnRpbnVvdXMgc2VjdGlvbiksIFxuICAgICAgICAgICAgLy9zbyB0cnkgdG8gbG9jYXRlIGZyb20gbGF5b3V0ZWQgXG4gICAgICAgICAgICBjb25zdCBwb2ludD1bdGhpcy5nZXRUb3BGcmFtZVhZKHRvcEZyYW1lKV0ucmVkdWNlKChvLGEpPT4oe3g6by54LWEueCx5Om8ueS1hLnl9KSxvZmZzZXQpXG4gICAgICAgICAgICBjb25zdCBmcmFtZUlzQWJvdmVQb2ludEFuZENvbnRhaW5Qb2ludFg9KHt4LHksd2lkdGgsaGVpZ2h0fSk9PnBvaW50Lng+PXggJiYgcG9pbnQueDw9eCt3aWR0aCAmJiAocG9pbnQueS15LWhlaWdodCk+PTBcbiAgICAgICAgICAgIC8vdG8gZ2V0IG1vc3QgaW5uZXIgZnJhbWUgdGhhdCB1bmRlciBvZmZzZXQueSBhbmQgaW5jbHVkZSBvZmZzZXQueFxuICAgICAgICAgICAgY29uc3QgZm91bmQ9dGhpcy5nZXRCb3VuZGFyeUNoZWNrZWRNb3N0SW5uZXJOb2RlKFxuICAgICAgICAgICAgICAgIHRvcEZyYW1lLmNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpLCBcbiAgICAgICAgICAgICAgICAocmVjdCxub2RlKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7cHJvcHM6e1wiZGF0YS1mcmFtZVwiOmlzRnJhbWUsIHdpZHRoLGhlaWdodH19PW5vZGVcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNGcmFtZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmdldEZyYW1lQnlMYXlvdXRlZEZyYW1lTm9kZShub2RlKT09ZnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWVJc0Fib3ZlUG9pbnRBbmRDb250YWluUG9pbnRYKHJlY3Qoe3dpZHRoLGhlaWdodH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvL2dldCBmcmFtZSBmcm9tIGRhdGEtY29udGVudCBhbmQgZGF0YS1mcmFtZVxuICAgICAgICAgICAgICAgIChsYXlvdXRlZEZyYW1lTm9kZSxbbGF5b3V0ZWRUb3BGcmFtZV0pPT5cbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0ZWRGcmFtZU5vZGUgJiYgbGF5b3V0ZWRUb3BGcmFtZS8qbm90IHRvcCBmcmFtZSBvciBsYXlvdXRlZCBub3Qgc3luY2VkKi9cbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGcmFtZUJ5TGF5b3V0ZWRGcmFtZU5vZGUobGF5b3V0ZWRGcmFtZU5vZGUpIDogbnVsbCxcbiAgICAgICAgICAgICAgICB0cnVlLy9maW5kTGFzdFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYoZm91bmQubm9kZSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMaW5lSW5jbHVkZVgobGVhZkZyYW1lPWZvdW5kLm5vZGUsIHBvaW50LngtZm91bmQueClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgbGFzdExpbmVJbmNsdWRlWD0oZnJhbWUsWCk9PntcbiAgICAgICAgICAgIGlmKCEoZnJhbWUuY29scyAmJiBmcmFtZS5jb2xzLmxlbmd0aD4xKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUubGFzdExpbmVcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbj1mcmFtZS5jb2x1bW5zLmZpbmQoKHt4LHdpZHRofSk9Plg+PXggJiYgWDw9eCt3aWR0aClcbiAgICAgICAgICAgIGlmKGNvbHVtbilcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmxpbmVzW2NvbHVtbi5saW5lcy5sZW5ndGgtMV1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZUb3BGcmFtZT1hPT50aGlzLmZyYW1lc1t0aGlzLmZyYW1lcy5pbmRleE9mKGEpLTFdXG5cblxuICAgICAgICB2YXIge3gseSwgbGVhZkZyYW1lLCBsaW5lSW5kZXhJbkxlYWZGcmFtZSwgdG9wRnJhbWV9PXRoaXMucG9zaXRpb24oaWQsYXQsdHJ1ZSlcbiAgICAgICAgdmFyIGxpbmVJbkxlYWZGcmFtZT1sZWFmRnJhbWUubGluZXNbbGluZUluZGV4SW5MZWFmRnJhbWVdXG4gICAgICAgIFxuICAgICAgICB2YXIgcHJldkxpbmVcbiAgICAgICAgLy9maXJzdCB0cnkgdG8gZmluZCBwcmV2IGxpbmUgaW4gY3VycmVudCB0b3AgZnJhbWVcbiAgICAgICAgd2hpbGUobGVhZkZyYW1lICYmIGxpbmVJbkxlYWZGcmFtZSl7XG4gICAgICAgICAgICBpZihwcmV2TGluZT1wcmV2TGluZUFib3ZlKGxlYWZGcmFtZSwgbGluZUluTGVhZkZyYW1lLHt4LHl9KSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJvdW5kSW5CbG9ja0xpbmUoe3gseX0scHJldkxpbmUsdG9wRnJhbWUsbGVhZkZyYW1lKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9kaXJlY3QgcGFyZW50IGZyYW1lXG4gICAgICAgICAgICBjb25zdCBsZWFmRnJhbWVDb250YWluZWRCeT10aGlzLl90YXJnZXRGcmFtZUNvbnRhaW5zRnJhbWUobGVhZkZyYW1lKVxuICAgICAgICAgICAgY29uc3QgcGFyZW50RnJhbWU9dGhpcy5nZXRDaGVja2VkR3JhbmRGcmFtZUJ5RnJhbWUoXG4gICAgICAgICAgICAgICAgbGVhZkZyYW1lLFxuICAgICAgICAgICAgICAgIGE9PmEhPWxlYWZGcmFtZSAmJiBsZWFmRnJhbWVDb250YWluZWRCeShhKS8qKi8sXG4gICAgICAgICAgICAgICAgdHJ1ZS8qZmlyc3QqLylcbiAgICAgICAgICAgIGlmKHBhcmVudEZyYW1lKXtcbiAgICAgICAgICAgICAgICAvL2xvY2F0ZSBsaW5lIGluY2x1ZGVzIGZyYW1lXG4gICAgICAgICAgICAgICAgbGluZUluTGVhZkZyYW1lPXBhcmVudEZyYW1lLmxpbmVzLmZpbmQobGluZT0+bmV3IFJlYWN0UXVlcnkobGluZSkuZmluZEZpcnN0KGBbZGF0YS1mcmFtZT0ke2xlYWZGcmFtZS51dWlkfV1gKS5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAgbGVhZkZyYW1lPXBhcmVudEZyYW1lXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vb3RoZXJ3aXNlIGZpbmQgZmlyc3QgbGluZSBpbiBuZXh0IHNpYmxpbmdzIG9mIGN1cnJlbnQgdG9wIGZyYW1lXG4gICAgICAgIHdoaWxlKHRvcEZyYW1lICYmICFwcmV2TGluZSAmJiAodG9wRnJhbWU9cHJldlRvcEZyYW1lKHRvcEZyYW1lKSkpe1xuICAgICAgICAgICAgaWYocHJldkxpbmU9bGFzdExpbmVJbmNsdWRlWCh0b3BGcmFtZSx4KSl7XG4gICAgICAgICAgICAgICAgLy90aGVuIGFyb3VuZCBpbiB0aGUgbGluZVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyb3VuZEluQmxvY2tMaW5lKHt4LHl9LHByZXZMaW5lLCB0b3BGcmFtZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFxuXHRleHRlbmRXb3JkKGlkLGF0KXtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoPXRoaXMuZ2V0Q29tcG9zZXIoaWQpLmNsb3Nlc3QoXCJwYXJhZ3JhcGhcIilcbiAgICAgICAgaWYoIXBhcmFncmFwaClcbiAgICAgICAgICAgIHJldHVybiB7fVxuXHRcdGNvbnN0IGF0b209cGFyYWdyYXBoLmF0b21zLmZpbmQoYT0+e1xuXHRcdFx0Y29uc3QgZm91bmQ9bmV3IFJlYWN0UXVlcnkoYSkuZmluZEZpcnN0KCh7cHJvcHM6e1wiZGF0YS1jb250ZW50XCI6eGlkLCBcImRhdGEtZW5kYXRcIjplbmQ9MH19KT0+e1xuXHRcdFx0XHRyZXR1cm4gKHhpZD09aWQgJiYgZW5kPj1hdCl8fHVuZGVmaW5lZFxuXHRcdFx0fSlcblx0XHRcdHJldHVybiBmb3VuZC5sZW5ndGg+MFxuXHRcdH0pXG5cdFx0aWYoYXRvbSl7XG5cdFx0XHRjb25zdCB0YXJnZXQ9bmV3IFJlYWN0UXVlcnkoYXRvbSlcblx0XHRcdGNvbnN0IGZpcnN0PXRhcmdldC5maW5kRmlyc3QoYFtkYXRhLXR5cGU9XCJ0ZXh0XCJdYClcblx0XHRcdGlmKGZpcnN0Lmxlbmd0aCl7XG5cdFx0XHRcdGNvbnN0IGxhc3Q9dGFyZ2V0LmZpbmRMYXN0KGBbZGF0YS10eXBlPVwidGV4dFwiXWApXG5cdFx0XHRcdGlmKGxhc3QubGVuZ3RoKXtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0c3RhcnQ6e1xuXHRcdFx0XHRcdFx0XHRpZDpmaXJzdC5hdHRyKCdkYXRhLWNvbnRlbnQnKSxcblx0XHRcdFx0XHRcdFx0YXQ6cGFyc2VJbnQoZmlyc3QuYXR0cignZGF0YS1lbmRhdCcpKS1maXJzdC5hdHRyKFwiY2hpbGRyZW5cIikubGVuZ3RoXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZW5kOntcblx0XHRcdFx0XHRcdFx0aWQ6bGFzdC5hdHRyKCdkYXRhLWNvbnRlbnQnKSxcblx0XHRcdFx0XHRcdFx0YXQ6cGFyc2VJbnQobGFzdC5hdHRyKCdkYXRhLWVuZGF0JykpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7fVxuXHR9XG59KSIsImltcG9ydCBSZWFjdFBvc2l0aW9uaW5nIGZyb20gXCIuL3JlYWN0LXBvc2l0aW9uaW5nXCJcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3RQb3NpdGlvbmluZyIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgeyBzZXREaXNwbGF5TmFtZSwgY29tcG9zZSwgZ2V0Q29udGV4dCB9IGZyb20gXCJyZWNvbXBvc2VcIlxuaW1wb3J0IFdheXBvaW50IGZyb20gXCJyZWFjdC13YXlwb2ludFwiXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIGNvbm5lY3QgfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uL2dyb3VwXCJcblxuZXhwb3J0IGRlZmF1bHQgY29tcG9zZShcbiAgICBzZXREaXNwbGF5TmFtZShcIkNvbXBvc2VNb3JlVHJpZ2dlclwiKSwgXG4gICAgY29ubmVjdChzdGF0ZSA9PiAoeyBzZWxlY3Rpb246IGdldFNlbGVjdGlvbihzdGF0ZSkgfSkpLFxuKShjbGFzcyBDb21wb3NlTW9yZVRyaWdnZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgICAgIHNlbGVjdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgICAgZ2V0Q29tcG9zZWRZOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgaXNTZWxlY3Rpb25Db21wb3NlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGNvbXBvc2U0U2Nyb2xsOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgY29tcG9zZTRTZWxlY3Rpb246IFByb3BUeXBlcy5mdW5jLFxuICAgIH1cbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgZGVidWc6IFByb3BUeXBlcy5ib29sLFxuICAgIH1cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUoeyBzZWxlY3Rpb24sIGlzU2VsZWN0aW9uQ29tcG9zZWQsIGNvbXBvc2U0U2VsZWN0aW9uIH0pIHtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkNvbXBvc2VkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIGNvbXBvc2U0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyBjb21wb3NlNFNjcm9sbCwgZ2V0Q29tcG9zZWRZLCBkZWJ1ZyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgeSA9IGdldENvbXBvc2VkWSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFdheXBvaW50IG9uRW50ZXI9eygpID0+IGNvbXBvc2U0U2Nyb2xsKHkpfT5cbiAgICAgICAgICAgICAgICA8R3JvdXAgeT17eSAtIDEwMH0+XG4gICAgICAgICAgICAgICAgICAgIDxsaW5lIGNsYXNzTmFtZT1cImNvbXBvc2VUcmlnZ2VyXCIgeDE9XCIwXCIgeTE9XCIwXCIgeDI9XCIyXCIgeTI9XCIwXCIgc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlPXtkZWJ1ZyA/IFwicmVkXCIgOiBcInRyYW5zcGFyZW50XCJ9IC8+XG4gICAgICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgIDwvV2F5cG9pbnQ+XG4gICAgICAgICk7XG4gICAgfVxufSlcbiIsImltcG9ydCBSZWFjdCx7RnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5cbmV4cG9ydCBkZWZhdWx0ICgpPT4oXG4gICAgPEZyYWdtZW50PlxuICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgIDxUYWJsZUFkZGVyLz5cbiAgICAgICAgICAgIDxSb3RhdG9yLz5cbiAgICAgICAgPC9kZWZzPlxuICAgIDwvRnJhZ21lbnQ+XG4pXG5cbmNvbnN0IFRhYmxlQWRkZXI9KCk9PihcbiAgICA8cGF0aCBpZD1cInRhYmxlLmFkZGVyXCJcbiAgICAgICAgd2lkdGg9ezE0fVxuICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICBzdHJva2VXaWR0aD17MX1cbiAgICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgZD1cIk04LDloOE0xMiw1djggTTEyLDJDOC4xMywyLDUsNS4xMyw1LDljMCw1LjI1LDcsMTMsNywxM3M3LTcuNzUsNy0xM0MxOSw1LjEzLDE1Ljg3LDIsMTIsMnpcIlxuICAgICAgICAvPlxuKVxuXG5jb25zdCBSb3RhdG9yPSgpPT4oXG4gICAgPHN2ZyBpZD1cInJvdGF0b3JcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9ezI0fSBoZWlnaHQ9ezI0fT5cbiAgICAgICAgPGNpcmNsZSBjeD17MTJ9IGN5PXsxMn0gcj17MTV9XG4gICAgICAgICAgICBzdHJva2U9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBmaWxsT3BhY2l0eT17MC4wMX1cbiAgICAgICAgICAgIGN1cnNvcj1cInBvaW50ZXJcIi8+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6XCIvPlxuICAgIDwvc3ZnPlxuKSIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCxGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtBQ1RJT04sIEN1cnNvciwgU2VsZWN0aW9uLENvbnRlbnRRdWVyeSwgZ2V0U2VsZWN0aW9ufSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCBDYW52YXMgZnJvbSBcIi4uL2NhbnZhc1wiXG5pbXBvcnQgU2VsZWN0aW9uU2hhcGUgZnJvbSBcIi4vc2VsZWN0aW9uLXNoYXBlXCJcbmltcG9ydCBDdXJzb3JTaGFwZSBmcm9tIFwiLi9jdXJzb3Itc2hhcGVcIlxuaW1wb3J0IFdoZW5TZWxlY3Rpb25DaGFuZ2VOb3RpZmllciBmcm9tIFwiLi93aGVuLXNlbGVjdGlvbi1jaGFuZ2Utbm90aWZpZXJcIlxuaW1wb3J0IFBvc2l0aW9uaW5nIGZyb20gXCIuL3Bvc2l0aW9uaW5nXCJcbmltcG9ydCBDb21wb3NlTW9yZVRyaWdnZXIgZnJvbSBcIi4vY29tcG9zZS1tb3JlLXRyaWdnZXJcIlxuaW1wb3J0IERlZmluZVNoYXBlcyBmcm9tIFwiLi9kZWZpbmUtc2hhcGVzXCJcblxuLyoqXG4gKiBtdXN0IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBcbiAqIDEuIGZvciBQb3NpdGlvbmluZzogcGFnZXMsIGdldENvbXBvc2VyLCBnZXRDb250ZW50LCBhc0NhbnZhc1BvaW50LCBhc1ZpZXdwb3J0UG9pbnQsIHBhZ2VYWShJKVxuICogMi4gZm9yIFJlc3BvbnNpYmxlIEV2ZW50czogXG4gKi9cbmNsYXNzIFJlc3BvbnNpYmxlIGV4dGVuZHMgQ29tcG9uZW50e1xuICAgIHN0YXRpYyBkaXNwbGF5TmFtZT1cInJlc3BvbnNpYmxlLWNvbXBvc2VkLWRvY3VtZW50LWRlZmF1bHQtY2FudmFzXCJcbiAgICBzdGF0aWMgQ2FudmFzPUNhbnZhc1xuICAgIHN0YXRpYyBwcm9wVHlwZXM9e1xuICAgICAgICBwYWdlR2FwOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBzY3JlZW5CdWZmZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIHNjYWxlOiBQcm9wVHlwZXMubnVtYmVyLCAgXG5cdFx0dmlld3BvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgICAgICBoZWlnaHQ6UHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgICAgIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICAgICAgbm9kZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRWxlbWVudCksXG5cdFx0fSksICAgICAgICBcbiAgICAgICAgZG9jdW1lbnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuXG4gICAgc3RhdGljIGRlZmF1bHRQcm9wcz17XG5cdFx0cGFnZUdhcDoxMixcbiAgICAgICAgc2NyZWVuQnVmZmVyOiAxLFxuICAgICAgICBzY2FsZToxLFxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcbiAgICAgICAgb25Db250ZXh0TWVudTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGFjdGl2ZURvY1N0b3JlOiBQcm9wVHlwZXMuYW55LFxuICAgIH1cblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG4gICAgICAgIHBvc2l0aW9uaW5nOlByb3BUeXBlcy5vYmplY3QsXG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2RvY3VtZW50LC4uLm1lfSl7XG4gICAgICAgIGNvbnN0IHtwcm9wczp7ZWRpdGFibGUsY2FudmFzSWQsY29udGVudCx2aWV3cG9ydD1tZS52aWV3cG9ydCxzY3JlZW5CdWZmZXI9bWUuc2NyZWVuQnVmZmVyLH0sc3RhdGU6e3k9MH19PWRvY3VtZW50XG4gICAgICAgIHJldHVybiB7Li4uQ2FudmFzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyguLi5hcmd1bWVudHMpLCBlZGl0YWJsZSxjYW52YXNJZCxjb250ZW50LHZpZXdwb3J0LHNjcmVlbkJ1ZmZlcixjb21wb3NlZDRZOnl9XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlPXt9XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9zZXI9dGhpcy5nZXRDb21wb3Nlci5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuZ2V0Q29udGVudD10aGlzLmdldENvbnRlbnQuYmluZCh0aGlzKVxuICAgICAgICB0aGlzLnBvc2l0aW9uaW5nPW5ldyBQb3NpdGlvbmluZyh0aGlzKVxuICAgIH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9zaXRpb25pbmc6dGhpcy5wb3NpdGlvbmluZ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqdGhlIGZvbGxvd2luZyBBUEkgbXVzdCBiZSBwcm92aWRlZCB0byBQb3NpdGlvbmluZyAqL1xuICAgIGdldCBwYWdlcygpe1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5wYWdlc1xuICAgIH1cblxuICAgIGdldENvbXBvc2VyKGlkKXtcblx0XHRyZXR1cm4gdGhpcy5wcm9wcy5kb2N1bWVudC5nZXRDb21wb3NlcihpZClcblx0fVxuXG5cdGdldENvbnRlbnQoaWQpe1xuICAgICAgICByZXR1cm4gQ29udGVudFF1ZXJ5LmZyb21Db250ZW50KHRoaXMuc3RhdGUuY29udGVudCwgIGlkID8gYCMke2lkfWAgIDogdW5kZWZpbmVkKVxuICAgIH1cbiAgICBcbiAgICBhc0NhbnZhc1BvaW50KHtsZWZ0LHRvcH0pe1xuICAgICAgICBjb25zdCBwb2ludD10aGlzLmNhbnZhcy5jcmVhdGVTVkdQb2ludCgpXG4gICAgICAgIHBvaW50Lng9bGVmdCxwb2ludC55PXRvcFxuICAgICAgICBjb25zdCB7eCx5fT1wb2ludC5tYXRyaXhUcmFuc2Zvcm0odGhpcy5jYW52YXMuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKVxuICAgICAgICByZXR1cm4ge3gsIHl9XG4gICAgfVxuXG4gICAgYXNWaWV3cG9ydFBvaW50KHt4LHl9KXtcbiAgICAgICAgbGV0IHBvaW50PXRoaXMuY2FudmFzLmNyZWF0ZVNWR1BvaW50KClcbiAgICAgICAgcG9pbnQueD14LHBvaW50Lnk9eVxuICAgICAgICBsZXQgbG9jYXRpb249cG9pbnQubWF0cml4VHJhbnNmb3JtKHRoaXMuY2FudmFzLmdldFNjcmVlbkNUTSgpKVxuICAgICAgICByZXR1cm4ge2xlZnQ6bG9jYXRpb24ueCwgdG9wOmxvY2F0aW9uLnl9XG4gICAgfVxuICAgIFxuICAgIHBhZ2VYWShJPTApe1xuICAgICAgICBjb25zdCByZWN0PXRoaXMuY29uc3RydWN0b3IuQ2FudmFzLnBhZ2VSZWN0KEksdGhpcy5jYW52YXMpXG4gICAgICAgIHJldHVybiAhcmVjdCA/IHt4OjAseTowfSA6IHRoaXMuYXNDYW52YXNQb2ludChyZWN0KVxuICAgIH1cbiAgICAvLy8vRW5kIFBvc2l0aW9uaW5nIEFQSS9cbiAgICBcbiAgICBnZXQgZGlzcGF0Y2goKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5hY3RpdmVEb2NTdG9yZS5kaXNwYXRjaFxuICAgIH1cblxuICAgIGdldCBzZWxlY3Rpb25DaGFuZ2VOb3RpZmllcigpe1xuICAgICAgICBpZih0aGlzLnJlZnMuc2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLmdldFdyYXBwZWRJbnN0YW5jZSgpXG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGluZygpe1xuICAgICAgICBpZih0aGlzLnJlZnMuc2VsZWN0aW5nKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5zZWxlY3RpbmcuZ2V0V3JhcHBlZEluc3RhbmNlKClcbiAgICB9XG5cblx0Z2V0IHNlbGVjdGlvbigpe1xuICAgICAgICByZXR1cm4gZ2V0U2VsZWN0aW9uKHRoaXMuY29udGV4dC5hY3RpdmVEb2NTdG9yZS5nZXRTdGF0ZSgpKVxuXHR9XG5cblx0Z2V0IGN1cnNvcigpe1xuXHRcdGNvbnN0IHtjdXJzb3JBdCwgLi4uYX09dGhpcy5zZWxlY3Rpb25cbiAgICAgICAgcmV0dXJuIHsuLi5hW2N1cnNvckF0XX1cbiAgICB9XG5cbiAgICBfX2NvbXBvc2VkWSgpe1xuICAgICAgICBjb25zdCB7cGFnZXMsIHBhZ2VHYXB9PXRoaXMuc3RhdGVcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuQ2FudmFzLmNvbXBvc2VkWShwYWdlcywgcGFnZUdhcClcbiAgICB9XG4gICAgXG4gICAgLy9wcm92aWRlIHRvIGRvY3VtZW50IHRvIHF1ZXJ5IFxuICAgIGF2YWlsYWJsZUJsb2NrU2l6ZSgpe1xuICAgICAgICBjb25zdCB7c2NhbGUsIGNvbXBvc2VkNFk9MCxzY3JlZW5CdWZmZXIsdmlld3BvcnQ6e2hlaWdodCxub2RlOntzY3JvbGxUb3B9fX09dGhpcy5zdGF0ZVxuICAgICAgICBjb25zdCBjb21wb3NlZFk9dGhpcy5fX2NvbXBvc2VkWSgpICogc2NhbGVcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsKE1hdGgubWF4KHNjcm9sbFRvcCxjb21wb3NlZDRZKStoZWlnaHQrc2NyZWVuQnVmZmVyKmhlaWdodCktY29tcG9zZWRZKVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2NoaWxkcmVuLGRvY3VtZW50fSwgc3RhdGU6e2VkaXRhYmxlPXRydWUsc2NhbGUscGFnZUdhcCxwYWdlcyxwcmVjaXNpb259fT10aGlzXG4gICAgICAgIGNvbnN0IG5vQ3Vyc29yPWVkaXRhYmxlICYmIGVkaXRhYmxlLmN1cnNvcj09PWZhbHNlXG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlcnM9IW5vQ3Vyc29yID8gdGhpcy5ldmVudEhhbmRsZXJzICA6IHt9XG4gICAgICAgIGNvbnN0IG5vdGlmeVNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyPWNhbGxiYWNrPT57XG5cdFx0XHQhdGhpcy5zZWxlY3Rpb25DaGFuZ2VOb3RpZmllciA/IGNhbGxiYWNrKCkgOiB0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLnNldFN0YXRlKHtjb21wb3NlZENvbnRlbnQ6bnVsbH0sY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQ2FudmFzPXRoaXMuY29uc3RydWN0b3IuQ2FudmFzXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q2FudmFzIFxuICAgICAgICAgICAgICAgIHsuLi57c2NhbGUscGFnZUdhcCxwYWdlcyxwcmVjaXNpb24sZG9jdW1lbnQscGFwZXI6dHJ1ZX19XG4gICAgICAgICAgICAgICAgaW5uZXJSZWY9e2E9Pnt0aGlzLmNhbnZhcz1hfX0gXG4gICAgICAgICAgICAgICAgey4uLmV2ZW50SGFuZGxlcnN9PlxuICAgICAgICAgICAgICAgIDxDb21wb3NlTW9yZVRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9zZWRZPXsoKT0+dGhpcy5fX2NvbXBvc2VkWSgpfVxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGlvbkNvbXBvc2VkPXtzZWxlY3Rpb249PmRvY3VtZW50LmlzU2VsZWN0aW9uQ29tcG9zZWQoc2VsZWN0aW9uKX1cbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZTRTZWxlY3Rpb249e2E9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFkb2N1bWVudC5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlTm90aWZpZXIoc2VsZWN0aW9uPT5kb2N1bWVudC5jb21wb3NlNFNlbGVjdGlvbihzZWxlY3Rpb24pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlNFNjcm9sbD17eT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWRvY3VtZW50LmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTZWxlY3Rpb25DaGFuZ2VOb3RpZmllcigoKT0+ZG9jdW1lbnQuY29tcG9zZTRTY3JvbGwoeSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz4gICAgXG4gICAgICAgICAgICAgICAgPERlZmluZVNoYXBlcy8+XG5cdFx0XHRcdDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuXHRcdFx0XHRcdDxDdXJzb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNzplPT50aGlzLm9uS2V5QXJyb3dMZWZ0KGUpLC8vbW92ZSBsZWZ0XG5cdFx0XHQgICAgICAgICAgICAgICAgMzk6ZT0+dGhpcy5vbktleUFycm93UmlnaHQoZSksLy9tb3ZlIHJpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMzg6ZT0+dGhpcy5vbktleUFycm93VXAoZSksLy9tb3ZlIHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA6ZT0+dGhpcy5vbktleUFycm93RG93bihlKSwvL21vdmUgZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q3Vyc29yU2hhcGUgc2Nyb2xsTm9kZUludG9WaWV3PXtub2RlPT50aGlzLnNjcm9sbE5vZGVJbnRvVmlldyhub2RlKX0vPlxuICAgICAgICAgICAgICAgICAgICA8L0N1cnNvcj5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdGlvbiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0aW9uU2hhcGUgcmVmPXtcInNlbGVjdGluZ1wifS8+XG4gICAgICAgICAgICAgICAgICAgIDwvU2VsZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8V2hlblNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyIGNhbnZhcz17dGhpc30gcmVmPVwic2VsZWN0aW9uQ2hhbmdlTm90aWZpZXJcIi8+XG5cdFx0XHRcdDwvRnJhZ21lbnQ+XG4gICAgICAgICAgICA8L0NhbnZhcz5cbiAgICAgICAgKVxuICAgIH1cblxuICAgIF9fc3RhdGlzdGljcygpe1xuICAgICAgICBjb25zdCB7cHJvcHM6e2RvY3VtZW50fX09dGhpc1xuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TdGF0aXN0aWNzKHtcblx0XHRcdHBhZ2VzOnRoaXMucGFnZXMubGVuZ3RoLFxuXHRcdFx0YWxsQ29tcG9zZWQ6ZG9jdW1lbnQuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKCksXG5cdFx0XHR3b3JkczogQXJyYXkuZnJvbShkb2N1bWVudC5jb21wb3NlcnMudmFsdWVzKCkpLmZpbHRlcihhPT4hIWEpXG5cdFx0XHRcdC5yZWR1Y2UoKHdvcmRzLGEpPT53b3Jkcys9KGEuYXRvbXMgPyBhLmF0b21zLmxlbmd0aCA6IDApLDApXG5cdFx0fSkpXG4gICAgfVxuXG4gICAgY29tcG9uZW50RGlkVXBkYXRlKCl7XG4gICAgICAgIHRoaXMuX19zdGF0aXN0aWNzKClcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VOb3RpZmllciAmJiB0aGlzLnNlbGVjdGlvbkNoYW5nZU5vdGlmaWVyLnNldFN0YXRlKHtjb21wb3NlZENvbnRlbnQ6dGhpcy5zdGF0ZS5jb250ZW50fSlcbiAgICB9XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpe1xuICAgICAgICB0aGlzLmFjdGl2ZSgpXG4gICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlKClcbiAgICB9XG5cbiAgICBhY3RpdmUoKXtcblx0XHR0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQUNUSVZFKHRoaXMuc3RhdGUuY2FudmFzSWQpKVxuICAgIH0gICAgXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50UmVzcG9uc2libGUgZXh0ZW5kcyBSZXNwb25zaWJsZXtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycz1cIm9uQ2xpY2ssb25Eb3VibGVDbGljayxvbkNvbnRleHRNZW51LG9uTW91c2VEb3duLG9uTW91c2VNb3ZlLG9uTW91c2VVcFwiLnNwbGl0KFwiLFwiKVxuICAgICAgICAgICAgLnJlZHVjZSgoaGFuZGxlcnMsa2V5KT0+e1xuICAgICAgICAgICAgICAgIGlmKGtleSBpbiB0aGlzKXtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNba2V5XT10aGlzW2tleV09dGhpc1trZXldLmJpbmQodGhpcylcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGByZXNwb25zaWJsZSBjYW52YXMgZG9lc24ndCBpbXBsZW1lbnRlZCAke2tleX0gZXZlbnRgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNcbiAgICAgICAgICAgIH0se30pXG4gICAgICAgIHRoaXMuX19tb3VzZURvd25GbGFnPXt9XG4gICAgfVxuXG4gICAgX19vbkNsaWNrKHtzaGlmdEtleTpzZWxlY3RpbmcsIGNsaWVudFg6bGVmdCxjbGllbnRZOnRvcH0sIGRvdWJsZUNsaWNrZWQ9ZmFsc2Upe1xuXHRcdGNvbnN0IHtpZCxhdH09dGhpcy5wb3NpdGlvbmluZy5hcm91bmQobGVmdCwgdG9wKVxuXHRcdGlmKGlkKXtcbiAgICAgICAgICAgIGlmKGF0PT11bmRlZmluZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TRUxFQ1QoaWQsMCxpZCwxKSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgIFx0XHRcdGlmKCFzZWxlY3Rpbmcpe1xuICAgICAgICAgICAgICAgICAgICBpZihkb3VibGVDbGlja2VkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGFydCxlbmR9PXRoaXMucG9zaXRpb25pbmcuZXh0ZW5kV29yZChpZCxhdClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0ICYmIGVuZCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChzdGFydC5pZCxzdGFydC5hdCwgZW5kLmlkLCBlbmQuYXQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgIFx0XHRcdFx0dGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgIFx0XHRcdH1lbHNle1xuICAgIFx0XHRcdFx0bGV0IHtlbmR9PXRoaXMuc2VsZWN0aW9uXG4gICAgXHRcdFx0XHRsZXQge2xlZnQsdG9wfT10aGlzLnBvc2l0aW9uaW5nLnBvc2l0aW9uKGlkLGF0KVxuICAgIFx0XHRcdFx0bGV0IHtsZWZ0OmxlZnQxLHRvcDp0b3AxfT10aGlzLnBvc2l0aW9uaW5nLnBvc2l0aW9uKGVuZC5pZCxlbmQuYXQpXG4gICAgXHRcdFx0XHRpZih0b3A8dG9wMSB8fCAodG9wPT10b3AxICYmIGxlZnQ8PWxlZnQxKSl7XG4gICAgXHRcdFx0XHRcdHRoaXMuZGlzcGF0Y2goQUNUSU9OLlNlbGVjdGlvbi5TVEFSVF9BVChpZCxhdCkpXG4gICAgXHRcdFx0XHR9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGE9dGhpcy5wb3NpdGlvbmluZy5ub3JtYWxpemVTZWxlY3Rpb24oYS5lbmQse2lkLGF0fSlcbiAgICBcdFx0XHRcdFx0dGhpcy5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChhLnN0YXJ0LmlkLGEuc3RhcnQuYXQsIGEuZW5kLmlkLCBhLmVuZC5hdCkpXG4gICAgXHRcdFx0XHR9XG4gICAgXHRcdFx0fVxuICAgICAgICAgICAgfVxuXHRcdH1cblxuICAgICAgICB0aGlzLmFjdGl2ZSgpXG4gICAgfVxuXG4gICAgX19vbktleUFycm93KGlkLGF0LHNlbGVjdGluZyl7XG4gICAgICAgIGlmKCFzZWxlY3Rpbmcpe1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaChBQ1RJT04uQ3Vyc29yLkFUKGlkLGF0KSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBjb25zdCB7Y3Vyc29yQXQsLi4uYX09dGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIGFbY3Vyc29yQXRdPXtpZCxhdH1cbiAgICAgICAgICAgIGNvbnN0IHtzdGFydCxlbmR9PXRoaXMucG9zaXRpb25pbmcubm9ybWFsaXplU2VsZWN0aW9uKGEuc3RhcnQsYS5lbmQpXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKHN0YXJ0LmlkLCBzdGFydC5hdCwgZW5kLmlkLGVuZC5hdCkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfX3Nob3VsZElnbm9yZU1vdXNlRG93bkV2ZW50KHtjbGllbnRYLGNsaWVudFl9KXtcbiAgICAgICAgcmV0dXJuIGNsaWVudFg9PXRoaXMuX19tb3VzZURvd25GbGFnLmNsaWVudFggJiYgY2xpZW50WT09dGhpcy5fX21vdXNlRG93bkZsYWcuY2xpZW50WVxuICAgIH1cblxuICAgIG9uQ2xpY2soZSl7XG4gICAgICAgIGlmKCF0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZCl7XG4gICAgICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZy5zZWxlY3RlZD1mYWxzZVxuICAgICAgICAgICAgdGhpcy5fX29uQ2xpY2soZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGV4dE1lbnUoZSl7XG4gICAgICAgIGNvbnN0IHtjb250ZXh0OntvbkNvbnRleHRNZW51fX09dGhpc1xuICAgICAgICB0aGlzLl9fb25DbGljayhlKVxuICAgICAgICBvbkNvbnRleHRNZW51ICYmIG9uQ29udGV4dE1lbnUoZSlcbiAgICB9XG5cbiAgICBvbkRvdWJsZUNsaWNrKGUpe1xuICAgICAgICBpZighdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQpe1xuICAgICAgICAgICAgdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQ9ZmFsc2VcbiAgICAgICAgICAgIHRoaXMuX19vbkNsaWNrKGUsdHJ1ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW91c2VEb3duKHtjbGllbnRYLGNsaWVudFl9KXtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdmcgbW91c2UgZG93blwiKVxuICAgICAgICB0aGlzLl9fbW91c2VEb3duRmxhZz17Y2xpZW50WCxjbGllbnRZfVxuICAgIH1cblxuICAgIG9uTW91c2VNb3ZlKGUpe1xuICAgICAgICBpZighKGUuYnV0dG9ucyYweDEpKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuX19zaG91bGRJZ25vcmVNb3VzZURvd25FdmVudChlKSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtpZCxhdH09dGhpcy5wb3NpdGlvbmluZy5hcm91bmQoZS5jbGllbnRYLGUuY2xpZW50WSlcbiAgICAgICAgaWYoaWQpe1xuICAgICAgICAgICAgY29uc3QgZW5kPXtpZCxhdH1cbiAgICAgICAgICAgIGxldCB7c3RhcnQ9ZW5kfT10aGlzLnNlbGVjdGluZy5zdGF0ZVxuICAgICAgICAgICAgY29uc3QgcmVjdHM9c3RhcnQ9PWVuZCA/IFtdIDogdGhpcy5wb3NpdGlvbmluZy5nZXRSYW5nZVJlY3RzKHN0YXJ0LCBlbmQpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGluZy5zZXRTdGF0ZSh7c3RhcnQ6c3RhcnR8fGVuZCwgZW5kLCByZWN0cywgc2VsZWN0aW5nOnRydWV9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb3VzZVVwKGUpe1xuICAgICAgICBpZih0aGlzLl9fc2hvdWxkSWdub3JlTW91c2VEb3duRXZlbnQoZSkpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHtzdGFydCxlbmR9PXRoaXMuc2VsZWN0aW5nLnN0YXRlXG4gICAgICAgIGlmKHN0YXJ0ICYmIGVuZCl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGluZy5zZXRTdGF0ZSh7c3RhcnQ6dW5kZWZpbmVkLCBlbmQ6dW5kZWZpbmVkLCByZWN0czp1bmRlZmluZWQsc2VsZWN0aW5nOmZhbHNlfSlcbiAgICAgICAgICAgIDsoe3N0YXJ0LGVuZH09dGhpcy5wb3NpdGlvbmluZy5ub3JtYWxpemVTZWxlY3Rpb24oc3RhcnQsZW5kKSk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uU0VMRUNUKHN0YXJ0LmlkLHN0YXJ0LmF0LGVuZC5pZCxlbmQuYXQpKVxuICAgICAgICAgICAgdGhpcy5fX21vdXNlRG93bkZsYWcuc2VsZWN0ZWQ9dHJ1ZVxuICAgICAgICB9XG4gICAgfVxuXG5cdG9uS2V5QXJyb3dVcCh7c2hpZnRLZXk6c2VsZWN0aW5nfSl7XG4gICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuXHRcdGNvbnN0IHtpZCwgYXR9PXRoaXMucG9zaXRpb25pbmcucHJldkxpbmUoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgaWYoaWQpe1xuICAgIFx0XHR0aGlzLl9fb25LZXlBcnJvdyhpZCxhdCxzZWxlY3RpbmcpXG4gICAgICAgIH1cblx0fVxuXG5cdG9uS2V5QXJyb3dEb3duKHtzaGlmdEtleTpzZWxlY3Rpbmd9KXtcblx0XHRjb25zdCBjdXJzb3I9dGhpcy5jdXJzb3Jcblx0XHRjb25zdCB7aWQsIGF0fT10aGlzLnBvc2l0aW9uaW5nLm5leHRMaW5lKGN1cnNvci5pZCxjdXJzb3IuYXQpXG4gICAgICAgIGlmKGlkKXtcbiAgICAgICAgICAgIHRoaXMuX19vbktleUFycm93KGlkLGF0LHNlbGVjdGluZylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uS2V5QXJyb3dMZWZ0KGUpe1xuICAgICAgICBjb25zdCB7bWV0YUtleSxjdHJsS2V5LHNoaWZ0S2V5OnNlbGVjdGluZ309ZVxuICAgICAgICBpZihtZXRhS2V5fHxjdHJsS2V5KXtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQ9dGhpcy5wb3NpdGlvbmluZy5wb3NpdGlvblRvTGluZVN0YXJ0KGN1cnNvci5pZCxjdXJzb3IuYXQpXG4gICAgICAgICAgICBpZihjdXJzb3IuaWQhPXN0YXJ0LmlkIHx8IGN1cnNvci5hdCE9c3RhcnQuYXQpe1xuICAgICAgICAgICAgICAgIHRoaXMuX19vbktleUFycm93KHN0YXJ0LmlkLCBzdGFydC5hdCwgc2VsZWN0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuQkFDS1dBUkQoZSkpXG4gICAgfVxuXG4gICAgb25LZXlBcnJvd1JpZ2h0KGUpe1xuICAgICAgICBjb25zdCB7bWV0YUtleSxjdHJsS2V5LHNoaWZ0S2V5OnNlbGVjdGluZ309ZVxuICAgICAgICBpZihtZXRhS2V5fHxjdHJsS2V5KXtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvcj10aGlzLmN1cnNvclxuICAgICAgICAgICAgY29uc3QgZW5kPXRoaXMucG9zaXRpb25pbmcucG9zaXRpb25Ub0xpbmVFbmQoY3Vyc29yLmlkLGN1cnNvci5hdClcbiAgICAgICAgICAgIGlmKGN1cnNvci5pZCE9ZW5kLmlkIHx8IGN1cnNvci5hdCE9ZW5kLmF0KXtcbiAgICAgICAgICAgICAgICB0aGlzLl9fb25LZXlBcnJvdyhlbmQuaWQsIGVuZC5hdCwgc2VsZWN0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BhdGNoKEFDVElPTi5DdXJzb3IuRk9SV0FSRChlKSlcbiAgICB9XG59XG5cblxuIiwiaW1wb3J0IFJlYWN0LCB7RnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCB7SGFzQ2hpbGQsIExvY2F0YWJsZSxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IHtkb20sZ2V0U2VsZWN0aW9ufSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgVGVtcGxhdGUgZnJvbSBcIi4vdGVtcGxhdGVcIlxuaW1wb3J0IHtDYW52YXN9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5pbXBvcnQgUmVzcG9uc2libGUgZnJvbSBcIi4uL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhc1wiXG5cblxuY29uc3QgU3VwZXI9TG9jYXRhYmxlLkxvY2F0b3JpemUoSGFzQ2hpbGQoZG9tLkRvY3VtZW50KSlcblxuY2xhc3MgRG9jdW1lbnQgZXh0ZW5kcyBTdXBlcntcbiAgICBzdGF0aWMgcHJvcFR5cGVzPXtcbiAgICAgICAgLi4uU3VwZXIucHJvdG90eXBlLFxuICAgICAgICBjYW52YXM6IFByb3BUeXBlcy5ub2RlLFxuICAgIH1cbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzPXtcbiAgICAgICAgLi4uU3VwZXIuZGVmYXVsdFByb3BzLFxuICAgICAgICBjYW52YXM6PENhbnZhcy8+LFxuICAgIH1cblxuICAgIHN0YXRpYyBjb250ZXh0VHlwZXM9e1xuICAgICAgICAuLi5TdXBlci5jb250ZXh0VHlwZXMsXG4gICAgICAgIE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuICAgIH1cblxuICAgIHN0YXRpYyBjaGlsZENvbnRleHRUeXBlcz17XG4gICAgICAgIC4uLlN1cGVyLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICBNZWFzdXJlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgZ2V0Q29tcG9zZWRUZW1wbGF0ZTpQcm9wVHlwZXMuZnVuYyxcbiAgICAgICAgcHJldkxheW91dDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICAgIGVkaXRhYmxlOiBQcm9wVHlwZXMuYW55LFxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcbiAgICAgICAgdGhpcy5jb21wdXRlZC50ZW1wbGF0ZXM9W11cbiAgICB9XG5cbiAgICBnZXQgcGFnZXMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcHV0ZWQuY29tcG9zZWRcbiAgICB9XG5cbiAgICBnZXRDb21wb3NlZCgpe1xuICAgICAgICByZXR1cm4gPENhbnZhcyBkb2N1bWVudD17dGhpc30vPlxuICAgIH1cblxuICAgIGdldENoaWxkQ29udGV4dCgpe1xuICAgICAgICBjb25zdCBzZWxmPXRoaXNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLmdldENoaWxkQ29udGV4dCgpLFxuICAgICAgICAgICAgTWVhc3VyZTogdGhpcy5nZXRNZWFzdXJlKCksXG4gICAgICAgICAgICBnZXRDb21wb3NlZFRlbXBsYXRlKGlkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21wdXRlZC50ZW1wbGF0ZXMuZmluZChhPT5hLnByb3BzLmlkPT09aWQpfHx7cHJvcHM6e2NoaWxkcmVuOm51bGx9fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZMYXlvdXQocmVmKXtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlcz1zZWxmLmNvbXB1dGVkLmNvbXBvc2VkXG4gICAgICAgICAgICAgICAgY29uc3QgaT1wYWdlcy5pbmRleE9mKHJlZilcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFnZXNbaS0xXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVkaXRhYmxlOnRoaXMuc3RhdGUmJnRoaXMuc3RhdGUuZWRpdGFibGUsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNZWFzdXJlPW1lbW9pemUoKCk9PntcbiAgICAgICAgY29uc3Qge3ByZWNpc2lvbj0xfT10aGlzLnByb3BzXG4gICAgICAgIGlmKHByZWNpc2lvbj09MSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuTWVhc3VyZVxuXG4gICAgICAgIHJldHVybiBjbGFzcyBfXyQxIGV4dGVuZHMgdGhpcy5jb250ZXh0Lk1lYXN1cmV7XG4gICAgICAgICAgICBsaW5lSGVpZ2h0KC4uLmFyZ3Mpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHtoZWlnaHQsZGVzY2VudH09c3VwZXIubGluZUhlaWdodCguLi5hcmdzKVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDpoZWlnaHQqcHJlY2lzaW9uLFxuICAgICAgICAgICAgICAgICAgICBkZXNjZW50OmRlc2NlbnQqcHJlY2lzaW9uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHJpbmdXaWR0aCguLi5hcmdzKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlY2lzaW9uKnN1cGVyLnN0cmluZ1dpZHRoKC4uLmFyZ3MpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgcmVuZGVyKCl7XG4gICAgICAgIGNvbnN0IHtjYW52YXN9PXRoaXMucHJvcHNcbiAgICAgICAgaWYoIWNhbnZhcylcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZW5kZXIoKVxuICAgICAgICBjb25zdCB7cHJvcHM6e19fc2VxdWVudGlhbENvbXBvc2U9dHJ1ZX19PWNhbnZhc1xuICAgICAgICBpZihfX3NlcXVlbnRpYWxDb21wb3NlKXtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICB7c3VwZXIucmVuZGVyKCl9XG4gICAgICAgICAgICAgICAgICAgIHtjYW52YXMgJiYgUmVhY3QuY2xvbmVFbGVtZW50KGNhbnZhcywge2RvY3VtZW50OnRoaXN9KX1cbiAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2FudmFzLCB7ZG9jdW1lbnQ6dGhpc30pXG4gICAgICAgIH1cbiAgICB9XG5cblx0YXBwZW5kQ29tcG9zZWQocGFnZSl7XG4gICAgICAgIGlmKFRlbXBsYXRlLmlzVGVtcGxhdGUocGFnZSkpe1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlZC50ZW1wbGF0ZXMucHVzaChwYWdlKVxuICAgICAgICB9ZWxzZSBpZih0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLmluZGV4T2YocGFnZSk9PS0xKXtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQuY29tcG9zZWQucHVzaChwYWdlKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgZWRpdGFibGUoRG9jdW1lbnQse2NvbnRpbnVhYmxlOnRydWV9KXtcbiAgICBzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5Eb2N1bWVudC5kZWZhdWx0UHJvcHMsXG5cdFx0Y2FudmFzOjxSZXNwb25zaWJsZS8+LFxuICAgIH1cbiAgICBcblx0c3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0Li4uRG9jdW1lbnQuY29udGV4dFR5cGVzLFxuICAgICAgICBhY3RpdmVEb2NTdG9yZTogUHJvcFR5cGVzLmFueSxcblx0fVxuXG5cdHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoe2hhc2gsdmlld3BvcnQsZWRpdGFibGU9dHJ1ZX0sc3RhdGUpe1xuXHRcdHJldHVybiB7dmlld3BvcnQsaGFzaCwgZWRpdGFibGUsIC4uLihoYXNoIT1zdGF0ZS5oYXNoICYmIHttb2RlOlwiY29udGVudFwiLHk6MH0pfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuICAgICAgICB0aGlzLnN0YXRlPXttb2RlOlwiY29udGVudFwiLCAuLi50aGlzLnN0YXRlfVxuICAgICAgICB0aGlzLmNvbXB1dGVkLnNob3VsZENvbnRpbnVlQ29tcG9zZT10cnVlLy9jYWNoZSBmb3Igc2hvdWxkQ29udGludWVDb21wb3NlXG5cdH1cbiAgICBcbiAgICBnZXQgY2FudmFzKCl7XG4gICAgICAgIGNvbnN0IHtjYW52YXM6e3R5cGU6VHlwZSxwcm9wc319PXRoaXMucHJvcHNcbiAgICAgICAgY29uc3QgY2FudmFzPW5ldyBUeXBlKHsuLi5wcm9wcyxkb2N1bWVudDp0aGlzfSlcbiAgICAgICAgY2FudmFzLnN0YXRlPVR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGNhbnZhcy5wcm9wcyxjYW52YXMuc3RhdGUpXG4gICAgICAgIHJldHVybiBjYW52YXNcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29udGludWFibGVcblx0ICogMS4gc2VsZWN0aW9uIGVuZFxuXHQgKiAyLiB2aWV3cG9ydDogdmlld3BvcnRlci5zY3JvbGxUb3Ardmlld3BvcnRlci5oZWlnaHRcbiAgICAgKiBcbiAgICAgKiBjb21wdXRlZC5zaG91bGRDb250aW51ZUNvbXBvc2UgYXMgY2FjaGUsIHNpbmNlIGZyZXF1ZW50bHkgY2FsbGVkXG4gICAgICogXG5cdCAqKi9cblx0c2hvdWxkQ29udGludWVDb21wb3NlKGNvbXBvc2VyKXtcbiAgICAgICAgaWYodGhpcy5jb21wdXRlZC5zaG91bGRDb250aW51ZUNvbXBvc2U9PT1mYWxzZSl7XG4gICAgICAgICAgICBjb21wb3NlciAmJiB0aGlzLm5vdGlmeU5vdEFsbENvbXBvc2VkKGNvbXBvc2VyKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZWRpdGFibGUpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICBjb25zdCBzZWxlY3Rpb249Z2V0U2VsZWN0aW9uKHRoaXMuY29udGV4dC5hY3RpdmVEb2NTdG9yZS5nZXRTdGF0ZSgpKVxuXHRcdGNvbnN0IHNob3VsZD10aGlzLmNhbnZhcy5hdmFpbGFibGVCbG9ja1NpemUoKSB8fCAhdGhpcy5pc1NlbGVjdGlvbkNvbXBvc2VkKHNlbGVjdGlvbilcbiAgICAgICAgaWYoIXNob3VsZCl7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkLnNob3VsZENvbnRpbnVlQ29tcG9zZT1mYWxzZVxuICAgICAgICAgICAgY29tcG9zZXIgJiYgdGhpcy5ub3RpZnlOb3RBbGxDb21wb3NlZChjb21wb3Nlcilcblx0XHR9XG5cdFx0cmV0dXJuIHNob3VsZFxuICAgIH1cbiAgICBcbiAgICBpc0F0b21Db2xsZWN0b3IoKXtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIFxuICAgIC8vbm8gY2FjaGUgb24gZG9jdW1lbnQgbGV2ZWxcbiAgICBjYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCgpe1xuICAgICAgICB0aGlzLmNvbXB1dGVkLnRlbXBsYXRlcz1bXVxuICAgICAgICB0aGlzLmNvbXB1dGVkLnNob3VsZENvbnRpbnVlQ29tcG9zZT10cnVlXG4gICAgICAgIHN1cGVyLmNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKC4uLmFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBpc1NlbGVjdGlvbkNvbXBvc2VkKHtzdGFydCxlbmR9KXtcbiAgICAgICAgY29uc3QgYWxsQ29tcG9zZWQ9aWQ9PiFpZCB8fCB0aGlzLmNvbXBvc2Vycy5oYXMoaWQpICYmIHRoaXMuZ2V0Q29tcG9zZXIoaWQpLmlzQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG5cdFx0cmV0dXJuIGFsbENvbXBvc2VkKHN0YXJ0LmlkKSAmJiBhbGxDb21wb3NlZChlbmQuaWQpXG4gICAgfVxuXG5cdGNvbXBvc2U0U2Nyb2xsKHkpe1xuXHRcdHRoaXMuc2V0U3RhdGUoe21vZGU6XCJzY3JvbGxcIix5fSlcblx0fVxuXG5cdGNvbXBvc2U0U2VsZWN0aW9uKHNlbGVjdGlvbil7XG5cdFx0dGhpcy5zZXRTdGF0ZSh7bW9kZTpcInNlbGVjdGlvblwiLHNlbGVjdGlvbn0pXG5cdH1cbn1cblxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IHtkb219IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCwgZWRpdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCBGcmFtZSBmcm9tIFwiLi9mcmFtZVwiXG5cblxuY29uc3QgU3VwZXI9SGFzUGFyZW50QW5kQ2hpbGQoZG9tLlNlY3Rpb24pXG5jbGFzcyBTZWN0aW9uIGV4dGVuZHMgU3VwZXJ7XG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdC4uLlN1cGVyLmRlZmF1bHRQcm9wcyxcblx0XHRjcmVhdGVMYXlvdXQocHJvcHMsLi4uYXJncyl7XG5cdFx0XHRyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IuTGF5b3V0KHsuLi50aGlzLnByb3BzLmxheW91dCwgLi4ucHJvcHN9LC4uLmFyZ3MpXG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGNoaWxkQ29udGV4dFR5cGVzPXtcblx0XHQuLi5TdXBlci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgcHJldkxheW91dDogUHJvcFR5cGVzLmZ1bmMsXG5cdH1cblxuXHRzdGF0aWMgTGF5b3V0PWNsYXNzIExheW91dFNlY3Rpb24gZXh0ZW5kcyBGcmFtZXtcblx0XHRzdGF0aWMgZGlzcGxheU5hbWU9XCJmcmFtZS1zZWN0aW9uXCJcblxuXHRcdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdFx0Y29uc3Qge3Byb3BzOntpLEksbWFyZ2lufX09dGhpc1xuXHRcdFx0Y29uc3QgcHJvcHM9e21hcmdpbixpLGtleTppfVxuXHRcdFx0aWYoSSE9dW5kZWZpbmVkKVxuXHRcdFx0XHRwcm9wcy5JPUlcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoc3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KCkscHJvcHMpXG5cdFx0fVxuXG5cdFx0Y2xvbmU0U3BhY2UobGF5b3V0KXtcblx0XHRcdGlmKGxheW91dC5jb250ZXh0LmZyYW1lPT10aGlzLmNvbnRleHQuZnJhbWUpXG5cdFx0XHRcdHJldHVybiB0aGlzXG5cdFx0XHRjb25zdCBjbG9uZWQ9dGhpcy5jbG9uZSh7c3BhY2U6bGF5b3V0LnByb3BzLnNwYWNlfSlcblx0XHRcdGNsb25lZC5jb250ZXh0LmZyYW1lPWxheW91dC5jb250ZXh0LmZyYW1lXG5cdFx0XHRyZXR1cm4gY2xvbmVkXG5cdFx0fVxuXHR9XG4gICAgXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0c3VwZXIoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMuY29tcHV0ZWQubmFtZWQ9e31cblx0fVxuXG5cdGdldCBpc1NlY3Rpb24oKXtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Z2V0IGN1cnJlbnQoKXtcbiAgICAgICAgaWYodGhpcy5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGg9PTApe1xuXHRcdFx0Y29uc3QgbGF5b3V0PXRoaXMuY3JlYXRlTGF5b3V0KClcblx0XHRcdGlmKGxheW91dCl7XG5cdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQucHVzaChsYXlvdXQpXG5cdFx0XHRcdHRoaXMuY29udGV4dC5wYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQobGF5b3V0KSlcblx0XHRcdH1cbiAgICAgICAgfVxuXHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkW3RoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoLTFdXG5cdH0gXG5cbiAgICBnZXRDaGlsZENvbnRleHQoKXtcbiAgICAgICAgY29uc3Qgc2VsZj10aGlzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci5nZXRDaGlsZENvbnRleHQoKSxcbiAgICAgICAgICAgIHByZXZMYXlvdXQocmVmKXtcbiAgICAgICAgICAgICAgICBjb25zdCB7Y29tcG9zZWR9PXNlbGYuY29tcHV0ZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zZWRbY29tcG9zZWQuaW5kZXhPZihyZWYpLTFdXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblx0bmFtZWQobmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQubmFtZWRbbmFtZV1cblx0fVxuXG5cblx0LyoqcGFnZSBpbmRleCwgb3IgdW5kZWZpbmVkICovXG5cdGdldCB0b3BJbmRleCgpe1xuXHRcdHZhciBjdXJyZW50PXRoaXMuY29udGV4dC5wYXJlbnRcblx0XHR3aGlsZShjdXJyZW50KXtcblx0XHRcdGlmKGN1cnJlbnQuaXNGcmFtZSB8fCBjdXJyZW50LmlzU2VjdGlvbilcblx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0aWYoIWN1cnJlbnQuY29udGV4dCB8fCAhY3VycmVudC5jb250ZXh0LnBhcmVudClcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnQuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoXG5cdFx0XHRjdXJyZW50PWN1cnJlbnQuY29udGV4dC5wYXJlbnRcblx0XHR9XG5cdH1cblxuICAgIC8qKlxuICAgICAqICoqIGNyZWF0ZSBpcyBwdXJlLCBzbyB5b3UgaGF2ZSB0byBhcHBlbmQgdG8geW91ciBjb21wb3NlZCBhbmQgcGFyZW50IG1hbnVhbGx5IGV2ZXJ5IHRpbWUgY3JlYXRlIGNhbGxlZCoqKlxuICAgICAqIGNyZWF0ZSBhIGJsb2NrIGxheW91dCBlbmdpbmUgd2l0aCBhIGVuc3VyZWQgc3BhY2Uge2xlZnQscmlnaHQsYmxvY2tPZmZzZXQsaGVpZ2h0LHdyYXBwZWVzfVxuICAgICAqIHdoZW4gY3VycmVudCBzcGFjZSBpcyBmdWxsLCBpdCB3b3VsZCBiZSBjYWxsZWRcbiAgICAgKiBAcGFyYW0geyp9IHByb3BzXG4gICAgICogQHBhcmFtIHsqfSBjb250ZXh0IFxuICAgICAqIEBwYXJhbSB7Kn0gcmVxdWlyZWRTcGFjZSBcbiAgICAgKi9cbiAgICBjcmVhdGVMYXlvdXQocHJvcHM9e30sY29udGV4dD17fSxyZXF1aXJlZFNwYWNlKXtcblx0XHRjb25zdCBhbGxQcm9wcz17Li4ucHJvcHMsXG5cdFx0XHRpZDp0aGlzLnByb3BzLmlkLCBcblx0XHRcdGk6dGhpcy5jb21wdXRlZC5jb21wb3NlZC5sZW5ndGgsXG5cdFx0fVxuXHRcdGNvbnN0IEk9dGhpcy50b3BJbmRleFxuXHRcdGlmKHR5cGVvZihJKT09XCJudW1iZXJcIilcblx0XHRcdGFsbFByb3BzLkk9SVxuXHRcdHJldHVybiB0aGlzLnByb3BzLmNyZWF0ZUxheW91dC5iaW5kKHRoaXMpKFxuXHRcdFx0YWxsUHJvcHMsXG4gICAgICAgICAgICB7Li4uY29udGV4dCxwYXJlbnQ6dGhpcyxnZXRDb21wb3NlcjppZD0+dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGlkKX1cbiAgICAgICAgKVxuICAgIH1cblxuICAgIGNyZWF0ZUNvbXBvc2VkMlBhcmVudChhKXtcbiAgICAgICAgcmV0dXJuIGFcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpdCBwcm94eSB0aGUgY2FsbCB0byBjdXJyZW50IGxheW91dFxuICAgICAqIGlmIGN1cnJlbnQgbGF5b3V0IGhhcyBubyByZXF1aXJlZCBzcGFjZSwgYSBuZXcgTGF5b3V0IHdpbGwgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSB7Kn0gcmVxdWlyZWQgXG4gICAgICovXG4gICAgbmV4dEF2YWlsYWJsZVNwYWNlKHJlcXVpcmVkKXtcbiAgICAgICAgY29uc3Qgc3BhY2U9dGhpcy5jdXJyZW50Lm5leHRBdmFpbGFibGVTcGFjZSguLi5hcmd1bWVudHMpXG4gICAgICAgIGlmKCFzcGFjZSl7XG5cdFx0XHRjb25zdCBsYXlvdXQ9dGhpcy5jcmVhdGVMYXlvdXQodW5kZWZpbmVkLHtmcmFtZTpzcGFjZS5mcmFtZX0scmVxdWlyZWQpXG5cdFx0XHRpZihsYXlvdXQpe1xuXHRcdFx0XHR0aGlzLmNvbXB1dGVkLmNvbXBvc2VkLnB1c2gobGF5b3V0KVxuXHRcdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KGxheW91dCkpXG5cdFx0XHRcdHJldHVybiB0aGlzLm5leHRBdmFpbGFibGVTcGFjZSguLi5hcmd1bWVudHMpXG5cdFx0XHR9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwYWNlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbmFtZWQgaXMgc3VwcG9ydGVkIHRvIGJlIGtlcHRcbiAgICAgKiBAcGFyYW0geyp9IGNvbXBvc2VkQ2hpbGRlbkNvbnRlbnQgXG4gICAgICogQHJldHVybnNcbiAgICAgKiBudW1iZXI6IHRvIHJvbGxiYWNrIGxhc3QgbnVtYmVyIG9mIGxpbmVzXG4gICAgICovXG4gICAgYXBwZW5kQ29tcG9zZWQoe3Byb3BzOntuYW1lZCxoZWlnaHR9fSl7XG4gICAgICAgIGlmKG5hbWVkKXtcbiAgICAgICAgICAgIHRoaXMuY29tcHV0ZWQubmFtZWRbbmFtZWRdPWFyZ3VtZW50c1swXVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgY29uc3QgYXBwZW5kZWQ9dGhpcy5jdXJyZW50LmFwcGVuZENvbXBvc2VkKC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIGlmKGFwcGVuZGVkPT09ZmFsc2Upe1xuXHRcdFx0XHRpZih0aGlzLm5leHRBdmFpbGFibGVTcGFjZSh7aGVpZ2h0fSkpe1xuXHRcdFx0XHRcdHJldHVybiAxLy9yZWNvbXBvc2UgY3VycmVudCBsaW5lIGluIGNhc2UgZGlmZmVyZW50IGF2YWlsYWJsZVNwYWNlXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIEZyYW1lLklNTUVESUFURV9TVE9QXG4gICAgICAgICAgICB9ZWxzZSBpZihOdW1iZXIuaXNJbnRlZ2VyKGFwcGVuZGVkKSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcGVuZGVkXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblx0fVxuXG5cdG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpe1xuXHRcdC8vbGFzdCBvbmUgc2hvdWxkIGNoZWNrIGJhbGFuY2VhYmxlXG5cdFx0Y29uc3QgbGFzdD10aGlzLmNvbXB1dGVkLmNvbXBvc2VkW3RoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoLTFdXG5cdFx0aWYobGFzdC5iYWxhbmNlYWJsZSl7XG5cdFx0XHRsYXN0LmJhbGFuY2UoKVxuXHRcdH1cblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlU2VjdGlvbiBleHRlbmRzIGVkaXRhYmxlKFNlY3Rpb24se3N0b3BwYWJsZTp0cnVlfSl7XG5cdC8qKlxuXHQgKiBsYXN0Q29tcG9zZWQ9PWNvbXBvc2VkXG5cdCAqL1xuXHRjYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZChuZXh0UHJvcHMpe1xuXHRcdGNvbnN0IGNoYW5nZWQ9bmV4dFByb3BzLmhhc2ghPXRoaXMucHJvcHMuaGFzaFxuXHRcdGlmKGNoYW5nZWQpe1xuXHRcdFx0dGhpcy5fY2FuY2VsQ2hhbmdlZFBhcnQoLi4uYXJndW1lbnRzKVxuXHRcdH1cblx0XHR0aGlzLl9jYW5jZWxVbnRpbExhc3RBbGxDaGlsZHJlbkNvbXBvc2VkKC4uLmFyZ3VtZW50cylcblx0fVxuXG5cdC8qKlxuXHQgKiBib3RoIGNvbXBvc2VkIGFuZCBsYXN0Q29tcG9zZWQgcmVmZXIgdG8gZmlzc2lvbnMsIGNoZWNrIGNyZWF0ZUNvbXBvc2VkMlBhcmVudFxuXHQgKiBcblx0ICovXG5cdGFwcGVuZExhc3RDb21wb3NlZCgpe1xuXHRcdGNvbnN0IGxhc3RDb21wb3NlZD10aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZFxuXHRcdC8vY2xlYXIgbGFzdCBjb21wb3NlZFxuXHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQ9W11cblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZD1bXVxuXHRcdFxuXHRcdC8vYXBwZW5kIGxhc3QgY29tcG9zZWQgZmlzc2lvbnMgb25lIGJ5IG9uZVxuXHRcdGNvbnN0IHNwYWNlQ2hhbmdlZEF0PWxhc3RDb21wb3NlZC5maW5kSW5kZXgoKGZpc3Npb24saSxfLCQsaXNMYXN0PWk9PWxhc3RDb21wb3NlZC5sZW5ndGgtMSk9Pntcblx0XHRcdGlmKGlzTGFzdCYmZmlzc2lvbi5pc0VtcHR5KCkpe1xuXHRcdFx0XHQvL2xhc3QgZW1wdHkgZmlzc2lvbiBpcyB1c2VsZXNzIGZvciBjYWNoZVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdGNvbnN0IGN1cnJlbnQ9dGhpcy5jcmVhdGVMYXlvdXQoKVxuXHRcdFx0aWYoZmlzc2lvbi5nZXRTcGFjZSgpLmVxdWFscyhjdXJyZW50LmdldFNwYWNlKCkpKXtcblx0XHRcdFx0Zmlzc2lvbj1maXNzaW9uLmNsb25lNFNwYWNlKGN1cnJlbnQpXG5cdFx0XHRcdHRoaXMuY29tcHV0ZWQuY29tcG9zZWQuc3BsaWNlKGksMSxmaXNzaW9uKVxuXHRcdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KGZpc3Npb24pKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fSlcblxuXG5cdFx0aWYoc3BhY2VDaGFuZ2VkQXQ9PTApe1xuXHRcdFx0Ly9jbGVhciBhbGwgY29tcHV0ZWRcblx0XHRcdHRoaXMuYW5jaG9ycz1bXVxuXHRcdFx0c3VwZXIuY2FuY2VsVW51c2FibGVMYXN0Q29tcG9zZWQoe2NoYW5nZWQ6dHJ1ZX0pXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9ZWxzZSBpZihzcGFjZUNoYW5nZWRBdD09LTEpe1xuXHRcdFx0aWYodGhpcy5pc0FsbENoaWxkcmVuQ29tcG9zZWQoKSl7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHQvL2NvbnRpbnVlIGZyb20gbGFzdFxuXHRcdH1lbHNle1xuXHRcdFx0ZGVsZXRlIHRoaXMuY29tcHV0ZWQuYWxsQ29tcG9zZWRcblx0XHRcdC8vY29udGludWUgZnJvbSBsYXN0XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGFzdElkPXRoaXMuY3VycmVudC5sYXN0TGluZS5wcm9wc1tcImRhdGEtY29udGVudFwiXVxuXHRcdHJldHVybiB0aGlzLmNoaWxkcmVuQXJyYXkodGhpcy5wcm9wcy5jaGlsZHJlbikuZmluZEluZGV4KGE9PmEgJiYgYS5wcm9wcy5pZD09bGFzdElkKVxuXHR9XG5cblx0X2NhbmNlbENoYW5nZWRQYXJ0KG5leHQpe1xuXHRcdHZhciBsaW5lSW5kZXg9LTFcblx0XHRjb25zdCBjaGlsZHJlbk5lZWRSZWNvbXBvc2U9dGhpcy5jaGlsZHJlbk5lZWRSZWNvbXBvc2UobmV4dCx0aGlzLnByb3BzKVxuXHRcdGNvbnN0IGZpc3Npb25JbmRleD10aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZC5maW5kSW5kZXgoKHtsaW5lc30pPT57XG5cdFx0XHRyZXR1cm4gKGxpbmVJbmRleD1saW5lcy5maW5kSW5kZXgoYT0+Y2hpbGRyZW5OZWVkUmVjb21wb3NlLmluY2x1ZGVzKHRoaXMuY2hpbGRJZE9mKGEpKSkpIT0tMVxuXHRcdH0pXG5cblx0XHR0aGlzLl9rZWVwTGFzdENvbXBvc2VkVW50aWwoZmlzc2lvbkluZGV4LGxpbmVJbmRleClcblx0fVxuXG5cdFxuICAgIC8qKlxuICAgICAqIGNhY2hlYWJsZSBBUElcbiAgICAgKiBjb21wb3NlIHJ1bGU6IGFsd2F5cyBjb21wb3NlIGFsbCBjaGlsZHJlbiwgYW5kIGNvbnRlbnQgY29tcG9zaW5nIGlzIHN0b3BwYWJsZSBcbiAgICAgKiBib3RoIGNvbXBvc2VkIGFuZCBsYXN0Q29tcG9zZWQgcmVmZXIgdG8gZmlzc2lvbnNcbiAgICAgKi9cblx0X2NhbmNlbFVudGlsTGFzdEFsbENoaWxkcmVuQ29tcG9zZWQoKXtcblx0XHR2YXIgbGluZUluZGV4PS0xXG4gICAgICAgIGNvbnN0IGZpc3Npb25JbmRleD10aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZC5maW5kTGFzdEluZGV4KCh7bGluZXN9KT0+e1xuXHRcdFx0cmV0dXJuIChsaW5lSW5kZXg9bGluZXMuZmluZExhc3RJbmRleCgoYSxpLF8sJCxpZD10aGlzLmNoaWxkSWRPZihhKSk9Pntcblx0XHRcdFx0Y29uc3QgY29tcG9zZXI9dGhpcy5jb250ZXh0LmdldENvbXBvc2VyKGlkKVxuXHRcdFx0XHRyZXR1cm4gY29tcG9zZXIgJiYgY29tcG9zZXIuaXNBbGxDaGlsZHJlbkNvbXBvc2VkKClcblx0XHRcdH0pKSE9LTFcblx0XHR9KVxuXHRcdHRoaXMuX2tlZXBMYXN0Q29tcG9zZWRVbnRpbChmaXNzaW9uSW5kZXgsbGluZUluZGV4KzEpXG5cdH1cblxuXHRfa2VlcExhc3RDb21wb3NlZFVudGlsKGZpc3Npb25JbmRleCxsaW5lSW5kZXgpe1xuXHRcdGNvbnN0IHtsYXN0Q29tcG9zZWR9PXRoaXMuY29tcHV0ZWRcblx0XHRpZihmaXNzaW9uSW5kZXg9PS0xIHx8IFxuXHRcdFx0KGZpc3Npb25JbmRleD09bGFzdENvbXBvc2VkLmxlbmd0aC0xICYmIGxpbmVJbmRleD49bGFzdENvbXBvc2VkW2Zpc3Npb25JbmRleF0ubGluZXMubGVuZ3RoKSl7XG5cdFx0XHRyZXR1cm4gXG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmNvbXB1dGVkLmFsbENvbXBvc2VkXG5cdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWQ9bGFzdENvbXBvc2VkLnNsaWNlKDAsZmlzc2lvbkluZGV4KzEpXG5cdFx0dGhpcy5jb21wdXRlZC5sYXN0Q29tcG9zZWRbZmlzc2lvbkluZGV4XS5yZW1vdmVGcm9tKGxpbmVJbmRleClcblx0fVxufVxuIiwiaW1wb3J0IExpbmVCcmVha2VyIGZyb20gXCJsaW5lYnJlYWtcIlxuXG4vKipcbiogZmluZCBvcHBvcnR1bml0aWVzIGZyb20gc3RyaW5nXG4qXG4qL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3Bwb3J0dW5pdGllcyhzdHIpe1xuXHRsZXQgYnJlYWtlcj1uZXcgTGluZUJyZWFrZXIoc3RyKVxuXHRsZXQgbGFzdD0wXG5cdHZhciBvcD1bXVxuXHRmb3IgKGxldCBiaztiayA9IGJyZWFrZXIubmV4dEJyZWFrKCk7KSB7XG5cdCAgb3AucHVzaChzdHIuc2xpY2UobGFzdCwgYmsucG9zaXRpb24pKVxuXG5cdCAgaWYgKGJrLnJlcXVpcmVkKSB7XG5cdFx0Ly9vcC5wdXNoKFwiXFxuXCIpXG5cdCAgfVxuXG5cdCAgbGFzdCA9IGJrLnBvc2l0aW9uXG5cdH1cblx0cmV0dXJuIG9wXG59XG4vKipcbiogZmluZCBvcHBvcnR1bml0aWVzIGZyb20gYSBzdHJ1Y3R1cmVkIHRleHRzXG4qXG4qL1xuIGZ1bmN0aW9uIG9wcG9ydHVuaXRpZXNPZk9iamVjdHMoaXRlbXMsZ2V0VGV4dD1hPT5hLHJldml2ZXI9YT0+YSl7XG4gICAgbGV0IGNvbW1pdD0oc3RhdGUsaSk9PntcbiAgICAgICAgaWYoc3RhdGUudGV4dC5sZW5ndGg9PTApXG4gICAgICAgICAgICByZXR1cm4gc3RhdGVcblxuICAgICAgICBsZXQge3RleHQsb3Bwb3J0dW5pdGllcyxpbmRleGVzfT1zdGF0ZVxuICAgICAgICBsZXQgc3RyPXRleHQuam9pbihcIlwiKVxuICAgICAgICBsZXQgYnJlYWtlcj1uZXcgTGluZUJyZWFrZXIoc3RyKVxuICAgICAgICBsZXQgb3AsIHdvcmRcbiAgICAgICAgbGV0IHN0YXJ0PXtpdGVtSW5kZXg6c3RhdGUuc3RhcnQsaTowLGluZGV4T2ZTdHI6MH1cbiAgICAgICAgbGV0IGZvdW5kPShhLG9wLGopPT57XG4gICAgICAgICAgICBpZihhLml0ZW1JbmRleD09ailcbiAgICAgICAgICAgICAgICBhLmk9YS5pK29wLnBvc2l0aW9uLWEuaW5kZXhPZlN0clxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGEuaT1vcC5wb3NpdGlvbi1hLmluZGV4T2ZTdHJcblxuICAgICAgICAgICAgYS5pdGVtSW5kZXg9alxuICAgICAgICAgICAgYS5pbmRleE9mU3RyPW9wLnBvc2l0aW9uXG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUob3A9YnJlYWtlci5uZXh0QnJlYWsoKSl7XG4gICAgICAgICAgICB3b3JkPXN0ci5zbGljZShzdGFydC5pbmRleE9mU3RyLG9wLnBvc2l0aW9uKVxuXG4gICAgICAgICAgICBsZXQgZW5kPWluZGV4ZXMucmVkdWNlKChhLGxlbixqKT0+e1xuICAgICAgICAgICAgICAgIGlmKGo8c3RhcnQuaXRlbUluZGV4KXtcblxuICAgICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoaj09c3RhcnQuaXRlbUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuPWxlbi1zdGFydC5pXG5cbiAgICAgICAgICAgICAgICAgICAgaWYoYS5pbmRleE9mU3RyK2xlbjxvcC5wb3NpdGlvbil7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLmluZGV4T2ZTdHIrPWxlblxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihhLmluZGV4T2ZTdHIrbGVuPm9wLnBvc2l0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGEuaW5kZXhPZlN0cj09b3AucG9zaXRpb24pe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZChhLG9wLGopXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGEuaW5kZXhPZlN0citsZW49PW9wLnBvc2l0aW9uKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kKGEsb3AsailcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBhXG4gICAgICAgICAgICB9LHsuLi5zdGFydH0pXG5cbiAgICAgICAgICAgIG9wcG9ydHVuaXRpZXMucHVzaChyZXZpdmVyKHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6e2l0ZW1JbmRleDpzdGFydC5pdGVtSW5kZXgsYXQ6c3RhcnQuaX0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDp7aXRlbUluZGV4OmVuZC5pdGVtSW5kZXgsYXQ6ZW5kLml9LFxuICAgICAgICAgICAgICAgICAgICB3b3JkXG4gICAgICAgICAgICAgICAgfSkpXG5cblx0XHRcdHN0YXJ0PWVuZFxuXG5cdFx0XHQvL2VuZCBhdCBpdGVtIGVuZCwgbGV0IG5leHQgc3RhcnQgZnJvbSBuZXh0IGl0ZW1cbiAgICAgICAgICAgIGlmKHN0YXJ0Lml0ZW1JbmRleDx0ZXh0Lmxlbmd0aFxuXHRcdFx0XHQmJiB0ZXh0W3N0YXJ0Lml0ZW1JbmRleF0ubGVuZ3RoPT1zdGFydC5pKXtcblx0XHRcdFx0c3RhcnQuaXRlbUluZGV4Kz0xXG5cdFx0XHRcdHN0YXJ0Lmk9MFxuXHRcdFx0fVxuICAgICAgICB9XG4gICAgICAgdGV4dC5zcGxpY2UoMCx0ZXh0Lmxlbmd0aClcbiAgICAgICByZXR1cm4gc3RhdGVcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1pdChpdGVtcy5yZWR1Y2UoKHN0YXRlLCBwaWVjZSwgaSk9PntcbiAgICAgICAgbGV0IHt0ZXh0LG9wcG9ydHVuaXRpZXMsaW5kZXhlc309c3RhdGVcblx0XHRsZXQgdD1nZXRUZXh0KHBpZWNlKVxuICAgICAgICBpZih0KXtcbiAgICAgICAgICAgIHRleHQucHVzaCh0KVxuICAgICAgICAgICAgaW5kZXhlc1tpXT10Lmxlbmd0aFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGNvbW1pdChzdGF0ZSxpKVxuICAgICAgICAgICAgb3Bwb3J0dW5pdGllcy5wdXNoKHtzdGFydDp7aXRlbUluZGV4OmksYXQ6MH0sZW5kOntpdGVtSW5kZXg6aSxhdDowfSB9KVxuICAgICAgICAgICAgc3RhdGUuc3RhcnQ9aSsxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfSx7c3RhcnQ6MCwgdGV4dDpbXSwgb3Bwb3J0dW5pdGllczpbXSwgaW5kZXhlczpbXX0pKVxuICAgICAgICAub3Bwb3J0dW5pdGllc1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcblxuaW1wb3J0IHtkb20sIFJlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmltcG9ydCBGcmFtZSBmcm9tIFwiLi9mcmFtZVwiXG5pbXBvcnQge0hhc1BhcmVudEFuZENoaWxkLExheW91dCwgZWRpdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCBicmVha09wcG9ydHVuaXRpZXMgZnJvbSBcIi4uL3dvcmR3cmFwL2xpbmUtYnJlYWtcIlxuaW1wb3J0IHtUZXh0IGFzIENvbXBvc2VkVGV4dCwgIEdyb3VwfSBmcm9tIFwiLi4vY29tcG9zZWRcIlxuXG5jb25zdCBTdXBlcj1IYXNQYXJlbnRBbmRDaGlsZChkb20uUGFyYWdyYXBoKVxuY2xhc3MgUGFyYWdyYXBoIGV4dGVuZHMgU3VwZXJ7XG4gICAgc3RhdGljIGNvbnRleHRUeXBlcz17XG5cdFx0Li4uU3VwZXIuY29udGV4dFR5cGVzLFxuXHRcdE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jLFxuXHRcdG51bWJlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cdH1cblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0Li4uU3VwZXIucHJvcFR5cGVzLFxuXHRcdGRlZmF1bHRTdHlsZTpQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXHRcblx0fVxuXG4gICBjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLmNvbXB1dGVkLmF0b21zPVtdXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHRsaW5lczp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2KXtcblx0XHRcdFx0XHR0aGlzLmNvbXB1dGVkLmNvbXBvc2VkPXZcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGF0b21zOntcblx0XHRcdFx0Z2V0KCl7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29tcHV0ZWQuYXRvbXNcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0KHYpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmF0b21zPXZcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRnZXQgZW5kZXJXaWR0aCgpe1xuXHRcdHJldHVybiB0aGlzLmF0b21zW3RoaXMuYXRvbXMubGVuZ3RoLTFdLnByb3BzLndpZHRoXG5cdH1cblxuXHRnZXQgY3VycmVudExpbmUoKXtcblx0XHRpZih0aGlzLmxpbmVzLmxlbmd0aD09MCl7XG5cdFx0XHR0aGlzLmxpbmVzLnB1c2godGhpcy5jcmVhdGVMaW5lKCkpXG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmxpbmVzW3RoaXMubGluZXMubGVuZ3RoLTFdXG5cdH1cblxuXHRnZXREZWZhdWx0TWVhc3VyZT1tZW1vaXplKChzdHlsZT10aGlzLnByb3BzLmRlZmF1bHRTdHlsZSk9Pntcblx0XHRyZXR1cm4gbmV3IHRoaXMuY29udGV4dC5NZWFzdXJlKHN0eWxlKVxuXHR9KVxuXG4gICAgLyoqXG5cdCAqIHRvIGNvbGxlY3QgYXRvbWljIGlubGluZSBpdGVtc1xuXHQgKiBhIHRleHQgc3RhcnQgbWF5IG1lcmdlIHdpdGggbGFzdCB0ZXh0IHRvIGNvbXB1dGUgYnJlYWsgb3Bwb3J0dW5pdHlcblx0ICogYCR7bGFzdFRleHR9JHt0ZXh0fWAgc2hvdWxkIGJlIGdvb2QgZW5vdWdoXG5cdCAqIEBwYXJhbSB7Kn0gY29udGVudFxuXHQgKi9cbiAgICBhcHBlbmRDb21wb3NlZChjb250ZW50KXtcblx0XHRjb25zdCBsYXN0PXRoaXMuYXRvbXNbdGhpcy5hdG9tcy5sZW5ndGgtMV1cblx0XHRpZihsYXN0ICYmIGxhc3QucHJvcHMubWVyZ2VPcHBvcnR1bml0eSAmJiBjb250ZW50LnByb3BzLm1lcmdlT3Bwb3J0dW5pdHkpe1xuXHRcdFx0Y29uc3QgbGFzdFRleHQ9bGFzdC5wcm9wcy5tZXJnZU9wcG9ydHVuaXR5XG5cdFx0XHRjb25zdCB0ZXh0PWNvbnRlbnQucHJvcHMubWVyZ2VPcHBvcnR1bml0eVxuXHRcdFx0Y29uc3Qgb3BzPWJyZWFrT3Bwb3J0dW5pdGllcyhgJHtsYXN0VGV4dH0ke3RleHR9YClcblx0XHRcdHN3aXRjaChvcHMubGVuZ3RoKXtcblx0XHRcdGNhc2UgMTp7Ly9tZXJnZSBjb250ZW50IGludG8gbGFzdCBhdG9tXG5cdFx0XHRcdGNvbnN0IGhlaWdodD1NYXRoLm1heChsYXN0LnByb3BzLmhlaWdodCwgY29udGVudC5wcm9wcy5oZWlnaHQpXG5cdFx0XHRcdGNvbnN0IGRlc2NlbnQ9TWF0aC5tYXgobGFzdC5wcm9wcy5kZXNjZW50LCBjb250ZW50LnByb3BzLmRlc2NlbnQpXG5cdFx0XHRcdGNvbnN0IHdpZHRoPWxhc3QucHJvcHMud2lkdGgrY29udGVudC5wcm9wcy53aWR0aFxuXHRcdFx0XHRjb25zdCB7cHJvcHM6e1wiZGF0YS1jb250ZW50XCI6aXNSYXdBdG9tLCBjaGlsZHJlbixtZXJnZU9wcG9ydHVuaXR5fX09bGFzdFxuXHRcdFx0XHR0aGlzLmF0b21zLnNwbGljZSgtMSwxLFxuXHRcdFx0XHRcdDxHcm91cCB7Li4ue3dpZHRoLGhlaWdodCxkZXNjZW50LG1lcmdlT3Bwb3J0dW5pdHk6YCR7bWVyZ2VPcHBvcnR1bml0eX0ke2NvbnRlbnQucHJvcHMubWVyZ2VPcHBvcnR1bml0eX1gfX0+XG5cdFx0XHRcdFx0XHR7aXNSYXdBdG9tID8gXG5cdFx0XHRcdFx0XHRbUmVhY3QuY2xvbmVFbGVtZW50KGxhc3Qse2tleTowfSksUmVhY3QuY2xvbmVFbGVtZW50KGNvbnRlbnQse3g6bGFzdC5wcm9wcy53aWR0aCxrZXk6MX0pXVxuXHRcdFx0XHRcdFx0OiBbLi4uY2hpbGRyZW4sUmVhY3QuY2xvbmVFbGVtZW50KGNvbnRlbnQse3g6bGFzdC5wcm9wcy53aWR0aCxrZXk6Y2hpbGRyZW4ubGVuZ3RoLTF9KV1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHQpXG5cdFx0XHRcdHJldHVybiBcblx0XHRcdH1cblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0aWYobGFzdFRleHQ9PT1vcHNbMF0pey8vZG9uJ3QgbmVlZCBtZXJnZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnNvbGUud2FybihgZXJyb3I6IFwiJHtsYXN0VGV4dH0ke3RleHR9XCIgYnJlYWsgb3Bwb3J0dW5pdGllczogWyR7b3BzLmpvaW4oXCIsXCIpfV1gKVxuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0XHR0aGlzLmF0b21zLnB1c2goY29udGVudClcblx0fVxuXG5cblx0b25BbGxDaGlsZHJlbkNvbXBvc2VkKCl7Ly9uZWVkIGFwcGVuZCBsYXN0IG5vbi1mdWxsLXdpZHRoIGxpbmUgdG8gcGFyZW50ID8/P1xuXHRcdGNvbnN0IHtwcm9wczp7RW5kPVwiXCJ9fT10aGlzXG5cdFx0Y29uc3QgbWVhc3VyZT10aGlzLmdldERlZmF1bHRNZWFzdXJlKClcblx0XHR0aGlzLmF0b21zLnB1c2goPENvbXBvc2VkVGV4dFxuXHRcdFx0ey4uLm1lYXN1cmUuZGVmYXVsdFN0eWxlfVxuXHRcdFx0d2lkdGg9e21lYXN1cmUuc3RyaW5nV2lkdGgoRW5kKX1cblx0XHRcdG1pbldpZHRoPXswfVxuXHRcdFx0Y2hpbGRyZW49e0VuZH1cblx0XHRcdGNsYXNzTmFtZT1cImVuZGVyXCJcblx0XHRcdC8+KVxuXHRcdHRoaXMuY29tbWl0KClcblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuICAgIH1cblxuXHRyb2xsYmFja0xpbmVzKG4pe1xuXHRcdHRoaXMubGluZXMuc3BsaWNlKC1uKVxuXHR9XG5cblx0LyoqXG5cdCogbGluZS5hcHBlbmRDb21wb3NlZCBjYW4gcm9sbGJhY2sgdG8gYSBzcGVjaWZpZWQgYXRvbVxuXHQqIHBhcmVudC5hcHBlbmRDb21wb3NlZCBjYW4gcm9sbGJhY2sgbGluZXNcblx0KiovXG5cdGNvbW1pdChzdGFydD0wLCBlbmQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpe1xuICAgICAgICBjb25zdCB7Y29udGV4dDp7cGFyZW50fSwgY29tcHV0ZWQ6e2F0b21zfX09dGhpc1xuXG5cdFx0Y29uc3Qgcm9sbGJhY2tUb0xpbmVXaXRoRmlyc3RBdG9tSW5kZXg9YXQ9Pntcblx0XHRcdGNvbnN0IHtsaW5lcyxhdG9tc309dGhpc1xuXHRcdFx0Y29uc3QgaT1saW5lcy5maW5kSW5kZXgoYT0+YXRvbXMuaW5kZXhPZihhLmZpcnN0QXRvbSk9PWF0KVxuXHRcdFx0dGhpcy5yb2xsYmFja0xpbmVzKGxpbmVzLmxlbmd0aC1pKVxuXHRcdH1cblxuXHRcdGNvbnN0IGFwcGVuZENvbXBvc2VkTGluZT1iTGFzdExpbmU9Pntcblx0XHRcdHRoaXMuY3VycmVudExpbmUuZnJlZXplKClcblx0XHRcdHJldHVybiBwYXJlbnQuYXBwZW5kQ29tcG9zZWQodGhpcy5jcmVhdGVDb21wb3NlZDJQYXJlbnQodGhpcy5jdXJyZW50TGluZSxiTGFzdExpbmUpKVxuXHRcdH1cblxuXHRcdGNvbnN0IGF0b21JbmRleE9mTGFzdE50aExpbmU9aT0+e1xuXHRcdFx0Y29uc3QgbGluZXM9dGhpcy5saW5lc1xuXHRcdFx0Y29uc3QgbGFzdE50aExpbmU9bGluZXNbbGluZXMubGVuZ3RoLWldXG5cdFx0XHRyZXR1cm4gYXRvbXMuaW5kZXhPZihsYXN0TnRoTGluZS5maXJzdEF0b20pXG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRlQW5kQXBwZW5kTGluZT0oLi4uYXJncyk9Pntcblx0XHRcdGNvbnN0IGxpbmU9dGhpcy5jcmVhdGVMaW5lKC4uLmFyZ3MpXG5cdFx0XHRpZighbGluZSlcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR0aGlzLmxpbmVzLnB1c2gobGluZSlcblx0XHRcdHJldHVybiBsaW5lXG5cdFx0fVxuXG5cdFx0Y29uc3QgbGVuPWF0b21zLmxlbmd0aFxuXHRcdGNvbnN0IERFQUQ9NVxuXHRcdHZhciBuZXN0ZWQ9MFxuXG5cdFx0aWYoIWNyZWF0ZUFuZEFwcGVuZExpbmUoKSlcblx0XHRcdHJldHVybiBcblxuXHRcdGNvbnN0IGNvbW1pdEZyb209KHN0YXJ0PTApPT57XG5cdFx0XHRsZXQgbGFzdD0wLCB0aW1lcz0wXG5cdFx0XHRsZXQgbmV4dCwgcm9sbGJhY2tMaW5lc1xuXHRcdFx0Zm9yKGxldCBpPXN0YXJ0O2k8bGVuOyl7XG5cdFx0XHRcdGlmKGk+ZW5kKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGk9PWxhc3Qpe1xuXHRcdFx0XHRcdHRpbWVzKytcblx0XHRcdFx0XHRpZih0aW1lcz5ERUFEKXtcblx0XHRcdFx0XHRcdHRocm93IEVycm9yKGBpdCBtYXkgYmUgZGVhZCBsb29wIG9uICR7aX10aCBhdG9tc2ApXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRsYXN0PWlcblx0XHRcdFx0XHR0aW1lcz0wXG5cdFx0XHRcdH1cblx0XHRcdFx0bmV4dD10aGlzLmN1cnJlbnRMaW5lLmFwcGVuZEF0b20oYXRvbXNbaV0saSlcblx0XHRcdFx0aWYodHlwZW9mKG5leHQpPT1cIm51bWJlclwiKXtcblx0XHRcdFx0XHQvL2Rpc2NhcmQgY3VycmVudCBsaW5lLCBhbmQgbmV4dCBpcyByZXF1aXJlZEhlaWdodFxuXHRcdFx0XHRcdHRoaXMucm9sbGJhY2tMaW5lcygxKVxuXHRcdFx0XHRcdGlmKCFjcmVhdGVBbmRBcHBlbmRMaW5lKHtoZWlnaHQ6bmV4dH0pKVxuXHRcdFx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHRcdH1lbHNlIGlmKG5leHQhPT1mYWxzZSl7XG5cdFx0XHRcdFx0aSsrXG5cdFx0XHRcdFx0aWYoaT5lbmQpe1xuXHRcdFx0XHRcdFx0Ly9pdCdzIHJlY29tbWl0dGluZyBzaW5jZSBlbmQgaXMgcmVhc29uYWJsZSB2YWx1ZVxuXHRcdFx0XHRcdFx0aWYoYXBwZW5kQ29tcG9zZWRMaW5lKGk9PWF0b21zLmxlbmd0aCk9PUxheW91dC5JTU1FRElBVEVfU1RPUClcblx0XHRcdFx0XHRcdFx0cmV0dXJuIExheW91dC5JTU1FRElBVEVfU1RPUFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb250aW51ZVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHQvL2N1cnJlbnQgbGluZSBpcyBmdWxsLCBhdG9tc1tpXSBub3QgYXNzZW1ibGVkLCBjb21taXQgdG8gYmxvY2sgbGF5b3V0XG5cdFx0XHRcdFx0cm9sbGJhY2tMaW5lcz1hcHBlbmRDb21wb3NlZExpbmUoZmFsc2UpXG5cdFx0XHRcdFx0aWYoIU51bWJlci5pc0ludGVnZXIocm9sbGJhY2tMaW5lcykpe1xuXHRcdFx0XHRcdFx0Ly9saW5lIGNvbW1pdHRlZFxuXHRcdFx0XHRcdFx0aWYoIWNyZWF0ZUFuZEFwcGVuZExpbmUoKSlcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0XHRcdFx0Y29udGludWVcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdC8vZmFpbCBjb21taXR0ZWQsIGFuZCByb2xsYmFjayBsaW5lc1xuXHRcdFx0XHRcdFx0aWYocm9sbGJhY2tMaW5lcz09TGF5b3V0LklNTUVESUFURV9TVE9QKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gTGF5b3V0LklNTUVESUFURV9TVE9QXG5cblx0XHRcdFx0XHRcdG5leHQ9YXRvbUluZGV4T2ZMYXN0TnRoTGluZShyb2xsYmFja0xpbmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoTnVtYmVyLmlzSW50ZWdlcihuZXh0KSl7XG5cdFx0XHRcdFx0XHRcdHJvbGxiYWNrVG9MaW5lV2l0aEZpcnN0QXRvbUluZGV4KG5leHQpXG5cdFx0XHRcdFx0XHRcdGlmKCFjcmVhdGVBbmRBcHBlbmRMaW5lKCkpXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFxuICAgICAgICBcdFx0XHRcdFx0aT1uZXh0XG4gICAgICAgIFx0XHRcdFx0XHRjb250aW51ZVxuICAgICAgICBcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoKytuZXN0ZWQ+REVBRCl7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYGl0IG1heSBiZSBkZWFkIGxvb3Agb24gc2luY2UgY29tbWl0IG5lc3RlZCAke25lc3RlZH0sIGlnbm9yZSBhbmQgY29udGludWVgKVxuXHRcdFx0XHRyZXR1cm5cblx0XHRcdH1cblxuXHRcdFx0aWYodGhpcy5saW5lcy5sZW5ndGg9PTEgfHwgIXRoaXMuY3VycmVudExpbmUuaXNFbXB0eSgpKXtcblx0XHRcdFx0cm9sbGJhY2tMaW5lcz1hcHBlbmRDb21wb3NlZExpbmUodHJ1ZSlcblx0XHRcdFx0aWYoTnVtYmVyLmlzSW50ZWdlcihyb2xsYmFja0xpbmVzKSl7XG5cdFx0XHRcdFx0aWYocm9sbGJhY2tMaW5lcz09RnJhbWUuSU1NRURJQVRFX1NUT1ApXG5cdFx0XHRcdFx0XHRyZXR1cm4gRnJhbWUuSU1NRURJQVRFX1NUT1Bcblx0XHRcdFx0XHRuZXh0PWF0b21JbmRleE9mTGFzdE50aExpbmUocm9sbGJhY2tMaW5lcylcblx0XHRcdFx0XHRyb2xsYmFja1RvTGluZVdpdGhGaXJzdEF0b21JbmRleChuZXh0KVxuXHRcdFx0XHRcdGlmKCFjcmVhdGVBbmRBcHBlbmRMaW5lKCkpXG5cdFx0XHRcdFx0XHRyZXR1cm4gXG5cdFx0XHRcdFx0Y29tbWl0RnJvbShuZXh0KVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbW1pdEZyb20oc3RhcnQpXG5cdH1cblxuXHQvKipcblx0ICogcmUtY29tbWl0IGxhc3RMaW5lc1xuXHQgKiBkZWZhdWx0IHJlLWNvbW1pdCBhbGwgYWxyZWFkeSBsYXlvdXRlZCBsaW5lc1xuXHQgKiBAcGFyYW0ge30gbGFzdExpbmVzIFxuXHQgKi9cblx0cmVjb21taXQobGFzdExpbmVzPXRoaXMubGluZXMpe1xuXHRcdGNvbnN0IHthdG9tcywgbGluZXN9PXRoaXNcblx0XHRsYXN0TGluZXM9bGluZXMuc2xpY2UoLWxhc3RMaW5lcy5sZW5ndGgpXG5cblx0XHR0aGlzLnJvbGxiYWNrTGluZXMobGFzdExpbmVzLmxlbmd0aClcblxuXHRcdGNvbnN0IHN0YXJ0PWF0b21zLmZpbmRJbmRleChhPT5hPT1sYXN0TGluZXNbMF0uZmlyc3RBdG9tKVxuXHRcdGNvbnN0IGVuZD1hdG9tcy5zbGljZShzdGFydCsxKS5maW5kSW5kZXgoYT0+YT09bGFzdExpbmVzW2xhc3RMaW5lcy5sZW5ndGgtMV0ubGFzdEF0b20pK3N0YXJ0KzFcblx0XHRyZXR1cm4gdGhpcy5jb21taXQoc3RhcnQsIGVuZD09YXRvbXMubGVuZ3RoLTEgPyB1bmRlZmluZWQgOiBlbmQpXG5cdH1cblxuXHQvKipcblx0ICogU3RvcnkgY2FuIGhhbmRsZSBpdCwgc28gaXQgY2FuIGJlIGluIExpbmUgYXMgbm9ybWFsIGF0b21cblx0ICogZmlyc3RMaW5lIGlzIHVzdWFsbHkgbWludXMgZm9yIG51bWJlcmluZ1xuXHQgKi9cblx0Z2V0TnVtYmVyaW5nQXRvbSgpe1xuXHRcdGNvbnN0IHtwcm9wczp7bnVtYmVyaW5nOntzdHlsZX0sIGluZGVudDp7Zmlyc3RMaW5lPTB9LGlkfSxjb250ZXh0OntNZWFzdXJlLCBudW1iZXJpbmd9fT10aGlzXG5cdFx0Y29uc3Qge2RlZmF1bHRTdHlsZX09bmV3IE1lYXN1cmUoc3R5bGUpXG5cblx0XHRyZXR1cm4gPENvbXBvc2VkVGV4dC5EeW5hbWljXG5cdFx0XHR7Li4uZGVmYXVsdFN0eWxlfVxuXHRcdFx0a2V5PVwibnVtYmVyaW5nXCJcblx0XHRcdGNsYXNzTmFtZT1cIm51bWJlcmluZ1wiXG5cdFx0XHR4PXtmaXJzdExpbmV9XG5cdFx0XHR3aWR0aD17LWZpcnN0TGluZX1cblx0XHRcdGNoaWxkcmVuPXsoKT0+bnVtYmVyaW5nKGlkKX1cblx0XHQvPlxuXHR9XG5cblx0bmV4dEF2YWlsYWJsZVNwYWNlKHJlcXVpcmVkKXtcblx0XHRjb25zdCBzcGFjZT1zdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UocmVxdWlyZWQpXG5cdFx0aWYoIXNwYWNlKVxuXHRcdFx0cmV0dXJuIHNwYWNlXG5cdFx0Y29uc3Qge3dpZHRoLGxlZnQ9MCxyaWdodD13aWR0aH09c3BhY2Vcblx0XHRjb25zdCB7aW5kZW50OntsZWZ0OmluZGVudExlZnQ9MCxyaWdodDppbmRlbnRSaWdodD0wLGZpcnN0TGluZT0wfSwgbnVtYmVyaW5nLH09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IGJGaXJzdExpbmU9dGhpcy5saW5lcy5sZW5ndGg9PTBcblx0XHRyZXR1cm4gc3BhY2UuY2xvbmUoe1xuXHRcdFx0bGVmdDpsZWZ0K2luZGVudExlZnQrKGJGaXJzdExpbmUmJiFudW1iZXJpbmcmJmZpcnN0TGluZXx8MCksIFxuXHRcdFx0cmlnaHQ6cmlnaHQtaW5kZW50UmlnaHQsXG5cdFx0fSlcblx0fVxuXG5cdC8qKlxuXHQgKiBCbG9jayBvZmZzZXQvdG9wIG11c3QgYmUgZGVjaWRlZCwgc28gdGhlIGZvbGxvd2luZyBtdXN0IGJlIGhhbmRsZWQgaGVyZVxuXHQgKiB0b3AsIGZpcnN0TGluZSwgbnVtYmVyaW5nIFxuXHQgKiBwYXJhZ3JhcGggYm90dG9tIGRvZXNuJ3QgYWZmZWN0IGN1cnJlbnQgbGluZSdzIGJsb2NrIG9mZnNldCwgc28gZG9uJ3QgaGFuZGxlIGl0IGhlcmVcblx0ICogKioqIGV2ZXJ5IGNyZWF0ZWQgbGluZSBpcyBhcHBlbmRlZCBJTU1FRElBVEVMWSBpbnRvIGNvbXBvc2VkLCBzbyB0aGUgbGluZSBpbmRleCBpcyBmcm9tIDEgaW4gY3JlYXRlQ29tcG9zZWQyUGFyZW50IFxuXHQgKi9cbiAgICBjcmVhdGVMaW5lKHJlcXVpcmVkKXtcblx0XHRjb25zdCBzcGFjZT10aGlzLm5leHRBdmFpbGFibGVTcGFjZShyZXF1aXJlZClcblx0XHRpZighc3BhY2UpXG5cdFx0XHRyZXR1cm4gc3BhY2Vcblx0XHRjb25zdCB7bnVtYmVyaW5nLCBhbGlnbixzcGFjaW5nOntsaW5lSGVpZ2h0LHRvcH19PXRoaXMucHJvcHNcblx0XHRjb25zdCBiRmlyc3RMaW5lPXRoaXMubGluZXMubGVuZ3RoPT0wXG5cblx0XHRjb25zdCBsaW5lPW5ldyB0aGlzLmNvbnN0cnVjdG9yLkxpbmUoe1xuXHRcdFx0c3BhY2UsXG5cdFx0XHRwb3NpdGlvbmVkOiBiRmlyc3RMaW5lJiZudW1iZXJpbmcgPyBbdGhpcy5nZXROdW1iZXJpbmdBdG9tKCldIDogW10sXG5cdFx0XHR0b3A6IGJGaXJzdExpbmUgPyB0b3AgOiB1bmRlZmluZWQsIFxuXHRcdFx0bGluZUhlaWdodCxcblx0XHRcdGFsaWduLFxuXHRcdH0se3BhcmVudDp0aGlzfSlcblxuXHRcdHJldHVybiBsaW5lXG5cdH1cblx0XG5cdC8qKlxuXHQgKiB8IHNwYWNpbmcgbGVmdCB8IGxpbmUgYm94IHwgc3BhY2luZyByaWdodHxcblx0ICogc3BhY2luZyBib3R0b20gZG9lc24ndCBhZmZlY3QgbGluZSBibG9jayBvZmZzZXQsIHNvIGl0J3Mgb2sgaGVyZVxuXHQgKiBTdG9yeTogaGVscHMgXG5cdCAqIDEuIG1lcmdlLCBmb3IgcGVyZm9ybWFuY2Ugb24gdmlldywgc2ltcGxlciBkb21cblx0ICogMi4gc2V0IGJhc2VsaW5lXG5cdCAqIDMuIGFsaWduXG5cdCAqIDQuIGp1c3RpZnlcblx0ICogQHBhcmFtIHsqfSBsaW5lIFxuXHQgKiBAcGFyYW0geyp9IGxhc3QgXG5cdCAqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQobGluZSxiTGFzdExpbmUpe1xuXHRcdGNvbnN0IHtoZWlnaHQsd2lkdGgsIGFuY2hvciwgdG9wVG9CbG9ja09mZnNldH09bGluZVxuXHRcdGNvbnN0IHtcblx0XHRcdG51bWJlcmluZyxcblx0XHRcdGluZGVudDp7bGVmdD0wLHJpZ2h0PTAsIGZpcnN0TGluZT0wfSxcblx0XHRcdHNwYWNpbmc6e2JvdHRvbT0wfSxcblx0XHRcdG9ycGhhbix3aWRvdyxrZWVwV2l0aE5leHQsa2VlcExpbmVzLFxuXHRcdFx0fT10aGlzLnByb3BzXG5cdFx0XG5cdFx0Y29uc3QgYkZpcnN0TGluZT10aGlzLmxpbmVzLmxlbmd0aD09MVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8R3JvdXAgY2xhc3NOYW1lPVwibGluZVwiXG5cdFx0XHRcdGhlaWdodD17dG9wVG9CbG9ja09mZnNldCtoZWlnaHQrKGJMYXN0TGluZSYmYm90dG9tfHwwKX0gXG5cdFx0XHRcdHdpZHRoPXtsZWZ0KyhiRmlyc3RMaW5lJiYhbnVtYmVyaW5nJiZmaXJzdExpbmV8fDApK3dpZHRoK3JpZ2h0fSBcblx0XHRcdFx0cGFnaW5hdGlvbj17e1xuXHRcdFx0XHRcdGlkOnRoaXMucHJvcHMuaWQsXG5cdFx0XHRcdFx0b3JwaGFuLHdpZG93LGtlZXBXaXRoTmV4dCxrZWVwTGluZXMsIFxuXHRcdFx0XHRcdGk6dGhpcy5saW5lcy5sZW5ndGgsXG5cdFx0XHRcdFx0bGFzdDpiTGFzdExpbmVcblx0XHRcdFx0fX0gXG5cdFx0XHRcdGFuY2hvcj17YW5jaG9yfSBcblx0XHRcdFx0PlxuXHRcdFx0XHQ8R3JvdXAgXG5cdFx0XHRcdFx0eD17bGVmdCsoYkZpcnN0TGluZSYmIW51bWJlcmluZyYmZmlyc3RMaW5lfHwwKX0gXG5cdFx0XHRcdFx0eT17dG9wVG9CbG9ja09mZnNldH0gXG5cdFx0XHRcdFx0d2lkdGg9e3dpZHRofSBcblx0XHRcdFx0XHRoZWlnaHQ9e2hlaWdodH0+XG5cdFx0XHRcdFx0e2xpbmUucmVuZGVyKGJMYXN0TGluZSl9XG4gICAgICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgIDwvR3JvdXA+XG4gICAgICAgIClcblx0fVxuXHRcblx0c3RhdGljIExpbmU9Y2xhc3MgTGluZSBleHRlbmRzIExheW91dC5JbmxpbmV7XG5cdFx0Lyoqd2hlcmUgZG9lcyBsYXN0IGF0b20gZW5kIHdpdGggaW4gaW5saW5lIHNpemUsIGZvciBwb3NpdGlvbmluZyBvbmx5ICovXG5cdFx0Z2V0IGN1cnJlbnRYKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbmxpbmVTZWdtZW50cy5jdXJyZW50WFxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVBhcmFncmFwaCBleHRlbmRzIGVkaXRhYmxlKFBhcmFncmFwaCx7c3RvcHBhYmxlOnRydWV9KXtcblx0LyoqdG8gc3luYyBsYXN0Q29tcG9zZWQgd2l0aCBjb21wb3NlZCAqL1xuXHRyb2xsYmFja0xpbmVzKG4pe1xuXHRcdHN1cGVyLnJvbGxiYWNrTGluZXMobilcblx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZC5zcGxpY2UoLW4pXG5cdH1cblx0XG5cdGNhbmNlbFVudXNhYmxlTGFzdENvbXBvc2VkKHtoYXNoLGNoYW5nZWQ9aGFzaCE9dGhpcy5wcm9wcy5oYXNofSl7XG5cdFx0aWYoY2hhbmdlZCl7XG5cdFx0XHR0aGlzLmF0b21zPVtdXG5cdFx0XHRzdXBlci5jYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCguLi5hcmd1bWVudHMpXG5cdFx0fVxuXHR9XG5cblx0LyoqaWYgbGluZVNlZ21lbnRzIGlzIHNhbWUsIGxhc3QgbGF5b3V0ZWQgbGluZSBzaG91bGQgYmUgYWJsZSB0byBmaXQgaW4gd2l0aG91dCByZWxheW91dCAqL1xuXHRhcHBlbmRMYXN0Q29tcG9zZWQoKXtcblx0XHRjb25zdCBsaW5lcz10aGlzLmxpbmVzXG5cdFx0dGhpcy5saW5lcz1bXVxuXHRcdGNvbnN0IHNwYWNlQ2hhbmdlZEF0PXRoaXMuY29tcHV0ZWQubGFzdENvbXBvc2VkLmZpbmRJbmRleCgoYSxpKT0+e1xuXHRcdFx0dmFyIGxpbmU9bGluZXNbaV1cblx0XHRcdGNvbnN0IG5ld0xpbmU9dGhpcy5jcmVhdGVMaW5lKHtoZWlnaHQ6YS5wcm9wcy5oZWlnaHR9KVxuXHRcdFx0aWYoIW5ld0xpbmUpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRjb25zdCBzcGFjZT1uZXdMaW5lLnByb3BzLnNwYWNlXG5cdFx0XHRpZihsaW5lLmlzRml0VG8oc3BhY2UpKXtcblx0XHRcdFx0bGluZT1saW5lLmNsb25lNFNwYWNlKHNwYWNlKVxuXHRcdFx0XHR0aGlzLmxpbmVzLnB1c2gobGluZSlcblx0XHRcdFx0dGhpcy5jb250ZXh0LnBhcmVudC5hcHBlbmRDb21wb3NlZChhKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1lbHNle1xuXHRcdFx0XHR0aGlzLmNvbXB1dGVkLmxhc3RDb21wb3NlZC5zcGxpY2UoaSlcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHR9KVxuXG5cdFx0aWYoc3BhY2VDaGFuZ2VkQXQ9PTApe1xuXHRcdFx0dGhpcy5jYW5jZWxVbnVzYWJsZUxhc3RDb21wb3NlZCh7Y2hhbmdlZDp0cnVlfSlcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRcblx0XHRpZihzcGFjZUNoYW5nZWRBdD4wKXtcblx0XHRcdHRoaXMuY29tbWl0KHRoaXMuYXRvbXMuaW5kZXhPZihsaW5lc1tzcGFjZUNoYW5nZWRBdF0uZmlyc3RBdG9tKSlcblx0XHR9XG5cdFx0cmV0dXJuIHRydWVcblx0fVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcbmltcG9ydCB7c2hhbGxvd0VxdWFsfSBmcm9tIFwicmVjb21wb3NlXCJcblxuaW1wb3J0IHtOb0NoaWxkLGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IGJyZWFrT3Bwb3J0dW5pdGllcyBmcm9tIFwiLi4vd29yZHdyYXAvbGluZS1icmVha1wiXG5cbmltcG9ydCB7VGV4dCBhcyBDb21wb3NlZFRleHR9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmNvbnN0IFN1cGVyPU5vQ2hpbGQoZG9tLlRleHQpXG5cbmNsYXNzIFRleHQgZXh0ZW5kcyBTdXBlcntcbiAgICBzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5TdXBlci5jb250ZXh0VHlwZXMsXG5cdFx0TWVhc3VyZTogUHJvcFR5cGVzLmZ1bmMsXG5cdH1cblxuICAgIGdldCB0ZXh0KCl7XG4gICAgICAgIGNvbnN0IHtjaGlsZHJlbj1cIlwifT10aGlzLnByb3BzXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSA/IGNoaWxkcmVuLmpvaW4oXCJcIikgOiBjaGlsZHJlblxuICAgIH1cblxuICAgIGNyZWF0ZU1lYXN1cmU9bWVtb2l6ZSgoZm9udHMsc2l6ZSxib2xkLGl0YWxpYyk9PntcbiAgICAgICAgY29uc3Qge01lYXN1cmV9PXRoaXMuY29udGV4dFxuICAgICAgICBjb25zdCBtZWFzdXJlPW5ldyBNZWFzdXJlKHtmb250cyxzaXplLGJvbGQsaXRhbGljfSlcbiAgICAgICAgY29uc3QgX3N0cmluZ1dpZHRoPW1lYXN1cmUuc3RyaW5nV2lkdGguYmluZChtZWFzdXJlKVxuICAgICAgICBjb25zdCBjYWNoZT1uZXcgTWFwKClcbiAgICAgICAgbWVhc3VyZS5zdHJpbmdXaWR0aD13b3JkPT57XG4gICAgICAgICAgICBpZihjYWNoZS5oYXMod29yZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldCh3b3JkKVxuICAgICAgICAgICAgY29uc3Qgd2lkdGg9X3N0cmluZ1dpZHRoKHdvcmQpXG4gICAgICAgICAgICBjYWNoZS5zZXQod29yZCx3aWR0aClcbiAgICAgICAgICAgIHJldHVybiB3aWR0aFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZWFzdXJlXG4gICAgfSlcblxuICAgIGdldCBtZWFzdXJlKCl7XG4gICAgICAgIGNvbnN0IHtmb250cywgc2l6ZSwgYm9sZCwgaXRhbGljLCB9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVhc3VyZShmb250cyxzaXplLGJvbGQsaXRhbGljKVxuICAgIH1cblxuICAgIGdldCBkZWZhdWx0U3R5bGUoKXtcbiAgICAgICAgY29uc3Qge2NvbG9yLGhpZ2hsaWdodCx2YW5pc2gsYm9yZGVyLHVuZGVybGluZSxzdHJpa2V9PXRoaXMucHJvcHNcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRoaXMubWVhc3VyZS5kZWZhdWx0U3R5bGUsXG4gICAgICAgICAgICBjb2xvciwgaGlnaGxpZ2h0LGJvcmRlcix1bmRlcmxpbmUsc3RyaWtlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpdCdzIHNhZmUgdG8gb3ZlcnJpZGUgcmVuZGVyIHNpbmNlIGFsbENoaWxkcmVuQ29tcG9zZWQgd291bGQgYmUgc2V0IG1hbnVhbGx5IGF0IGVuZCBvZiByZW5kZXJcbiAgICAgKi9cbiAgICByZW5kZXIoKXtcbiAgICAgICAgdHJ5e1xuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy52YW5pc2gpe1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTdHlsZT10aGlzLmRlZmF1bHRTdHlsZVxuICAgICAgICAgICAgY29uc3QgbWVhc3VyZT10aGlzLm1lYXN1cmVcbiAgICAgICAgICAgIGNvbnN0IHdoaXRlc3BhY2VXaWR0aD1tZWFzdXJlLnN0cmluZ1dpZHRoKFwiIFwiKVxuXG4gICAgICAgICAgICBsZXQgc3RhcnQ9MFxuICAgICAgICAgICAgYnJlYWtPcHBvcnR1bml0aWVzKHRoaXMudGV4dCkuZm9yRWFjaCgoYSxqLF8xLF8yLGpMYXN0PV8xLmxlbmd0aC0xPT1qKT0+e1xuICAgICAgICAgICAgICAgIGEuc3BsaXQoLyhcXHMpLykuZmlsdGVyKGE9PiEhYSkuZm9yRWFjaCgoYixpLCQxLCQyLGlMYXN0PSQxLmxlbmd0aC0xPT1pKT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1doaXRlc3BhY2U9Yj09XCIgXCJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kaW5nPWIuZW5kc1dpdGgoXCIsXCIpID8gYi5zdWJzdHJpbmcoMCxiLmxlbmd0aC0xKSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29tcG9zZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOmlzV2hpdGVzcGFjZSA/IFwid2hpdGVzcGFjZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6aXNXaGl0ZXNwYWNlID8gd2hpdGVzcGFjZVdpZHRoIDogbWVhc3VyZS5zdHJpbmdXaWR0aChiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOmlzV2hpdGVzcGFjZSA/IDAgOiAoZW5kaW5nID8gbWVhc3VyZS5zdHJpbmdXaWR0aChlbmRpbmcpIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1lbmRhdFwiOnN0YXJ0Kz1iLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VPcHBvcnR1bml0eTooKGkraik9PTB8fChqTGFzdCYmaUxhc3QpKSYmIWlzV2hpdGVzcGFjZSYmYi8vZmlyc3Qgb3IgbGFzdFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfWZpbmFsbHl7XG4gICAgICAgICAgICB0aGlzLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG4gICAgICAgIH1cbiAgICB9XG5cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KHByb3BzKXtcbiAgICAgICAgcmV0dXJuIDxDb21wb3NlZFRleHQgey4uLnByb3BzfS8+XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdGFibGVUZXh0IGV4dGVuZHMgZWRpdGFibGUoVGV4dCl7XG4gICAgaXNBdG9tQ2hhbmdlZChwcm9wcyl7XG4gICAgICAgIGlmKCFzdXBlci5pc0F0b21DaGFuZ2VkKC4uLmFyZ3VtZW50cykpe1xuICAgICAgICAgICAgcmV0dXJuICFzaGFsbG93RXF1YWwocHJvcHMsdGhpcy5wcm9wcylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJlbmRlcigpe1xuICAgICAgICBpZih0aGlzLnRleHQubGVuZ3RoPT0wKXtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29tcG9zZWQoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFN0eWxlLFxuICAgICAgICAgICAgICAgIHdpZHRoOjAsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6MCxcbiAgICAgICAgICAgICAgICBcImRhdGEtZW5kYXRcIjowLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBcIlwiXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0aGlzLm9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5yZW5kZXIoKVxuICAgIH1cbn1cbiIsImltcG9ydCBQYXRoIGZyb20gXCJzdmdwYXRoXCJcbmltcG9ydCBzaW1wbGlmeSBmcm9tIFwic2ltcGxpZnktcGF0aFwiXG5pbXBvcnQgY29udG91cnMgZnJvbSBcInN2Zy1wYXRoLWNvbnRvdXJzXCJcbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIF9fJDEgZXh0ZW5kcyBQYXRoe1xuICAgIHN0YXRpYyBmcm9tUmVjdCh7eCx5LHdpZHRoOncsaGVpZ2h0Omh9KXtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKGBNJHt4fSAke3l9IGgke3d9IHYke2h9IGgkey13fXpgKSAgICBcbiAgICB9XG5cbiAgICB0b1N0cmluZygpe1xuICAgICAgICB0aGlzLl9fZXZhbHVhdGVTdGFjaygpXG4gICAgICAgIHJldHVybiBtZW1vaXplKGQ9PnN1cGVyLnRvU3RyaW5nKCkpKHRoaXMuc2VnbWVudHMubWFwKGE9PmEuam9pbihcIlwiKSkuam9pbihcIlwiKSlcbiAgICB9XG5cbiAgICBib3VuZHMoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udG91cigpXG5cdFx0XHQucmVkdWNlKCh7bGVmdCx0b3AscmlnaHQsYm90dG9tfSxbeCx5XSk9Pih7XG5cdFx0XHRcdGxlZnQ6TWF0aC5taW4obGVmdCx4KSxcblx0XHRcdFx0dG9wOk1hdGgubWluKHRvcCx5KSxcblx0XHRcdFx0cmlnaHQ6TWF0aC5tYXgocmlnaHQseCksXG5cdFx0XHRcdGJvdHRvbTpNYXRoLm1heChib3R0b20seSlcblx0XHRcdH0pLHtcblx0XHRcdFx0bGVmdDpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcblx0XHRcdFx0dG9wOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuXHRcdFx0XHRyaWdodDpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcblx0XHRcdFx0Ym90dG9tOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuXHRcdFx0fSlcbiAgICB9XG5cbiAgICBjb250b3VyKHRvbGVyYW5jZT0xLGQ9dGhpcy50b1N0cmluZygpKXtcbiAgICAgICAgcmV0dXJuIG1lbW9pemUoKHRvbGVyYW5jZSwgZCk9PmNvbnRvdXJzKHRoaXMuc2VnbWVudHMpXG4gICAgICAgICAgICAubWFwKGE9PmEubWFwKChbeCx5XSk9PltNYXRoLmNlaWwoeCksIE1hdGguY2VpbCh5KV0pKVxuICAgICAgICAgICAgLm1hcChhPT5zaW1wbGlmeShhLHRvbGVyYW5jZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhbGwsYSk9PlsuLi5hbGwsLi4uYV0sW10pXG4gICAgICAgICkoKTtcbiAgICB9XG5cbiAgICBpbnRlcnNlY3RzKGxpbmUvKnt4MSx4Mix5MSx5Mn0qLywgdG9sZXJhbmNlKXtcbiAgICAgICAgY29uc3QgcG9pbnRzPXRoaXMuY29udG91cih0b2xlcmFuY2UpXG4gICAgICAgIHJldHVybiBwb2ludHMuc2xpY2UoMSlcblx0XHRcdC5tYXAoKFt4Mix5Ml0saSk9Pntcblx0XHRcdFx0Y29uc3QgW3gxLHkxXT1wb2ludHNbaV1cblx0XHRcdFx0cmV0dXJuIHt4MSx5MSx4Mix5Mn1cblx0XHRcdH0pXG5cdFx0XHQubWFwKGxpbmUxPT5saW5lX2xpbmVfaW50ZXJzZWN0KGxpbmUxLGxpbmUpKVxuXHRcdFx0LmZpbHRlcihhPT4hIWEpXG4gICAgfVxuXG4gICAgY2VudGVyKCl7XG4gICAgICAgIGNvbnN0IHtsZWZ0LHJpZ2h0LHRvcCxib3R0b20seD0obGVmdCtyaWdodCkvMiwgeT0odG9wK2JvdHRvbSkvMn09dGhpcy5ib3VuZHMoKVxuICAgICAgICByZXR1cm4ge3gseX1cbiAgICB9XG5cbiAgICBjbG9uZSgpe1xuICAgICAgICByZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy50b1N0cmluZygpKVxuICAgIH1cblxuICAgIHNpemUoc3Ryb2tlV2lkdGg9MCl7XG4gICAgICAgIGNvbnN0IHtsZWZ0LHJpZ2h0LHRvcCxib3R0b20sd2lkdGg9cmlnaHQtbGVmdCxoZWlnaHQ9Ym90dG9tLXRvcH09dGhpcy5ib3VuZHMoKVxuICAgICAgICByZXR1cm4ge3dpZHRoOndpZHRoK3N0cm9rZVdpZHRoLGhlaWdodDpoZWlnaHQrc3Ryb2tlV2lkdGh9XG4gICAgfVxufVxuXG5jb25zdCBiZXR3ZWVuPShhLGIxLGIyKT0+KChhID49IGIxKSAmJiAoYSA8PSBiMikpfHwoKGEgPj0gYjIpICYmIChhIDw9IGIxKSlcbmZ1bmN0aW9uIGxpbmVfbGluZV9pbnRlcnNlY3QobGluZTEsIGxpbmUyKSB7XG5cdHZhciB4MSA9IGxpbmUxLngxLCB4MiA9IGxpbmUxLngyLCB4MyA9IGxpbmUyLngxLCB4NCA9IGxpbmUyLngyO1xuXHR2YXIgeTEgPSBsaW5lMS55MSwgeTIgPSBsaW5lMS55MiwgeTMgPSBsaW5lMi55MSwgeTQgPSBsaW5lMi55Mjtcblx0dmFyIHB0X2Rlbm9tID0gKHgxIC0geDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzIC0geDQpO1xuXHR2YXIgcHRfeF9udW0gPSAoeDEqeTIgLSB5MSp4MikgKiAoeDMgLSB4NCkgLSAoeDEgLSB4MikgKiAoeDMqeTQgLSB5Myp4NCk7XG5cdHZhciBwdF95X251bSA9ICh4MSp5MiAtIHkxKngyKSAqICh5MyAtIHk0KSAtICh5MSAtIHkyKSAqICh4Myp5NCAtIHkzKng0KTtcblx0aWYgKHB0X2Rlbm9tID09IDApIHtcblx0XHRpZihwdF94X251bT09MCAmJiBwdF95X251bT09MCl7Ly9vdmVybGFwcGVkXG5cdFx0XHRcblx0XHR9XG5cdFx0Ly9yZXR1cm4gXCJwYXJhbGxlbFwiXG5cdH1lbHNle1xuXHRcdHZhciBwdCA9IHtcblx0XHRcdHg6IHB0X3hfbnVtIC8gcHRfZGVub20sXG5cdFx0XHR5OiBwdF95X251bSAvIHB0X2Rlbm9tXG5cdFx0fVxuXG5cdFx0aWYgKCBiZXR3ZWVuKHB0LngsIHgxLCB4Milcblx0XHRcdCYmIGJldHdlZW4ocHQueSwgeTEsIHkyKVxuXHRcdFx0JiYgYmV0d2VlbihwdC54LCB4MywgeDQpXG5cdFx0XHQmJiBiZXR3ZWVuKHB0LnksIHkzLCB5NCkpIHtcblx0XHRcdFx0cmV0dXJuIHB0XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vcmV0dXJuIFwibm90IGluIHJhbmdlXCJcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCxGcmFnbWVudH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IE92ZXJsYXkgZnJvbSBcIi4vb3ZlcmxheVwiXG5cbi8qKlxuICogcmVzaXphYmxlIHN1cHBvcnQgdHdvIHR5cGVzOlxuICogMS4gc3BvdHMgZm9yIG11bHRpcGxlIGRpcmVjdGlvbnMsIG9yIFxuICogMi4gYSBzaW5nbGUgZGlyZWN0aW9uIFxuICovXG5jb25zdCBkaXJlY3Rpb249UHJvcFR5cGVzLm9uZU9mKFwiZXcsbnMsbndzZSxuZXN3XCIuc3BsaXQoXCIsXCIpLnJlZHVjZSgoYWxsLGEpPT4oYWxsLnNwbGljZSgwLDAsYSxcIi1cIithKSxhbGwpLFtdKSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc2l6YWJsZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0ZGlyZWN0aW9uLFxuXHRcdG9uUmVzaXplOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuXHRcdHNwb3RzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuXHRcdFx0eDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0eTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0ZGlyZWN0aW9uLFxuXHRcdFx0d2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0XHRoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0fSkpXG5cdH1cblxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cdH1cblxuXHRyZW5kZXIoKXtcblx0XHRjb25zdCB7cmVzaXppbmcsY3Vyc29yfT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge2NoaWxkcmVuLHNwb3RzPVtdLCBvbkVuZCwgZGlyZWN0aW9ufT10aGlzLnByb3BzXG5cdFx0aWYocmVzaXppbmcpe1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PE92ZXJsYXlcblx0XHRcdFx0XHRvbk1vdXNlVXA9e2U9Pntcblx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe3Jlc2l6aW5nOmZhbHNlfSlcblx0XHRcdFx0XHRcdG9uRW5kICYmIG9uRW5kKClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdG9uTW91c2VNb3ZlPXtlPT57XG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHR0aGlzLnJlc2l6ZShlKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0c3R5bGU9e3tjdXJzb3J9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdFx0e3Nwb3RzLm1hcChhPT48U3BvdCBrZXk9e2EuZGlyZWN0aW9ufSB7Li4uYX0vPil9XG5cdFx0XHRcdDwvT3ZlcmxheT5cblx0XHRcdClcblx0XHR9XG5cdFx0XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGcmFnbWVudD5cblx0XHRcdFx0e2RpcmVjdGlvbiA/IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSx7b25Nb3VzZURvd246ZT0+dGhpcy5zdGFydFJlc2l6ZShkaXJlY3Rpb24sZSl9KSA6IGNoaWxkcmVufVxuXHRcdFx0XHR7c3BvdHMubWFwKGE9PjxTcG90IGtleT17YS5kaXJlY3Rpb259IHsuLi5hfSBvbk1vdXNlRG93bj17ZT0+dGhpcy5zdGFydFJlc2l6ZShhLmRpcmVjdGlvbixlKX0vPil9fVxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdH1cblxuXHRzdGFydFJlc2l6ZShyZXNpemluZyxlKXtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0Y29uc3Qge2NsaWVudFg6bGVmdCwgY2xpZW50WTp0b3AsdGFyZ2V0OntzdHlsZTp7Y3Vyc29yfX19PWVcblx0XHRjb25zdCB7b25TdGFydH09dGhpcy5wcm9wc1xuXHRcdHRoaXMuc2V0U3RhdGUoe3Jlc2l6aW5nLGN1cnNvcn0pXG5cdFx0b25TdGFydCAmJiBvblN0YXJ0KClcblx0XHR0aGlzLmxlZnQ9bGVmdFxuXHRcdHRoaXMudG9wPXRvcFxuXHR9XG5cblx0cmVzaXplKHtjbGllbnRYOmxlZnQsY2xpZW50WTp0b3B9KXtcblx0XHRjb25zdCB7cHJvcHM6e29uUmVzaXplfSwgc3RhdGU6e3Jlc2l6aW5nfX09dGhpc1xuXHRcdGxldCB4PWxlZnQtdGhpcy5sZWZ0XG5cdFx0bGV0IHk9dG9wLXRoaXMudG9wXG5cdFx0c3dpdGNoKHJlc2l6aW5nKXtcblx0XHRjYXNlIFwiLW5zXCI6XG5cdFx0XHR5Kj0tMVxuXHRcdGNhc2UgXCJuc1wiOlxuXHRcdFx0aWYoeSl7XG5cdFx0XHRcdGlmKGZhbHNlPT09b25SZXNpemUoe3k6LXl9KSl7XG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRicmVha1xuXHRcdGNhc2UgXCItZXdcIjpcblx0XHRcdHgqPS0xXG5cdFx0Y2FzZSBcImV3XCI6XG5cdFx0XHRpZih4KXtcblx0XHRcdFx0aWYoZmFsc2U9PT1vblJlc2l6ZSh7eH0pKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdGJyZWFrXG5cblx0XHRjYXNlIFwiLW53c2VcIjpcblx0XHRcdHgqPS0xXG5cdFx0Y2FzZSBcIm53c2VcIjpcblx0XHRcdGlmKHggJiYgeSl7XG5cdFx0XHRcdGlmKGZhbHNlPT09b25SZXNpemUoe3g6LXgseX0pKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdGJyZWFrXG5cblx0XHRjYXNlIFwiLW5lc3dcIjpcblx0XHRcdHgqPS0xXG5cdFx0Y2FzZSBcIm5lc3dcIjpcblx0XHRcdGlmKHggJiYgeSl7XG5cdFx0XHRcdGlmKGZhbHNlPT09b25SZXNpemUoe3gseX0pKXtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdGJyZWFrXG5cdFx0fVxuXHRcdHRoaXMubGVmdD1sZWZ0XG5cdFx0dGhpcy50b3A9dG9wXG5cdH1cbn1cblxuY29uc3QgU3BvdD0oKHt3aWR0aD01LGhlaWdodD01LHgseSxkaXJlY3Rpb24sc3R5bGU9e30sIC4uLnByb3BzfSk9PjxyZWN0IHsuLi57XG5cdFx0Li4ucHJvcHMsXG5cdFx0d2lkdGgsaGVpZ2h0LFxuXHRcdHg6eC13aWR0aC8yLFxuXHRcdHk6eS1oZWlnaHQvMixcblx0XHRzdHlsZTp7XG5cdFx0XHRmaWxsOlwid2hpdGVcIixzdHJva2U6XCJsaWdodGdyYXlcIixzdHJva2VXaWR0aDoxLFxuXHRcdFx0Y3Vyc29yOmAke2RpcmVjdGlvbi5yZXBsYWNlKFwiLVwiLFwiXCIpfS1yZXNpemVgLFxuXHRcdFx0Li4uc3R5bGVcblx0XHR9LFxuXHR9fS8+XG4pXG5cblxuIiwiaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgT3ZlcmxheSBmcm9tIFwiLi9vdmVybGF5XCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm90YXRhYmxlIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR4OlByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRyOlByb3BUeXBlcy5udW1iZXIsXG5cdFx0ZGVncmVlOiBQcm9wVHlwZXMubnVtYmVyLFxuXHR9XG5cdFxuXHRzdGF0ZT17cm90YXRpbmc6ZmFsc2V9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3Byb3BzOntyPTEyLHgseSxvbkVuZCwgZGVncmVlPTAsIG9uUm90YXRlfSxzdGF0ZTp7cm90YXRpbmd9fT10aGlzXG5cdFx0Y29uc3Qgcm90YXRvcj17XG5cdFx0XHR3aWR0aDoyKnIsaGVpZ2h0OjIqcix4Ongtcix5Oi0yKnIsXG5cdFx0XHRzdHlsZTp7ZmlsbDpcIndoaXRlXCIsc3Ryb2tlOlwibGlnaHRncmF5XCIsc3Ryb2tlV2lkdGg6MX0sXG5cdFx0fVxuXHRcdFxuXHRcdGlmKCFyb3RhdGluZylcblx0XHRcdHJldHVybiAoPHVzZSB4bGlua0hyZWY9XCIjcm90YXRvclwiIHsuLi5yb3RhdG9yfSBvbk1vdXNlRG93bj17ZT0+dGhpcy5zZXRTdGF0ZSh7cm90YXRpbmc6dHJ1ZX0pfS8+KVxuXHRcdFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdDxnIHJlZj1cImxvY2F0b3JcIj5cblx0XHRcdFx0XHQ8dGV4dCB4PXt4K3J9IHk9ey0yMH0+e2RlZ3JlZX08L3RleHQ+XG5cdFx0XHRcdFx0PHVzZSB4bGlua0hyZWY9XCIjcm90YXRvclwiIHsuLi5yb3RhdG9yfS8+XG5cdFx0XHRcdDwvZz5cblx0XHRcdFx0PE92ZXJsYXkgY3Vyc29yPVwiY3Jvc3NoYWlyXCJcblx0XHRcdFx0XHRvbk1vdXNlVXA9e2U9Pntcblx0XHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe3JvdGF0aW5nOnVuZGVmaW5lZH0pXG5cdFx0XHRcdFx0XHRpZihvbkVuZClcblx0XHRcdFx0XHRcdFx0b25FbmQoKVxuXHRcdFx0XHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0b25Nb3VzZU1vdmU9e2U9Pntcblx0XHRcdFx0XHRcdG9uUm90YXRlKGUpXG5cdFx0XHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0PC9GcmFnbWVudD5cblx0XHQpXG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgRnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7d2hlblNlbGVjdGlvbkNoYW5nZSxBQ1RJT04sIFJlYWN0UXVlcnl9IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi9jb21wb3NlZC9ncm91cFwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL21vdmFibGVcIlxuaW1wb3J0IFJlc2l6YWJsZSBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Jlc2l6YWJsZVwiXG5pbXBvcnQgUm90YXRhYmxlIGZyb20gXCIuLi8uLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcm90YXRhYmxlXCJcblxuXG5leHBvcnQgZGVmYXVsdCB3aGVuU2VsZWN0aW9uQ2hhbmdlKCkoY2xhc3MgRm9jdXNTaGFwZSBleHRlbmRzIENvbXBvbmVudHtcblx0c3RhdGljIHByb3BUeXBlcz17XG5cdFx0d2lkdGg6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0aGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdHBhdGg6IFByb3BUeXBlcy5zdHJpbmcsXG5cdFx0cmVzaXphYmxlOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KSxcblx0XHRyb3RhdGFibGU6IFByb3BUeXBlcy5zaGFwZSh7XG5cdFx0XHR4OlByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcblx0XHRcdHk6UHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuXHRcdFx0cjpQcm9wVHlwZXMubnVtYmVyLFxuXHRcdFx0ZGVncmVlOiBQcm9wVHlwZXMubnVtYmVyLFxuXHRcdH0pLFxuXHRcdG1vdmFibGU6IFByb3BUeXBlcy5ib29sLFxuXHRcdGlkOlByb3BUeXBlcy5zdHJpbmcsXG5cdFx0YWJzb2x1dGU6UHJvcFR5cGVzLmJvb2wsXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRlZGl0YWJsZTpQcm9wVHlwZXMuYW55XG5cdH1cblxuXHRzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHtpZCxzZWxlY3Rpb259KXtcblx0XHRpZighc2VsZWN0aW9uKVxuXHRcdFx0cmV0dXJuIHt9XG5cdFx0Y29uc3QgZ2V0Q29tcG9zZXI9YT0+c2VsZWN0aW9uLnBvc2l0aW9uaW5nLmdldENvbXBvc2VyKGEpXG5cdFx0Y29uc3QgY3Vyc29yPXNlbGVjdGlvbi5wb3NpdGlvbi5pZFxuXHRcdGNvbnN0IHRhcmdldD1nZXRDb21wb3NlcihpZClcblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTp0YXJnZXQuZ2V0Q29tcG9zZVR5cGUoKSxcblx0XHRcdFxuXHRcdFx0Ly9hbGwgZ3JhbmQgZm9jdXMgc2hhcGUgb2YgY3Vyc29yL3NlbGVjdGlvbiBzaG91bGQgc2hvdyBpdHNlbGZcblx0XHRcdHNob3dGb2N1czohIWdldENvbXBvc2VyKGN1cnNvcikuY2xvc2VzdChhPT5hLnByb3BzLmlkPT1pZCksXG5cdFx0XHRcblx0XHRcdC8vXG5cdFx0XHRpc0FuY2hvcjp0YXJnZXQuY2xvc2VzdChhPT4oYSE9dGFyZ2V0ICYmIChhLmlzRnJhbWV8fGEuaXNTZWN0aW9uKSl8fGEuZ2V0Q29tcG9zZVR5cGUoKT09XCJhbmNob3JcIikuZ2V0Q29tcG9zZVR5cGUoKT09XCJhbmNob3JcIixcblx0XHRcdFxuXHRcdFx0Ly9zaG91bGQgbm90IHRyYW5zZm9ybSBpZiBjdXJzb3Ivc2VsZWN0aW9uIGlzIGluIGVkaXRhYmxlIGN1cnNvciwgc3VjaCBhcyBhbnkgaW5saW5lIGNvbnRlbnRcblx0XHRcdGlzRWRpdGFibGVDdXJzb3I6IChpc1BhcmFncmFwaD0+e1xuXHRcdFx0XHRcdGNvbnN0IGdyYW5kPWdldENvbXBvc2VyKGN1cnNvcikuY2xvc2VzdChhPT5pc1BhcmFncmFwaChhKXx8YS5wcm9wcy5pZD09aWQpXG5cdFx0XHRcdFx0cmV0dXJuIGdyYW5kICYmIGlzUGFyYWdyYXBoKGdyYW5kKVxuXHRcdFx0XHR9KShhPT5hLmdldENvbXBvc2VUeXBlKCk9PVwicGFyYWdyYXBoXCIpLFxuXHRcdH1cblx0fVxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHN1cGVyKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0YXRlPXt9XG5cblx0fVxuXG5cdHNob3VsZENvbXBvbmVudFVwZGF0ZSh7c2VsZWN0aW9ufSl7XG5cdFx0cmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0aW9uIT1zZWxlY3Rpb25cblx0fVxuXG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtwcm9wczp7c2VsZWN0aW9uLCBjaGlsZHJlbjpvdXRsaW5lLCByb3RhdGUsIHNjYWxlLCB0cmFuc2xhdGV9LGNvbnRleHQ6e2VkaXRhYmxlfSxzdGF0ZTp7c2hvd0ZvY3VzfX09dGhpc1xuXHRcdGlmKCFzZWxlY3Rpb24gfHwgIWVkaXRhYmxlIHx8ICFzaG93Rm9jdXMpe1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEdyb3VwIHsuLi57cm90YXRlLCBzY2FsZSwgLi4udHJhbnNsYXRlfX0+XG5cdFx0XHRcdFx0e291dGxpbmV9XG5cdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09b3V0bGluZS5wcm9wc1xuXHRcdGNvbnN0ICRvdXRsaW5lPW5ldyBSZWFjdFF1ZXJ5KG91dGxpbmUpXG5cdFx0Y29uc3QgY29udGVudD0kb3V0bGluZS5maW5kRmlyc3QoXCIuY29udGVudFwiKS5nZXQoMClcblxuXHRcdGNvbnN0IHtpZCwgZGVncmVlLCBkaXNwYXRjaCxwb3NpdGlvbmluZz1zZWxlY3Rpb24ucG9zaXRpb25pbmcsXG5cdFx0XHRwYXRoPWBNMCAwIGgke3dpZHRofSB2JHtoZWlnaHR9IGgkey13aWR0aH0gWmAsXG5cdFx0XHRyZXNpemFibGU9Wy8vZGVmYXVsdCBmb3IgcmVjdFt3aWR0aCxoZWlnaHRdXG5cdFx0XHRcdHt4OjAseTowLGRpcmVjdGlvbjpcIm53c2VcIn0sXG5cdFx0XHRcdHt4OndpZHRoLzIseTowLGRpcmVjdGlvbjpcIm5zXCIsfSxcblx0XHRcdFx0e3g6d2lkdGgseTowLGRpcmVjdGlvbjpcIm5lc3dcIn0sXG5cdFx0XHRcdHt4OndpZHRoLHk6aGVpZ2h0LzIsZGlyZWN0aW9uOlwiZXdcIn0sXG5cdFx0XHRcdHt4OndpZHRoLHk6aGVpZ2h0LGRpcmVjdGlvbjpcIi1ud3NlXCJ9LFxuXHRcdFx0XHR7eDp3aWR0aC8yLHk6aGVpZ2h0LGRpcmVjdGlvbjpcIi1uc1wifSxcblx0XHRcdFx0e3g6MCx5OmhlaWdodCxkaXJlY3Rpb246XCItbmVzd1wifSxcblx0XHRcdFx0e3g6MCx5OmhlaWdodC8yLGRpcmVjdGlvbjpcIi1ld1wifSxcblx0XHRcdF0sXG5cdFx0XHRyb3RhdGFibGU9ey8vZGVmYXVsdCBmb3IgcmVjdCwgYW5kIHt4LHl9IGlzIGNlbnRlclxuXHRcdFx0XHR4OndpZHRoLzIsXG5cdFx0XHRcdHk6aGVpZ2h0LzIsXG5cdFx0XHRcdGRlZ3JlZTpNYXRoLmNlaWwoZGVncmVlKjEwMCkvMTAwLFxuXHRcdFx0fSxcblx0XHRcdGZvY3VzYWJsZUNvbnRlbnQ9dHJ1ZSxtb3ZhYmxlPXRydWV9PXRoaXMucHJvcHNcblx0XHRjb25zdCB7dHlwZSxpc0FuY2hvcixpc0VkaXRhYmxlQ3Vyc29yfT10aGlzLnN0YXRlXG5cdFx0Y29uc3QgZWR0YWJsZUNvbnRlbnQ9KFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHQ8R3JvdXAgey4uLntcImRhdGEtbm9jb250ZW50XCI6dHJ1ZX19PlxuXHRcdFx0XHRcdDxwYXRoIGQ9e3BhdGh9IGZpbGw9XCJub25lXCIgc3Ryb2tlPVwibGlnaHRncmF5XCIvPlxuXHRcdFx0XHQ8L0dyb3VwPlxuXHRcdFx0XHR7bW92YWJsZSA/IChcblx0XHRcdFx0XHQ8RnJhZ21lbnQ+XG5cdFx0XHRcdFx0XHR7IWZvY3VzYWJsZUNvbnRlbnQgJiYgY29udGVudH1cblx0XHRcdFx0XHRcdDxHcm91cCB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0XHRcdDxNb3ZhYmxlIGlzQW5jaG9yPXtpc0FuY2hvcn1cblx0XHRcdFx0XHRcdFx0XHRvbk1vdmU9e2U9PmRpc3BhdGNoKEFDVElPTi5TZWxlY3Rpb24uTU9WRSh7Li4uZSwgaWQsdHlwZX0pKX0+XG5cdFx0XHRcdFx0XHRcdFx0PHBhdGggZD17cGF0aH0gZmlsbD1cIndoaXRlXCIgZmlsbE9wYWNpdHk9ezAuMDF9IGN1cnNvcj1cIm1vdmVcIi8+XG5cdFx0XHRcdFx0XHRcdDwvTW92YWJsZT5cblx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0XHR7Zm9jdXNhYmxlQ29udGVudCAmJiBjb250ZW50fVxuXHRcdFx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0XHRcdCkgOiBjb250ZW50fVxuXG5cdFx0XHRcdDxHcm91cCB7Li4ue1wiZGF0YS1ub2NvbnRlbnRcIjp0cnVlfX0+XG5cdFx0XHRcdFx0e3JvdGF0YWJsZSAmJiAoPFJvdGF0YWJsZSB7Li4ucm90YXRhYmxlfVxuXHRcdFx0XHRcdFx0XHRvblJvdGF0ZT17KHtjbGllbnRYOmxlZnQsY2xpZW50WTp0b3B9KT0+e1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHh5PXBvc2l0aW9uaW5nLmFzQ2FudmFzUG9pbnQoe2xlZnQsdG9wfSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBwb3M9cG9zaXRpb25pbmcucG9zaXRpb24oaWQsMClcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBjZW50ZXI9e3g6cm90YXRhYmxlLngrcG9zLngseTpyb3RhdGFibGUueStwb3MueX1cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWdyZWU9cGFyc2VJbnQoTWF0aC5hdGFuMih4eS54LWNlbnRlci54LC14eS55K2NlbnRlci55KSoxODAvTWF0aC5QSSlcblxuXHRcdFx0XHRcdFx0XHRcdGRpc3BhdGNoKEFDVElPTi5FbnRpdHkuVVBEQVRFKHtpZCx0eXBlLHJvdGF0ZTpkZWdyZWU8MCA/IGRlZ3JlZSszNjAgOiBkZWdyZWV9KSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fS8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR7cmVzaXphYmxlICYmICg8UmVzaXphYmxlIHNwb3RzPXtyZXNpemFibGV9XG5cdFx0XHRcdFx0XHRcdG9uUmVzaXplPXsoe3gseX0pPT57XG5cdFx0XHRcdFx0XHRcdFx0bGV0IHNpemU9bnVsbFxuXHRcdFx0XHRcdFx0XHRcdGlmKHk9PT11bmRlZmluZWQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT17d2lkdGg6d2lkdGgreH1cblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSBpZih4PT09dW5kZWZpbmVkKXtcblx0XHRcdFx0XHRcdFx0XHRcdHNpemU9e2hlaWdodDpoZWlnaHQreX1cblx0XHRcdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNjYWxlPTErTWF0aC5tYXgoTWF0aC5hYnMoeCkvd2lkdGgsTWF0aC5hYnMoeSkvaGVpZ2h0KSp4L01hdGguYWJzKHgpXG5cdFx0XHRcdFx0XHRcdFx0XHRzaXplPXt3aWR0aDp3aWR0aCpzY2FsZSwgaGVpZ2h0OmhlaWdodCpzY2FsZX1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcGF0Y2goQUNUSU9OLkVudGl0eS5VUERBVEUoe2lkLHR5cGUsc2l6ZX0pKVxuXHRcdFx0XHRcdFx0XHR9fS8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB7Li4uKGlzRWRpdGFibGVDdXJzb3IgPyB7Lypub3QgdHJhbnNmb3JtKi99IDoge3NjYWxlLCByb3RhdGUsIC4uLnRyYW5zbGF0ZX0pfT5cblx0XHRcdFx0eyRvdXRsaW5lLnJlcGxhY2UoY29udGVudCwgZWR0YWJsZUNvbnRlbnQpLmdldCgwKX1cblx0XHRcdDwvR3JvdXA+XG5cdFx0KVxuXHR9XG59KVxuXG4iLCJpbXBvcnQgUmVhY3Qse0NvbXBvbmVudCx9IGZyb20gXCJyZWFjdFwiXG5cbmltcG9ydCBtZW1vaXplIGZyb20gXCJtZW1vaXplLW9uZVwiXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vLi4vY29tcG9zZWRcIlxuXG5pbXBvcnQgUGF0aCBmcm9tIFwiLi4vLi4vdG9vbC9wYXRoXCJcbmltcG9ydCBGb2N1c1NoYXBlIGZyb20gXCIuL2ZvY3VzLXNoYXBlXCJcblxuZXhwb3J0IGNsYXNzIGN1c3RvbSBleHRlbmRzIENvbXBvbmVudHtcblx0Z2V0IHN0cm9rZVdpZHRoKCl7XG5cdFx0Y29uc3Qge291dGxpbmU6e3dpZHRoPTB9PXt9fT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIHdpZHRofHwwXG5cdH1cblxuXHRnZXQgY29udGVudEJveCgpe1xuXHRcdGNvbnN0IHttYXJnaW46e3JpZ2h0PTAsbGVmdD0wLHRvcD0wLGJvdHRvbT0wfX09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHR9PXRoaXMuZ2V0UGF0aCgpLnNpemUoKVxuXHRcdGNvbnN0IHN0cm9rZVdpZHRoPXRoaXMuc3Ryb2tlV2lkdGhcblx0XHRyZXR1cm4ge3dpZHRoOndpZHRoLXN0cm9rZVdpZHRoLzItcmlnaHQtbGVmdCxoZWlnaHQ6aGVpZ2h0LXN0cm9rZVdpZHRoLzItdG9wLWJvdHRvbX1cblx0fVxuXG5cdGdldCBvdXRsaW5lQm94KCl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UGF0aCgpLnNpemUodGhpcy5zdHJva2VXaWR0aClcblx0fVxuXG5cdGF2YWlsYWJsZVNwYWNlKCl7XG5cdFx0cmV0dXJuIHRoaXMuY29udGVudEJveFxuXHR9XG5cblx0Y3JlYXRlQ29tcG9zZWRTaGFwZShjb250ZW50LCBmb2N1c2FibGVDb250ZW50KXtcblx0XHRjb25zdCB7XG5cdFx0XHRcdG1hcmdpbjp7bGVmdD0wLHRvcD0wfSxcblx0XHRcdFx0c29saWRGaWxsPVwidHJhbnNwYXJlbnRcIixibGlwRmlsbDp7dXJsfT17fSxcblx0XHRcdFx0b3V0bGluZT17d2lkdGg6MH0sXG5cdFx0XHRcdGZpbGw9e2ZpbGw6c29saWRGaWxsfSxcblx0XHRcdFx0cm90YXRlOmRlZ3JlZSxcblx0XHRcdFx0c2NhbGUsXG5cdFx0XHRcdGlkLFxuXHRcdFx0fT10aGlzLnByb3BzXG5cblx0XHRjb25zdCB7d2lkdGgsaGVpZ2h0LHJvdGF0ZSx0cmFuc2xhdGUsZ2VvbWV0cnl9PXRoaXMudHJhbnNmb3JtKHRoaXMuZ2V0UGF0aCgpLmNsb25lKCkpXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb2N1c1NoYXBlIHsuLi57d2lkdGgsaGVpZ2h0LCBnZW9tZXRyeSwgZm9jdXNhYmxlQ29udGVudCwgc2NhbGUscm90YXRlLHRyYW5zbGF0ZSwgZGVncmVlLCBpZH19PlxuXHRcdFx0XHQ8R3JvdXAgey4uLnRoaXMub3V0bGluZUJveH0+XG5cdFx0XHRcdFx0PEdyb3VwIHg9e3RoaXMuc3Ryb2tlV2lkdGgvMn0geT17dGhpcy5zdHJva2VXaWR0aC8yfT5cblx0XHRcdFx0XHRcdDxHcm91cCAgey4uLntcImRhdGEtbm9jb250ZW50XCI6dHJ1ZX19PlxuXHRcdFx0XHRcdFx0XHR7PHBhdGggZD17dGhpcy5nZXRQYXRoKCkudG9TdHJpbmcoKX0gc3Ryb2tlV2lkdGg9e3RoaXMuc3Ryb2tlV2lkdGh9IHN0cm9rZT17b3V0bGluZS5zb2xpZEZpbGx9IHsuLi5maWxsfS8+fVxuXHRcdFx0XHRcdFx0XHR7dXJsICYmIDxpbWFnZSB7Li4uey4uLnRoaXMuY29udGVudEJveCx4OmxlZnQsIHk6dG9wLCB4bGlua0hyZWY6IHVybCwgcHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn19IC8+fVxuXHRcdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0XHRcdDxHcm91cCB4PXt0aGlzLnN0cm9rZVdpZHRoLzIrbGVmdH0geT17dGhpcy5zdHJva2VXaWR0aC8yK3RvcH0gY2xhc3NOYW1lPVwiY29udGVudFwiPlxuXHRcdFx0XHRcdFx0XHR7Y29udGVudH1cblx0XHRcdFx0XHRcdDwvR3JvdXA+XG5cdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdDwvRm9jdXNTaGFwZT5cblx0XHQpXG5cdH1cblxuXHRnZXRQYXRoKCl7XG5cdFx0cmV0dXJuIG1lbW9pemUoKGdlb21ldHJ5KT0+bmV3IFBhdGgoZ2VvbWV0cnkpKSh0aGlzLnByb3BzLmdlb21ldHJ5KVxuXHR9XG5cblx0Y3JlYXRlRm9jdXNTaGFwZShjaGlsZHJlbiwgZm9jdXNhYmxlQ29udGVudCl7XG5cdFx0Y29uc3Qge291dGxpbmVCb3g6e3dpZHRoLCBoZWlnaHR9LHByb3BzOntyb3RhdGU9MCxpZH19PXRoaXNcblx0XHRyZXR1cm4gKDxGb2N1c1NoYXBlIHsuLi57d2lkdGgsIGhlaWdodCxyb3RhdGUsaWQsZm9jdXNhYmxlQ29udGVudCxjaGlsZHJlbn19Lz4pXG5cdH1cblxuXHQvKipcblx0ICogUm90YXRpb24gaGVhdmlseSBkZXBlbmRzIG9uIGlubGluZSBzdG9yeSBiYXNlbGluZSBpbXBsZW1lbnRhdGlvblxuXHQgKi9cblx0dHJhbnNmb3JtKGdlb21ldHJ5KXtcblx0XHR2YXIge3JvdGF0ZSwgc2NhbGV9PXRoaXMucHJvcHNcblx0XHRjb25zdCB0cmFuc2xhdGU9e31cblx0XHRpZihyb3RhdGUpe1xuXHRcdFx0Y29uc3QgYT1nZW9tZXRyeS5ib3VuZHMoKVxuXHRcdFx0Y29uc3Qge3gseX09Z2VvbWV0cnkuY2VudGVyKClcblx0XHRcdGdlb21ldHJ5LnJvdGF0ZShyb3RhdGUseCx5KVxuXHRcdFx0Y29uc3QgYj1nZW9tZXRyeS5ib3VuZHMoKVxuXHRcdFx0cm90YXRlPWAke3JvdGF0ZX0gJHt4fSAke3l9YFxuXHRcdFx0XG5cdFx0XHR0cmFuc2xhdGUueD1wYXJzZUludChhLmxlZnQtYi5sZWZ0KVxuXHRcdFx0dHJhbnNsYXRlLnk9cGFyc2VJbnQoYS50b3AtYi50b3ApXG5cdFx0XHRnZW9tZXRyeS50cmFuc2xhdGUodHJhbnNsYXRlLngsIHRyYW5zbGF0ZS55KVxuXHRcdFx0Z2VvbWV0cnkub3JpZ2luPXt4OnRyYW5zbGF0ZS54LHk6dHJhbnNsYXRlLnl9XG5cdFx0fVxuXG5cdFx0aWYoc2NhbGUpe1xuXHRcdFx0Z2VvbWV0cnkuc2NhbGUoc2NhbGUpXG5cdFx0fVxuXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuc2l6ZShnZW9tZXRyeS5zdHJva2VXaWR0aD10aGlzLnN0cm9rZVdpZHRoKVxuXHRcdHJldHVybiB7d2lkdGgsaGVpZ2h0LGdlb21ldHJ5LHJvdGF0ZSx0cmFuc2xhdGV9XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIHJlY3QgZXh0ZW5kcyBjdXN0b217XG5cdGdldFBhdGgoKXtcblx0XHRjb25zdCB7d2lkdGg6dyxoZWlnaHQ6aH09dGhpcy5wcm9wc1xuXHRcdHJldHVybiBuZXcgUGF0aChgTTAgMGgke3d9diR7aH1oJHstd316YClcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgZWxsaXBzZSBleHRlbmRzIGN1c3RvbXtcblx0Z2V0UGF0aCgpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsY3g9d2lkdGgvMixjeT1oZWlnaHQvMixyeD1jeCxyeT1jeX09dGhpcy5wcm9wc1xuXHRcdHJldHVybiBuZXcgUGF0aChgTSR7Y3gtcnh9LCR7Y3l9YSR7cnh9LCR7cnl9IDAgMSwwICR7cngqMn0sMGEke3J4fSwke3J5fSAwIDEsMCAtJHtyeCoyfSwwYClcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgY2lyY2xlIGV4dGVuZHMgZWxsaXBzZXtcblxufSIsImltcG9ydCBSZWFjdCx7RnJhZ21lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5pbXBvcnQgbWVtb2l6ZSBmcm9tIFwibWVtb2l6ZS1vbmVcIlxuXG5pbXBvcnQge0dyb3VwfSBmcm9tIFwiLi4vLi4vY29tcG9zZWRcIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxlZGl0YWJsZSxMYXlvdXR9IGZyb20gXCIuLi8uLi9jb21wb3NhYmxlXCJcblxuaW1wb3J0IEZyYW1lIGZyb20gXCIuLi9mcmFtZVwiXG5cblxuaW1wb3J0IHtjdXN0b20sIHJlY3QsIGVsbGlwc2UsIGNpcmNsZX0gZnJvbSBcIi4vc2hhcGVzXCJcblxuY29uc3QgU3VwZXI9ZWRpdGFibGUoSGFzUGFyZW50QW5kQ2hpbGQoZG9tLlNoYXBlKSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYXBlIGV4dGVuZHMgRnJhbWV7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1TdXBlci5kaXNwbGF5TmFtZVxuXHRzdGF0aWMgcHJvcFR5cGVzPVN1cGVyLnByb3BUeXBlc1xuXHRzdGF0aWMgZGVmYXVsdFByb3BzPVN1cGVyLmRlZmF1bHRQcm9wc1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5GcmFtZS5jb250ZXh0VHlwZXMsXG5cdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5hbnksXG5cdH1cblxuXHRmb2N1c2FibGU9dHJ1ZVxuXG5cdF9fZ2V0R2VvbWV0cnk9bWVtb2l6ZShjb21wb3NlZFVVSUQ9Pntcblx0XHRjb25zdCB7Z2VvbWV0cnk9XCJyZWN0XCJ9PXRoaXMucHJvcHNcblx0XHRjb25zdCBHZW9tZXRyeT10aGlzLmNvbnN0cnVjdG9yW2dlb21ldHJ5XXx8dGhpcy5jb25zdHJ1Y3Rvci5jdXN0b21cblx0XHRyZXR1cm4gbmV3IEdlb21ldHJ5KHRoaXMucHJvcHMsIHRoaXMuY29udGV4dClcblx0fSlcblxuXHRnZXQgZ2VvbWV0cnkoKXtcblx0XHRyZXR1cm4gdGhpcy5fX2dldEdlb21ldHJ5KHRoaXMuY29tcHV0ZWQuY29tcG9zZWRVVUlEKVxuXHR9XG5cblx0X19nZXRTcGFjZT1tZW1vaXplKGdlb21ldHJ5PT57XG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuYXZhaWxhYmxlU3BhY2UoKVxuXHRcdHJldHVybiBMYXlvdXQuQ29uc3RyYWludFNwYWNlLmNyZWF0ZSh7d2lkdGgsaGVpZ2h0fSlcblx0XHRcdC5jbG9uZSh7ZWRnZXM6e1xuXHRcdFx0XHRwYWdlOntsZWZ0OjAscmlnaHQ6d2lkdGgsdG9wOjAsYm90dG9tOmhlaWdodH0sXG5cdFx0XHRcdFt0aGlzLmdldENvbXBvc2VUeXBlKCldOntsZWZ0OjAscmlnaHQ6d2lkdGgsdG9wOjAsYm90dG9tOmhlaWdodH0sXG5cdFx0XHR9fSlcblx0fSlcblxuXHRnZXRTcGFjZSgpe1xuXHRcdHJldHVybiB0aGlzLl9fZ2V0U3BhY2UodGhpcy5nZW9tZXRyeSlcblx0fVxuXG5cdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdGNvbnN0IGNvbnRlbnQ9KFxuXHRcdFx0PEZyYWdtZW50PlxuXHRcdFx0XHR7W1xuXHRcdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudCh0aGlzLnBvc2l0aW9uTGluZXModGhpcy5saW5lcykse2tleTpcImNvbnRlbnRcIn0pLFxuXHRcdFx0XHRcdC4uLnRoaXMuYW5jaG9ycy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChhLHtrZXk6aX0pKSxcblx0XHRcdFx0XS5maWx0ZXIoYT0+ISFhKS5zb3J0KCh7cHJvcHM6e3o6ejE9MH19LHtwcm9wczp7ejp6Mj0wfX0sKT0+ejEtejIpXG5cdFx0XHRcdH1cblx0XHRcdDwvRnJhZ21lbnQ+XG5cdFx0KVxuXHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHR0aGlzLmdlb21ldHJ5LmNyZWF0ZUNvbXBvc2VkU2hhcGUoY29udGVudCksXG5cdFx0XHR7Y2xhc3NOYW1lOlwiZnJhbWVcIiwgXCJkYXRhLWZyYW1lXCI6dGhpcy51dWlkfVxuXHRcdClcblx0fVxuXG5cdFxuXG5cdHN0YXRpYyBjdXN0b209Y3VzdG9tXG5cblx0c3RhdGljIHJlY3Q9cmVjdFxuXG5cdHN0YXRpYyBlbGxpcHNlPWVsbGlwc2VcblxuXHRzdGF0aWMgY2lyY2xlPWNpcmNsZVxufSIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgQ29tcG9zZWRJbWFnZSBmcm9tIFwiLi4vY29tcG9zZWQvaW1hZ2VcIlxuaW1wb3J0IHtOb0NoaWxkLGVkaXRhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5cbmltcG9ydCBTaGFwZSBmcm9tIFwiLi9zaGFwZVwiXG5jb25zdCBTdXBlcj1lZGl0YWJsZShOb0NoaWxkKGRvbS5JbWFnZSkpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZSBleHRlbmRzIFN1cGVye1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHQuLi5TdXBlci5jb250ZXh0VHlwZXMsXG5cdFx0ZWRpdGFibGU6IFByb3BUeXBlcy5hbnksXG5cdH1cblx0Zm9jdXNhYmxlPXRydWVcblxuXHRnZXRTaGFwZSgpe1xuXHRcdGNvbnN0IHt3aWR0aCxoZWlnaHQsaWQsfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIG5ldyBTaGFwZSh7d2lkdGgsIGhlaWdodCxpZCwuLi50aGlzLnByb3BzLm91dGxpbmUsIG1hcmdpbjp7fSxjaGlsZHJlbjpudWxsfSx7Y29udGV4dDp0aGlzLmNvbnRleHR9KVxuXHR9XG5cblx0Y3JlYXRlQ29tcG9zZWQyUGFyZW50KCl7XG5cdFx0Y29uc3QgZ2VvbWV0cnk9dGhpcy5nZXRTaGFwZSgpLmdlb21ldHJ5XG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodH09Z2VvbWV0cnkuY29udGVudEJveFxuXHRcdGNvbnN0IHtzcmN9PXRoaXMucHJvcHNcblx0XHRjb25zdCBpbWFnZT08Q29tcG9zZWRJbWFnZSB7Li4ue1xuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHR4bGlua0hyZWY6IHNyYyxcblx0XHRcdHByZXNlcnZlQXNwZWN0UmF0aW86XCJub25lXCIsXHRcblx0XHR9fS8+XG5cdFx0cmV0dXJuIGdlb21ldHJ5LmNyZWF0ZUNvbXBvc2VkU2hhcGUoaW1hZ2UsIGZhbHNlKVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGR9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5UYWJsZSlcblxuLyoqXG4gKiB0YWJsZS9yb3cvY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBibG9ja3NcbiAqIGNlbGwgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgY29tcG9zaW5nXG4gKiBidXQgY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBibG9ja3NcbiAqIHNwYWNlIGlzIGRlZmluZWQgYnkgY2VsbC0+cm93LT50YWJsZS0+cGFyZW50IHNwYWNlLCBzbyBpdCBoYXMgdG8gcmVxdWlyZSBzcGFjZSB1cFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZSBleHRlbmRzIFN1cGVye1xuXHQvKipyb3cgY2FsbCBpdCB0byBhcHBlbmQgYSBibG9jayBvZiByb3cqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQocm93KXtcblx0XHRjb25zdCB7d2lkdGgsaW5kZW50fT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcblx0XHRcdDxHcm91cCB3aWR0aD17d2lkdGh9IGhlaWdodD17cm93LnByb3BzLmhlaWdodH0+XG5cdFx0XHRcdHtSZWFjdC5jbG9uZUVsZW1lbnQocm93LHt4OmluZGVudH0pfVxuXHRcdFx0PC9Hcm91cD5cblx0XHQpXG5cdH1cbn1cbiIsImltcG9ydCBSZWFjdCx7UHVyZUNvbXBvbmVudCBhcyBDb21wb25lbnR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge2RvbSwgUmVhY3RRdWVyeX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxlZGl0YWJsZX0gZnJvbSBcIi4uL2NvbXBvc2FibGVcIlxuY29uc3QgU3VwZXI9SGFzUGFyZW50QW5kQ2hpbGQoZG9tLlJvdylcblxuLyoqXG4gKiB0ZXJtczpcbiAqIFJhbms6IGEgY29tcG9zZWQgbGluZSwgYSByb3cgbWF5IGJlIHNwbGl0dGVkIGludG8gbW9yZSB0aGFuIG9uZSByYW5rLCByYW5rIGFwcGx5IHZlcnRBbGlnblxuICogU2xvdDogYSBjb21wb3NlZCBjZWxsIHNlZ21lbnQsIGEgY2VsbCBtYXkgYmUgc3BsaXR0ZWQgaW50byBtb3JlIHRoYW4gb25lIHNsb3RcbiAqIFxuICogXG4gKiAqKipFdmVyeSB0aW1lIGEgcm93IHJlcXVlc3Qgc3BhY2UgdXAsIGEgcmFuayB3b3VsZCBiZSBjcmVhdGVkIHRvIGtlZXAgdGhlIHNwYWNlIGluIHRoZSBsYXlvdXQgZW5naW5lXG4gKiAqKipcbiAqID53aHkgcmFuaydzIGhlaWdodCBtdXN0IGJlIGZpeGVkPyBcbiAqICoqKiBib3JkZXJcbiAqID5yYW5rJ3MgaGVpZ2h0IGlzIG5vdCBhbHdheXMgY29ycmVjdCwgaG93IHRvIGZpeCBpdD8/PyBcbiAqICoqKiBhbGwgY2hpbGRyZW4gY29tcG9zZWQsIGVhY2ggcmFuaydzIGhlaWdodCBjb3VsZCBiZSBmaXhlZFxuICogKioqIHJhbmsncyBoZWlnaHQ9TWF4KHJvdyBoZWlnaHQgaWYgZGVmaW5lZCwgLi4uIHNsb3QncyBoZWlnaHQpXG4gKiBcbiAqIGNvbXB1dGVkLmNvbXBvc2VkIGlzIFtyYW5rLCByYW5rLCByYW5rLCAuLi5dXG4gKiByYW5rXHRcdHNwYWNlXFxjb2xcdGNvbDFcdGNvbDIgXHQuLi5cbiAqIHJhbmsxXHRzcGFjZTFcdFx0c2xvdDExXHRcdFxuICogcmFuazJcdHNwYWNlMlx0XHRzbG90MTJcdHNsb3QyMVxuICogLi4uXHRcdC4uLlx0IFx0XHQuLi5cdCBcdC4uLlxuICogd2hlbiBhcHBlbmQgUmFuayB0byBzcGFjZSwgIzEgaXMgc2ltcGxlIGFuZCBjaG9zZW5cbiAqIDE+IHJlcXVlc3QgcmFuayBzcGFjZSwgdGhlbiBhZGQgZW1wdHkgUmFuayBwbGFjZWhvbGRlciwgdGhlbiBhZGp1c3QgcmFuayBldmVyeSB0aW1lIGEgc2xvdCBjb21taXR0ZWRcbiAqIDI+IGJlZm9yZSByZXF1ZXN0aW5nIHJhbmsgc3BhY2UsIGNvbW1pdCBsYXN0IFJhbmsgcGxhY2Vob2xkZXIsIGRvIHdoYXQgIzEgd291bGQgZG9cbiAqIDM+IGFsbCBjaGlsZHJlbiBjb21wb3NlZCA6IGFmZmVjdCBibG9ja09mZnNldCwgc28gaXQncyBOT1QgcG9zc2libGVcbiovXG5jbGFzcyBSb3cgZXh0ZW5kcyBTdXBlcntcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7XG5cdFx0XHRyYW5rczp7XG5cdFx0XHRcdGdldCgpe1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbXB1dGVkLmNvbXBvc2VkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh2YWx1ZSl7XG5cdFx0XHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZD12YWx1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSlcblx0fVxuXG5cdGdldCB3aWR0aCgpey8vdXNlZCBieSBjYWxjIHJvdyByYW5nZVxuXHRcdHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ0YWJsZVwiKS5wcm9wcy53aWR0aFxuXHR9XG5cdFxuXHQvKipcblx0ICogc3VwcG9ydCBnZXQgY29sdW1uIGJ5IGNlbGxpZCwgc3VjaCBhcyB0aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKVtcImNlbGxpZDFcIl0gXG5cdCAqIGNlbGwgaWQgd291bGQgYmUgc2V0IGluIGNvbHVtbiBhY2NvZGluZyB0byB1c2luZy9jb21wb3Npbmcgb3JkZXIoaXQncyBjb3JyZWN0IGZvciBjb21wb3NpbmcpXG5cdCAqIHN1cHBvcnQgXG5cdCAqIGNvbHVtbi5jdXJyZW50UmFuazpjdXJyZW50IHZhbGlkIHJhbmsgZm9yIHRoZSBjb2x1bW5cblx0ICogY29sdW1uLmZpcnN0U2xvdDpmaXJzdCBzbG90IG9mIHRoaXMgY29sdW1uXG5cdCAqIG1ha2UgaXQgZHluYW1pYyB0byBhbHdheXMgdXNlIGN1cnJlbnQgY29sc1xuXHQgKi9cblx0Z2V0Q29sdW1ucz1tZW1vaXplKGNvbHM9Pntcblx0XHRjb25zdCBtZT10aGlzXG5cdFx0cmV0dXJuIG5ldyBQcm94eShjb2xzLm1hcChhPT5uZXcgUHJveHkoYSx7XG5cdFx0XHRnZXQoY29sLHByb3Ape1xuXHRcdFx0XHRzd2l0Y2gocHJvcCl7XG5cdFx0XHRcdGNhc2UgXCJjdXJyZW50UmFua1wiOntcblx0XHRcdFx0XHRcdGNvbnN0IHJhbmtzPW1lLnJhbmtzXG5cdFx0XHRcdFx0XHRjb25zdCBpPWNvbHMuaW5kZXhPZihjb2wpXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmFua3NbcmFua3MuZmluZExhc3RJbmRleChhPT4hIWEuc2xvdHNbaV0pKzFdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRjYXNlIFwiZmlyc3RTbG90XCI6e1xuXHRcdFx0XHRcdFx0Y29uc3QgcmFua3M9bWUucmFua3Ncblx0XHRcdFx0XHRcdGNvbnN0IGk9Y29scy5pbmRleE9mKGNvbClcblx0XHRcdFx0XHRcdHJldHVybiByYW5rcy5maW5kKGE9PiEhYS5zbG90c1tpXSkuc2xvdHNbaV1cdFxuXHRcdFx0XHRcdH1cdFxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb2xbcHJvcF1cblx0XHRcdH1cblx0XHR9KSkse1xuXHRcdFx0Z2V0KGNvbHVtbnMsIHByb3Ape1xuXHRcdFx0XHRpZihwcm9wIGluIGNvbHVtbnMpe1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW5zW3Byb3BdXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZih0eXBlb2YocHJvcCk9PVwic3RyaW5nXCIpe1xuXHRcdFx0XHRcdHJldHVybiBjb2x1bW5zLmZpbmQoYT0+YS5pZCA/IGEuaWQ9PXByb3AgOiBhLmlkPXByb3ApXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KVxuXHR9KVxuXG5cdC8qKlxuXHQgKiBpdCB3b3VsZCBmaW5kIGEgcmFuaydzIHNwYWNlIG1lZXRpbmcgcmVxdWlyZWQsIGlmIHRoZXJlIGlzbid0IFxuXHQgKiBpdCB3b3VsZCByZXF1ZXN0IHNwYWNlIHVwLCBhbmQgdXNlIGFuIGVtcHR5IHJhbmsgcGxhY2Vob2xkZXIgdG8gdGFrZSB1cCB0aGUgYmxvY2sgaW4gbGF5b3V0IGVuZ2luZVxuXHQgKiBcblx0ICogKioqRG9uJ3QgdXNlIHJlcXVpcmVkIGhlaWdodCB0byByZXF1ZXN0IHNwYWNlLCBzaW5jZSBsYXRlciBvdGhlciBjZWxscycgc2xvdCBtYXkgZml0IGluXG5cdCAqIGlmIHRoZXJlJ3Mgbm8gc2xvdCBmaXQgaW4gYSByYW5rLCBpdCBjYW4gYmUgZGVsZXRlIGFmdGVyIGFsbCBjaGlsZHJlbiBjb21wb3NlZFxuXHQgKiBAVE9ETzogdGhlcmUgbWF5IGJlIGRlYWQgbG9vcFxuXHQgKiBAcGFyYW0geyp9IGNvbCBcblx0ICogQHBhcmFtIHsqfSByZXF1aXJlZFNwYWNlXG5cdCAqL1xuXHRmaW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCwge2hlaWdodDptaW5IZWlnaHQ9MH09e30pe1xuXHRcdHZhciByYW5rPWNvbC5jdXJyZW50UmFuayBcblx0XHRpZihyYW5rKXtcblx0XHRcdC8vZmluZCBmaXJzdCByYW5rIHdob3NlIHNwYWNlIG1lZXQgcmVxdWlyZWRcblx0XHRcdHJhbms9dGhpcy5yYW5rcy5zbGljZSh0aGlzLnJhbmtzLmluZGV4T2YocmFuaykpLmZpbmQocmFuaz0+cmFuay5zcGFjZS5oZWlnaHQ+PW1pbkhlaWdodClcblx0XHR9XG5cdFx0d2hpbGUoIXJhbmspe1xuXHRcdFx0Ly9yZXF1ZXN0IGxhcmdlc3Qgc3BhY2UgaW4gY3VycmVudCBjb25zdHJhaW50IHNwYWNlXG5cdFx0XHRjb25zdCBzcGFjZT1zdXBlci5uZXh0QXZhaWxhYmxlU3BhY2UoKVxuXHRcdFx0aWYoIXNwYWNlKS8vbm8gc3BhY2UgYW55IG1vcmUsIHN0b3AgaW1tZWRpYXRlbHlcblx0XHRcdFx0cmV0dXJuIFxuXHRcdFx0dGhpcy5yYW5rcy5wdXNoKHJhbms9bmV3IHRoaXMuY29uc3RydWN0b3IuUmFuayh7c3BhY2UsIGNoaWxkcmVuOm5ldyBBcnJheSh0aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKS5sZW5ndGgpLmZpbGwobnVsbCl9KSlcblx0XHRcdC8vZWFjaCByZXF1ZXN0ZWQgc3BhY2Ugc2hvdWxkIGJlIHRha2VuIHVwIGJ5IGFwcGVuZGluZyByYW5rIHBsYWNlaG9sZGVyLCBzbyBuZXh0IHJlcXVlc3QgY2FuIHRha2UgZWZmZWN0XG5cdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KHJhbmspKVxuXHRcdH1cblx0XHRyZXR1cm4gcmFua1xuXHR9XG5cdC8qKlxuXHQgKiByZXF1ZXN0IGEgcmFuayBzcGFjZSBmcm9tIHVwLCBhbmQgdGhlblxuXHQgKiBjcmVhdGUgc3BhY2UgZm9yIGVhY2ggY2VsbFxuXHQgKiB3aGVuIGEgY2VsbCByZXF1ZXN0IHNwYWNlLCB3ZSBuZWVkIGF0IGZpcnN0IGRldGVybWluIHdoaWNoIHJhbmssIHRoZW4gd2UgY2FuIGRldGVybWluIFxuXHQgKiAxLiByZXF1ZXN0IHJhbmsgc3BhY2UgZnJvbSB1cFxuXHQgKiAyLiBvciBjYWxjIGNlbGwgc3BhY2UgZnJvbSByYW5rIHNwYWNlXG5cdCAqIEhvdyB0byBkZXRlcm1pbiB3aGljaCByYW5rIHdoZW4gY2VsbCByZXF1ZXN0IHNwYWNlPz8/XG5cdCAqICoqIHVzZSBjZWxsSWQgdG8gcXVlcnkgcmFua1xuXHQgKiBcblx0ICogXG5cdCAqICoqZXZlcnkgdGltZSByZXF1ZXN0aW5nIHNwYWNlLCBhIHJhbmsgcGxhY2Vob2xkZXIgaGVpZ2h0PTAgd291bGQgYmUgYXBwZW5kZWQgdG8gdGFrZSB0aGUgc3BhY2Vcblx0ICogKip0aGVuIGhlaWdodCB3aWxsIGJlIGNvcnJlY3RlZCBldmVyeSB0aW1lIGEgc2xvdCBhcHBlbmRlZFxuXHQgKiBAcGFyYW0geyp9IHJlcXVpcmVkU3BhY2Uge2NlbGxJZCwgaGVpZ2h0OnJlcXVpcmVkQmxvY2tTaXplfSBcblx0ICovXG5cdG5leHRBdmFpbGFibGVTcGFjZSh7aWQ6Y2VsbElkLCAuLi5yZXF1aXJlZH0pe1xuXHRcdGNvbnN0IHtrZWVwTGluZXN9PXRoaXMucHJvcHNcblx0XHRjb25zdCBjb2w9dGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylbY2VsbElkXVxuXHRcdGNvbnN0IHJhbms9dGhpcy5maW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCxyZXF1aXJlZClcblx0XHRpZighcmFuaylcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdGNvbnN0IHNwYWNlPXJhbmsuc3BhY2Vcblx0XHQvL2Z1cnRoZXIgY29uc3RyYWludCByYW5rIHNwYWNlIGZvciBjb2x1bW4gb2YgY2VsbGlkXG5cdFx0Y29uc3Qge2xlZnQsaGVpZ2h0fT1zcGFjZSwge3g9MCx3aWR0aH09Y29sLCBYPWxlZnQreFxuXHRcdHJldHVybiBzcGFjZS5jbG9uZSh7XG5cdFx0XHRsZWZ0OlgsXG5cdFx0XHRyaWdodDpYK3dpZHRoLFxuXHRcdFx0aGVpZ2h0OmtlZXBMaW5lcyA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogaGVpZ2h0LFxuXHRcdH0pXG5cdH1cblxuXHQvKipcblx0ICogcHV0IGl0IGludG8gY29ycmVjdCBjb2x1bW5baV0ucHVzaChjZWxsKVxuXHQgKiBAcGFyYW0geyp9IHNsb3RGcmFtZSBcblx0ICovXG5cdGFwcGVuZENvbXBvc2VkKHNsb3RGcmFtZSl7XG5cdFx0Y29uc3QgY29sdW1ucz10aGlzLmdldENvbHVtbnModGhpcy5wcm9wcy5jb2xzKVxuXHRcdGNvbnN0IGNlbGxJZD1zbG90RnJhbWUgJiYgc2xvdEZyYW1lLnByb3BzLmlkXG5cdFx0Y29uc3QgY29sPWNvbHVtbnNbY2VsbElkXVxuXHRcdGNvbnN0IHJhbms9dGhpcy5maW5kT3JDcmVhdGVSYW5rRm9yQ29sdW1uKGNvbCwge2hlaWdodDp0aGlzLmdldEhlaWdodChbc2xvdEZyYW1lXSl9KVxuXHRcdHJhbmsgJiYgcmFuay5pbnNlcnRBdChzbG90RnJhbWUsY29sdW1ucy5pbmRleE9mKGNvbCkpXG5cdH1cblxuXHRvbkFsbENoaWxkcmVuQ29tcG9zZWQoKXtcblx0XHQvL3JlbW92ZSBlbXB0eSByYW5rLCBjYW4gaXQgYmUgaWdub3JlZD8/Pz9cblx0XHR0aGlzLnJhbmtzPXRoaXMucmFua3MuZmlsdGVyKHJhbms9Pntcblx0XHRcdGlmKCFyYW5rLmlzRW1wdHkoKSl7XG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHR9XG5cdFx0XHRyYW5rLmRlbGF5b3V0KClcblx0XHR9KVxuXHRcdGNvbnN0IGNvbHVtbnM9dGhpcy5nZXRDb2x1bW5zKHRoaXMucHJvcHMuY29scylcblx0XHR0aGlzLnJhbmtzLmZvckVhY2goKHJhbmssaSxyYW5rcyk9Pntcblx0XHRcdGNvbnN0IGhlaWdodD10aGlzLmdldEhlaWdodChyYW5rLnNsb3RzKVxuXHRcdFx0Ly9yZXBsYWNlICBlbXB0eSBzbG90IHdpdGggZW1wdHkgY29sdW1uLmZpcnN0U2xvdCBzaGFwZVxuXHRcdFx0cmFuay5zbG90cy5mb3JFYWNoKChhLGksc2xvdHMpPT4hYSAmJiAoc2xvdHNbaV09Y29sdW1uc1tpXS5maXJzdFNsb3QuY2xvbmVBc0VtcHR5KCkpKVxuXHRcdFx0Ly90aGVuIFxuXHRcdFx0cmFuay5yZWxheW91dChoZWlnaHQscmFua3MubGVuZ3RoLTE9PWkpXG5cdFx0fSlcblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHR9XG5cblx0LyoqXG5cdCAqIGl0IGNyZWF0ZSBhIHJhbmsgcGxhY2Vob2xkZXIsIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGFwcGVuZCB0byBibG9jayBhcyBwbGFjZWhvbGRlclxuXHQgKiBpdCBmaXJzdCB0YWtlIHVwIHRoZSB3aG9sZSBsZWZ0IHNwYWNlIHdpdGggc3BhY2UuaGVpZ2h0LCB0aGVuXG5cdCAqIGFmdGVyIGFsbCBjaGlsZHJlbiBjb21wb3NlZCwgdGhlIHJhbmsgaGVpZ2h0IGFuZCBzbG90cyBoZWlnaHQgd291bGQgYmUgZml4ZWRcblx0ICogQHBhcmFtIHsqfSByYW5rIFxuXHQgKiBAcGFyYW0geyp9IGxhc3QgXG5cdCAqL1xuXHRjcmVhdGVDb21wb3NlZDJQYXJlbnQoe3Byb3BzOntzcGFjZTp7aGVpZ2h0fSwgY2hpbGRyZW59fSl7XG5cdFx0Y29uc3Qge3Byb3BzOntjb2xzLGlkOnJvd30sd2lkdGh9PXRoaXNcblx0XHRyZXR1cm4gPHRoaXMuY29uc3RydWN0b3IuUmFuayB7Li4ue2hlaWdodCx3aWR0aCwgcm93LCBjaGlsZHJlbiwgY29sc319Lz5cblx0fVxuXG5cdGdldEhlaWdodChzbG90cyl7XG5cdFx0cmV0dXJuIE1hdGgubWF4KHRoaXMucHJvcHMuaGVpZ2h0fHwwLC4uLnNsb3RzLmZpbHRlcihhPT4hIWEpLm1hcChhPT5hLnNsb3RIZWlnaHQpKVxuXHR9XG5cblx0c3RhdGljIFJhbms9Y2xhc3MgZXh0ZW5kcyBDb21wb25lbnR7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPVwicmFua1wiXG5cdFx0Z2V0IHNwYWNlKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5zcGFjZVxuXHRcdH1cblx0XG5cdFx0Z2V0IHNsb3RzKCl7XG5cdFx0XHRyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuXHRcdH1cblxuXHRcdC8qKnRoZSBsYXlvdXRlZCByYW5rIGluIHRoZSBzcGFjZSAqL1xuXHRcdGdldCBsYXlvdXRlZCgpe1xuXHRcdFx0Y29uc3QgZnJhbWU9dGhpcy5zcGFjZS5mcmFtZVxuXHRcdFx0cmV0dXJuIG5ldyBQcm94eShmcmFtZS5sYXN0TGluZSwge1xuXHRcdFx0XHRnZXQobGluZSwgcHJvcCkge1xuXHRcdFx0XHRcdGlmIChwcm9wID09IFwicmVwbGFjZVdpdGhcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlcGxhY2VtZW50ID0+IGZyYW1lLmxpbmVzLnNwbGljZSgtMSwgMSwgcmVwbGFjZW1lbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIGlmIChwcm9wID09IFwiZGV0YWNoXCIpIHtcblx0XHRcdFx0XHRcdHJldHVybiAoKSA9PiBmcmFtZS5saW5lcy5zcGxpY2UoLTEsIDEpO1xuXHRcdFx0XHRcdH1lbHNlIGlmKHByb3AgPT0gXCJpc0ZpcnN0Um93SW5QYWdlXCIpe1xuXHRcdFx0XHRcdFx0Y29uc3QgcHJldkxpbmU9ZnJhbWUubGluZXNbZnJhbWUubGluZXMubGVuZ3RoLTJdXG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZT1hPT5uZXcgUmVhY3RRdWVyeShhKS5maW5kRmlyc3QoYFtkYXRhLXR5cGU9dGFibGVdYCkuYXR0cihcImRhdGEtY29udGVudFwiKVxuXHRcdFx0XHRcdFx0cmV0dXJuICFwcmV2TGluZSB8fCB0YWJsZShsaW5lKSE9dGFibGUocHJldkxpbmUpXG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbGluZVtwcm9wXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsYXlvdXQoKXtcblx0XHRcdHRoaXMubGF5b3V0ZWQuZGV0YWNoKClcblx0XHR9XG5cdFxuXHRcdGlzRW1wdHkoKXtcblx0XHRcdGNvbnN0IHtjaGlsZHJlbjpzbG90c309dGhpcy5wcm9wc1xuXHRcdFx0cmV0dXJuICFzbG90cy5maW5kKGE9PiEhYSlcblx0XHR9XG5cblx0XHRyZWxheW91dChoZWlnaHQsIGlzTGFzdFJhbmtPZlJvdyl7XG5cdFx0XHRjb25zdCBSYW5rPXRoaXMuY29uc3RydWN0b3Jcblx0XHRcdGZ1bmN0aW9uIGNoYW5nZUhlaWdodFVwKGhlaWdodCwgcmFuaywgcGFyZW50cykge1xuXHRcdFx0XHRjb25zdCBkZWx0YT1oZWlnaHQtKHJhbmsucHJvcHMuaGVpZ2h0fHwwKVxuXHRcdFx0XHRyZXR1cm4gcGFyZW50cy5yZWR1Y2VSaWdodCgoY2hpbGQsIHBhcmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJvcHM6IHsgaGVpZ2h0LCBjaGlsZHJlbiB9IH0gPSBwYXJlbnRcblx0XHRcdFx0XHRpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09IDEpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgKGhlaWdodCkgPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KHBhcmVudCwgeyBoZWlnaHQ6IGhlaWdodCArIGRlbHRhIH0sIGNoaWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwicm93J3Mgb2Zmc3ByaW5nIHNob3VsZCBvbmx5IGhhcyBvbmUgY2hpbGRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBwYXJlbnRcblx0XHRcdFx0fSwgbmV3IFJhbmsoey4uLnJhbmsucHJvcHMsaGVpZ2h0fSkucmVuZGVyKCkpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCB7Zmlyc3QscGFyZW50cyxyYW5rPWZpcnN0LmdldCgwKX09bmV3IFJlYWN0UXVlcnkodGhpcy5sYXlvdXRlZCkuZmluZEZpcnN0QW5kUGFyZW50cyhgcmFua2ApXG5cdFx0XHR0cnl7XG5cdFx0XHRjb25zdCBjaGFuZ2VkPWNoYW5nZUhlaWdodFVwKFxuXHRcdFx0XHRoZWlnaHQsXG5cdFx0XHRcdFJlYWN0LmNsb25lRWxlbWVudChyYW5rLHtcblx0XHRcdFx0XHRpc0xhc3RSYW5rT2ZSb3csXG5cdFx0XHRcdFx0aXNGaXJzdFJvd0luUGFnZTp0aGlzLmxheW91dGVkLmlzRmlyc3RSb3dJblBhZ2UsXG5cdFx0XHRcdFx0dGFibGU6cGFyZW50cy5maW5kTGFzdChhPT5hLnByb3BzW1wiZGF0YS10eXBlXCJdPT1cInRhYmxlXCIpLnByb3BzW1wiZGF0YS1jb250ZW50XCJdLFxuXHRcdFx0XHR9KSxcblx0XHRcdFx0cGFyZW50c1xuXHRcdFx0KVxuXHRcdFx0LyoqIHNldCBoZWlnaHQgY2hhbmdlcyBmcm9tIHJhbmsgdG8gYmxvY2sgbGluZSovXG5cdFx0XHR0aGlzLmxheW91dGVkLnJlcGxhY2VXaXRoKGNoYW5nZWQpXG5cdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdGRlYnVnZ2VyXG5cdFx0XHR9XG5cdFx0fVxuXHRcblx0XHRpbnNlcnRBdChzbG90LCBpKXtcblx0XHRcdHRoaXMuc2xvdHNbaV09c2xvdFxuXHRcdH1cblx0XG5cdFx0cmVuZGVyKCl7XG5cdFx0XHRjb25zdCB7Y2hpbGRyZW46c2xvdHM9W10sY29scyxoZWlnaHQsaXNMYXN0UmFua09mUm93LCBpc0ZpcnN0Um93SW5QYWdlLHRhYmxlLCByb3csIHNwYWNlLCAuLi5wcm9wc309dGhpcy5wcm9wc1xuXHRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEdyb3VwIGhlaWdodD17aGVpZ2h0fSB7Li4ucHJvcHN9ID5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRzbG90cy5tYXAoKGEsaSk9PlJlYWN0LmNsb25lRWxlbWVudChcblx0XHRcdFx0XHRcdFx0YS5jbG9uZSh7aGVpZ2h0LFxuXHRcdFx0XHRcdFx0XHRcdGNvbEluZGV4OmksdGFibGUscm93LGlzTGFzdFJhbmtPZlJvdyxpc0ZpcnN0Um93SW5QYWdlLy9lZGl0YWJsZSBlZGdlcyBuZWVkIHRoZSBpbmZvcm1hdGlvblxuXHRcdFx0XHRcdFx0XHR9KS5jcmVhdGVDb21wb3NlZDJQYXJlbnQoKSx7XG5cdFx0XHRcdFx0XHRcdC4uLmNvbHNbaV0sXG5cdFx0XHRcdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0XHRcdFx0a2V5OmksXG5cdFx0XHRcdFx0XHR9KSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PC9Hcm91cD5cblx0XHRcdFx0KVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZVJvdyBleHRlbmRzIGVkaXRhYmxlKFJvdyx7c3RvcHBhYmxlOnRydWUsIGNvbnRpbnVhYmxlOnRydWV9KXtcblx0LyoqXG5cdCAqIEBjb250aW51YWJsZVxuXHQgKiAxLiBbZG9uZV1zaW1wbHkoc3VpdGFibGUgZm9yIG1vc3QgY2FzZXMpLCByb3cgaXMgYXRvbSBvZiBjb21wb3NpbmcsIHNvIGNvbXBvc2UgYWxsIGNvbnRlbnQgb3Igbm90aGluZ1xuXHQgKiAyLiBiaWcgcm93OiBpdCBjYW4gYXZvaWQgY29tcG9zaW5nIGZvciBvdXQgb2Ygdmlld3BvcnQgc3BhY2Vcblx0ICogQHBhcmFtIHsqfSBhIFxuXHQgKi9cblx0c2hvdWxkQ29udGludWVDb21wb3NlKCl7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxufVxuXG5cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgR3JvdXAgZnJvbSBcIi4uLy4uL2NvbXBvc2VkL2dyb3VwXCJcblxuY29uc3QgRWRnZT0oe3N6OnNpemUsY29sb3IsZCwgdmFsLCBzcGFjZSwgLi4ueHl9KT0+PGxpbmUgc3Ryb2tlV2lkdGg9e3NpemV9IHN0cm9rZT17Y29sb3J9IHsuLi54eX0vPlxuXG5leHBvcnQgZGVmYXVsdCAoe3RvcCxsZWZ0LHJpZ2h0LGJvdHRvbSwgd2lkdGgsaGVpZ2h0LCAuLi5wcm9wc30pPT4oXG4gICAgPEdyb3VwIHsuLi5wcm9wc30+XG4gICAgICAgIDxFZGdlIHsuLi50b3B9IHkxPXswfSB5Mj17MH0geDE9ezB9IHgyPXt3aWR0aH0vPlxuICAgICAgICA8RWRnZSB7Li4uYm90dG9tfSB5MT17aGVpZ2h0fSB5Mj17aGVpZ2h0fSB4MT17MH0geDI9e3dpZHRofS8+XG4gICAgICAgIDxFZGdlIHsuLi5yaWdodH0geDE9e3dpZHRofSB4Mj17d2lkdGh9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgICAgIDxFZGdlIHsuLi5sZWZ0fSB4MT17MH0geDI9ezB9IHkxPXswfSB5Mj17aGVpZ2h0fS8+XG4gICAgPC9Hcm91cD5cbikiLCJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XG5jbGFzcyBTZWxlY3RvciBleHRlbmRzIENvbXBvbmVudCB7XG5cdHJlbmRlcigpIHtcblx0XHRjb25zdCB7IG9uU2VsZWN0LCBjdXJzb3IsIHNpemUgPSA1LCAuLi5wcm9wcyB9ID0gdGhpcy5wcm9wcztcblx0XHRyZXR1cm4gPGxpbmUgey4uLnByb3BzfSBzdHJva2U9XCJ0cmFuc3BhcmVudFwiIHN0cm9rZVdpZHRoPXtzaXplfSBzdHlsZT17eyBjdXJzb3IgfX0gb25DbGljaz17b25TZWxlY3R9IC8+O1xuXHR9XG59XG5leHBvcnQgY29uc3QgUm93U2VsZWN0b3IgPSBwcm9wcyA9PiA8U2VsZWN0b3Igey4uLnByb3BzfSBjdXJzb3I9XCJlLXJlc2l6ZVwiIC8+O1xuZXhwb3J0IGNvbnN0IENvbFNlbGVjdG9yID0gcHJvcHMgPT4gPFNlbGVjdG9yIHsuLi5wcm9wc30gY3Vyc29yPVwicy1yZXNpemVcIiAvPjtcbiIsIlxuaW1wb3J0IFJlYWN0LHtDb21wb25lbnQsIEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi4vLi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3RvcFwiXG5pbXBvcnQgUmVzaXphYmxlIGZyb20gXCIuLi8uLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvcmVzaXphYmxlXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzaXplciBleHRlbmRzIENvbXBvbmVudHtcblx0Y29uc3RydWN0b3IoKXtcblx0XHRzdXBlciguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdGF0ZT17cmVzaXppbmc6ZmFsc2V9XG5cdH1cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge3Jlc2l6aW5nfT10aGlzLnN0YXRlXG5cdFx0Y29uc3Qge29uUmVzaXplLGRpcmVjdGlvbixkPWRpcmVjdGlvbj09XCJld1wiID8gJ3knIDoneCcsY3Vyc29yLGNoaWxkcmVuLC4uLnByb3BzfT10aGlzLnByb3BzXG5cdFx0cmV0dXJuIChcbiAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8UmVzaXphYmxlXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbj17ZGlyZWN0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvblN0YXJ0PXtlPT50aGlzLnNldFN0YXRlKHtyZXNpemluZzp0cnVlfSl9XG4gICAgICAgICAgICAgICAgICAgIG9uRW5kPXtlPT50aGlzLnNldFN0YXRlKHtyZXNpemluZzpmYWxzZX0pfVxuICAgICAgICAgICAgICAgICAgICBvblJlc2l6ZT17b25SZXNpemV9PlxuICAgICAgICAgICAgICAgICAgICA8bGluZSB7Li4ucHJvcHN9IHN0cm9rZT17XCJ0cmFuc3BhcmVudFwifSBzdHJva2VXaWR0aD17NX0gc3R5bGU9e3tjdXJzb3J9fS8+XG4gICAgICAgICAgICAgICAgPC9SZXNpemFibGU+XG4gICAgICAgICAgICAgICAge3Jlc2l6aW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFRvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHsuLi57Li4ucHJvcHMsW2QrJzEnXTpcIi0xMDAlXCIsIFtkKycyJ106XCIxMDAlXCJ9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImxpZ2h0Z3JheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5PVwiNSw1XCIvPlxuICAgICAgICAgICAgICAgICAgICA8L1RvcD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GcmFnbWVudD5cblx0XHQpXG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IENvbFJlc2l6ZXI9cHJvcHM9PjxSZXNpemVyIHsuLi5wcm9wc30gZGlyZWN0aW9uPVwiZXdcIiBjdXJzb3I9XCJjb2wtcmVzaXplXCIvPlxuZXhwb3J0IGNvbnN0IFJvd1Jlc2l6ZXI9cHJvcHM9PjxSZXNpemVyIHsuLi5wcm9wc30gZGlyZWN0aW9uPVwiLW5zXCIgY3Vyc29yPVwicm93LXJlc2l6ZVwiLz5cblx0XG5cdCIsImltcG9ydCBSZWFjdCx7Q29tcG9uZW50LEZyYWdtZW50fSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2Nvbm5lY3QsIEFDVElPTn0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQge0NvbFNlbGVjdG9yLCBSb3dTZWxlY3Rvcn0gZnJvbSBcIi4vc2VsZWN0b3JcIlxuaW1wb3J0IHtDb2xSZXNpemVyLCBSb3dSZXNpemVyfSBmcm9tIFwiLi9yZXNpemVyXCJcbmltcG9ydCBFZGdlcyBmcm9tIFwiLi9lZGdlc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoKShjbGFzcyBFZGl0YWJsZUVkZ2VzIGV4dGVuZHMgQ29tcG9uZW50e1xuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRlZGl0YWJsZTpQcm9wVHlwZXMuYW55LFxuXHR9XG5cdHJlbmRlcigpe1xuXHRcdGNvbnN0IHtpc0ZpcnN0Um93SW5QYWdlLCBpc0xhc3RSYW5rT2ZSb3csIHRhYmxlLHJvdywgY2VsbCxpLHdpZHRoLGhlaWdodCxkaXNwYXRjaH09dGhpcy5wcm9wc1xuXHRcdGlmKCF0aGlzLmNvbnRleHQuZWRpdGFibGUpXG5cdFx0XHRyZXR1cm4gPEVkZ2VzIHsuLi50aGlzLnByb3BzfS8+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPEVkZ2VzIHsuLi50aGlzLnByb3BzfS8+XG5cbiAgICAgICAgICAgICAgICB7aXNGaXJzdFJvd0luUGFnZSAmJiA8Q29sU2VsZWN0b3IvPn1cblxuICAgICAgICAgICAgICAgIHtpc0xhc3RSYW5rT2ZSb3cgJiYgPFJvd1Jlc2l6ZXIgeDE9ezB9IHgyPXt3aWR0aH0geTE9e2hlaWdodH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyh7eX0pPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChBQ1RJT04uRW50aXR5LlVQREFURSh7aWQ6dGFibGUsIHR5cGU6XCJ0YWJsZVwiLGhlaWdodDp7dmFsdWU6aGVpZ2h0K3kscm93LGNlbGwsaX19KSlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgLz4gfHwgbnVsbFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHtpPT0wICAmJiA8Um93U2VsZWN0b3IgeDE9ezB9IHgyPXswfSB5MT17MH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9eygpPT5kaXNwYXRjaChBQ1RJT04uU2VsZWN0aW9uLlNFTEVDVChyb3cpKX0vPn1cblxuICAgICAgICAgICAgICAgIDxDb2xSZXNpemVyIHgxPXt3aWR0aH0geTE9ezB9IHgyPXt3aWR0aH0geTI9e2hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgb25SZXNpemU9eyh7eH0pPT57XG5cdFx0XHRcdFx0XHRkaXNwYXRjaChBQ1RJT04uRW50aXR5LlVQREFURSh7aWQ6dGFibGUsIHR5cGU6XCJ0YWJsZVwiLCB3aWR0aDp7dmFsdWU6d2lkdGgreCwgcm93LCBjZWxsLGl9fSkpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICApXG4gICAgfVxufSlcblxuXG5cbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuXG5pbXBvcnQgRWRnZXMgZnJvbSBcIi4vZWRnZXNcIlxuaW1wb3J0IEVkaXRhYmxlRWRnZXMgZnJvbSBcIi4vZWRpdGFibGUtZWRnZXNcIlxuaW1wb3J0IFNlY3Rpb24gZnJvbSBcIi4uL3NlY3Rpb25cIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZH0gZnJvbSBcIi4uLy4uL2NvbXBvc2FibGVcIlxuXG4vKipcbiAqIENlbGwgaXMgZmlzc2lvbmFibGVcbiAqIGNvbW1pdCBhbGwgd2hlbiBhbGwgY29tcG9zZWQ/Pz8/XG4gKi9cbmNvbnN0IFN1cGVyPUhhc1BhcmVudEFuZENoaWxkKGRvbS5DZWxsKVxuY29uc3QgZGlzcGxheU5hbWU9KCk9Pntcblx0Y29uc3QgcGFydHM9U2VjdGlvbi5kaXNwbGF5TmFtZS5zcGxpdChcIi1cIilcblx0cGFydHMuc3BsaWNlKC0xLDEsU3VwZXIuZGlzcGxheU5hbWUuc3BsaXQoXCItXCIpLnBvcCgpKVxuXHRyZXR1cm4gcGFydHMuam9pbihcIi1cIilcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENlbGwgZXh0ZW5kcyBTZWN0aW9ue1xuXHRzdGF0aWMgZGlzcGxheU5hbWU9ZGlzcGxheU5hbWUoKVxuXHRzdGF0aWMgZGVmYXVsdFByb3BzPXtcblx0XHQuLi5TdXBlci5kZWZhdWx0UHJvcHMsXG5cdFx0Y3JlYXRlTGF5b3V0OlNlY3Rpb24uZGVmYXVsdFByb3BzLmNyZWF0ZUxheW91dCxcblx0fVxuXHRcblx0c3RhdGljIExheW91dD1jbGFzcyBMYXlvdXRDZWxsIGV4dGVuZHMgU2VjdGlvbi5MYXlvdXR7XG5cdFx0c3RhdGljIGRpc3BsYXlOYW1lPVwiZnJhbWUtY2VsbFwiXG5cdFx0bmV4dEF2YWlsYWJsZVNwYWNlKHtoZWlnaHQ6cmVxdWlyZWRCbG9ja1NpemU9MH09e30pe1xuXHRcdFx0Y29uc3Qgc3BhY2U9c3VwZXIubmV4dEF2YWlsYWJsZVNwYWNlKC4uLmFyZ3VtZW50cylcblx0XHRcdC8qKmNlbGwgaXMgYWxsb3dlZCB0byBiZSBlbXB0eSwgYnV0IG5vcm1hbCBmcmFtZSBpcyBub3QgYWxsb3dlZCAqL1xuXHRcdFx0aWYoc3BhY2UgJiYgdGhpcy5pc0VtcHR5KCkgJiYgcmVxdWlyZWRCbG9ja1NpemU+dGhpcy5hdmFpbGFibGVCbG9ja1NpemUpe1xuXHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdH1cblx0XHRcdHJldHVybiBzcGFjZVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIGEgY2VsbCBzcGFjZSBib3JkZXJ8bWFyZ2lufGNvbnRlbnR8bWFyZ2lufGJvcmRlclxuXHRcdCAqL1xuXHRcdGNyZWF0ZUNvbXBvc2VkMlBhcmVudCgpe1xuXHRcdFx0Y29uc3Qge2JvcmRlcnMsd2lkdGgsaGVpZ2h0fT10aGlzLnByb3BzXG5cdFx0XHRjb25zdCB7dGFibGUscm93LGlkOmNlbGwsY29sSW5kZXg6aSxpc0ZpcnN0Um93SW5QYWdlLGlzTGFzdFJhbmtPZlJvd309dGhpcy5wcm9wc1xuICAgICAgICBcblx0XHRcdGNvbnN0IGNvbnRlbnQ9c3VwZXIuY3JlYXRlQ29tcG9zZWQyUGFyZW50KC4uLmFyZ3VtZW50cylcblx0XHRcdHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoXG5cdFx0XHRcdGNvbnRlbnQsXG5cdFx0XHRcdHt3aWR0aCxoZWlnaHR9LFxuXHRcdFx0XHRjb250ZW50LnByb3BzLmNoaWxkcmVuLFxuXHRcdFx0XHRSZWFjdC5jbG9uZUVsZW1lbnQoYm9yZGVycyx7aGVpZ2h0LHdpZHRoLFxuXHRcdFx0XHRcdHRhYmxlLHJvdyxjZWxsLGksaXNGaXJzdFJvd0luUGFnZSxpc0xhc3RSYW5rT2ZSb3cvL2VkaXRhYmxlIGVkZ2VzXG5cdFx0XHRcdH0pXG5cdFx0XHQpXG5cdFx0fVxuXHRcdC8qKlxuXHRcdCAqIGNyZWF0ZSBlbXB0eSBjZWxsIHNsb3Rcblx0XHQgKi9cblx0XHRjbG9uZUFzRW1wdHkoKXtcblx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuY2xvbmUoLi4uYXJndW1lbnRzKSx7Y29tcHV0ZWQ6e2NvbXBvc2VkOltdLGFuY2hvcnM6W10sbGFzdENvbXBvc2VkOltdfX0pXG5cdFx0fVxuXG5cdFx0LyoqdXNlZCB0byBjYWN1bGF0ZSByYW5rIGhlaWdodCAqL1xuXHRcdGdldCBzbG90SGVpZ2h0KCl7XG5cdFx0XHRjb25zdCB7bWFyZ2luOntib3R0b209MH19PXRoaXMucHJvcHNcblx0XHRcdHJldHVybiB0aGlzLmJsb2NrT2Zmc2V0K2JvdHRvbVxuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyBFZGdlcz1FZGl0YWJsZUVkZ2VzXG5cblx0LyoqXG5cdCAqIHNwYWNlIGlzIGRlZmluZWQgYnkgcm93LT50YWJsZS0+cGFyZW50IHNwYWNlLCBzbyBpdCBoYXMgdG8gcmVxdWlyZSBzcGFjZSB1cFxuXHQgKiB3aGVuIGN1cnJlbnQgY2VsbCBzcGFjZSBpcyBmdWxsLCBpdCdzIGNhbGxlZCB0byBjcmVhdGUgbmV3IGNlbGwgc3BhY2UgYnkgcmVxdWlyZSBzcGFjZSB1cCBBRlRFUlxuXHQgKiAqKiogY29tbWl0IGN1cnJlbnQgY29tcG9zZWQgdG8gcGFyZW50LCBcblx0ICogT3IgY29tbWl0IGFsbCB3aGVuIGFsbCBjb21wb3NlZD8/Pz8gTm8sIGJsb2NrT2Zmc2V0IGNhbid0IGJlIGRldGVybWluZWQgZnJvbSBzZWNvbmQgc2VnbWVudFxuXHQgKiBAcGFyYW0geyp9IHByb3BzIFxuXHQgKiBAcGFyYW0geyp9IGNvbnRleHQgXG5cdCAqIEBwYXJhbSB7Kn0gcmVxdWlyZWQgXG5cdCAqL1xuXHRjcmVhdGVMYXlvdXQocHJvcHMsY29udGV4dCxyZXF1aXJlZD17fSl7XG5cdFx0Y29uc3Qgc3BhY2U9dGhpcy5jb250ZXh0LnBhcmVudC5uZXh0QXZhaWxhYmxlU3BhY2Uoey4uLnJlcXVpcmVkLGlkOnRoaXMucHJvcHMuaWR9KVxuXHRcdGlmKCFzcGFjZSlcblx0XHRcdHJldHVybiBudWxsXG5cdFx0Y29uc3Qge3dpZHRoLGhlaWdodCxmcmFtZX09c3BhY2Vcblx0XHRjb25zdCB7bWFyZ2luOntyaWdodD0wLGxlZnQ9MCx0b3A9MCxib3R0b209MH09e30sIHZlcnRBbGlnbixib3JkZXJ9PXRoaXMucHJvcHNcblx0XHQvKipcblx0XHQgKiBhIGNlbGwgc3BhY2UgYm9yZGVyfG1hcmdpbnxjb250ZW50fG1hcmdpbnxib3JkZXJcblx0XHQgKi9cblx0XHRyZXR1cm4gc3VwZXIuY3JlYXRlTGF5b3V0KHtcblx0XHRcdG1hcmdpbjp7XG5cdFx0XHRcdGxlZnQ6bGVmdCtib3JkZXIubGVmdC5zeixcblx0XHRcdFx0cmlnaHQ6cmlnaHQrYm9yZGVyLmxlZnQuc3osXG5cdFx0XHRcdHRvcDp0b3ArYm9yZGVyLnRvcC5zeixcblx0XHRcdFx0Ym90dG9tOmJvdHRvbStib3JkZXIuYm90dG9tLnN6XG5cdFx0XHR9LFxuXHRcdFx0d2lkdGgsXG5cdFx0XHRoZWlnaHQsXG5cdFx0XHR2ZXJ0QWxpZ24sXG5cdFx0XHRib3JkZXJzOjx0aGlzLmNvbnN0cnVjdG9yLkVkZ2VzIHsuLi57XG5cdFx0XHRcdC4uLmJvcmRlcix3aWR0aCxoZWlnaHQsXG5cdFx0XHRcdFwiZGF0YS1ub2NvbnRlbnRcIjp0cnVlLC8vaWdub3JlIHNlYXJjaCBmb3IgcG9zaXRpb25pbmdcblx0XHRcdFx0fX0vPlxuXHRcdH0se2ZyYW1lfSlcblx0fVxuXG5cdG9uQWxsQ2hpbGRyZW5Db21wb3NlZCgpe1xuXHRcdGlmKHRoaXMuY29tcHV0ZWQuY29tcG9zZWQubGVuZ3RoPT0wKXtcblx0XHRcdGNvbnN0IGE9dGhpcy5jcmVhdGVMYXlvdXQoKVxuXHRcdFx0dGhpcy5jb21wdXRlZC5jb21wb3NlZC5wdXNoKGEpXG5cdFx0XHR0aGlzLmNvbnRleHQucGFyZW50LmFwcGVuZENvbXBvc2VkKHRoaXMuY3JlYXRlQ29tcG9zZWQyUGFyZW50KGEpKVxuXHRcdH1cblx0XHRzdXBlci5vbkFsbENoaWxkcmVuQ29tcG9zZWQoKVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7R3JvdXB9IGZyb20gXCIuLi9jb21wb3NlZFwiXG5cbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGR9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcbmltcG9ydCB7ZG9tfSBmcm9tIFwid2UtZWRpdFwiXG5cbi8qKlxuKiB4eSBmb3IgUG9zaXRpb25pbmdcbiogd3JhcCBib3VuZGFyeSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGNoaWxkcmVuIGNvbnRlbnQsIGFuZCB0aGVuIHBhc3MgdG8gZnJhbWVcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbmNob3IgZXh0ZW5kcyBIYXNQYXJlbnRBbmRDaGlsZChkb20uQW5jaG9yKXtcbiAgICBjcmVhdGVDb21wb3NlZDJQYXJlbnQoY29udGVudCl7XG4gICAgICAgIHZhciB7d2lkdGgsaGVpZ2h0LGdlb21ldHJ5fT1jb250ZW50LnByb3BzXG4gICAgICAgIGNvbnN0IHttYXJnaW46e2xlZnQ9MCxyaWdodD0wLHRvcD0wLGJvdHRvbT0wfT17fSwgd3JhcCwgeDpYLCB5Oll9PXRoaXMucHJvcHNcbiAgICAgICAgdGhpcy53aWR0aD13aWR0aCs9KGxlZnQrcmlnaHQpXG4gICAgICAgIHRoaXMuaGVpZ2h0PWhlaWdodCs9KHRvcCtib3R0b20pXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R3JvdXAgY2hpbGRyZW49e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgYW5jaG9yPXtzcGFjZT0+e1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplPXt3aWR0aDp0aGlzLndpZHRoLCBoZWlnaHQ6dGhpcy5oZWlnaHR9ICBcbiAgICAgICAgICAgICAgICAgICAgdmFyIHg9c3BhY2UuYW5jaG9yKHthbGlnbjpcImxlZnRcIiwuLi5YfSxzaXplLHNwYWNlKVxuICAgICAgICAgICAgICAgICAgICB2YXIgeT1zcGFjZS5hbmNob3Ioe2FsaWduOlwidG9wXCIsLi4uWX0sc2l6ZSxzcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHg9eC1sZWZ0LCB5PXktdG9wXG4gICAgICAgICAgICAgICAgICAgIGlmKGdlb21ldHJ5ICYmIGdlb21ldHJ5Lm9yaWdpbil7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LT1nZW9tZXRyeS5vcmlnaW4ueFxuICAgICAgICAgICAgICAgICAgICAgICAgeS09Z2VvbWV0cnkub3JpZ2luLnlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdyYXBGdW5jPShmbj0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWZuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdyYXAubW9kZT09XCJTcXVhcmVcIiB8fCB3cmFwLm1vZGU9PVwiVG9wQW5kQm90dG9tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU9PmZuLmNhbGwodGhpcywgbGluZSwge2JvdW5kczooKT0+KHtsZWZ0OngsdG9wOnkscmlnaHQ6eCt3aWR0aCxib3R0b206eStoZWlnaHR9KX0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZT0+Zm4uY2FsbCh0aGlzLCBsaW5lLCBnZW9tZXRyeS5jbG9uZSgpLnRyYW5zbGF0ZSh4LHkpKVxuICAgICAgICAgICAgICAgICAgICB9KSh3cmFwICYmICh0eXBlb2Yod3JhcCk9PVwiZnVuY3Rpb25cIiA/IHdyYXAgOiB0aGlzW2B3cmFwJHt3cmFwLm1vZGV9YF0pKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPEdyb3VwIHsuLi57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeCx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6d3JhcEZ1bmMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6e3gseSx3aWR0aCxoZWlnaHR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGF0YS1jb250ZW50XCI6dGhpcy5wcm9wcy5pZCxcImRhdGEtdHlwZVwiOnRoaXMuZ2V0Q29tcG9zZVR5cGUoKX19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcm91cCB4PXtsZWZ0fSB5PXt0b3B9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29udGVudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0dyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Hcm91cD5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICB9XG5cbiAgICBhcHBseVdyYXBUZXh0KHgxLHgyLCB4LCBYKXtcbiAgICAgICAgY29uc3Qge3dyYXA6e3dyYXBUZXh0fX09dGhpcy5wcm9wc1xuICAgICAgICBjb25zdCBnZXQ9dHlwZT0+e1xuICAgICAgICAgICAgc3dpdGNoKHR5cGUpe1xuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ge3gsd2lkdGg6eDIteH1cbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB7eDp4MSx3aWR0aDpYLXgxfVxuICAgICAgICAgICAgY2FzZSBcImxhcmdlc3RcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KCh4LXgxKT49KHgyLVgpID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCIpXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB7eCwgd2lkdGg6WC14fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldCh3cmFwVGV4dClcbiAgICB9XG5cbiAgICB3cmFwU3F1YXJlKHt4MSx4Mix5Mjp5LHkxPXl9LGdlb21ldHJ5KXtcbiAgICAgICAgY29uc3Qge3dyYXA6e21vZGUsIHdyYXBUZXh0fSxtYXJnaW46e3JpZ2h0Om1yPTAsIGxlZnQ6bWw9MH09e319PXRoaXMucHJvcHNcbiAgICAgICAgY29uc3Qge2xlZnQsdG9wLHJpZ2h0LGJvdHRvbX09Z2VvbWV0cnkuYm91bmRzKClcbiAgICAgICAgaWYoeT49dG9wICYmIHk8PWJvdHRvbSl7XG4gICAgICAgICAgICBpZighKHgyPD1sZWZ0IHx8IHgxPj1yaWdodCkpe1xuICAgICAgICAgICAgICAgIGlmKHkxIT09Ym90dG9tKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5hcHBseVdyYXBUZXh0KHgxLHgyLGxlZnQtbWwsIHJpZ2h0K21yKSx7eTpib3R0b219KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyYXBUaWdodChsaW5lLGdlb21ldHJ5KXtcbiAgICAgICAgY29uc3Qge21hcmdpbjp7bGVmdD0wLHJpZ2h0PTB9fT10aGlzLnByb3BzXG4gICAgICAgIGNvbnN0IHt4MSx4MiwgeTJ9PWxpbmVcbiAgICAgICAgY29uc3QgcG9pbnRzPWdlb21ldHJ5LmludGVyc2VjdHMoe3gxLHgyLHkyLHkxOnkyfSkuc29ydCgoYSxiKT0+YS54LWIueClcbiAgICAgICAgaWYocG9pbnRzLmxlbmd0aD4yKXtcbiAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoMSxwb2ludHMubGVuZ3RoLTEtMSlcbiAgICAgICAgfVxuICAgICAgICBpZihwb2ludHMubGVuZ3RoPjApe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlXcmFwVGV4dCh4MSx4Mixwb2ludHNbMF0ueC1sZWZ0LHBvaW50cy5wb3AoKS54K3JpZ2h0KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgd3JhcFRocm91Z2gobGluZSxnZW9tZXRyeSl7XG4gICAgICAgIHJldHVybiB0aGlzLndyYXBUaWdodCguLi5hcmd1bWVudHMpXG4gICAgfVxuXG4gICAgd3JhcENsZWFyKHt4MSx4Mix5Mjp5LCB5MT15fSxnZW9tZXRyeSl7XG4gICAgICAgIGNvbnN0IHtsZWZ0LHRvcCxyaWdodCxib3R0b219PWdlb21ldHJ5LmJvdW5kcygpXG4gICAgICAgIGlmKHk+PXRvcCAmJiB5PD1ib3R0b20pe1xuICAgICAgICAgICAgaWYoeTEhPT1ib3R0b20pe1xuICAgICAgICAgICAgICAgIHJldHVybiB7eDp4MSx3aWR0aDp4Mi14MSx5OmJvdHRvbSx0eXBlOlwiY2xlYXJcIn1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyYXBUb3BBbmRCb3R0b20oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcENsZWFyKC4uLmFyZ3VtZW50cylcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7SGFzUGFyZW50QW5kQ2hpbGQsU3RvcHBhYmxlfSBmcm9tIFwiLi4vY29tcG9zYWJsZVwiXG5pbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtHcm91cH0gZnJvbSBcIi4uL2NvbXBvc2VkXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFpbmVyIGV4dGVuZHMgU3RvcHBhYmxlKEhhc1BhcmVudEFuZENoaWxkKGRvbS5Db250YWluZXIpLGZhbHNlKXtcbiAgICBnZXRDb21wb3NlVHlwZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy50eXBlIHx8IHN1cGVyLmdldENvbXBvc2VUeXBlKClcbiAgICB9XG5cbiAgICBhcHBlbmRDb21wb3NlZChlbGVtZW50KXtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgd2lkdGgsaGVpZ2h0LG1pbldpZHRoLHgseSxibG9ja09mZnNldCxcbiAgICAgICAgICAgIHdyYXAsIGFuY2hvcixcbiAgICAgICAgICAgIGRlc2NlbnQscGFnaW5hdGlvbixcbiAgICAgICAgICAgIG1lcmdlT3Bwb3J0dW5pdHksXG4gICAgICAgICAgICAuLi5wcm9wc309ZWxlbWVudC5wcm9wc1xuICAgICAgICByZXR1cm4gc3VwZXIuYXBwZW5kQ29tcG9zZWQoUmVhY3QuY3JlYXRlRWxlbWVudChHcm91cCx7XG4gICAgICAgICAgICB3aWR0aCxoZWlnaHQsbWluV2lkdGgsd3JhcCwgYW5jaG9yLGRlc2NlbnQscGFnaW5hdGlvbix4LHksYmxvY2tPZmZzZXQsbWVyZ2VPcHBvcnR1bml0eSxcbiAgICAgICAgICAgIGNoaWxkcmVuOlJlYWN0LmNsb25lRWxlbWVudChlbGVtZW50LHtcbiAgICAgICAgICAgICAgICB4OnVuZGVmaW5lZCwgeTp1bmRlZmluZWQsd3JhcDp1bmRlZmluZWQsYW5jaG9yOnVuZGVmaW5lZCxibG9ja09mZnNldDp1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbWVyZ2VPcHBvcnR1bml0eTp1bmRlZmluZWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KSlcbiAgICB9XG59XG4iLCJpbXBvcnQge2RvbX0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IHtIYXNQYXJlbnRBbmRDaGlsZCxMb2NhdGFibGV9IGZyb20gXCIuLi9jb21wb3NhYmxlXCJcblxuaW1wb3J0IERvY3VtZW50IGZyb20gXCIuL2RvY3VtZW50XCJcbmltcG9ydCBTZWN0aW9uIGZyb20gXCIuL3NlY3Rpb25cIlxuaW1wb3J0IFBhcmFncmFwaCBmcm9tIFwiLi9wYXJhZ3JhcGhcIlxuaW1wb3J0IFRleHQgZnJvbSBcIi4vdGV4dFwiXG5pbXBvcnQgSW1hZ2UgZnJvbSBcIi4vaW1hZ2VcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuL3RhYmxlXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vcm93XCJcbmltcG9ydCBDZWxsIGZyb20gXCIuL2NlbGxcIlxuaW1wb3J0IEZyYW1lIGZyb20gXCIuL2ZyYW1lXCJcbmltcG9ydCBBbmNob3IgZnJvbSBcIi4vYW5jaG9yXCJcbmltcG9ydCBTaGFwZSBmcm9tIFwiLi9zaGFwZVwiXG5pbXBvcnQgQ29udGFpbmVyIGZyb20gXCIuL2NvbnRhaW5lclwiXG5pbXBvcnQgVGVtcGxhdGUgZnJvbSBcIi4vdGVtcGxhdGVcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi9jb21wb3NlZC9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IExvY2F0YWJsZS5lbmFibGUoSGFzUGFyZW50QW5kQ2hpbGQuZW5hYmxlKGRvbSx7XG5cdERvY3VtZW50LFxuXHRTZWN0aW9uLFxuXHRQYXJhZ3JhcGgsXG5cdFRleHQsXG5cblx0SW1hZ2UsXG5cdFRhYmxlLFxuXHRSb3csXG5cdENlbGwsXG5cdEZyYW1lLFxuXHRTaGFwZSxcblx0QW5jaG9yLFxuXHRDb250YWluZXIsXG5cdFRlbXBsYXRlLFxufSkse0dyb3VwfSlcbiIsImltcG9ydCBkb20gZnJvbSBcIi4uXCJcblxuaW1wb3J0IHtlZGl0YWJsZX0gZnJvbSBcIi4uLy4uL2NvbXBvc2FibGVcIlxuaW1wb3J0IEdyb3VwIGZyb20gXCIuLi8uLi9jb21wb3NlZC9ncm91cFwiXG5cbmV4cG9ydCBkZWZhdWx0IGVkaXRhYmxlLmVuYWJsZShkb20se0dyb3VwfSlcbiIsImltcG9ydCBGb250S2l0IGZyb20gXCJmb250a2l0XCJcblxuY29uc3QgZm9udHM9bmV3IChjbGFzc3tcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLmZhbWlsaWVzPXt9XG4gICAgfVxuXG4gICAgZ2V0KG5hbWUse2JvbGQsaXRhbGljfT17fSl7XG4gICAgICAgIGNvbnN0IGZvdW5kPXRoaXMuZmFtaWx5KG5hbWUpXG4gICAgICAgIGlmKGZvdW5kKXtcbiAgICAgICAgICAgIGlmKGZvdW5kLmxlbmd0aD09MSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRbMF1cblxuICAgICAgICAgICAgZm91bmQuc29ydCgoYSxiKT0+YS5ib2xkfHwwK2EuaXRhbGljfHwwLWIuYm9sZHx8MC1iLml0YWxpY3x8MClcblxuICAgICAgICAgICAgbGV0IGJvbGRzPWZvdW5kLmZpbHRlcihhPT5hLmJvbGQpXG4gICAgICAgICAgICBsZXQgaXRhbGljcz1mb3VuZC5maWx0ZXIoYT0+YS5pdGFsaWMpXG5cbiAgICAgICAgICAgIGlmKGJvbGQgJiYgaXRhbGljKXtcbiAgICAgICAgICAgICAgICBjb25zdCBiaT1ib2xkcy5maW5kKGE9Pml0YWxpY3MuaW5jbHVkZXMoYSkpXG4gICAgICAgICAgICAgICAgaWYoYmkpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGJvbGQpe1xuICAgICAgICAgICAgICAgIGlmKCFpdGFsaWMpe1xuICAgICAgICAgICAgICAgICAgICBib2xkcz1ib2xkcy5maWx0ZXIoYT0+IWl0YWxpY3MuaW5jbHVkZXMoYSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGJvbGRzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib2xkc1swXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoaXRhbGljKXtcbiAgICAgICAgICAgICAgICBpZighYm9sZCl7XG4gICAgICAgICAgICAgICAgICAgIGl0YWxpY3M9aXRhbGljcy5maWx0ZXIoYT0+IWJvbGRzLmluY2x1ZGVzKGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihpdGFsaWNzLmxlbmd0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGFsaWNzWzBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJldHVybiBmb3VuZFswXVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHV0KGZvbnQscHJvcHMpe1xuICAgICAgICBpZighZm9udC5mYW1pbHlOYW1lKXtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleT1mb250LmZhbWlseU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICBjb25zdCBmYW1pbHk9KHRoaXMuZmFtaWxpZXNba2V5XT10aGlzLmZhbWlsaWVzW2tleV18fFtdKVxuICAgICAgICBpZihmYW1pbHkuZmluZChhPT5hLmZ1bGxOYW1lPT1mb250LmZ1bGxOYW1lKSl7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGZvbnQ9ZXh0ZW5kKGZvbnQscHJvcHMpXG4gICAgICAgIGNvbnN0IHtmdWxsTmFtZT1cIlwiLGZhbWlseU5hbWU9XCJcIixzdWJmYW1pbHlOYW1lPVwiXCJ9PWZvbnRcbiAgICAgICAgY29uc3QgdXVpZD1gJHtmdWxsTmFtZX0sJHtmYW1pbHlOYW1lfSwke3N1YmZhbWlseU5hbWV9YFxuICAgICAgICBpZigvYm9sZC9pLnRlc3QodXVpZCkpXG4gICAgICAgICAgICBmb250LmJvbGQ9MVxuICAgICAgICBpZigvaXRhbGljL2kudGVzdCh1dWlkKSlcbiAgICAgICAgICAgIGZvbnQuaXRhbGljPTFcbiAgICAgICAgY29uc3QgbmFtZT1mb250LmZhbWlseU5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICBjb25zb2xlLmxvZyhgZm9udFske2ZvbnQuZmFtaWx5TmFtZX1dIGxvYWRlZGApXG4gICAgICAgIGZhbWlseS5wdXNoKGZvbnQpXG4gICAgICAgIHJldHVybiBmb250XG4gICAgfVxuXG4gICAgbmFtZXMoKXtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmFtaWxpZXMpXG5cdFx0XHQubWFwKGs9PnRoaXMuZmFtaWxpZXNba11bMF0uZmFtaWx5TmFtZSlcblx0XHRcdC5maWx0ZXIoYT0+ISFhKVxuICAgIH1cblxuICAgIGZhbWlseShuYW1lKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFtaWxpZXNbbmFtZS50b0xvd2VyQ2FzZSgpXVxuICAgIH1cbn0pKClcblxuY29uc3QgRm9udE1hbmFnZXI9e1xuICAgIGdldCgpe1xuICAgICAgICByZXR1cm4gZm9udHMuZ2V0KC4uLmFyZ3VtZW50cylcbiAgICB9LFxuXG4gICAgZ2V0IG5hbWVzKCl7XG5cdFx0cmV0dXJuIGZvbnRzLm5hbWVzKCkuc29ydCgpXG5cdH0sXG5cbiAgICByZWxlYXNlKCl7XG4gICAgICAgIHRoaXMuaXRlcmF0ZUxvY2FsKGE9PlVSTC5yZWxlYXNlT2JqZWN0VVJMKGEuc3JjKSlcbiAgICAgICAgZm9udHMuZmFtaWxpZXM9e31cbiAgICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXRlcmF0ZUxvY2FsKGYpe1xuICAgICAgICBmb250cy5uYW1lcygpLmZvckVhY2goaz0+e1xuICAgICAgICAgICAgZm9udHMuZmFtaWx5KGspLmZvckVhY2goYT0+e1xuICAgICAgICAgICAgICAgIGlmKGEuc3JjICYmIGEuc3JjLnN0YXJ0c1dpdGgoXCJibG9iOlwiKSl7XG4gICAgICAgICAgICAgICAgICAgIGYoYSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0sXG5cblx0ZnJvbUJyb3dzZXIobG9hZGVyKXtcbiAgICAgICAgY29uc3QgbG9hZDE9ZmlsZT0+e1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PntcbiAgICAgICAgICAgICAgICBjb25zdCBzcmM9VVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKVxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obmV3IEZpbGVSZWFkZXIoKSx7XG4gICAgICAgICAgICAgICAgICAgIG9ubG9hZCh7dGFyZ2V0OntyZXN1bHQ6ZGF0YX19KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb250PUZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGRhdGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFmb250KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoZm9udC5mb250cyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShmb250LmZvbnRzKS5tYXAoZm9udD0+Zm9udHMucHV0KGZvbnQse3NyY30pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2V7XG4gICAgXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGZvbnRzLnB1dChmb250LHtzcmN9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdFx0XHR9Y2F0Y2goZSl7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoKVxuXHRcdFx0XHRcdFx0fVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbmVycm9yOmU9PnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIH0pLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20obG9hZGVyLmZpbGVzKS5tYXAobG9hZDEpKS50aGVuKGZvbnRzPT57XG4gICAgICAgICAgICBsb2FkZXIudmFsdWU9XCJcIlxuICAgICAgICAgICAgcmV0dXJuIGZsYXQoZm9udHMpXG4gICAgICAgIH0pLmZpbmFsbHkobWFrZVdlYkZvbnQpXG5cdH0sXG5cbiAgICBmcm9tUGF0aChwYXRoKXtcbiAgICAgICAgY29uc3QgbG9hZDE9ZmlsZT0+e1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PntcbiAgICAgICAgICAgICAgICBGb250S2l0Lm9wZW4oZmlsZSwoZXJyLCBmb250KT0+e1xuICAgICAgICAgICAgICAgICAgICBpZihlcnIpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGZvbnQuZm9udHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShBcnJheS5mcm9tKGZvbnQuZm9udHMpLm1hcChmb250PT5mb250cy5wdXQoZm9udCx7c3JjOmZpbGV9KSkpXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmb250cy5wdXQoZm9udCx7c3JjOmZpbGV9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICAgICAgaWYocGF0aCl7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoXCJmc1wiKS5yZWFkZGlyKHBhdGgsIChlcnIsIGZpbGVzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXJyKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChmaWxlcy5tYXAoZmlsZT0+bG9hZDEoYCR7cGF0aH0vJHtmaWxlfWApKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+cmVzb2x2ZShmbGF0KGZvbnRzKSkscmVqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwiZ2V0LXN5c3RlbS1mb250c1wiKSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+UHJvbWlzZS5hbGwoZm9udHMubWFwKGxvYWQxKS5maWx0ZXIoYT0+ISFhKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmb250cz0+cmVzb2x2ZShmbGF0KGZvbnRzKSkscmVqZWN0KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgfSxcblxuICAgIGZyb21SZW1vdGUoc2VydmljZSl7XG4gICAgICAgIHJldHVybiBmZXRjaChzZXJ2aWNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzPT5yZXMudGV4dCgpKVxuICAgICAgICAgICAgLnRoZW4obGlzdD0+e1xuICAgICAgICAgICAgICAgIGxldCBmb250c1xuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgZm9udHM9SlNPTi5wYXJzZShsaXN0KVxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgZm9udHM9bGlzdC5zcGxpdChcIixcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvbnRzLmZpbHRlcihhPT4hIWEpLm1hcChhPT5hLnRyaW0oKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihsaXN0PT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICBsaXN0Lm1hcChhPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcmM9YCR7c2VydmljZX0vJHthfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaChzcmMpLnRoZW4ocmVzPT57XG4gICAgICAgICAgICBcdFx0XHRcdFx0aWYocmVzLm9rKXtcbiAgICAgICAgICAgIFx0XHRcdFx0XHRcdHJldHVybiByZXMuYXJyYXlCdWZmZXIoKS50aGVuKGJ1ZmZlcj0+Zm9udHMucHV0KEZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGJ1ZmZlcikpLHtzcmN9KSlcbiAgICAgICAgICAgIFx0XHRcdFx0XHR9XG4gICAgICAgICAgICBcdFx0XHRcdH0pXG5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbmFsbHkobWFrZVdlYkZvbnQpXG4gICAgfSxcblxuXHRsb2FkKHNlcnZpY2UsaWQpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBjb25zdCBmb3VuZD10aGlzLmdldChpZClcbiAgICBcdFx0aWYodHlwZW9mKGZvdW5kKSE9XCJ1bmRlZmluZWRcIilcbiAgICBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvdW5kKVxuICAgICAgICB9Y2F0Y2goZSl7XG5cbiAgICAgICAgfVxuXG5cdFx0bGV0IGRhdGFSZXRyaWV2ZWQscHJvcHM9e31cblx0XHRpZih0eXBlb2Yoc2VydmljZSk9PVwic3RyaW5nXCIpe1xuICAgICAgICAgICAgZGF0YVJldHJpZXZlZD1mZXRjaChwcm9wcy5zcmM9YCR7c2VydmljZX0vJHtpZH1gKVxuXHRcdFx0XHQudGhlbihyZXM9Pntcblx0XHRcdFx0XHRpZighcmVzLm9rKXtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihyZXMuc3RhdHVzVGV4dClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHJlcy5hcnJheUJ1ZmZlcigpXG5cdFx0XHRcdH0pXG5cdFx0fWVsc2V7XG5cdFx0XHRkYXRhUmV0cmlldmVkPXNlcnZpY2UoaWQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGFSZXRyaWV2ZWRcblx0XHRcdC50aGVuKGJ1ZmZlcj0+Zm9udHMucHV0KEZvbnRLaXQuY3JlYXRlKEJ1ZmZlci5mcm9tKGJ1ZmZlcikpLHByb3BzKSlcblx0XHRcdC5jYXRjaCgpXG5cdH0sXG5cbiAgICBhc1NlcnZpY2Uoc3c9XCIvZm9udC1zZXJ2aWNlLmpzXCIsc2NvcGU9XCJcIil7XG4gICAgICAgIGlmICh0eXBlb2YobmF2aWdhdG9yKSE9XCJ1bmRlZmluZWRcIiAmJiAnc2VydmljZVdvcmtlcicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgICAgICB2YXIgc2VydmljZVxuICAgICAgICAgICAgY29uc3QgX2Zyb21Ccm93c2VyPUZvbnRNYW5hZ2VyLmZyb21Ccm93c2VyXG4gICAgICAgICAgICBGb250TWFuYWdlci5mcm9tQnJvd3Nlcj1mdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHJldHVybiBfZnJvbUJyb3dzZXIuY2FsbChGb250TWFuYWdlciwuLi5hcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgICAuZmluYWxseSgoKT0+Rm9udE1hbmFnZXIuaXRlcmF0ZUxvY2FsKCh7ZmFtaWx5TmFtZSwgc3JjfSk9PntcbiAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuYWN0aXZlLnBvc3RNZXNzYWdlKHtmYW1pbHlOYW1lLCBzcmMsIHNjb3BlfSlcbiAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoYCR7c3d9YCwgeyBzY29wZTogYCR7c2NvcGV9L2AgfSkudGhlbihmdW5jdGlvbihyZWcpIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlPXJlZ1xuICAgICAgICAgICAgICAgIGlmKHJlZy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZvbnQgU2VydmljZVske3N3fV0gd29ya2VyIGFjdGl2ZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZvbnQgU2VydmljZVske3N3fV0gZmFpbGVkIHdpdGggYCArIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9udE1hbmFnZXJcblxuZnVuY3Rpb24gZmxhdChmb250cyl7XG4gICAgcmV0dXJuIGZvbnRzLnJlZHVjZSgoY2x0LGEpPT57XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoYSkpe1xuICAgICAgICAgICAgY2x0LnNwbGljZShjbHQubGVuZ3RoLDAsLi4uYSlcbiAgICAgICAgfWVsc2UgaWYoYSl7XG4gICAgICAgICAgICBjbHQucHVzaChhKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHRcbiAgICB9LFtdKVxufVxuXG5mdW5jdGlvbiBleHRlbmQoZm9udCwgcHJvcHM9e30pe1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihmb250LHtcblx0XHRsaW5lSGVpZ2h0KGZvbnRTaXplKXtcblx0XHRcdGNvbnN0IHNjYWxlID0gMSAvIHRoaXMudW5pdHNQZXJFbSAqIGZvbnRTaXplXG5cdFx0XHRyZXR1cm4gc2NhbGUqKHRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXApXG5cdFx0fSxcblx0XHRsaW5lRGVzY2VudChmb250U2l6ZSl7XG5cdFx0XHRjb25zdCBzY2FsZSA9IDEgLyB0aGlzLnVuaXRzUGVyRW0gKiBmb250U2l6ZTtcblx0XHRcdHJldHVybiAtdGhpcy5kZXNjZW50KnNjYWxlXG5cdFx0fSxcblxuICAgICAgICBzdHJpbmdXaWR0aChzdHJpbmcsZm9udFNpemUpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0KHN0cmluZykuYWR2YW5jZVdpZHRoL3RoaXMudW5pdHNQZXJFbSAqIGZvbnRTaXplXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnByb3BzXG5cdH0pXG59XG5cbnZhciB3ZWJGb250cz1udWxsXG5mdW5jdGlvbiBtYWtlV2ViRm9udCgpe1xuICAgIGlmKCF3ZWJGb250cyl7XG4gICAgICAgIHdlYkZvbnRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKVxuICAgICAgICB3ZWJGb250cy5pZD1cIndlX2VkaXRfd2ViX2ZvbnRzXCJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh3ZWJGb250cylcbiAgICB9XG4gICAgY29uc3QgbG9hZGVkPUFycmF5LmZyb20od2ViRm9udHMuc2hlZXQucnVsZXMpLm1hcChhPT5hLnN0eWxlLmZvbnRGYW1pbHkpXG4gICAgZm9udHMubmFtZXMoKS5maWx0ZXIoYT0+IWxvYWRlZC5pbmNsdWRlcyhhKSlcbiAgICAgICAgLmZvckVhY2goaz0+e1xuICAgICAgICAgICAgY29uc3QgZm9udD1mb250cy5nZXQoaylcbiAgICAgICAgICAgIGNvbnN0IHtmYW1pbHlOYW1lLCBzcmN9PWZvbnRcbiAgICAgICAgICAgIGlmKHNyYyAmJiBmYW1pbHlOYW1lKXtcbiAgICAgICAgICAgICAgICB3ZWJGb250cy5zaGVldC5hZGRSdWxlKCdAZm9udC1mYWNlJyxgZm9udC1mYW1pbHk6XCIke2ZhbWlseU5hbWV9XCI7c3JjOiBsb2NhbChcIiR7ZmFtaWx5TmFtZX1cIiksIHVybChcIiR7c3JjfVwiKTtgKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxufVxuIiwiZXhwb3J0IGNsYXNzIE1lYXN1cmV7XG4gICAgY29uc3RydWN0b3Ioc3R5bGUpe1xuXHRcdGNvbnN0IHtmb250cywgc2l6ZX09c3R5bGVcblx0XHR0aGlzLnN0eWxlPXN0eWxlXG5cdFx0dGhpcy5mb250RmFtaWx5cz1mb250cy5zcGxpdChcIixcIikubWFwKGE9PmEudHJpbSgpKS5maWx0ZXIoYT0+ISFhKVxuICAgICAgICB0aGlzLmZvbnRGYW1pbHk9dGhpcy5mb250RmFtaWx5c1swXVxuXHRcdHRoaXMuc2l6ZT1zaXplXG4gICAgICAgIHRoaXMuZGVmYXVsdFN0eWxlPXtcblx0XHRcdHdoaXRlU3BhY2U6J3ByZScsXG5cdFx0XHRmb250U2l6ZTpgJHtzaXplfXB0YCxcblx0XHRcdGZvbnRXZWlnaHQ6c3R5bGUuYm9sZCA/IDcwMCA6IDQwMCxcblx0XHRcdGZvbnRTdHlsZTpzdHlsZS5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIixcblx0XHRcdGZvbnRGYW1pbHk6dGhpcy5mb250RmFtaWx5XG5cdFx0fVxuXG5cdFx0Y29uc3Qge2hlaWdodCwgZGVzY2VudH09dGhpcy5saW5lSGVpZ2h0KClcbiAgICAgICAgdGhpcy5kZWZhdWx0U3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0PWhlaWdodFxuXHRcdHRoaXMuZGVmYXVsdFN0eWxlLmRlc2NlbnQ9dGhpcy5kZXNjZW50PWRlc2NlbnRcbiAgICB9XG5cblx0bGluZUhlaWdodCgpe1xuXHRcdHJldHVybiB7aGVpZ2h0OjI1LGRlc2NlbnQ6Mn1cblx0fVxuXG5cdHN0cmluZ1dpZHRoKHN0cmluZyl7XG5cdFx0cmV0dXJuIDIwMFxuXHR9XG5cblx0d2lkdGhTdHJpbmcod2lkdGgsc3RyaW5nKXtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHN0cmluZywoc3RhdGUsYSk9Pntcblx0XHRcdGlmKHN0YXRlLmRvbmUpXG5cdFx0XHRcdHJldHVybiBzdGF0ZVxuXG5cdFx0XHRsZXQgYVdpZHRoPXRoaXMuc3RyaW5nV2lkdGgoYSlcblx0XHRcdGlmKHN0YXRlLndpZHRoK2FXaWR0aD53aWR0aCl7XG5cdFx0XHRcdHN0YXRlLmRvbmU9dHJ1ZVxuXHRcdFx0XHRpZih3aWR0aC1zdGF0ZS53aWR0aD5zdGF0ZS53aWR0aCthV2lkdGgtd2lkdGgpe1xuXHRcdFx0XHRcdHN0YXRlLndpZHRoKz1hV2lkdGhcblx0XHRcdFx0XHRzdGF0ZS50ZXh0Kz1hXG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRzdGF0ZS53aWR0aCs9YVdpZHRoXG5cdFx0XHRcdHN0YXRlLnRleHQrPWFcblx0XHRcdH1cblx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdH0se3dpZHRoOjAsdGV4dDpcIlwiLGRvbmU6ZmFsc2V9KS50ZXh0Lmxlbmd0aFxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lYXN1cmVcbiIsImltcG9ydCBNZWFzdXJlIGZyb20gXCIuL2Jhc2VcIlxuaW1wb3J0IG1lbW9pemUgZnJvbSBcIm1lbW9pemUtb25lXCJcblxuLyoqXG4gKlxuICogd2h5IGl0J3Mgc2xvd2VyIHRoYW4gaHRtbFxuICovXG5sZXQgdGVzdGVyPW51bGxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWR01lYXN1cmUgZXh0ZW5kcyBNZWFzdXJle1xuICAgIGxpbmVIZWlnaHQoKXtcblx0XHRpZighdGVzdGVyKXtcblx0XHRcdGxldCBjb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuXHRcdFx0Y29udGFpbmVyLnN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDAwcHhcIlxuXHRcdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG5cdFx0XHRjb250YWluZXIuaW5uZXJIVE1MPWA8c3ZnIHZpZXdCb3g9XCIwIDAgJHsxMDB9ICR7MTAwfVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48dGV4dD7DhDwvdGV4dD48L3N2Zz5gXG5cdFx0XHR0ZXN0ZXI9Y29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3RleHQnKVxuICAgICAgICAgICAgdGVzdGVyLnNldFN0eWxlPW1lbW9pemUoc3R5bGU9PnRlc3Rlci5zdHlsZT1zdHlsZSlcblx0XHR9XG5cdFx0dGVzdGVyLnNldFN0eWxlKHRoaXMuY3NzU3R5bGUoKSlcbiAgICAgICAgdGVzdGVyLmZpcnN0Q2hpbGQuZGF0YT1cIsOEXCJcbiAgICAgICAgY29uc3Qge2hlaWdodCx5LCBiYXNlbGluZT0teX09dGVzdGVyLmdldEJCb3goKVxuICAgICAgICByZXR1cm4ge2hlaWdodCxkZXNjZW50OmhlaWdodC1iYXNlbGluZX1cbiAgICB9XG5cbiAgICBjc3NTdHlsZSgpe1xuICAgICAgICByZXR1cm4gYHdoaXRlLXNwYWNlOnByZTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiR7dGhpcy5mb250RmFtaWx5fTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZToke3RoaXMuc2l6ZX1wdDtcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiR7dGhpcy5zdHlsZS5ib2xkID8gXCI3MDBcIiA6IFwiNDAwXCJ9O1xuICAgICAgICAgICAgZm9udC1zdHlsZToke3RoaXMuc3R5bGUuaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCJ9O1xuICAgICAgICAgICAgYFxuICAgIH1cblxuICAgIHN0cmluZ1dpZHRoKHdvcmQpe1xuXHRcdHRlc3Rlci5zZXRTdHlsZSh0aGlzLmNzc1N0eWxlKCkpXG4gICAgICAgIHRlc3Rlci5maXJzdENoaWxkLmRhdGE9d29yZFxuICAgICAgICByZXR1cm4gdGVzdGVyLmdldEJCb3goKS53aWR0aFxuICAgIH1cbn1cbiIsImltcG9ydCBNZWFzdXJlIGZyb20gXCIuL2Jhc2VcIlxuaW1wb3J0IEZvbnRNYW5hZ2VyIGZyb20gXCIuLi9mb250c1wiXG5pbXBvcnQge2RlZmF1bHQgYXMgaXNOb2RlfSBmcm9tIFwiaXMtbm9kZVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvbnRNZWFzdXJlIGV4dGVuZHMgTWVhc3VyZXtcblx0Z2V0Rm9udCgpe1xuXHRcdHJldHVybiBGb250TWFuYWdlci5nZXQodGhpcy5mb250RmFtaWx5LCB0aGlzLnN0eWxlKVxuXHR9XG5cbiAgICBsaW5lSGVpZ2h0KCl7XG5cdFx0dGhpcy5mb250PXRoaXMuZ2V0Rm9udCgpXG4gICAgICAgIHJldHVybiB7XG5cdFx0XHRoZWlnaHQgOiB0aGlzLmZvbnQubGluZUhlaWdodCh0aGlzLnNpemUpKjk2LzcyLFxuXHRcdFx0ZGVzY2VudDogdGhpcy5mb250LmxpbmVEZXNjZW50KHRoaXMuc2l6ZSkqOTYvNzJcblx0XHR9XG4gICAgfVxuXG4gICAgc3RyaW5nV2lkdGgoaW5wdXQpe1xuXHRcdHJldHVybiB0aGlzLmZvbnQuc3RyaW5nV2lkdGgoaW5wdXQsdGhpcy5zaXplKSo5Ni83MlxuICAgIH1cblxuXHRzdGF0aWMgcmVxdWlyZUZvbnRzKHNlcnZpY2UsZm9udHM9W10pe1xuXHRcdGNvbnN0IGRvbmU9KCk9Pntcblx0XHRcdGxldCB1bmxvYWRlZD1mb250cy5maWx0ZXIoYT0+IUZvbnRNYW5hZ2VyLmdldChhKSlcblx0XHRcdGlmKHVubG9hZGVkLmxlbmd0aD4wKVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZm9udFtcIit1bmxvYWRlZC5qb2luKFwiLFwiKStcIl0gY2FuJ3QgYmUgbG9hZGVkIVwiKSlcblx0XHR9XG5cblx0XHRpZihmb250cy5yZWR1Y2UoKGxvYWRlZCxrKT0+bG9hZGVkICYmICEhRm9udE1hbmFnZXIuZ2V0KGspLHRydWUpKXtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZG9uZSgpKVxuXHRcdH1cblxuXHRcdGlmKGlzTm9kZSAmJiB0eXBlb2Yoc2VydmljZSk9PVwic3RyaW5nXCIgJiYgcmVxdWlyZShcImZzXCIpLmV4aXN0c1N5bmMoc2VydmljZSkpe1xuXHRcdFx0cmV0dXJuIEZvbnRNYW5hZ2VyXG5cdFx0XHRcdC5mcm9tUGF0aChzZXJ2aWNlKVxuXHRcdFx0XHQuZmluYWxseShkb25lKVxuXHRcdH1cblxuXHRcdHN3aXRjaCh0eXBlb2Yoc2VydmljZSkpe1xuXHRcdGNhc2UgXCJzdHJpbmdcIjovL3VybFxuXHRcdFx0cmV0dXJuIEZvbnRNYW5hZ2VyLmZyb21SZW1vdGUoc2VydmljZSlcblx0XHRcdFx0LmZpbmFsbHkoZG9uZSlcblx0XHRjYXNlIFwiZnVuY3Rpb25cIjpcblx0XHRcdHJldHVybiBQcm9taXNlXG5cdFx0XHRcdC5hbGwoZm9udHMubWFwKGE9PkZvbnRNYW5hZ2VyLmxvYWQoc2VydmljZSxhKSkpXG5cdFx0XHRcdC5maW5hbGx5KGRvbmUpXG5cdFx0YnJlYWtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkb25lKCkpXG5cdFx0YnJlYWtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7RW1pdHRlcn0gZnJvbSBcIndlLWVkaXRcIlxuaW1wb3J0IFBhcnNlciBmcm9tIFwiaHRtbHBhcnNlcjJcIlxuXG5jb25zdCBSRV9UUkFOU0xBVEU9L3RyYW5zbGF0ZVxcKCguKilcXHMrKC4qKVxcKS9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE91dHB1dCBleHRlbmRzIEVtaXR0ZXIuRm9ybWF0LkJhc2V7XG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdC4uLkVtaXR0ZXIuRm9ybWF0LkJhc2UuZGVmYXVsdFByb3BzLFxuXHRcdHJlcHJlc2VudGF0aW9uOiBcInBhZ2luYXRpb25cIlxuXHR9XG5cdG91dHB1dChjb250ZW50KXtcblx0XHRjb250ZW50LnBpcGUobmV3IFBhcnNlci5Xcml0YWJsZVN0cmVhbSh0aGlzLHt4bWxNb2RlOnRydWV9KSlcblx0fVxuXG5cdG9ub3BlbnRhZyhuYW1lLGF0dHJzKXtcblx0XHRzd2l0Y2gobmFtZSl7XG5cdFx0XHRjYXNlICdzdmcnOlxuXHRcdFx0XHR0aGlzLm9ucmVzZXQoKVxuXHRcdFx0XHR0aGlzLm9uRG9jdW1lbnQoYXR0cnMpXG5cdFx0XHRicmVha1xuXHRcdFx0Y2FzZSAnZyc6XG5cdFx0XHRcdGlmKGF0dHJzLmNsYXNzPT1cInBhZ2VcIil7XG5cdFx0XHRcdFx0Y29uc3QgaT1wYXJzZUludChhdHRycy5pZC5zdWJzdHJpbmcoNCkpXG5cdFx0XHRcdFx0Y29uc3Qge3Byb3BzOnt3aWR0aCxoZWlnaHR9fT10aGlzLnByb3BzLmRvY3VtZW50LnBhZ2VzW2ldXG5cdFx0XHRcdFx0dGhpcy5vblBhZ2Uoe3dpZHRoLGhlaWdodH0pXG5cdFx0XHRcdH1lbHNlXG5cdFx0XHRcdFx0dGhpcy5vbkdyb3VwKGF0dHJzKVxuXHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0XHR0aGlzLl9jdXJyZW50VGV4dD1hdHRyc1xuXHRcdFx0YnJlYWtcblx0XHRcdGRlZmF1bHQ6e1xuXHRcdFx0XHRsZXQgb25Db250ZW50PWBvbiR7bmFtZVswXS50b1VwcGVyQ2FzZSgpfSR7bmFtZS5zdWJzdHIoMSl9YFxuXHRcdFx0XHRpZih0aGlzW29uQ29udGVudF0pe1xuXHRcdFx0XHRcdHRoaXNbb25Db250ZW50XShhdHRycylcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRvbmNsb3NldGFnKG5hbWUpe1xuXHRcdHN3aXRjaChuYW1lKXtcblx0XHRcdGNhc2UgJ2cnOlxuXHRcdFx0XHR0aGlzLm9uR3JvdXBFbmQoKVxuXHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgJ3RleHQnOlxuXHRcdFx0XHR0aGlzLm9uVGV4dCh0aGlzLl9jdXJyZW50VGV4dClcblx0XHRcdGJyZWFrXG5cdFx0fVxuXHR9XG5cblx0b25hdHRyaWJ1dGUobmFtZSwgdmFsdWUpe1xuXG5cdH1cblxuXHRvbnRleHQodGV4dCl7XG5cdFx0dGhpcy5fY3VycmVudFRleHQudGV4dD10ZXh0XG5cdH1cblxuXHRvbnByb2Nlc3NpbmdpbnN0cnVjdGlvbihuYW1lLCBkYXRhKXtcblxuXHR9XG5cdG9uY29tbWVudChkYXRhKXtcblxuXHR9XG5cdG9uY29tbWVudGVuZCgpe1xuXG5cdH1cblxuXHRvbmNkYXRhc3RhcnQoKXtcblxuXHR9XG5cdG9uY2RhdGFlbmQoKXtcblxuXHR9XG5cblx0b25lcnJvcihlcnJvcil7XG5cblx0fVxuXG5cdG9ucmVzZXQoKXtcblx0XHR0aGlzLl9vZmZzZXRzPVt7eDowLHk6MH1dXG5cdFx0dGhpcy5fY3VycmVudFRleHQ9bnVsbFxuXHRcdHRoaXMuX2FzeW5jSm9icz1bXVxuXHR9XG5cblx0b25lbmQoKXtcblx0XHRQcm9taXNlLmFsbCh0aGlzLl9hc3luY0pvYnMpXG5cdFx0XHQudGhlbigoKT0+e1xuXHRcdFx0XHR0aGlzLm9uRG9jdW1lbnRFbmQoKVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChlPT57XG5cdFx0XHRcdHRoaXMub25Eb2N1bWVudEVuZChlKVxuXHRcdFx0fSlcblx0fVxuXG5cdGFkZEFzeW5jSm9iKGEpe1xuXHRcdHRoaXMuX2FzeW5jSm9icy5wdXNoKGEuY2F0Y2goZT0+e1xuXHRcdFx0Y29uc29sZS5lcnJvcihlKVxuXHRcdFx0cmV0dXJuIGVcblx0XHR9KSlcblx0fVxuXG5cdG9uRG9jdW1lbnQoKXtcblxuXHR9XG5cblx0b25Eb2N1bWVudEVuZCgpe1xuXG5cdH1cblxuXHRvblBhZ2UoYXR0cnMpe1xuXHRcdHRoaXMub25Hcm91cChhdHRycylcblx0fVxuXG5cdG9uSW1hZ2UoKXtcblxuXHR9XG5cblx0b25UZXh0KHt0ZXh0fSl7XG5cblx0fVxuXG5cdG9uR3JvdXAoe3RyYW5zZm9ybT1cInRyYW5zbGF0ZSgwIDApXCJ9KXtcblx0XHRsZXQgWyx4PTAseT0wXT10cmFuc2Zvcm0ubWF0Y2goUkVfVFJBTlNMQVRFKVxuXHRcdHRoaXMuX29mZnNldHMucHVzaCh7eDpwYXJzZUludCh4KSx5OnBhcnNlSW50KHkpfSlcblx0fVxuXG5cdG9uR3JvdXBFbmQoKXtcblx0XHR0aGlzLl9vZmZzZXRzLnBvcCgpXG5cdH1cblxuXHRnZXQgb2Zmc2V0KCl7XG5cdFx0cmV0dXJuIHRoaXMuX29mZnNldHMucmVkdWNlKChzdGF0ZSx7eCx5fSk9Pntcblx0XHRcdHN0YXRlLngrPXhcblx0XHRcdHN0YXRlLnkrPXlcblx0XHRcdHJldHVybiBzdGF0ZVxuXHRcdH0se3g6MCx5OjB9KVxuXHR9XG59XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBCYXNlIGZyb20gXCIuL2luZGV4XCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNWRyBleHRlbmRzIEJhc2V7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cIlNWR1wiXG5cdHN0YXRpYyBwcm9wVHlwZXM9e1xuXHRcdC4uLkJhc2UucHJvcFR5cGVzLFxuXHRcdHBhZ2VHYXA6IFByb3BUeXBlcy5udW1iZXIsXG5cdFx0cGdDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJzdmdcIixcblx0XHRuYW1lOlwiU1ZHIERvY3VtZW50XCIsXG5cdFx0ZXh0Olwic3ZnXCIsXG5cdFx0cmVwcmVzZW50YXRpb246IFwicGFnaW5hdGlvblwiLFxuXG5cdFx0cGFnZUdhcDoyNCxcblx0XHRwZ0NvbG9yOlwid2hpdGVcIlxuXHR9XG5cblx0b25yZXNldCgpe1xuXHRcdHN1cGVyLm9ucmVzZXQoLi4uYXJndW1lbnRzKVxuXHRcdHRoaXMueT0wXG5cdFx0dGhpcy5kZXB0aD0tMVxuXHRcdHRoaXMuZGVmcz1uZXcgU2V0KClcblx0fVxuXG5cdHNwcmVhZChhdHRycyl7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGF0dHJzKS5tYXAoaz0+YCR7a309XCIke2F0dHJzW2tdfVwiYCkuam9pbihcIiBcIilcblx0fVxuXG5cdG9uRG9jdW1lbnQoe3ZpZXdCb3h9KXtcblx0XHRjb25zdCB7cGFnZUdhcH09dGhpcy5wcm9wc1xuXHRcdGNvbnN0IFssLHdpZHRoLGhlaWdodF09dmlld0JveC50cmltKCkuc3BsaXQoL1xccysvZylcblx0XHR0aGlzLndpZHRoPXBhZ2VHYXArcGFyc2VJbnQod2lkdGgpK3BhZ2VHYXBcblx0XHR0aGlzLmhlaWdodD1wYXJzZUludChoZWlnaHQpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxzdmdcblx0c3R5bGU9XCJiYWNrZ3JvdW5kOmxpZ2h0Z3JheVwiXG5cdHdpZHRoPVwiJHt0aGlzLndpZHRofVwiIGhlaWdodD1cIiR7dGhpcy5oZWlnaHR9XCJcblx0eG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG5cdHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuXHRcdGApXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgke3BhZ2VHYXB9LDApXCI+YClcblx0fVxuXG5cdG9uRG9jdW1lbnRFbmQoZSl7XG5cdFx0dGhpcy5zdHJlYW0uZW5kKCc8L2c+PC9zdmc+Jylcblx0fVxuXG5cdG9uUGFnZSh7d2lkdGgsaGVpZ2h0fSl7XG5cdFx0d2lkdGg9cGFyc2VJbnQod2lkdGgpXG5cdFx0aGVpZ2h0PXBhcnNlSW50KGhlaWdodClcblx0XHR0aGlzLnkrPXRoaXMucHJvcHMucGFnZUdhcFxuXHRcdGNvbnN0IHsgcGFnZUdhcCwgcGdDb2xvcn09dGhpcy5wcm9wc1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJHsodGhpcy53aWR0aC13aWR0aCkvMn0gJHt0aGlzLnl9KVwiPmApXG5cdFx0aWYocGdDb2xvcilcblx0XHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8cmVjdCB3aWR0aD1cIiR7d2lkdGh9XCIgaGVpZ2h0PVwiJHtoZWlnaHR9XCIgZmlsbD1cIiR7cGdDb2xvcn1cIi8+YClcblxuXHRcdHRoaXMueSs9aGVpZ2h0XG5cdH1cblxuXHRvbkltYWdlKGF0dHJzKXtcblx0XHRsZXQgaHJlZj1hdHRyc1tcInhsaW5rOmhyZWZcIl1cblx0XHRkZWxldGUgYXR0cnNbXCJ4bGluazpocmVmXCJdXG5cdFx0bGV0IGlkPWJ0b2EoaHJlZilcblxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8dXNlIHhsaW5rOmhyZWY9XCIjJHtpZH1cIi8+YClcblxuXHRcdGlmKCF0aGlzLmRlZnMuaGFzKGhyZWYpKXtcblx0XHRcdHRoaXMuZGVmcy5hZGQoaHJlZilcblx0XHRcdGxldCBqb2I9ZmV0Y2goaHJlZilcblx0XHRcdFx0LnRoZW4ocmVzPT57XG5cdFx0XHRcdFx0aWYoIXJlcy5vayl7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IocmVzLnN0YXR1c1RleHQpXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXMuYXJyYXlCdWZmZXIoKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbihidWZmZXI9Pntcblx0XHRcdFx0XHRjb25zdCBzdHJlYW09dGhpcy5zdHJlYW1cblxuXHRcdFx0XHRcdGNvbnN0IHRvU3RyaW5nPXZpZXc9PnZpZXcucmVkdWNlKChiLGEsaSk9Pntcblx0XHRcdFx0XHRcdFx0YltpXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpXG5cdFx0XHRcdFx0XHRcdHJldHVybiBiXG5cdFx0XHRcdFx0XHR9LG5ldyBBcnJheSh2aWV3LmJ5dGVMZW5ndGgpKS5qb2luKFwiXCIpXG5cblx0XHRcdFx0XHRzdHJlYW0ud3JpdGUoYDxkZWZzPmApXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGA8aW1hZ2UgaWQ9XCIke2lkfVwiICR7dGhpcy5zcHJlYWQoYXR0cnMpfSBgKVxuXHRcdFx0XHRcdHN0cmVhbS53cml0ZSgneGxpbms6aHJlZj1cImRhdGE6aW1hZ2UvKjtiYXNlNjQsJylcblx0XHRcdFx0XHRzdHJlYW0ud3JpdGUoYnRvYSh0b1N0cmluZyhuZXcgVWludDhBcnJheShidWZmZXIpKSkpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKCdcIicpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKCcvPicpXG5cdFx0XHRcdFx0c3RyZWFtLndyaXRlKGA8L2RlZnM+YClcblx0XHRcdFx0fSlcblxuXHRcdFx0dGhpcy5hZGRBc3luY0pvYihqb2IpXG5cdFx0fVxuXHR9XG5cblx0b25UZXh0KHt0ZXh0LCAuLi5hdHRyc30pe1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKGA8dGV4dCAke3RoaXMuc3ByZWFkKGF0dHJzKX0+JHt0ZXh0fTwvdGV4dD5gKVxuXHR9XG5cblx0b25Hcm91cChhdHRycyl7XG5cdFx0c3VwZXIub25Hcm91cCguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoYDxnICR7dGhpcy5zcHJlYWQoYXR0cnMpfT5gKVxuXHR9XG5cblx0b25Hcm91cEVuZCgpe1xuXHRcdHN1cGVyLm9uR3JvdXBFbmQoKVxuXHRcdHRoaXMuc3RyZWFtLndyaXRlKFwiPC9nPlwiKVxuXHR9XG5cblx0b25vcGVudGFnKCl7XG5cdFx0c3VwZXIub25vcGVudGFnKC4uLmFyZ3VtZW50cylcblx0XHR0aGlzLnN0cmVhbS53cml0ZShcIlxcclxcblwiKVxuXHRcdHRoaXMuZGVwdGgrK1xuXHRcdHRoaXMuc3RyZWFtLndyaXRlKG5ldyBBcnJheSh0aGlzLmRlcHRoKS5maWxsKFwiXFx0XCIpLmpvaW4oXCJcIikpXG5cdH1cblxuXHRvbmNsb3NldGFnKCl7XG5cdFx0c3VwZXIub25jbG9zZXRhZyguLi5hcmd1bWVudHMpXG5cdFx0dGhpcy5zdHJlYW0ud3JpdGUoXCJcXHJcXG5cIilcblx0XHR0aGlzLnN0cmVhbS53cml0ZShuZXcgQXJyYXkodGhpcy5kZXB0aCkuZmlsbChcIlxcdFwiKS5qb2luKFwiXCIpKVxuXHRcdHRoaXMuZGVwdGgtLVxuXHR9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuXG5pbXBvcnQgaXNOb2RlIGZyb20gXCJpcy1ub2RlXCJcbmltcG9ydCB7UmVwcmVzZW50YXRpb259IGZyb20gXCJ3ZS1lZGl0XCJcblxuaW1wb3J0IFZpZXdlcnMgZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBFZGl0b3JzIGZyb20gXCIuL2RvbS9lZGl0XCJcbmltcG9ydCB7ZWRpdGFibGV9IGZyb20gXCIuL2NvbXBvc2FibGVcIlxuXG5pbXBvcnQgRm9udE1hbmFnZXIgZnJvbSBcIi4vZm9udHNcIlxuaW1wb3J0ICogYXMgQ29tcG9zZWQgZnJvbSBcIi4vY29tcG9zZWRcIlxuaW1wb3J0ICogYXMgTWVhc3VyZSBmcm9tIFwiLi9tZWFzdXJlXCJcbmltcG9ydCBPdXRwdXQgZnJvbSBcIi4vb3V0cHV0XCJcbmltcG9ydCBTVkcgZnJvbSBcIi4vb3V0cHV0L3N2Z1wiXG5cbmltcG9ydCBSZXNpemFibGUgZnJvbSBcIi4vY29tcG9zZWQvcmVzcG9uc2libGUtY2FudmFzL3Jlc2l6YWJsZVwiXG5pbXBvcnQgTW92YWJsZSBmcm9tIFwiLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvbW92YWJsZVwiXG5pbXBvcnQgUm90YXRhYmxlIGZyb20gXCIuL2NvbXBvc2VkL3Jlc3BvbnNpYmxlLWNhbnZhcy9yb3RhdGFibGVcIlxuaW1wb3J0IFRvcCBmcm9tIFwiLi9jb21wb3NlZC9yZXNwb25zaWJsZS1jYW52YXMvdG9wXCJcblxuXG5pbXBvcnQgKiBhcyBjb21wb3NhYmxlIGZyb20gXCIuL2NvbXBvc2FibGVcIlxuXG5jb25zdCB7Rm9udE1lYXN1cmUsIFNWR01lYXN1cmV9PU1lYXN1cmVcblxuY29uc3QgY3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdD1kZWZhdWx0Rm9udD0+e1xuXHRyZXR1cm4gY2xhc3MgX18kMSBleHRlbmRzIEZvbnRNZWFzdXJle1xuXHRcdGdldEZvbnQoKXtcblx0XHRcdHJldHVybiBzdXBlci5nZXRGb250KCl8fEZvbnRNYW5hZ2VyLmdldChkZWZhdWx0Rm9udClcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIFJlcHJlc2VudGF0aW9uLkJhc2V7XG5cdHN0YXRpYyBkaXNwbGF5TmFtZT1cInBhZ2luYXRpb25cIlxuXHRzdGF0aWMgcHJvcFR5cGVzPXtcblx0XHR0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG5cdFx0bWVhc3VyZTogUHJvcFR5cGVzLmZ1bmMsXG5cdFx0Zm9udHM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsUHJvcFR5cGVzLmZ1bmNdKSxcblx0XHRkZWZhdWx0Rm9udDogUHJvcFR5cGVzLnN0cmluZyxcblx0fVxuXG5cdHN0YXRpYyBkZWZhdWx0UHJvcHM9e1xuXHRcdHR5cGU6XCJwYWdpbmF0aW9uXCIsXG5cdFx0ZGVmYXVsdEZvbnQ6XCJBcmlhbFwiXG5cdH1cblxuXHRzdGF0aWMgY2hpbGRDb250ZXh0VHlwZXM9e1xuXHRcdE1lYXN1cmU6IFByb3BUeXBlcy5mdW5jXG5cdH1cblxuXHRzdGF0aWMgY29udGV4dFR5cGVzPXtcblx0XHRkb2M6IFByb3BUeXBlcy5vYmplY3QsXG5cdH1cblxuXHRzdGF0aWMgT3V0cHV0PU91dHB1dFxuXG5cdHN0YXRlPXtmb250c0xvYWRlZDpmYWxzZX1cblx0Y29tcG9uZW50RGlkTW91bnQoKXtcblx0XHRjb25zdCB7ZGVmYXVsdEZvbnQsbWVhc3VyZSxmb250c309dGhpcy5wcm9wc1xuXHRcdHRoaXMuTWVhc3VyZT1tZWFzdXJlfHwoZm9udHN8fGlzTm9kZSA/IEZvbnRNZWFzdXJlIDogU1ZHTWVhc3VyZSlcblx0XHRzd2l0Y2godGhpcy5NZWFzdXJlKXtcblx0XHRcdGNhc2UgRm9udE1lYXN1cmU6e1xuXHRcdFx0XHR0aGlzLk1lYXN1cmU9Y3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdChkZWZhdWx0Rm9udClcblx0XHRcdFx0Y29uc3QgcmVxdWlyZWRGb250cz10aGlzLmNvbnRleHQuZG9jLmdldEZvbnRMaXN0KClcblx0XHRcdFx0Y29uc3QgZm9udHNMb2FkZWQ9ZXJyb3I9Pntcblx0XHRcdFx0XHRsZXQgbG9hZGVkPUZvbnRNYW5hZ2VyLm5hbWVzXG5cdFx0XHRcdFx0aWYobG9hZGVkICYmIGxvYWRlZC5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0aWYoIUZvbnRNYW5hZ2VyLmdldChkZWZhdWx0Rm9udCkpe1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYGRlZmF1bHQgZm9udFske2RlZmF1bHRGb250fV0gY2FuJ3QgYmUgbG9hZGVkLCBzZXQgJHtsb2FkZWRbMF19IGFzIGRlZmF1bHRgKVxuXHRcdFx0XHRcdFx0XHR0aGlzLk1lYXN1cmU9Y3JlYXRlRm9udE1lYXN1cmVXaXRoRGVmYXVsdChsb2FkZWRbMF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZXJyb3Ipe1xuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuc2V0U3RhdGUoe2ZvbnRzTG9hZGVkOnRydWV9KVxuXHRcdFx0XHR9XG5cdFx0XHRcdEZvbnRNZWFzdXJlXG5cdFx0XHRcdFx0LnJlcXVpcmVGb250cyhmb250cyxbZGVmYXVsdEZvbnQsLi4ucmVxdWlyZWRGb250c10pXG5cdFx0XHRcdFx0LnRoZW4oZm9udHNMb2FkZWQsIGZvbnRzTG9hZGVkKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDp7XG5cdFx0XHRcdHRoaXMuc2V0U3RhdGUoe2ZvbnRzTG9hZGVkOnRydWV9KVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldENoaWxkQ29udGV4dCgpe1xuXHRcdHJldHVybiB7XG5cdFx0XHRNZWFzdXJlOiB0aGlzLk1lYXN1cmUsXG5cdFx0fVxuXHR9XG5cblx0cmVuZGVyKCl7XG5cdFx0Y29uc3Qge2ZvbnRzTG9hZGVkfT10aGlzLnN0YXRlXG5cdFx0aWYoIWZvbnRzTG9hZGVkKVxuXHRcdFx0cmV0dXJuIDxkaXY+bG9hZGluZyBmb250cy4uLjwvZGl2PlxuXG5cdFx0Y29uc3Qge2RlZmF1bHRGb250LG1lYXN1cmUsZm9udHMsIHR5cGUsIFZpZXdlclR5cGVzPVZpZXdlcnMsIEVkaXRvclR5cGVzPUVkaXRvcnMsIC4uLnByb3BzfT10aGlzLnByb3BzXG5cblx0XHRyZXR1cm4gKDxSZXByZXNlbnRhdGlvbiB7Li4ue1ZpZXdlclR5cGVzLEVkaXRvclR5cGVzLC4uLnByb3BzLHR5cGU6dW5kZWZpbmVkfSB9Lz4pXG5cdH1cbn1cblxuXG4oZnVuY3Rpb24oQSl7XG5cdGNvbnN0IGluc3RhbGw9QS5pbnN0YWxsLmJpbmQoQSlcblx0QS5pbnN0YWxsPWZ1bmN0aW9uKCl7XG5cdFx0aW5zdGFsbCguLi5hcmd1bWVudHMpXG5cdFx0U1ZHLmluc3RhbGwoKVxuXHR9XG5cblx0Y29uc3QgdW5pbnN0YWxsPUEudW5pbnN0YWxsLmJpbmQoQSlcblx0QS51bmluc3RhbGw9ZnVuY3Rpb24oKXtcblx0XHR1bmluc3RhbGwoLi4uYXJndW1lbnRzKVxuXHRcdFNWRy51bmluc3RhbGwoKVxuXHR9XG59KShQYWdpbmF0aW9uKTtcblxuUGFnaW5hdGlvbi5pbnN0YWxsKClcblxuZXhwb3J0IHtWaWV3ZXJzLCBFZGl0b3JzLCBGb250TWFuYWdlciwgTWVhc3VyZSwgQ29tcG9zZWQsIGNvbXBvc2FibGUsIGVkaXRhYmxlLCBSZXNpemFibGUsIE1vdmFibGUsIFJvdGF0YWJsZSxUb3B9XG4iXSwic291cmNlUm9vdCI6IiJ9
\No newline at end of file