@touchtech/baselayer-ui 8.0.1 → 8.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- !function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return a}));var r=Array.isArray;function a(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,o=0;o<e.length;o++)""!==(n=a(e[o]))&&(t+=(t&&" ")+n);else for(var o in e)e.hasOwnProperty(o)&&e[o]&&(t+=(t&&" ")+o);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var a=n(39);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var a=n(14);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var a=n(23);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var a=n(19);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var a=n(28);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var a=n(33);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(41)),l=r(n(42));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return a.default.createElement(o.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},a.default.createElement("div",{className:u.default.container},t,a.default.createElement(i.Icon,{alt:"Dropdown",src:l.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var a=n(43);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(a).default}});var o=n(10);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(o).default}});var i=n(46);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var u=n(48);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(u).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var u=o(n(0)),l=i(n(1)),d=i(n(44));t.PlacementContext=u.default.createContext(void 0),t.default=(0,u.forwardRef)((function(e,n){var r=e.children,a=e.button,o=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return u.default.createElement("div",{ref:n,className:(0,l.default)([d.default.container,o])},a,u.default.createElement(t.PlacementContext.Provider,{value:(0,u.useMemo)((function(){return c}),[c])},u.default.createElement("div",{className:(0,l.default)([d.default.menuContainer,d.default[c.horizontal],d.default[c.vertical]])},r)))}))},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";e.exports=n(38)},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),a(n(3),t),a(n(16),t),a(n(5),t),a(n(21),t),a(n(26),t),a(n(6),t),a(n(31),t),a(n(36),t),a(n(50),t),a(n(53),t),a(n(2),t),a(n(56),t),a(n(59),t),a(n(62),t),a(n(4),t),a(n(65),t),a(n(9),t),a(n(7),t),a(n(70),t),a(n(73),t),a(n(76),t),a(n(81),t),a(n(84),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(15));t.default=function(e){var t,n=e.children,r=e.className,u=e.onClick,l=e.onPointerDown,d=e.containerRef,c=e.disabled,s=void 0!==c&&c,f=e.inverted,v=void 0!==f&&f,p=e.rounded,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noPadding,g=void 0!==b&&b,_=e.noBorder,O=void 0!==_&&_,w=e.transparent,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.autoFocus,S=void 0!==C&&C,x=e.offsetSides,D=void 0===x?[]:x,N=e.align,L=void 0===N?"center":N,A=e.size,B=void 0===A?"medium":A,I=e.type;return a.default.createElement("button",{ref:d,className:(0,o.default)([i.default.container,i.default[B],i.default[L],(t={},t[i.default.inverted]=v,t[i.default.rounded]=m,t[i.default.noShadow]=y,t[i.default.noPadding]=g,t[i.default.noBorder]=O,t[i.default.transparent]=P,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=k,t[i.default.leftOffset]=m&&D.includes("left"),t[i.default.rightOffset]=m&&D.includes("right"),t),r]),disabled:s,autoFocus:S,type:I,role:"button",onClick:u,onPointerDown:l},"string"!=typeof n&&Array.isArray(n)&&n.length?a.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var a=n(17);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(18));t.default=function(e){var t,n=e.children,r=e.inverted,u=void 0!==r&&r,l=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=u,t),l])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(20));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.size,s=e.containerRef,f=e.inverted,v=void 0!==f&&f,p=e.rounded,m=void 0!==p&&p,h=e.transparent,y=void 0!==h&&h,b=e.noShadow,g=void 0!==b&&b,_=e.noPadding,O=void 0!==_&&_,w=e.noBorder,P=void 0!==w&&w,j=e.stretchHorizontally,M=void 0!==j&&j,E=e.stretchVertically,k=void 0!==E&&E,C=e.disabled,S=void 0!==C&&C,x=e.offsetSides,D=void 0===x?[]:x,N=e.align,L=void 0===N?"center":N,A=a(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:s,"data-testid":"button-link",className:(0,u.default)([l.default.container,l.default[c],l.default[L],(t={},t[l.default.inverted]=v,t[l.default.rounded]=m,t[l.default.noShadow]=g,t[l.default.noPadding]=O,t[l.default.noBorder]=P,t[l.default.disabled]=S,t[l.default.transparent]=y,t[l.default.stretchHorizontally]=M,t[l.default.stretchVertically]=k,t[l.default.leftOffset]=m&&D.includes("left"),t[l.default.rightOffset]=m&&D.includes("right"),t),d])},A),"string"!=typeof o&&Array.isArray(o)&&o.length?i.default.createElement("div",{className:l.default.content},o):o)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var a=n(22);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(4),c=i(n(25));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,a=e.checked,o=e.disabled,i=e.name,s=e.className,f=e.indeterminate,v=e.size,p=void 0===v?"medium":v,m=e.autoFocus,h=void 0!==m&&m,y=(0,u.useCallback)((function(e){return n(e.target.checked)}),[n]);return u.default.createElement(d.Label,{value:t},u.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:a,disabled:o,className:(0,l.default)([c.default.checkbox,s,c.default[p]]),onChange:y,placeholder:r,name:i,type:"checkbox",autoFocus:h}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(24));t.default=function(e){var t=e.className,n=e.children,r=e.value,u=e.containerRef;return a.default.createElement("label",{ref:u,className:(0,o.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var a=n(27);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(6),u=r(n(30));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,l=e.selectedColor,d=e.direction,c=void 0===d?"vertical":d,s=e.canToggle,f=void 0!==s&&s;return a.default.createElement("div",{ref:n,className:(0,o.default)([u.default.colorPicker,u.default[c]])},t.map((function(e){return a.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==l?void 0:l.key),onClick:function(){f&&e.key===(null==l?void 0:l.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(29));t.default=function(e){var t,n=e.color,r=e.containerRef,u=e.isSelected,l=void 0!==u&&u,d=e.size,c=void 0===d?"medium":d,s=e.onClick;return a.default.createElement("button",{ref:r,className:(0,o.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=l,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&a.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var a=n(32);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(7),u=r(n(35));function l(e){var t,n=e.className,r=e.children,l=e.containerRef,d=e.header,c=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,v=e.buttonsRight,p=void 0===v?[]:v,m=e.onClose,h=void 0===m?function(){}:m,y=e.noPadding,b=void 0!==y&&y,g=e.noOverlay,_=void 0!==g&&g,O=e.noShadow,w=void 0!==O&&O,P=e.baseZIndex,j=void 0===P?1019:P;return a.default.createElement(i.Modal,{containerRef:l,isOpen:c,onClose:h,noOverlay:_,noShadow:w,baseZIndex:j},a.default.createElement("div",{className:(0,o.default)([u.default.container,n])},!!d&&a.default.createElement("h1",{className:u.default.modalHeader},d),a.default.createElement("div",{className:(0,o.default)([u.default.modalContent,(t={},t[u.default.noPadding]=b,t)])},r),a.default.createElement("div",{className:u.default.modalButtonsContainer},a.default.createElement("div",{className:u.default.modalButtons},f),a.default.createElement("div",{className:u.default.modalButtons},p))))}l.displayName="ConfirmationModal",t.default=l},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=n(89),d=i(n(1)),c=i(n(34));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,v=e.noShadow,p=void 0!==v&&v,m=e.noOverlay,h=void 0!==m&&m,y=e.onClose,b=void 0===y?function(){}:y,g=e.baseZIndex,_=void 0===g?1009:g;(0,l.useHotkeys)("Escape",b);var O=(0,u.useCallback)((function(){b()}),[b]);return o&&u.default.createElement("div",{ref:a},u.default.createElement("div",{style:{zIndex:_},className:(0,d.default)([c.default.overlay,(t={},t[c.default.noOverlay]=h,t)]),"data-testid":"modal-overlay",onClick:O}),u.default.createElement("div",{style:{zIndex:_+1},className:(0,d.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&u.default.createElement("div",{style:{zIndex:_+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(37);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var a=n(8);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return a.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=o(n(0)),u=n(88),l=n(8),d=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,a=e.display,o=e.renderClickable,c=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,v=(0,i.useState)(!1),p=v[0],m=v[1],h=(0,u.useOutsideClick)((function(){return m(!1)})),y=!n||0===n.length,b=function(){return m(!p)};return i.default.createElement(d.MenuContainer,{button:"function"==typeof o?o({display:a,isDisabled:y,selectedItem:c,toggleIsOpen:b}):i.default.createElement(l.Clickable,{display:a,isDisabled:y,onClick:b}),placement:f,ref:h},i.default.createElement(d.Menu,{isOpen:p},n&&n.map((function(e){return i.default.createElement(d.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),m(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";
1
+ !function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("react")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return o}));var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(39);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(14);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(23);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(19);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(28);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(33);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(0)),a=n(3),i=n(2),l=r(n(41)),u=r(n(42));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(43);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(10);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(46);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(48);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(0)),u=i(n(1)),s=i(n(44));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},function(e,t,n){"use strict";n.r(t),t.default={listViewItem:"VKYoNtWTZui2AO1IlyJMTw=="}},function(e,t,n){"use strict";e.exports=n(38)},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(3),t),o(n(16),t),o(n(5),t),o(n(21),t),o(n(26),t),o(n(6),t),o(n(31),t),o(n(36),t),o(n(50),t),o(n(53),t),o(n(2),t),o(n(56),t),o(n(59),t),o(n(62),t),o(n(4),t),o(n(65),t),o(n(9),t),o(n(7),t),o(n(70),t),o(n(73),t),o(n(85),t),o(n(88),t),o(n(93),t),o(n(96),t)},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(15));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,h=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noPadding,y=void 0!==_&&_,b=e.noBorder,O=void 0!==b&&b,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,I=void 0!==S&&S,P=e.stretchVertically,C=void 0!==P&&P,x=e.autoFocus,j=void 0!==x&&x,E=e.offsetSides,R=void 0===E?[]:E,k=e.align,D=void 0===k?"center":k,z=e.size,T=void 0===z?"medium":z,L=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[T],i.default[D],(t={},t[i.default.inverted]=h,t[i.default.rounded]=p,t[i.default.noShadow]=g,t[i.default.noPadding]=y,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=I,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=p&&R.includes("left"),t[i.default.rightOffset]=p&&R.includes("right"),t),r]),disabled:d,autoFocus:j,type:L,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"xynuMu8XZSsonDuksl6AQg==",left:"Pkp0HhNHttoWIb2dwpGntw==",small:"wDOeeJGCZm0k2ZpNzFbeHg==",large:"_5QjBWtl7YXy4em4X3GPbRA==",xlarge:"kN0Lga4fBOgcigDqtODRdg==",inverted:"+5nsTnLlNOX8KFQiUhT1kQ==",rounded:"BjP-JNWJjoBfNMMztnyWOQ==",rightOffset:"lGJwNcol8CAknqxY+8Dfqg==",leftOffset:"EV+g6hUA1qv8LQ9RqgrQRQ==",noShadow:"Z3uPLrryqINfRjZppwU6NQ==",noBorder:"eEghG6GXB9IzyD3jrNZfAA==",transparent:"ss7DhVgF5JGspCASdZUYBg==",stretchHorizontally:"i8QPSr4cHYhJ7Aiue+cx0g==",stretchVertically:"WSximUM9kxYGc5VRc0iZlA==",noPadding:"SgXchjz4dJr+tc8ykLnE1A==",content:"xn8yfjN6mexRXIgyNhmkiw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(17);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(18));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},function(e,t,n){"use strict";n.r(t),t.default={buttonBadge:"RSjbRiXFWAfBzcCoaMpXeA==",inverted:"X4o4OKsS1T4miIs0Cq5x-g=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=a(n(20));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,h=void 0!==f&&f,v=e.rounded,p=void 0!==v&&v,m=e.transparent,g=void 0!==m&&m,_=e.noShadow,y=void 0!==_&&_,b=e.noPadding,O=void 0!==b&&b,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,I=void 0!==S&&S,P=e.stretchVertically,C=void 0!==P&&P,x=e.disabled,j=void 0!==x&&x,E=e.offsetSides,R=void 0===E?[]:E,k=e.align,D=void 0===k?"center":k,z=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[D],(t={},t[u.default.inverted]=h,t[u.default.rounded]=p,t[u.default.noShadow]=y,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=j,t[u.default.transparent]=g,t[u.default.stretchHorizontally]=I,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=p&&R.includes("left"),t[u.default.rightOffset]=p&&R.includes("right"),t),s])},z),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},function(e,t,n){"use strict";n.r(t),t.default={container:"ZIr9w--fSivqWVGoSp14tA==",left:"rRyu9AVGwX+-xjTOMTSE1w==",small:"_0DBhGJvcbjEMlSqEofF-rw==",medium:"a6+zcUY6XKy94zAqUYaE6w==",large:"W+v4vFebQkxw1cdiKY-Kvg==",xlarge:"dY91DQRYUaWT4EzOJJ+GBg==",inverted:"yplCpylL4Ides+cOrqSimQ==",rounded:"MREY09+d69vV84hZnJuLYw==",rightOffset:"Hsao7mFW3lYTrNhfWvfxWw==",leftOffset:"MXlL3O8KUYeVAYcSsnNs9w==",noShadow:"Hqz4CqQcO4s0MTawrDr0oA==",transparent:"h1hNwc2UlM0C5F-xdga5dw==",stretchHorizontally:"Tmyq4+uHU+JJeYNdBH8L2Q==",stretchVertically:"JzzGnTt4aM3+9rVlNQWi0A==",noPadding:"UvI8Unjc9X0zN2l5W+tmrQ==",noBorder:"Qp5uBnQgJFoZHgYShzAPcw==",disabled:"ZXljkYpPWjDJLC4BEGMprw==",content:"_0n2MnOfJPm2wxs4M2nbGHA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(22);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(4),c=i(n(25));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,h=e.size,v=void 0===h?"medium":h,p=e.autoFocus,m=void 0!==p&&p,g=(0,l.useCallback)((function(e){return n(e.target.checked)}),[n]);return l.default.createElement(s.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[v]]),onChange:g,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(24));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},function(e,t,n){"use strict";n.r(t),t.default={container:"bR7PO8yRFtUlN1vsP7ecRQ=="}},function(e,t,n){"use strict";n.r(t),t.default={checkbox:"CBQZ4Pp1clb+5R8IlCO4gQ==",small:"_5jbjut7Ggt7gxenjyf9LbQ==",medium:"iPAOw2ZsNJA0nWDXqWC37g==",large:"LEykXs9mEESdwo6iZoMdUw==",xlarge:"uqpACEJ1obA4bRlaeAT27g=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(27);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(6),l=r(n(30));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(29));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},function(e,t,n){"use strict";n.r(t),t.default={colorSwatch:"uTf7mYfXeNT7Gn0znnR8DQ==",small:"aAbezjOmw2NyT9RU7PuyOA==",large:"Qc6SCvqbnnhJ3ztgzPZOFA==",xlarge:"_6oBBZDkRkzf7tF4bhyDtAA==",selected:"nicZfgMk+uQFPypJIkQubw==",srOnly:"GHpHEB1QXDyjeR9VnEd1Tg=="}},function(e,t,n){"use strict";n.r(t),t.default={colorPicker:"DKtP55bOfUTB1kDa-iUHqQ==",horizontal:"_34Lj8-b-13C8L09RsMineg==",vertical:"_1yugGQs4Ek0t3T8tgoKxVQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(32);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(7),l=r(n(35));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,h=e.buttonsRight,v=void 0===h?[]:h,p=e.onClose,m=void 0===p?function(){}:p,g=e.noPadding,_=void 0!==g&&g,y=e.noOverlay,b=void 0!==y&&y,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:b,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=_,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=n(102),s=i(n(1)),c=i(n(34));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,h=e.noShadow,v=void 0!==h&&h,p=e.noOverlay,m=void 0!==p&&p,g=e.onClose,_=void 0===g?function(){}:g,y=e.baseZIndex,b=void 0===y?1009:y;(0,u.useHotkeys)("Escape",_);var O=(0,l.useCallback)((function(){_()}),[_]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:b},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:b+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:b+2},className:c.default.modalButton},i))}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"pU6IB2r0LpCFPXgTvOr2gA==",noOverlay:"_5SUR9Fh-fHTy4Xr6mQC+pA==",modal:"LCAT83muXsAGrPUHQ1y+hQ==",transparent:"WHU8Qbpz+AvT-YpuQeUK-Q==",noShadow:"Gi1VTmg3GPNxnX91-m0-5g==",modalButton:"lfnfHu+xyeEjcQbAQwjITg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"jvKSi-fKufcpK9eBWWFCLg==",modalHeader:"cx1RoQdgAbenvVXU8B7fSw==",modalContent:"ZD4v3HE-AYZXV0ITWDF7Gg==",noPadding:"_1zFF8xqyo77UxG2v549BeA==",modalButtonsContainer:"_4hQhCe5U7YByhnhO+-Gqiw==",modalButtons:"JoILbW5FnZixaJ7ETvo8+w=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(37);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(8);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(0)),l=n(100),u=n(8),s=n(9);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,h=(0,i.useState)(!1),v=h[0],p=h[1],m=(0,l.useOutsideClick)((function(){return p(!1)})),g=!n||0===n.length,_=function(){return p(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:g,selectedItem:c,toggleIsOpen:_}):i.default.createElement(u.Clickable,{display:o,isDisabled:g,onClick:_}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),p(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},function(e,t,n){"use strict";
2
2
  /**
3
3
  * @license React
4
4
  * use-sync-external-store-shim.production.min.js
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * This source code is licensed under the MIT license found in the
9
9
  * LICENSE file in the root directory of this source tree.
10
- */var r=n(0);var a="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},o=r.useState,i=r.useEffect,u=r.useLayoutEffect,l=r.useDebugValue;function d(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!a(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=o({inst:{value:n,getSnapshot:t}}),a=r[0].inst,c=r[1];return u((function(){a.value=n,a.getSnapshot=t,d(a)&&c({inst:a})}),[e,n,t]),i((function(){return d(a)&&c({inst:a}),e((function(){d(a)&&c({inst:a})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(40));t.default=function(e){var t,n=e.src,r=e.alt,u=e.containerRef,l=e.size,d=void 0===l?"medium":l,c=e.inverted,s=void 0!==c&&c;return a.default.createElement("img",{ref:u,className:(0,o.default)([i.default.icon,i.default[d],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(10),c=i(n(45));t.default=function(e){var t,n,r=e.children,a=e.containerRef,o=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,v=e.footer,p=e.smartLayout,m=void 0===p||p,h=(0,u.useContext)(d.PlacementContext),y=(0,u.useRef)(null),b=a||y;if(!h)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,u.useLayoutEffect)((function(){if(m&&b.current){var e=b.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===h.vertical?t:window.innerHeight-n;if(r<0){var a=b.current.querySelector("ul"),o=a.querySelectorAll("li,a"),i=a.clientHeight+r,u=o.length?getComputedStyle(o[0]).minHeight:0;a.style.maxHeight="calc(".concat(i,"px - ").concat(u,")")}}}),[s,h,m]),s?u.default.createElement(u.default.Fragment,null,u.default.createElement("div",{ref:b,className:(0,l.default)([c.default.menu,(t={},t[c.default.open]=s,t),o])},u.default.createElement("div",null,f&&s&&u.default.createElement("h3",{className:c.default.header},f),u.default.createElement("ul",null,r)),v&&s&&u.default.createElement("div",{className:(0,l.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},v))):null}},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(47));t.default=function(e){var t,n,r=e.children,u=e.className,l=e.onClick,d=e.noPadding,c=void 0!==d&&d,s=e.isActive,f=void 0!==s&&s;return a.default.createElement("li",{className:(0,o.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),u]),onClick:l},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=o(n(49));t.default=function(e){var t,n=e.as,o=e.children,d=e.className,c=e.noPadding,s=void 0!==c&&c,f=a(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,u.default)([l.default.menuLinkItem,d,(t={},t[l.default.noPadding]=s,t)])},f),o)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var a=n(51);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(52));t.default=function(e){var t,n=e.children,r=e.accept,u=e.onChange,l=e.inputRef,d=e.multiple,c=void 0!==d&&d,s=e.disabled,f=void 0!==s&&s,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,h=void 0!==m&&m,y=e.noBorder,b=void 0!==y&&y,g=e.noPadding,_=void 0!==g&&g,O=e.transparent,w=void 0!==O&&O,P=e.stretchHorizontally,j=void 0!==P&&P,M=e.stretchVertically,E=void 0!==M&&M,k=e.rounded,C=void 0!==k&&k,S=e.size,x=void 0===S?"medium":S;return a.default.createElement("label",{className:(0,o.default)([i.default.label,i.default[x],(t={},t[i.default.inverted]=p,t[i.default.rounded]=C,t[i.default.noShadow]=h,t[i.default.noBorder]=b,t[i.default.noPadding]=_,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=j,t[i.default.stretchVertically]=E,t)])},a.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:l,disabled:f,onChange:u}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var a=n(54);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(55));t.default=function(e){var t,n=e.className,r=e.children,u=e.containerRef,l=e.layout,d=void 0===l?"column":l,c=e.placement,s=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===s.horizontal?"horizontalCenter":s.horizontal,v="center"===s.vertical?"verticalCenter":s.vertical;return a.default.createElement("div",{ref:u,"data-testid":"floating-panel",className:(0,o.default)([i.default.container,i.default[f],i.default[v],i.default[d],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var a=n(57);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(2),u=r(n(58));t.default=function(e){var t,n=e.className,r=e.containerRef,l=e.children,d=e.src,c=e.alt,s=e.offsetSides,f=void 0===s?[]:s,v=e.onClick,p=void 0===v?function(){}:v,m=e.disabled,h=void 0!==m&&m,y=e.inverted,b=void 0!==y&&y,g=e.noShadow,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=e.transparent,j=void 0!==P&&P,M=e.rounded,E=void 0!==M&&M,k=e.size,C=void 0===k?"medium":k,S=e.type,x=void 0===S?"button":S;return a.default.createElement("button",{ref:r,className:(0,o.default)([u.default.container,u.default[C],(t={},t[u.default.inverted]=b,t[u.default.rounded]=E,t[u.default.noShadow]=_,t[u.default.noBorder]=w,t[u.default.transparent]=j,t[u.default.topOffset]=E&&f.includes("top"),t[u.default.rightOffset]=E&&f.includes("right"),t[u.default.bottomOffset]=E&&f.includes("bottom"),t[u.default.leftOffset]=E&&f.includes("left"),t),n]),disabled:h,onClick:p,type:x,role:"button"},a.default.createElement(i.Icon,{src:d,alt:c,size:C,inverted:b}),l)}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var a=n(60);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(2),d=o(n(61));t.default=function(e){var t,n=e.as,o=e.containerRef,c=e.children,s=e.className,f=e.src,v=e.alt,p=e.inverted,m=void 0!==p&&p,h=e.noShadow,y=void 0!==h&&h,b=e.noBorder,g=void 0!==b&&b,_=e.transparent,O=void 0!==_&&_,w=e.rounded,P=void 0!==w&&w,j=e.offsetSides,M=void 0===j?[]:j,E=e.disabled,k=void 0!==E&&E,C=e.size,S=void 0===C?"medium":C,x=a(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:o,"data-testid":"icon-button-link",className:(0,u.default)([d.default.container,d.default[S],(t={},t[d.default.inverted]=m,t[d.default.rounded]=P,t[d.default.noShadow]=y,t[d.default.noBorder]=g,t[d.default.disabled]=k,t[d.default.transparent]=O,t[d.default.topOffset]=P&&M.includes("top"),t[d.default.rightOffset]=P&&M.includes("right"),t[d.default.bottomOffset]=P&&M.includes("bottom"),t[d.default.leftOffset]=P&&M.includes("left"),t),s])},x),i.default.createElement(l.Icon,{src:f,alt:v,size:S,inverted:m}),c)}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var a=n(63);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(64));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,u=e.srcHeight,l=e.children,d=e.containerRef,c=e.layout,s=void 0===c?"contain":c,f=e.decoding,v=void 0===f?"auto":f,p=e.loading,m=void 0===p?"eager":p,h=e.style,y=a.default.createElement("img",{className:(0,o.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:u,decoding:v,loading:m,style:h});return l?a.default.createElement("div",{ref:d,className:(0,o.default)([i.default.container,i.default.hasOverlay])},y,l&&a.default.createElement("div",{className:i.default.overlay},l)):y}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var a=n(66);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(a).default}});var o=n(68);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(o).default}});var i=n(69);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(67));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,u=e.header,l=e.headerActions;return a.default.createElement("div",{ref:r,className:(0,o.default)([i.default.container,n])},(u||l)&&a.default.createElement("div",{className:i.default.header},u&&a.default.createElement("h3",{className:i.default.headerLabel,id:u.id},u.text),l),a.default.createElement("ul",{"aria-labelledby":null==u?void 0:u.id,className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=n(3),u=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,l=e.disabled,d=void 0!==l&&l,c=e.transparent,s=void 0!==c&&c,f=e.noPadding,v=void 0!==f&&f,p=e.size,m=void 0===p?"medium":p,h=e.align,y=void 0===h?"center":h,b=e.onClick,g=void 0===b?function(){}:b;return a.default.createElement("li",{className:(0,o.default)([u.default.listViewItem])},a.default.createElement(i.Button,{onClick:g,disabled:d,inverted:r,transparent:s,noPadding:v,align:y,size:m,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var a in t=arguments[n])Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e}).apply(this,arguments)},a=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n},o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(0)),u=o(n(1)),l=n(5),d=o(n(11));t.default=function(e){var t=e.children,n=e.as,o=e.active,c=void 0!==o&&o,s=e.transparent,f=void 0!==s&&s,v=e.noPadding,p=void 0!==v&&v,m=e.align,h=void 0===m?"center":m,y=e.size,b=void 0===y?"medium":y,g=a(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,u.default)([d.default.listViewItem])},i.default.createElement(l.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:p,align:h,size:b,stretchHorizontally:!0,noShadow:!0,noBorder:!0},g),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var a=n(71);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(72));t.default=function(e){var t,n=e.children,r=e.containerRef,u=e.transparent,l=void 0!==u&&u,d=e.isFixed,c=void 0!==d&&d,s=e.onClick,f=void 0===s?function(){}:s;return a.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,o.default)([i.default.overlay,(t={},t[i.default.transparent]=l,t[i.default.fixed]=c,t)]),onClick:f},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var a=n(74);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=o(n(0)),l=i(n(1)),d=n(4),c=i(n(75));t.default=function(e){var t,n=e.label,r=e.onChange,a=e.onBlur,o=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,v=e.pattern,p=e.inputRef,m=e.size,h=void 0===m?"medium":m,y=e.type,b=void 0===y?"text":y,g=e.autoFocus,_=void 0!==g&&g,O=e.noBorder,w=void 0!==O&&O,P=e.inputMode,j=(0,u.useCallback)((function(e){r&&r(e.target.value)}),[r]),M=u.default.createElement("input",{"data-testid":"input",ref:p,className:(0,l.default)([c.default.textInput,c.default[h],(t={},t[c.default.noBorder]=w,t)]),onChange:j,onBlur:a,onKeyDown:o,pattern:v,placeholder:i,name:f,type:b,value:s,autoFocus:_,inputMode:P});return n?u.default.createElement(d.Label,{value:n},M):u.default.createElement(u.default.Fragment,null,M)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var a=n(77);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(a).default}});var o=n(79);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(78));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return a.default.createElement("div",{ref:n,className:o.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(80));t.default=function(e){var t=e.children,n=e.baseZIndex;return a.default.createElement("div",{className:(0,o.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var a=n(82);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var a=r(n(0)),o=r(n(1)),i=r(n(83));t.default=function(e){var t=e.src,n=e.type,r=e.children,u=e.containerRef,l=e.poster,d=e.muted,c=void 0===d||d,s=e.loop,f=void 0===s||s,v=e.autoPlay,p=void 0===v||v,m=e.layout,h=void 0===m?"contain":m;return r?a.default.createElement("div",{ref:u,className:(0,o.default)([i.default.container,i.default.hasOverlay])},a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:f,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&a.default.createElement("div",{className:i.default.overlay},r)):a.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,o.default)([i.default.video,i.default[h]]),muted:c,loop:f,autoPlay:p,poster:l,playsInline:!0},a.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(85);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var a=r(n(0)),o=n(3),i=n(2),u=r(n(86)),l=r(n(87)),d=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},s=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=a.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,v=void 0!==f&&f,p=function(e){return function(t){t.stopPropagation(),r(e)}},m=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return a.default.createElement(o.Button,{key:t,disabled:v,noBorder:!0,noShadow:!0,onPointerDown:p(d(n,r))},r)}));return a.default.createElement("div",{className:u.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(d(n,t))}},"data-testid":"numpad"},a.default.createElement("div",{className:u.default.numbers},m,a.default.createElement(o.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(c(n))},a.default.createElement(i.Icon,{alt:"Backspace",src:l.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return i})),n.d(t,"usePromise",(function(){return c})),n.d(t,"useSWRHooksConfig",(function(){return ae})),n.d(t,"useToggle",(function(){return oe}));var r=n(0),a=n.n(r),o={capture:!0};function i(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function u(e,t,n,r){return new(n||(n=Promise))((function(a,o){function i(e){try{l(r.next(e))}catch(e){o(e)}}function u(e){try{l(r.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,u)}l((r=r.apply(e,t||[])).next())}))}function l(e,t){var n,r,a,o,i={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(a=2&o[0]?r.return:o[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,o[1])).done)return a;switch(r=0,a&&(o=[2&o[0],a.value]),o[0]){case 0:case 1:a=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,r=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!(a=i.trys,(a=a.length>0&&a[a.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!a||o[1]>a[0]&&o[1]<a[3])){i.label=o[1];break}if(6===o[0]&&i.label<a[1]){i.label=a[1],a=o;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(o);break}a[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],r=0}finally{n=a=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}Object.create;function d(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,a,o=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)i.push(r.value)}catch(e){a={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(a)throw a.error}}return i}Object.create;function c(){var e=this,t=d(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],a=t[1],o=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){o.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return u(e,void 0,void 0,(function(){var e,n;return l(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),a({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===o.current&&a({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===o.current&&a({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[o])]}var s=n(12);const f=new WeakMap,v={},p=()=>{},m=p(),h=Object,y=e=>e===m,b=e=>"function"==typeof e,g=(e,t)=>({...e,...t}),_="undefined"!=typeof window,O="undefined"!=typeof document,w=(e,t)=>{const n=f.get(e);return[()=>e.get(t)||v,r=>{const a=e.get(t);n[5](t,g(a,r),a||v)},n[6]]},P=new WeakMap;let j=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let a,o;if(h(e)!==e||r||n==RegExp)a=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(a=P.get(e),a)return a;if(a=++j+"~",P.set(e,a),n==Array){for(a="@",o=0;o<e.length;o++)a+=M(e[o])+",";P.set(e,a)}if(n==h){a="#";const t=h.keys(e).sort();for(;!y(o=t.pop());)y(e[o])||(a+=o+":"+M(e[o])+",");P.set(e,a)}}return a};let E=!0;const[k,C]=_&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[p,p],S={isOnline:()=>E,isVisible:()=>{const e=O&&document.visibilityState;return y(e)||"hidden"!==e}},x={initFocus:e=>(O&&document.addEventListener("visibilitychange",e),k("focus",e),()=>{O&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{E=!0,e()},n=()=>{E=!1};return k("online",t),k("offline",n),()=>{C("online",t),C("offline",n)}}},D=!a.a.useId,N=!_||"Deno"in window,L=e=>_&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1),A=N?r.useEffect:r.useLayoutEffect,B="undefined"!=typeof navigator&&navigator.connection,I=!N&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData),R=e=>{if(b(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let z=0;const Q=()=>++z;var V=0,T=1,H=2;async function F(...e){const[t,n,r,a]=e,o=g({populateCache:!0,throwOnError:!0},"boolean"==typeof a?{revalidate:a}:a||{});let i=o.populateCache;const u=o.rollbackOnError;let l=o.optimisticData;const d=!1!==o.revalidate,c=o.throwOnError;if(b(n)){const e=n,r=[],a=t.keys();for(let n=a.next();!n.done;n=a.next()){const a=n.value;!a.startsWith("$inf$")&&e(t.get(a)._k)&&r.push(a)}return Promise.all(r.map(s))}return s(n);async function s(n){const[a]=R(n);if(!a)return;const[o,s]=w(t,a),[v,p,h]=f.get(t),g=v[a],_=()=>d&&(delete h[a],g&&g[0])?g[0](2).then(()=>o().data):o().data;if(e.length<3)return _();let O,P=r;const j=Q();p[a]=[j,0];const M=!y(l),E=o(),k=E.data,C=E._c,S=y(C)?k:C;if(M&&(l=b(l)?l(S):l,s({data:l,_c:S})),b(P))try{P=P(S)}catch(e){O=e}if(P&&b(P.then)){if(P=await P.catch(e=>{O=e}),j!==p[a][0]){if(O)throw O;return P}O&&M&&(e=>"function"==typeof u?u(e):!1!==u)(O)&&(i=!0,P=S,s({data:P,_c:m}))}i&&(O||(b(i)&&(P=i(P,S)),s({data:P,_c:m}))),p[a][1]=Q();const x=await _();if(s({_c:m}),!O)return i?x:P;if(c)throw O}}const J=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},Z=(e,t)=>{if(!f.has(e)){const n=g(x,t),r={},a=F.bind(m,e);let o=p;const i={},u=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},l=(t,n,r)=>{e.set(t,n);const a=i[t];if(a)for(let e=a.length;e--;)a[e](r,n)},d=()=>{if(!f.has(e)&&(f.set(e,[r,{},{},{},a,l,u]),!N)){const t=n.initFocus(setTimeout.bind(m,J.bind(m,r,0))),a=n.initReconnect(setTimeout.bind(m,J.bind(m,r,1)));o=()=>{t&&t(),a&&a(),f.delete(e)}}};return d(),[e,a,d,o]}return[e,f.get(e)[4]]},[K,U]=Z(new Map),G=g({onLoadingSlow:p,onSuccess:p,onError:p,onErrorRetry:(e,t,n,r,a)=>{const o=n.errorRetryCount,i=a.retryCount,u=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!y(o)&&i>o||setTimeout(r,u,a)},onDiscarded:p,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:I?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:I?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:K,mutate:U,fallback:{}},S),W=(e,t)=>{const n=g(e,t);if(t){const{use:r,fallback:a}=e,{use:o,fallback:i}=t;r&&o&&(n.use=r.concat(o)),a&&i&&(n.fallback=g(a,i))}return n},Y=Object(r.createContext)({}),X=_&&window.__SWR_DEVTOOLS_USE__,q=X?window.__SWR_DEVTOOLS_USE__:[],$=e=>b(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}],ee=()=>g(G,Object(r.useContext)(Y)),te=q.concat(e=>(t,n,r)=>e(t,n&&((...e)=>{const r=R(t)[0],[,,,a]=f.get(K),o=a[r];return o?(delete a[r],o):n(...e)}),r));X&&(window.__SWR_DEVTOOLS_REACT__=a.a);const ne={dedupe:!0};h.defineProperty(e=>{const{value:t}=e,n=Object(r.useContext)(Y),a=b(t),o=Object(r.useMemo)(()=>a?t(n):t,[a,n,t]),i=Object(r.useMemo)(()=>a?o:W(n,o),[a,n,o]),u=o&&o.provider,[l]=Object(r.useState)(()=>u?Z(u(i.cache||K),o):m);return l&&(i.cache=l[0],i.mutate=l[1]),A(()=>{if(l)return l[2]&&l[2](),l[3]},[]),Object(r.createElement)(Y.Provider,g(e,{value:i}))},"defaultValue",{value:G});var re;re=(e,t,n)=>{const{cache:a,compare:o,suspense:i,fallbackData:u,revalidateOnMount:l,refreshInterval:d,refreshWhenHidden:c,refreshWhenOffline:v,keepPreviousData:p}=n,[h,_,O]=f.get(a),[P,j]=R(e),M=Object(r.useRef)(!1),E=Object(r.useRef)(!1),k=Object(r.useRef)(P),C=Object(r.useRef)(t),S=Object(r.useRef)(n),x=()=>S.current,B=()=>x().isVisible()&&x().isOnline(),[I,z,J]=w(a,P),Z=Object(r.useRef)({}).current,K=y(u)?n.fallback[P]:u,U=(e,t)=>{let n=!0;for(const r in Z){const a=r;o(t[a],e[a])||"data"===a&&y(e[a])&&o(t[a],te)||(n=!1)}return n},G=Object(r.useMemo)(()=>{const e=!!P&&!!t&&(y(l)?!x().isPaused()&&!i:l),n=()=>{const t=I(),n=g(t);return delete n._k,e?{isValidating:!0,isLoading:!0,...n}:n};let r=n();return()=>{const e=n();return U(e,r)?r:r=e}},[a,P]),W=Object(s.useSyncExternalStore)(Object(r.useCallback)(e=>J(P,(t,n)=>{U(t,n)||e()}),[a,P]),G,G),Y=!M.current,X=W.data,q=y(X)?K:X,$=W.error,ee=Object(r.useRef)(q),te=p?y(X)?ee.current:X:q,re=Y&&!y(l)?l:!x().isPaused()&&(i?!y(q)&&n.revalidateIfStale:y(q)||n.revalidateIfStale),ae=!!(P&&t&&Y&&re),oe=y(W.isValidating)?ae:W.isValidating,ie=y(W.isLoading)?ae:W.isLoading,ue=Object(r.useCallback)(async e=>{const t=C.current;if(!P||!t||E.current||x().isPaused())return!1;let r,a,i=!0;const u=e||{},l=!O[P]||!u.dedupe,d=()=>D?!E.current&&P===k.current&&M.current:P===k.current,c={isValidating:!1,isLoading:!1},s=()=>{z(c)},f=()=>{const e=O[P];e&&e[1]===a&&delete O[P]},v={isValidating:!0};y(I().data)&&(v.isLoading=!0);try{if(l&&(z(v),n.loadingTimeout&&y(I().data)&&setTimeout(()=>{i&&d()&&x().onLoadingSlow(P,n)},n.loadingTimeout),O[P]=[t(j),Q()]),[r,a]=O[P],r=await r,l&&setTimeout(f,n.dedupingInterval),!O[P]||O[P][1]!==a)return l&&d()&&x().onDiscarded(P),!1;c.error=m;const e=_[P];if(!y(e)&&(a<=e[0]||a<=e[1]||0===e[1]))return s(),l&&d()&&x().onDiscarded(P),!1;const u=I().data;c.data=o(u,r)?u:r,l&&d()&&x().onSuccess(r,P,n)}catch(e){f();const t=x(),{shouldRetryOnError:n}=t;t.isPaused()||(c.error=e,l&&d()&&(t.onError(e,P,t),(!0===n||b(n)&&n(e))&&B()&&t.onErrorRetry(e,P,t,ue,{retryCount:(u.retryCount||0)+1,dedupe:!0})))}return i=!1,s(),!0},[P,a]),le=Object(r.useCallback)((...e)=>F(a,k.current,...e),[]);if(A(()=>{C.current=t,S.current=n,y(X)||(ee.current=X)}),A(()=>{if(!P)return;const e=ue.bind(m,ne);let t=0;const n=((e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}})(P,h,n=>{if(n==V){const n=Date.now();x().revalidateOnFocus&&n>t&&B()&&(t=n+x().focusThrottleInterval,e())}else if(n==T)x().revalidateOnReconnect&&B()&&e();else if(n==H)return ue()});return E.current=!1,k.current=P,M.current=!0,z({_k:j}),re&&(y(q)||N?e():L(e)),()=>{E.current=!0,n()}},[P]),A(()=>{let e;function t(){const t=b(d)?d(q):d;t&&-1!==e&&(e=setTimeout(n,t))}function n(){I().error||!c&&!x().isVisible()||!v&&!x().isOnline()?t():ue(ne).then(t)}return t(),()=>{e&&(clearTimeout(e),e=-1)}},[d,c,v,P]),Object(r.useDebugValue)(te),i&&y(q)&&P){if(!D&&N)throw new Error("Fallback data is required when using suspense in SSR.");throw C.current=t,S.current=n,E.current=!1,y($)?ue(ne):$}return{mutate:le,get data(){return Z.data=!0,te},get error(){return Z.error=!0,$},get isValidating(){return Z.isValidating=!0,oe},get isLoading(){return Z.isLoading=!0,ie}}};function ae(){var e=ee();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function oe(e){void 0===e&&(e=!1);var t=d(Object(r.useState)(e),2),n=t[0],a=t[1];return[n,Object(r.useCallback)((function(e){a("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return D})),n.d(t,"useHotkeys",(function(){return x})),n.d(t,"useIsHotkeyPressed",(function(){return C}));
10
+ */var r=n(0);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(40));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},function(e,t,n){"use strict";n.r(t),t.default={icon:"YA2IHQD4oppOioZICHwzww==",small:"qdzs2EMmBdb0MzNS0iDhMA==",medium:"I6eEGIBK59OkdpwUouaauQ==",large:"_2bi6IEYhdMbPgPJfwoPjuA==",xlarge:"ckkr4ZFOVGuCN4EjPMqeGA==",inverted:"em5rL4nAH1Iwf3MHeIePmg=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"w0CpasjYyLR-i2PNIn9Esg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(10),c=i(n(45));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,h=e.footer,v=e.smartLayout,p=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),g=(0,l.useRef)(null),_=o||g;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(p&&_.current){var e=_.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=_.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,p]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:_,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),h&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},h))):null}},function(e,t,n){"use strict";n.r(t),t.default={container:"qcvDSfFt+w0ja2fqPc0S5w==",menuContainer:"Lwr1a3bP-95aezzmacoJfw==",top:"bBHbs+FWi6-zwWMZImF+NA==",right:"B8M42NwoZ8pUVm5R4JJv1g==",left:"pOG7tXfTFk8qqXtNC0E-Ow==",bottom:"ucvN0EFMns8bfVvsi9j9yQ=="}},function(e,t,n){"use strict";n.r(t),t.default={menu:"rSBfsFNjjooJsDH-X+YXbw==",open:"vX7vgA9ZlF7T9ER9VJodbQ==",entrance:"GpB2LsadhuGJZvKoNOdozA==",header:"oATlBFgepZ5gAZAr-CxnAA==",footer:"wKeE73zYfb-7cRN-F8OY1g==",noBorder:"LD6LDvs-ylMrPgslj4x3hg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(47));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},function(e,t,n){"use strict";n.r(t),t.default={menuItem:"mJd7dRZNOwYe8I9CqFlzrg==",noPadding:"xckDOdnPPYKTkym2awtrjA==",active:"x+yrCq5Bu+jgX7SRUr9few=="}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=a(n(49));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},function(e,t,n){"use strict";n.r(t),t.default={menuLinkItem:"oEr8ZJXLnZyDJBORZtIV4w==",noPadding:"_3TNIJAetASyzbI+KlLTHCw==",active:"ghauCTPTBEJAuAo632z5fQ==",menuItem:"n1xn4EYuxEqOc3fCEamz3Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(51);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(52));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,h=e.inverted,v=void 0!==h&&h,p=e.noShadow,m=void 0!==p&&p,g=e.noBorder,_=void 0!==g&&g,y=e.noPadding,b=void 0!==y&&y,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,I=e.stretchVertically,P=void 0!==I&&I,C=e.rounded,x=void 0!==C&&C,j=e.size,E=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[E],(t={},t[i.default.inverted]=v,t[i.default.rounded]=x,t[i.default.noShadow]=m,t[i.default.noBorder]=_,t[i.default.noPadding]=b,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=P,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},function(e,t,n){"use strict";n.r(t),t.default={input:"eUqa35+Em2Lch26Nxjbu+Q==",label:"nxW21h8UI0MNtwo2kcAdIw==",small:"Nda1pAcGJcyDDES5EVJsow==",large:"zqLS3YHXtjlMBsFOzrvEZg==",xlarge:"VZl5WyAkv301-hCCze5MnQ==",inverted:"vlSaJQJhzt6INvWi8NtUwg==",rounded:"b-x5TrySNGCF9HY8J3HtAA==",noShadow:"_5wl14Jjf1yxHwALxmEw6MQ==",noBorder:"dlXWQOlNe+aFkVbPxDLm4A==",noPadding:"iPxUG-ON1XLOkfVPzt7NYQ==",transparent:"BPXI9u3hgAydAc5BzzkCNg==",stretchHorizontally:"JM3JVXt77nH9ur+aL+RYDg==",stretchVertically:"MXaskffWz2k-hqtHRt2vOQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(54);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(55));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,h="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[h],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},function(e,t,n){"use strict";n.r(t),t.default={container:"kUTCq7sO5cQHrn20PJUCmw==",row:"tdnc1bDHDmGbgAc7SJr69Q==",column:"Mmt076N6AxyH4NRDpCO7WA==",fixed:"_92ebQvJ5xNKJS8zakK7S2A==",plain:"y+idDxZ+5Mpp7OI3GPLAEg==",transparent:"CDqoiK0gCTJpnJgVoYgJDQ==",top:"GPsHlNPDbD6KdNQEGj8zQQ==",topEdge:"xRg0oANrxsxXNByIpnNJvw==",topOnEdge:"QAyeFFGRonxXS9FgJ2d+Ww==",right:"I8EDCJzo0ZwTtgbVTMmzdg==",rightEdge:"W2Ahm3xua2veC3ICT2KQNA==",rightOnEdge:"yjBCQYEA8mWiI98CFX5Lsw==",bottom:"WJxzXQL-5NPvDgneVgkVwA==",bottomEdge:"GVJs--pLDjWvu9C-y34ycw==",bottomOnEdge:"DDVd-PplxnLpSLFlGtFhnw==",left:"oUTMvjL0HxGenU7kJdSxHA==",leftEdge:"BiNsAkMZui+5i-KzYxq0cQ==",leftOnEdge:"_1v8imH0MTj-rMZ0rC-ihQg==",horizontalCenter:"D4p5Aa063Tnm7m0uaGhLkw==",verticalCenter:"_2deG-Y2A3zw6kF+WBnEmjw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(57);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(2),l=r(n(58));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,h=e.onClick,v=void 0===h?function(){}:h,p=e.disabled,m=void 0!==p&&p,g=e.inverted,_=void 0!==g&&g,y=e.noShadow,b=void 0!==y&&y,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,I=e.rounded,P=void 0!==I&&I,C=e.size,x=void 0===C?"medium":C,j=e.type,E=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[x],(t={},t[l.default.inverted]=_,t[l.default.rounded]=P,t[l.default.noShadow]=b,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=P&&f.includes("top"),t[l.default.rightOffset]=P&&f.includes("right"),t[l.default.bottomOffset]=P&&f.includes("bottom"),t[l.default.leftOffset]=P&&f.includes("left"),t),n]),disabled:m,onClick:v,type:E,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:x,inverted:_}),u)}},function(e,t,n){"use strict";n.r(t),t.default={container:"BvQtsUAa-fQPmXbvVSVCNQ==",small:"_8Zf4LzceiIoer7PIVR8BYA==",medium:"_7PF2dnJgZxIE+tS33xK4KA==",large:"EbOYvGKXiAabohi4Oy1CMw==",xlarge:"uOfZ9LiGznaBGIux40pFGg==",rounded:"vAj0xmjXJTfDbWICVKBo2g==",topOffset:"_8YSs-khIDzIefRRh5zH3+Q==",rightOffset:"q4jIl2XFObvsDM-4Qxvtuw==",bottomOffset:"_82KbEcEZzcR5VqHlx862PQ==",leftOffset:"xnc1+ODFmBPiif5JoqTndA==",inverted:"bhVUTdkQltctmrZe0T72kw==",noShadow:"nsgh2c6cHtzxaRrLkv6Fzw==",noBorder:"Vzy6C4djtpfL2pV5oYcOPw==",transparent:"FvdPS-+1tlsTZ1ciElsvxQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(60);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=n(2),s=a(n(61));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,h=e.alt,v=e.inverted,p=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noBorder,y=void 0!==_&&_,b=e.transparent,O=void 0!==b&&b,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,I=void 0===S?[]:S,P=e.disabled,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,E=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=p,t[s.default.rounded]=M,t[s.default.noShadow]=g,t[s.default.noBorder]=y,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=M&&I.includes("top"),t[s.default.rightOffset]=M&&I.includes("right"),t[s.default.bottomOffset]=M&&I.includes("bottom"),t[s.default.leftOffset]=M&&I.includes("left"),t),d])},E),i.default.createElement(u.Icon,{src:f,alt:h,size:j,inverted:p}),c)}},function(e,t,n){"use strict";n.r(t),t.default={container:"mUhC7XBYehNl1f+N5hRO4A==",small:"sMS1FgM3wwLg+LguvcXDwg==",medium:"_1jU85mEP5iaWyncLLb8lSA==",large:"cIgggS2f5PaBCITfts0rAg==",xlarge:"T2zaomwLYHQx-YF-vDtwHw==",rounded:"FMAh6gsFRrUfF-C+hxFJSA==",topOffset:"yYvrImQZypKtJ0cb+hEdWQ==",rightOffset:"EiLQUe+BD8ubxdj+JQuHzw==",bottomOffset:"_0qHNIRsm+MR9ryXpJmENQQ==",leftOffset:"LmIMlxvqkRjiIgYLHxaZBg==",inverted:"Bc+Rh6B97+74jkeMdCtrzg==",noShadow:"iGGCGif2yScMISDk-2mkFQ==",noBorder:"dnjn1oFtNVFN2fRWmKkZ3A==",transparent:"ZwiF0u6KTJDgwRC4WSL3rA==",disabled:"mcZLJzT7Vs7blQ9Rxw7RUw=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(63);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(64));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,s=e.containerRef,c=e.layout,d=void 0===c?"contain":c,f=e.decoding,h=void 0===f?"auto":f,v=e.loading,p=void 0===v?"eager":v,m=e.style,g=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[d]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:h,loading:p,style:m});return u?o.default.createElement("div",{ref:s,className:(0,a.default)([i.default.container,i.default.hasOverlay])},g,u&&o.default.createElement("div",{className:i.default.overlay},u)):g}},function(e,t,n){"use strict";n.r(t),t.default={container:"_9gQSR-+gqo5rDvWPmQoAeQ==",hasOverlay:"ii3+6K+FW4YjeQFm-IN3sA==",overlay:"_00ExNc3Kw+HOfTCFa34GIw==",image:"rwD5rHcZFRNa4dHo6j3JyQ==",cover:"_6AaN1T6SY6Eej+FaQta42g==",contain:"EQDkP0F5zzJitF8uO6H+mA==",stretchHorizontally:"GBKPkc8rsyjUVuCp1OlBoQ==",stretchVertically:"_5SzwSJ+6Z4R-Ya11gwLrSQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(66);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(68);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(69);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(67));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},function(e,t,n){"use strict";n.r(t),t.default={container:"lJzdP0mnfpglFSYtKKYzJw==",header:"_82vCQ7xr0NkY4UlySPkpkw==",headerLabel:"unWePdIKn4XawRuL7CPD0g==",list:"_5BX+ZZ-AaQutczbDS2e5-w=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=n(3),l=r(n(11));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,h=void 0!==f&&f,v=e.size,p=void 0===v?"medium":v,m=e.align,g=void 0===m?"center":m,_=e.onClick,y=void 0===_?function(){}:_;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:y,disabled:s,inverted:r,transparent:d,noPadding:h,align:g,size:p,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(0)),l=a(n(1)),u=n(5),s=a(n(11));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,h=e.noPadding,v=void 0!==h&&h,p=e.align,m=void 0===p?"center":p,g=e.size,_=void 0===g?"medium":g,y=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:_,stretchHorizontally:!0,noShadow:!0,noBorder:!0},y),t))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(71);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(72));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},function(e,t,n){"use strict";n.r(t),t.default={overlay:"EIB9-l58gC3ZvtW8vtUALA==",transparent:"CM1-n3sG8YNd73qJVXM22g==",fixed:"oO1iTNlPjda1fjrYeyLuUA=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(74);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(0)),s=l(n(1)),c=n(101),d=l(n(75)),f=l(n(76)),h=l(n(78)),v=n(82),p=l(n(84));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,g=e.pageSize,_=void 0===g?v.TableConfig.PAGE_SIZE:g,y=e.tableHeight,b=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,M=e.disableLazyLoader,S=e.activeRows,I=e.itemsCount,P=e.isHeaderSticky,C=void 0!==P&&P,x=e.hasVirtualScroll,j=void 0===x||x,E=(0,u.useState)(0),R=E[0],k=E[1],D=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(h.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==S?void 0:S[s.id])}))}),[t,S,a,w,o]),z=(0,u.useCallback)((function(e){var t=e.scrollOffset;k(t)}),[]),T=(0,u.useCallback)((function(){M||n.length!==I&&(n.length<_*l||m&&i&&(m(l+1),i(l+1)))}),[M,n.length,I,_,l,m,i]),L=(0,u.useCallback)((function(e){return!M&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,M]);return u.default.createElement(u.default.Fragment,null,j?u.default.createElement("div",{className:p.default.container},u.default.createElement("div",{className:p.default.table},u.default.createElement(f.default,{columns:t,scrollTop:R}),b&&!n.length?u.default.createElement("div",{className:p.default.placeholderContainer,style:{height:y}},b):u.default.createElement(d.default,{isItemLoaded:L,itemCount:n.length,loadMoreItems:T},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(c.FixedSizeList,{ref:r,height:y,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:z,onItemsRendered:t,className:p.default.scrollbarContainer},D)})))):u.default.createElement("div",{className:(0,s.default)([p.default.container,p.default.scrollbarContainer]),style:{height:y}},u.default.createElement(f.default,{columns:t,scrollTop:R,isHeaderSticky:C}),n.map((function(e,n){return u.default.createElement(h.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==S?void 0:S[null==e?void 0:e.id])})}))))}},function(e,t,n){"use strict";n.r(t);var r=n(0);var o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},i(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),a(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){0}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.startIndex,a=e.stopIndex,i=[],l=null,u=null,s=o;s<=a;s++){t(s)?null!==u&&(i.push(l,u),l=u=null):(u=s,null===l&&(l=s))}if(null!==u){for(var c=Math.min(Math.max(u,l+r-1),n-1),d=u+1;d<=c&&!t(d);d++)u=d;i.push(l,u)}if(i.length)for(;i[1]-i[0]+1<r&&i[0]>0;){var f=i[0]-1;if(t(f))break;i[0]=f}return i}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(function(e){var t=e.lastRenderedStartIndex,n=e.lastRenderedStopIndex,r=e.startIndex,o=e.stopIndex;return!(r>n||o<t)}({lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a})){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);t.default=l},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(77));t.default=function(e){var t,n,r=e.columns,l=e.scrollTop,u=e.isHeaderSticky;return o.default.createElement("div",{className:(0,a.default)([i.default.container,(t={},t[i.default.borderBottom]=!!l,t),(n={},n[i.default.isHeaderSticky]=u,n)])},r.map((function(e,t){return o.default.createElement("div",{className:(0,a.default)([i.default.tableHeaderCell,e.className]),key:"table-head-cell-".concat(t),style:{width:null==e?void 0:e.width}},e.title)})))}},function(e,t,n){"use strict";n.r(t),t.default={container:"pYnb2BryIYH54yMkBqg7pA==",isHeaderSticky:"_9u1lMc0QMRavJZzC64lo2g==",tableHeaderCell:"oUDYuc3BtXYAKs2tAcjXmQ==",borderBottom:"CtsVzY0JF+9YtHhr6pfdJg=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=n(0),i=r(n(1)),l=r(n(79)),u=r(n(81));t.default=function(e){var t,n=e.data,r=e.columns,s=e.onRowClick,c=e.hasArrow,d=e.rowHeight,f=e.isActive,h=(0,a.useCallback)((function(){s&&"string"!=typeof n&&s(n)}),[n,s]);return o.default.createElement("div",{className:(0,i.default)([u.default.container,(t={},t[u.default.hasArrow]=c,t[u.default.active]=f,t)]),onClick:h},r.map((function(e,t){return o.default.createElement(l.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:d})})))}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(80));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},function(e,t,n){"use strict";n.r(t),t.default={container:"_7LdyuwGvz9Z2kVPG7WsXsw=="}},function(e,t,n){"use strict";n.r(t),t.default={container:"NsOfS7LEuQpUK5UQa2yMYQ==",active:"Y2tpJ5s5k8O7eAa4AXuQvw==",hasArrow:"CejvrEN-sMfvkzQdDBI2ow=="}},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(83),t)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,function(e){e[e.ROW_HEIGHT=48]="ROW_HEIGHT",e[e.PAGE_SIZE=100]="PAGE_SIZE",e[e.ITEMS_LOADED=5]="ITEMS_LOADED"}(t.TableConfig||(t.TableConfig={}))},function(e,t,n){"use strict";n.r(t),t.default={container:"vBT8bbPblZzxs0lBTntUaA==",table:"UZoDc523xcUulAN0ecER2g==",placeholderContainer:"bW5+VSN43MJ0TdgqE74Lbw==",scrollbarContainer:"BdL-cxfhHx2ewwm6vMf9pQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(86);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(0)),u=i(n(1)),s=n(4),c=i(n(87));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,h=e.pattern,v=e.inputRef,p=e.size,m=void 0===p?"medium":p,g=e.type,_=void 0===g?"text":g,y=e.autoFocus,b=void 0!==y&&y,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),I=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:h,placeholder:i,name:f,type:_,value:d,autoFocus:b,inputMode:M});return n?l.default.createElement(s.Label,{value:n},I):l.default.createElement(l.default.Fragment,null,I)}},function(e,t,n){"use strict";n.r(t),t.default={textInput:"h6PYJAzytVOk9BeK5Z0+kg==",small:"UXn-BCVg81yMd8FoUfxKSA==",medium:"_4aiP6gxNHhrWbac4k1grUw==",large:"MlnPXYOUyQ7hgI7sw1o0xA==",xlarge:"HGBuKJa9XjxB8uVhKop03A==",noBorder:"sPnSCGUNZXroElSQR193GQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(89);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(91);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(90));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toast:"vWa2-1mOFU+iV14jq7QPsQ==",entrance:"fTsWsKrAKlwT+GOE4wAySQ=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(92));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},function(e,t,n){"use strict";n.r(t),t.default={toastContainer:"_2-Xu2sZMvN9tgDs+iyLc9Q=="}},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(94);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(0)),a=r(n(1)),i=r(n(95));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,s=e.muted,c=void 0===s||s,d=e.loop,f=void 0===d||d,h=e.autoPlay,v=void 0===h||h,p=e.layout,m=void 0===p?"contain":p;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:c,loop:f,autoPlay:v,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},function(e,t,n){"use strict";n.r(t),t.default={container:"ulWE-Epr85F0mUt7O1gUTQ==",hasOverlay:"zK7u1nkjc8x7YDAfYQCTpw==",video:"fR4D56LfduoBW-fimfbT0w==",cover:"VXQs4PUnWGyw56g60ZtfWg==",contain:"gxflUzO4rqCBAGuzsYEIew==",stretchHorizontally:"I-63Km4NY1W4QgMhfgU5Mg==",stretchVertically:"vNNhJlgITM+onf7zdzaufg==",overlay:"wxul7UUZlmarF86SGrd-tw=="}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(97);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(0)),a=n(3),i=n(2),l=r(n(98)),u=r(n(99)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,h=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},p=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:h,noBorder:!0,noShadow:!0,onPointerDown:v(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},p,o.default.createElement(a.Button,{disabled:h,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},function(e,t,n){"use strict";n.r(t),t.default={numpad:"PeO+2pBILmGhuXf+mQPJCg==",numbers:"_3+Y8DdO4vBJJtOOqRBhtqg=="}},function(e,t,n){"use strict";n.r(t),t.default="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},function(e,t,n){"use strict";n.r(t),n.d(t,"useOutsideClick",(function(){return i})),n.d(t,"usePromise",(function(){return c})),n.d(t,"useSWRHooksConfig",(function(){return oe})),n.d(t,"useToggle",(function(){return ae}));var r=n(0),o=n.n(r),a={capture:!0};function i(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,a),document.addEventListener("touchend",n,a),function(){document.removeEventListener("mouseup",n,a),document.removeEventListener("touchend",n,a)}}),[e]),t}function l(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{u(r.next(e))}catch(e){a(e)}}function l(e){try{u(r.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,l)}u((r=r.apply(e,t||[])).next())}))}function u(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}Object.create;function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}Object.create;function c(){var e=this,t=s(Object(r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=Object(r.useRef)(!1);return Object(r.useEffect)((function(){return function(){a.current=!0}}),[]),[n,Object(r.useCallback)((function(t){return l(e,void 0,void 0,(function(){var e,n;return u(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))}))}),[a])]}var d=n(12);const f=new WeakMap,h={},v=()=>{},p=v(),m=Object,g=e=>e===p,_=e=>"function"==typeof e,y=(e,t)=>({...e,...t}),b="undefined"!=typeof window,O="undefined"!=typeof document,w=(e,t)=>{const n=f.get(e);return[()=>e.get(t)||h,r=>{const o=e.get(t);n[5](t,y(o,r),o||h)},n[6]]},M=new WeakMap;let S=0;const I=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(m(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=M.get(e),o)return o;if(o=++S+"~",M.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=I(e[a])+",";M.set(e,o)}if(n==m){o="#";const t=m.keys(e).sort();for(;!g(a=t.pop());)g(e[a])||(o+=a+":"+I(e[a])+",");M.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[v,v],j={isOnline:()=>P,isVisible:()=>{const e=O&&document.visibilityState;return g(e)||"hidden"!==e}},E={initFocus:e=>(O&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{O&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},R=!o.a.useId,k=!b||"Deno"in window,D=e=>b&&void 0!==window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1),z=k?r.useEffect:r.useLayoutEffect,T="undefined"!=typeof navigator&&navigator.connection,L=!k&&T&&(["slow-2g","2g"].includes(T.effectiveType)||T.saveData),A=e=>{if(_(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?I(e):"",t]};let N=0;const B=()=>++N;var H=0,F=1,W=2;async function Q(...e){const[t,n,r,o]=e,a=y({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const s=!1!==a.revalidate,c=a.throwOnError;if(_(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(d))}return d(n);async function d(n){const[o]=A(n);if(!o)return;const[a,d]=w(t,o),[h,v,m]=f.get(t),y=h[o],b=()=>s&&(delete m[o],y&&y[0])?y[0](2).then(()=>a().data):a().data;if(e.length<3)return b();let O,M=r;const S=B();v[o]=[S,0];const I=!g(u),P=a(),C=P.data,x=P._c,j=g(x)?C:x;if(I&&(u=_(u)?u(j):u,d({data:u,_c:j})),_(M))try{M=M(j)}catch(e){O=e}if(M&&_(M.then)){if(M=await M.catch(e=>{O=e}),S!==v[o][0]){if(O)throw O;return M}O&&I&&(e=>"function"==typeof l?l(e):!1!==l)(O)&&(i=!0,M=j,d({data:M,_c:p}))}i&&(O||(_(i)&&(M=i(M,j)),d({data:M,_c:p}))),v[o][1]=B();const E=await b();if(d({_c:p}),!O)return i?E:M;if(c)throw O}}const V=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},U=(e,t)=>{if(!f.has(e)){const n=y(E,t),r={},o=Q.bind(p,e);let a=v;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(let e=o.length;e--;)o[e](r,n)},s=()=>{if(!f.has(e)&&(f.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,V.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,V.bind(p,r,1)));a=()=>{t&&t(),o&&o(),f.delete(e)}}};return s(),[e,o,s,a]}return[e,f.get(e)[4]]},[Z,J]=U(new Map),K=y({onLoadingSlow:v,onSuccess:v,onError:v,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!g(a)&&i>a||setTimeout(r,l,o)},onDiscarded:v,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:L?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:L?5e3:3e3,compare:(e,t)=>I(e)==I(t),isPaused:()=>!1,cache:Z,mutate:J,fallback:{}},j),G=(e,t)=>{const n=y(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=y(o,i))}return n},Y=Object(r.createContext)({}),q=b&&window.__SWR_DEVTOOLS_USE__,X=q?window.__SWR_DEVTOOLS_USE__:[],$=e=>_(e[1])?[e[0],e[1],e[2]||{}]:[e[0],null,(null===e[1]?e[2]:e[1])||{}],ee=()=>y(K,Object(r.useContext)(Y)),te=X.concat(e=>(t,n,r)=>e(t,n&&((...e)=>{const r=A(t)[0],[,,,o]=f.get(Z),a=o[r];return a?(delete o[r],a):n(...e)}),r));q&&(window.__SWR_DEVTOOLS_REACT__=o.a);const ne={dedupe:!0};m.defineProperty(e=>{const{value:t}=e,n=Object(r.useContext)(Y),o=_(t),a=Object(r.useMemo)(()=>o?t(n):t,[o,n,t]),i=Object(r.useMemo)(()=>o?a:G(n,a),[o,n,a]),l=a&&a.provider,[u]=Object(r.useState)(()=>l?U(l(i.cache||Z),a):p);return u&&(i.cache=u[0],i.mutate=u[1]),z(()=>{if(u)return u[2]&&u[2](),u[3]},[]),Object(r.createElement)(Y.Provider,y(e,{value:i}))},"defaultValue",{value:K});var re;re=(e,t,n)=>{const{cache:o,compare:a,suspense:i,fallbackData:l,revalidateOnMount:u,refreshInterval:s,refreshWhenHidden:c,refreshWhenOffline:h,keepPreviousData:v}=n,[m,b,O]=f.get(o),[M,S]=A(e),I=Object(r.useRef)(!1),P=Object(r.useRef)(!1),C=Object(r.useRef)(M),x=Object(r.useRef)(t),j=Object(r.useRef)(n),E=()=>j.current,T=()=>E().isVisible()&&E().isOnline(),[L,N,V]=w(o,M),U=Object(r.useRef)({}).current,Z=g(l)?n.fallback[M]:l,J=(e,t)=>{let n=!0;for(const r in U){const o=r;a(t[o],e[o])||"data"===o&&g(e[o])&&a(t[o],te)||(n=!1)}return n},K=Object(r.useMemo)(()=>{const e=!!M&&!!t&&(g(u)?!E().isPaused()&&!i:u),n=()=>{const t=L(),n=y(t);return delete n._k,e?{isValidating:!0,isLoading:!0,...n}:n};let r=n();return()=>{const e=n();return J(e,r)?r:r=e}},[o,M]),G=Object(d.useSyncExternalStore)(Object(r.useCallback)(e=>V(M,(t,n)=>{J(t,n)||e()}),[o,M]),K,K),Y=!I.current,q=G.data,X=g(q)?Z:q,$=G.error,ee=Object(r.useRef)(X),te=v?g(q)?ee.current:q:X,re=Y&&!g(u)?u:!E().isPaused()&&(i?!g(X)&&n.revalidateIfStale:g(X)||n.revalidateIfStale),oe=!!(M&&t&&Y&&re),ae=g(G.isValidating)?oe:G.isValidating,ie=g(G.isLoading)?oe:G.isLoading,le=Object(r.useCallback)(async e=>{const t=x.current;if(!M||!t||P.current||E().isPaused())return!1;let r,o,i=!0;const l=e||{},u=!O[M]||!l.dedupe,s=()=>R?!P.current&&M===C.current&&I.current:M===C.current,c={isValidating:!1,isLoading:!1},d=()=>{N(c)},f=()=>{const e=O[M];e&&e[1]===o&&delete O[M]},h={isValidating:!0};g(L().data)&&(h.isLoading=!0);try{if(u&&(N(h),n.loadingTimeout&&g(L().data)&&setTimeout(()=>{i&&s()&&E().onLoadingSlow(M,n)},n.loadingTimeout),O[M]=[t(S),B()]),[r,o]=O[M],r=await r,u&&setTimeout(f,n.dedupingInterval),!O[M]||O[M][1]!==o)return u&&s()&&E().onDiscarded(M),!1;c.error=p;const e=b[M];if(!g(e)&&(o<=e[0]||o<=e[1]||0===e[1]))return d(),u&&s()&&E().onDiscarded(M),!1;const l=L().data;c.data=a(l,r)?l:r,u&&s()&&E().onSuccess(r,M,n)}catch(e){f();const t=E(),{shouldRetryOnError:n}=t;t.isPaused()||(c.error=e,u&&s()&&(t.onError(e,M,t),(!0===n||_(n)&&n(e))&&T()&&t.onErrorRetry(e,M,t,le,{retryCount:(l.retryCount||0)+1,dedupe:!0})))}return i=!1,d(),!0},[M,o]),ue=Object(r.useCallback)((...e)=>Q(o,C.current,...e),[]);if(z(()=>{x.current=t,j.current=n,g(q)||(ee.current=q)}),z(()=>{if(!M)return;const e=le.bind(p,ne);let t=0;const n=((e,t,n)=>{const r=t[e]||(t[e]=[]);return r.push(n),()=>{const e=r.indexOf(n);e>=0&&(r[e]=r[r.length-1],r.pop())}})(M,m,n=>{if(n==H){const n=Date.now();E().revalidateOnFocus&&n>t&&T()&&(t=n+E().focusThrottleInterval,e())}else if(n==F)E().revalidateOnReconnect&&T()&&e();else if(n==W)return le()});return P.current=!1,C.current=M,I.current=!0,N({_k:S}),re&&(g(X)||k?e():D(e)),()=>{P.current=!0,n()}},[M]),z(()=>{let e;function t(){const t=_(s)?s(X):s;t&&-1!==e&&(e=setTimeout(n,t))}function n(){L().error||!c&&!E().isVisible()||!h&&!E().isOnline()?t():le(ne).then(t)}return t(),()=>{e&&(clearTimeout(e),e=-1)}},[s,c,h,M]),Object(r.useDebugValue)(te),i&&g(X)&&M){if(!R&&k)throw new Error("Fallback data is required when using suspense in SSR.");throw x.current=t,j.current=n,P.current=!1,g($)?le(ne):$}return{mutate:ue,get data(){return U.data=!0,te},get error(){return U.error=!0,$},get isValidating(){return U.isValidating=!0,ae},get isLoading(){return U.isLoading=!0,ie}}};function oe(){var e=ee();return Object(r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function ae(e){void 0===e&&(e=!1);var t=s(Object(r.useState)(e),2),n=t[0],o=t[1];return[n,Object(r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}},function(e,t,n){"use strict";function r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){return(a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function i(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,a(e,t)}n.r(t),n.d(t,"FixedSizeGrid",(function(){return N})),n.d(t,"FixedSizeList",(function(){return B})),n.d(t,"VariableSizeGrid",(function(){return j})),n.d(t,"VariableSizeList",(function(){return A})),n.d(t,"areEqual",(function(){return Q})),n.d(t,"shouldComponentUpdate",(function(){return V}));var l=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function u(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(r=e[n],o=t[n],!(r===o||l(r)&&l(o)))return!1;var r,o;return!0}var s=function(e,t){var n;void 0===t&&(t=u);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}},c=n(0);function d(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}var f="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function h(e){cancelAnimationFrame(e.id)}function v(e,t){var n=f();var r={id:requestAnimationFrame((function o(){f()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var p=-1;function m(e){if(void 0===e&&(e=!1),-1===p||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),p=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return p}var g=null;function _(e){if(void 0===e&&(e=!1),null===g||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?g="positive-descending":(t.scrollLeft=1,g=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),g}return g}var y=function(e){var t=e.columnIndex;e.data;return e.rowIndex+":"+t};function b(e){var t,n=e.getColumnOffset,a=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,u=e.getColumnWidth,d=e.getEstimatedTotalHeight,f=e.getEstimatedTotalWidth,p=e.getOffsetForColumnAndAlignment,g=e.getOffsetForRowAndAlignment,b=e.getRowHeight,w=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,I=e.initInstanceProps,P=e.shouldResetStyleCacheOnItemSizeChange,C=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=I(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=s((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=s((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,s=a.rowHeight,c=r._getItemStyleCache(P&&i,P&&l,P&&s),d=e+":"+t;if(c.hasOwnProperty(d))o=c[d];else{var f=n(r.props,t,r._instanceProps),h="rtl"===l;c[d]=o={position:"absolute",left:h?void 0:f,right:h?f:void 0,top:w(r.props,e,r._instanceProps),height:b(r.props,e,r._instanceProps),width:u(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=s((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(_()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&h(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=v(r._resetIsScrolling,150)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}i(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),C(e),null};var x=t.prototype;return x.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},x.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,h=c.scrollLeft,v=c.scrollTop,_=m();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var y=d(this.props,this._instanceProps),b=f(this.props,this._instanceProps)>s?_:0,O=y>l?_:0;this.scrollTo({scrollLeft:void 0!==r?p(this.props,r,n,h,this._instanceProps,O):h,scrollTop:void 0!==o?g(this.props,o,n,v,this._instanceProps,b):v})},x.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},x.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(_()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},x.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&h(this._resetIsScrollingTimeoutId)},x.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,s=e.innerTagName,h=e.itemData,v=e.itemKey,p=void 0===v?y:v,m=e.outerElementType,g=e.outerTagName,_=e.rowCount,b=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),I=S[0],P=S[1],C=this._getVerticalRangeToRender(),x=C[0],j=C[1],E=[];if(o>0&&_)for(var R=x;R<=j;R++)for(var k=I;k<=P;k++)E.push(Object(c.createElement)(t,{columnIndex:k,data:h,isScrolling:O?M:void 0,key:p({columnIndex:k,data:h,rowIndex:R}),rowIndex:R,style:this._getItemStyle(R,k)}));var D=d(this.props,this._instanceProps),z=f(this.props,this._instanceProps);return Object(c.createElement)(m||g||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},b)},Object(c.createElement)(u||s||"div",{children:E,ref:l,style:{height:D,pointerEvents:M?"none":void 0,width:z}}))},x._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],h=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,h,v)}if("function"==typeof r){var p=this.state,m=p.horizontalScrollDirection,g=p.scrollLeft,_=p.scrollTop,y=p.scrollUpdateWasRequested,b=p.verticalScrollDirection;this._callOnScroll(g,_,m,b,y)}},x._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,i=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===i)return[0,0,0,0];var h=a(this.props,d,this._instanceProps),v=l(this.props,h,d,this._instanceProps),p=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,h-p),Math.max(0,Math.min(t-1,v+m)),h,v]},x._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),h=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-h),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},S=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},I=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?P(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},P=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return P(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},x=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),s="column"===e?M(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);case"auto":default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=b({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return I("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=S("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return x("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return x("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return I("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=S("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),E=function(e,t){return e};function R(e){var t,n=e.getItemOffset,a=e.getEstimatedTotalSize,l=e.getItemSize,u=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,f=e.getStopIndexForStartIndex,p=e.initInstanceProps,g=e.shouldResetStyleCacheOnItemSizeChange,y=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=p(r.props,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=s((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=s((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(g&&i,g&&u,g&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,h="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:h?void 0:v,right:h?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=s((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(_()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&h(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=v(r._resetIsScrolling,150)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}i(t,e),t.getDerivedStateFromProps=function(e,t){return k(e,t),y(e),null};var b=t.prototype;return b.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},b.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?m():0:l.scrollHeight>l.clientHeight?m():0}this.scrollTo(u(this.props,e,t,a,this._instanceProps,i))},b.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},b.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(_()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},b.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&h(this._resetIsScrollingTimeoutId)},b.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,s=e.innerTagName,d=e.itemCount,f=e.itemData,h=e.itemKey,v=void 0===h?E:h,p=e.layout,m=e.outerElementType,g=e.outerTagName,_=e.style,y=e.useIsScrolling,b=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===p,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),I=S[0],P=S[1],C=[];if(d>0)for(var x=I;x<=P;x++)C.push(Object(c.createElement)(t,{data:f,key:v(x,f),index:x,isScrolling:y?O:void 0,style:this._getItemStyle(x)}));var j=a(this.props,this._instanceProps);return Object(c.createElement)(m||g||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:b,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},Object(c.createElement)(u||s||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},b._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},b._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=f(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(c.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var k=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},D=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},z=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=D(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},T=function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&D(e,n,t).offset<r;)n+=a,a*=2;return z(e,t,Math.min(n,o-1),Math.floor(n/2),r)},L=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},A=R({getItemOffset:function(e,t,n){return D(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:L,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=D(e,t,o),f=L(e,o),h=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=h+c?"auto":"center"),n){case"start":return h;case"end":return v;case"center":return Math.round(v+(h-v)/2);case"auto":default:return r>=v&&r<=h?r:r<v?v:h}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?z(e,t,o,0,n):T(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=D(e,t,r),d=n+s,f=c.offset+c.size,h=t;h<i-1&&f<d;)h++,f+=D(e,h,r).size;return h},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),N=b({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;case"auto":default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;case"auto":default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),B=R({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,h=Math.max(0,u*s-f),v=Math.min(h,t*s),p=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=p-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return p;case"center":var m=Math.round(p+(v-p)/2);return m<Math.ceil(f/2)?0:m>h+Math.floor(f/2)?h:m;case"auto":default:return r>=p&&r<=v?r:r<p?p:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function H(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],W=["style"];function Q(e,t){var n=e.style,r=d(e,F),o=t.style,a=d(t,W);return!H(n,o)&&!H(r,a)}function V(e,t){return!Q(this.props,e)||H(this.state,t)}},function(e,t,n){"use strict";n.r(t),n.d(t,"isHotkeyPressed",(function(){return R})),n.d(t,"useHotkeys",(function(){return E})),n.d(t,"useIsHotkeyPressed",(function(){return x}));
11
11
  /**!
12
12
  * hotkeys-js v3.9.3
13
13
  * A simple micro-library for defining and dispatching keyboard shortcuts. It has no dependencies.
@@ -16,5 +16,5 @@
16
16
  * http://jaywcjlove.github.io/hotkeys
17
17
  * Licensed under the MIT license
18
18
  */
19
- var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function a(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function o(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var u={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},l={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},d={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},s={},f=1;f<20;f++)u["f".concat(f)]=111+f;var v=[],p=!1,m="all",h=[],y=function(e){return u[e.toLowerCase()]||l[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function b(e){m=e||"all"}function g(){return m||"all"}var _=function(e){var t=e.key,n=e.scope,r=e.method,a=e.splitKey,u=void 0===a?"+":a;i(t).forEach((function(e){var t=e.split(u),a=t.length,i=t[a-1],d="*"===i?"*":y(i);if(s[d]){n||(n=g());var c=a>1?o(l,t):[];s[d]=s[d].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,a=!0,o=0;o<n.length;o++)-1===r.indexOf(n[o])&&(a=!1);return a}(e.mods,c))}))}}))};function O(e,t,n,r){var a;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var o in a=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,o)&&(!c[o]&&t.mods.indexOf(+o)>-1||c[o]&&-1===t.mods.indexOf(+o))&&(a=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!a&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=s["*"],r=e.keyCode||e.which||e.charCode;if(P.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=d[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in c){for(var a in c[r]=!0,l)l[a]===r&&(P[a]=!0);if(!n)return}for(var o in c)Object.prototype.hasOwnProperty.call(c,o)&&(c[o]=e[d[o]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),c[17]=!0,c[18]=!0);var i=g();if(n)for(var u=0;u<n.length;u++)n[u].scope===i&&("keydown"===e.type&&n[u].keydown||"keyup"===e.type&&n[u].keyup)&&O(e,n[u],i,t);if(r in s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var p=s[r][f],m=p.splitKey,h=p.key.split(m),b=[],_=0;_<h.length;_++)b.push(y(h[_]));b.sort().join("")===v.sort().join("")&&O(e,p,i,t)}}}function P(e,t,n){v=[];var r=i(e),u=[],d="all",f=document,m=0,b=!1,g=!0,_="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(d=t.scope),t.element&&(f=t.element),t.keyup&&(b=t.keyup),void 0!==t.keydown&&(g=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(_=t.splitKey)),"string"==typeof t&&(d=t);m<r.length;m++)u=[],(e=r[m].split(_)).length>1&&(u=o(l,e)),(e="*"===(e=e[e.length-1])?"*":y(e))in s||(s[e]=[]),s[e].push({keyup:b,keydown:g,scope:d,mods:u,shortcut:r[m],method:n,key:r[m],splitKey:_,element:f});void 0!==f&&!function(e){return h.indexOf(e)>-1}(f)&&window&&(h.push(f),a(f,"keydown",(function(e){w(e,f)}),O),p||(p=!0,a(window,"focus",(function(){v=[]}),O)),a(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,l)l[r]===t&&(P[r]=!1)}(e)}),O))}var j={setScope:b,getScope:g,deleteScope:function(e,t){var n,r;for(var a in e||(e=g()),s)if(Object.prototype.hasOwnProperty.call(s,a))for(n=s[a],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;g()===e&&b(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=y(e)),-1!==v.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(s).forEach((function(n){var r=s[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&_(e)}));else if("object"==typeof e)e.key&&_(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=n[0],o=n[1];"function"==typeof a&&(o=a,a=""),_({key:e,scope:a,method:o,splitKey:"+"})}}else Object.keys(s).forEach((function(e){return delete s[e]}))},keyMap:u,modifier:l,modifierMap:d};for(var M in j)Object.prototype.hasOwnProperty.call(j,M)&&(P[M]=j[M]);if("undefined"!=typeof window){var E=window.hotkeys;P.noConflict=function(e){return e&&window.hotkeys===P&&(window.hotkeys=E),P},window.hotkeys=P}var k=n(0);function C(){return P.isPressed}P.filter=function(){return!0};var S=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function x(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var a=n||{},o=a.enableOnTags,i=a.filter,u=a.keyup,l=a.keydown,d=a.filterPreventDefault,c=void 0===d||d,s=a.enabled,f=void 0===s||s,v=a.enableOnContentEditable,p=void 0!==v&&v,m=Object(k.useRef)(null),h=Object(k.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(S(e,["INPUT","TEXTAREA","SELECT"])&&!S(e,o)||null!=(r=e.target)&&r.isContentEditable&&!p)||(null===m.current||document.activeElement===m.current)&&(t(e,n),!0)}),r?[m,o,i].concat(r):[m,o,i]);return Object(k.useEffect)((function(){if(f)return u&&!0!==l&&(n.keydown=!1),P(e,n||{},h),function(){return P.unbind(e,h)};P.unbind(e,h)}),[h,e,f]),m}var D=P.isPressed}]));
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2NkNDYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz85NmQyIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzM3MDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzPzUwNDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/MDQyNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzPzEyOTkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzdhYmYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzP2QyOGQiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/Y2MzNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz85NWE3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzQ2NGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0xpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MjFjNSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzP2NkMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Lm1vZHVsZS5jc3M/Y2Y2MSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz85YTM2Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby5tb2R1bGUuY3NzP2UyMjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQubW9kdWxlLmNzcz80N2YwIiwid2VicGFjazovLy8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZU91dHNpZGVDbGljay91c2VPdXRzaWRlQ2xpY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VQcm9taXNlL3VzZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N3ci9faW50ZXJuYWwvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVNXUkhvb2tzQ29uZmlnL3VzZVNXUkhvb2tzQ29uZmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInJlcXVpcmUiLCJpc0FycmF5IiwiQXJyYXkiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJsZW5ndGgiLCJkZWZhdWx0IiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJoYW5kbGVDbGljayIsIkJ1dHRvbiIsImFsaWduIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwic2l6ZSIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJjbGFzc05hbWUiLCJjb250YWluZXIiLCJJY29uIiwiYWx0Iiwic3JjIiwiUGxhY2VtZW50Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1bmRlZmluZWQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2hpbGRyZW4iLCJidXR0b24iLCJwbGFjZW1lbnQiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJQcm92aWRlciIsInVzZU1lbW8iLCJtZW51Q29udGFpbmVyIiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJ0eXBlIiwibGVmdE9mZnNldCIsImluY2x1ZGVzIiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50IiwicHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZSIsInRhcmdldCIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImRpcmVjdGlvbiIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwibWFwIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwic3R5bGUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwidXNlSG90a2V5cyIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm92ZXJsYXkiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiRHJvcGRvd24iLCJDbGlja2FibGUiLCJpdGVtQm9keVJlbmRlcmVyIiwiaXRlbXMiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJ1c2VTdGF0ZSIsInNldElzT3BlbiIsInVzZU91dHNpZGVDbGljayIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJNZW51IiwiaXRlbSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJpZCIsImlzIiwiYSIsImIiLCJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VEZWJ1Z1ZhbHVlIiwiZ2V0U25hcHNob3QiLCJmIiwidSIsIndpbmRvdyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImluc3QiLCJnIiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJ1c2VDb250ZXh0IiwiaW5uZXJSZWYiLCJ1c2VSZWYiLCJFcnJvciIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsImNsaWVudEhlaWdodCIsIm9mZnNldCIsImdldENvbXB1dGVkU3R5bGUiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJtZW51Iiwib3BlbiIsIm1lbnVJdGVtIiwiYWN0aXZlIiwibWVudUxpbmtJdGVtIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsImxheW91dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsIndpZHRoIiwiaGVpZ2h0IiwiaGFzT3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsInRleHQiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiaXNGaXhlZCIsIm9uQmx1ciIsIm9uS2V5RG93biIsInBhdHRlcm4iLCJpbnB1dE1vZGUiLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiTnVtcGFkIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiTWF0aCIsImZsb29yIiwiZXZlbnREaWdpdEtleXMiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsInN0b3BQcm9wYWdhdGlvbiIsIk51bXBhZEtleXMiLCJmaWxsIiwiXyIsImluZGV4IiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsInBhcnNlSW50IiwibnVtYmVycyIsIm9wdGlvbnMiLCJjYXB0dXJlIiwiY2FsbGJhY2siLCJldmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiX19nZW5lcmF0b3IiLCJib2R5IiwieSIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidGhpcyIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsInB1c2giLCJfX3JlYWQiLCJhciIsImVycm9yIiwidXNlUHJvbWlzZSIsIl90aGlzIiwiX2EiLCJkYXRhIiwiaXNQZW5kaW5nIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJpc1NldHRsZWQiLCJzZXRSZXN1bHQiLCJoYXNVbm1vdW50ZWQiLCJwcm9taXNlIiwiZXJyb3JfMSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImlzV2luZG93RGVmaW5lZCIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiaW5mbyIsInByZXYiLCJ0YWJsZSIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwiY29uc3RydWN0b3IiLCJpc0RhdGUiLCJEYXRlIiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfUkVBQ1RfTEVHQUNZIiwidXNlSWQiLCJJU19TRVJWRVIiLCJyQUYiLCJzZXRUaW1lb3V0IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJzZXJpYWxpemUiLCJlcnIiLCJhcmdzIiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJjb25zdGFudHMiLCJhc3luYyIsImludGVybmFsTXV0YXRlIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0Iiwic3RhcnRzV2l0aCIsIl9rIiwiYWxsIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsImluZGV4T2YiLCJzZXR0ZXIiLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJyZWxlYXNlUmVjb25uZWN0IiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInVzZSIsInUxIiwiZjEiLCJ1MiIsImYyIiwiY29uY2F0IiwiU1dSQ29uZmlnQ29udGV4dCIsImVuYWJsZURldnRvb2xzIiwiX19TV1JfREVWVE9PTFNfVVNFX18iLCJub3JtYWxpemUiLCJ1c2VTV1JDb25maWciLCJCVUlMVF9JTl9NSURETEVXQVJFIiwidXNlU1dSTmV4dCIsImtleV8iLCJmZXRjaGVyXyIsIlBSRUxPQUQiLCJyZXEiLCJfX1NXUl9ERVZUT09MU19SRUFDVF9fIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsImhvb2siLCJmZXRjaGVyIiwic3VzcGVuc2UiLCJmYWxsYmFja0RhdGEiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwia2VlcFByZXZpb3VzRGF0YSIsImZuQXJnIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwiZ2V0Q2FjaGUiLCJzZXRDYWNoZSIsInN1YnNjcmliZUNhY2hlIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJpc0VxdWFsIiwiZXF1YWwiLCJyZXR1cm5lZERhdGEiLCJzaG91bGRTdGFydFJlcXVlc3QiLCJnZXRTZWxlY3RlZENhY2hlIiwic25hcHNob3QiLCJpc1ZhbGlkYXRpbmciLCJpc0xvYWRpbmciLCJtZW1vcml6ZWRTbmFwc2hvdCIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50IiwiY2FjaGVkRGF0YSIsImxhZ2d5RGF0YVJlZiIsInNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiIsImRlZmF1bHRWYWxpZGF0aW5nU3RhdGUiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImNhbGxiYWNrU2FmZWd1YXJkIiwiZmluYWxTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsImNsZWFudXBTdGF0ZSIsInJlcXVlc3RJbmZvIiwiaW5pdGlhbFN0YXRlIiwibXV0YXRpb25JbmZvIiwiY2FjaGVEYXRhIiwiY3VycmVudENvbmZpZyIsImJvdW5kTXV0YXRlIiwic29mdFJldmFsaWRhdGUiLCJuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0IiwidW5zdWJFdmVudHMiLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsInN1YnNjcmliZUNhbGxiYWNrIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJpc2ZmIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJhZGRFdmVudCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJzbGljZSIsImdldEtleXMiLCJyZXBsYWNlIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIiciLCJfbW9kaWZpZXIiLCJzaGlmdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwiMTYiLCIxOCIsIjE3IiwiOTEiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJ3aW5MaXN0ZW5kRm9jdXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsIngiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJmaWx0ZXIiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsImVsZW1lbnQiLCJtb2RpZmllcnNNYXRjaCIsInNob3J0Y3V0IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsImNhbmNlbEJ1YmJsZSIsImRpc3BhdGNoIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwiX2kiLCJrZXlTaG9ydGN1dCIsIl9kb3duS2V5c0N1cnJlbnQiLCJqb2luIiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJhcmd1bWVudHMiLCJmaW5kIiwidW5iaW5kIiwia2V5c0luZm8iLCJfbGVuIiwia2V5TWFwIiwiX2hvdGtleXMiLCJub0NvbmZsaWN0IiwiZGVlcCIsInVzZUlzSG90a2V5UHJlc3NlZCIsInRhZ0ZpbHRlciIsImVuYWJsZU9uVGFncyIsInRhcmdldFRhZ05hbWUiLCJCb29sZWFuIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIl0sIm1hcHBpbmdzIjoiNkRBQ0UsSUFBSUEsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVUMsUUFHbkMsSUFBSUMsRUFBU0osRUFBaUJFLEdBQVksQ0FDekNHLEVBQUdILEVBQ0hJLEdBQUcsRUFDSEgsUUFBUyxJQVVWLE9BTkFJLEVBQVFMLEdBQVVNLEtBQUtKLEVBQU9ELFFBQVNDLEVBQVFBLEVBQU9ELFFBQVNGLEdBRy9ERyxFQUFPRSxHQUFJLEVBR0pGLEVBQU9ELFFBMERmLE9BckRBRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtCLEVBQUksU0FBU2hCLEdBQ1gsb0JBQVhpQixRQUEwQkEsT0FBT0MsYUFDMUNOLE9BQU9DLGVBQWViLEVBQVNpQixPQUFPQyxZQUFhLENBQUVDLE1BQU8sV0FFN0RQLE9BQU9DLGVBQWViLEVBQVMsYUFBYyxDQUFFbUIsT0FBTyxLQVF2RHJCLEVBQW9Cc0IsRUFBSSxTQUFTRCxFQUFPRSxHQUV2QyxHQURVLEVBQVBBLElBQVVGLEVBQVFyQixFQUFvQnFCLElBQy9CLEVBQVBFLEVBQVUsT0FBT0YsRUFDcEIsR0FBVyxFQUFQRSxHQUE4QixpQkFBVkYsR0FBc0JBLEdBQVNBLEVBQU1HLFdBQVksT0FBT0gsRUFDaEYsSUFBSUksRUFBS1gsT0FBT1ksT0FBTyxNQUd2QixHQUZBMUIsRUFBb0JrQixFQUFFTyxHQUN0QlgsT0FBT0MsZUFBZVUsRUFBSSxVQUFXLENBQUVULFlBQVksRUFBTUssTUFBT0EsSUFDdEQsRUFBUEUsR0FBNEIsaUJBQVRGLEVBQW1CLElBQUksSUFBSU0sS0FBT04sRUFBT3JCLEVBQW9CVSxFQUFFZSxFQUFJRSxFQUFLLFNBQVNBLEdBQU8sT0FBT04sRUFBTU0sSUFBUUMsS0FBSyxLQUFNRCxJQUM5SSxPQUFPRixHQUlSekIsRUFBb0I2QixFQUFJLFNBQVMxQixHQUNoQyxJQUFJUyxFQUFTVCxHQUFVQSxFQUFPcUIsV0FDN0IsV0FBd0IsT0FBT3JCLEVBQWdCLFNBQy9DLFdBQThCLE9BQU9BLEdBRXRDLE9BREFILEVBQW9CVSxFQUFFRSxFQUFRLElBQUtBLEdBQzVCQSxHQUlSWixFQUFvQmEsRUFBSSxTQUFTaUIsRUFBUUMsR0FBWSxPQUFPakIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLdUIsRUFBUUMsSUFHekcvQixFQUFvQmtDLEVBQUksR0FJakJsQyxFQUFvQkEsRUFBb0JtQyxFQUFJLEksZ0JDbEZyRGhDLEVBQU9ELFFBQVVrQyxRQUFRLFUsNkJDQXpCLG1EQUFJQyxFQUFVQyxNQUFNRCxRQUVMLFNBQVNFLEVBQUdDLEdBQ3pCLElBQUlDLEVBQU0sR0FFVixHQUFtQixpQkFBUkQsR0FBbUMsaUJBQVJBLEVBQWtCLE9BQU9BLEdBQU8sR0FFdEUsR0FBSUgsRUFBUUcsR0FDVixJQUFLLElBQVdFLEVBQVBDLEVBQUksRUFBUUEsRUFBSUgsRUFBSUksT0FBUUQsSUFDUixNQUF0QkQsRUFBTUgsRUFBR0MsRUFBSUcsT0FDaEJGLElBQVFBLEdBQU8sS0FBT0MsUUFJMUIsSUFBSyxJQUFJQyxLQUFLSCxFQUNSQSxFQUFJUCxlQUFlVSxJQUFNSCxFQUFJRyxLQUFJRixJQUFRQSxHQUFPLEtBQU9FLEdBRy9ELE9BQU9GLEksZ0xDbEJULFlBQVMseUVBQUFJLFksa0xDQVQsWUFBUywyRUFBQUEsWSxpTENBVCxZQUFTLDBFQUFBQSxZLHNMQ0FULFlBQVMsK0VBQUFBLFksdUxDQVQsWUFBUyxnRkFBQUEsWSxpTENBVCxZQUFTLDBFQUFBQSxZLHFMQ0FULGNBRUEsT0FDQSxPQUdBLFdBRUEsV0FTQSxxQkFBMEMsRyxJQUN4Q0MsRUFBTyxVQUNQQyxFQUFVLGFBQ0RDLEVBQVcsVUFFcEIsT0FDRSx3QkFBQyxFQUFBQyxPQUFNLENBQ0xDLE1BQU0sT0FDTkMsU0FBVUosRUFDVkssUUFBU0osRUFDVEssS0FBSyxTQUNMQyxxQkFBbUIsR0FFbkIsK0JBQUtDLFVBQVcsVUFBSUMsV0FDakJWLEVBQ0Qsd0JBQUMsRUFBQVcsS0FBSSxDQUFDQyxJQUFJLFdBQVdDLElBQUssZ0IsME5DaENsQyxZQUFTLHlFQUFBZCxXQUNULFlBQVMsa0ZBQUFBLFdBQ1QsWUFBUyw2RUFBQUEsV0FDVCxZQUFTLGlGQUFBQSxZLGcwQkNIVCxjQU9BLFVBRUEsV0FjYSxFQUFBZSxpQkFBbUIsVUFBTUMsbUJBRXBDQyxHQTZCRixXQUFlLElBQUFDLGFBM0JmLFNBQ0UsRUFNQUMsRyxJQUxFQyxFQUFRLFdBQ1JDLEVBQU0sU0FDTlgsRUFBUyxZQUNULElBQUFZLGlCQUFTLElBQUcsR0FBRUMsV0FBWSxPQUFRQyxTQUFVLFVBQVUsRUFJeEQsT0FDRSwrQkFBS0wsSUFBS0EsRUFBS1QsV0FBVyxhQUFTLENBQUMsVUFBT0MsVUFBV0QsS0FDbkRXLEVBQ0Qsd0JBQUMsRUFBQU4saUJBQWlCVSxTQUFRLENBQUNqRCxPQUFPLElBQUFrRCxVQUFRLFdBQU0sT0FBQUosSUFBVyxDQUFDQSxLQUMxRCwrQkFDRVosV0FBVyxhQUFTLENBQ2xCLFVBQU9pQixjQUNQLFVBQU9MLEVBQVVDLFlBQ2pCLFVBQU9ELEVBQVVFLGFBR2xCSixTLDZCQy9DWCxPQUNlLFdBQUMsYUFBZSw2Qiw2QkNFN0I5RCxFQUFPRCxRQUFVLEVBQVEsSyxrZ0JDSDNCLFVBQ0EsV0FDQSxVQUNBLFdBQ0EsV0FDQSxVQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxVQUNBLFdBQ0EsVUFDQSxVQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsWSxrS0N0QkEsY0FDQSxVQUVBLFdBcUZBLFVBNURBLFNBQWdCLEcsTUFDZCtELEVBQVEsV0FDUlYsRUFBUyxZQUNUSCxFQUFPLFVBQ1BxQixFQUFhLGdCQUNiQyxFQUFZLGVBQ1osSUFBQXZCLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBd0IsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQUMsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUExQiwyQkFBbUIsSUFBRyxHQUFLLEVBQzNCLElBQUEyQix5QkFBaUIsSUFBRyxHQUFLLEVBQ3pCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxtQkFBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQWpDLGFBQUssSUFBRyxXQUFRLEVBQ2hCLElBQUFHLFlBQUksSUFBRyxXQUFRLEVBQ2YrQixFQUFJLE9BRUosT0FDRSxrQ0FDRXBCLElBQUtVLEVBQ0xuQixXQUFXLGFBQVMsQ0FDbEIsVUFBT0MsVUFDUCxVQUFPSCxHQUNQLFVBQU9ILEksS0FFTCxFQUFDLFVBQU95QixVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxXQUFZQSxFQUNwQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsYUFBY0EsRUFDdEIsRUFBQyxVQUFPMUIscUJBQXNCQSxFQUM5QixFQUFDLFVBQU8yQixtQkFBb0JBLEVBQzVCLEVBQUMsVUFBT0ksWUFBYVQsR0FBV08sRUFBWUcsU0FBUyxRQUNyRCxFQUFDLFVBQU9DLGFBQWNYLEdBQVdPLEVBQVlHLFNBQVMsUyxHQUV4RC9CLElBRUZKLFNBQVVBLEVBQ1YrQixVQUFXQSxFQUNYRSxLQUFNQSxFQUNOSSxLQUFLLFNBQ0xwQyxRQUFTQSxFQUNUcUIsY0FBZUEsR0FFTSxpQkFBYlIsR0FDUjNCLE1BQU1ELFFBQVE0QixJQUNkQSxFQUFTckIsT0FDUCwrQkFBS1csVUFBVyxVQUFPa0MsU0FBVXhCLEdBQy9CLEssNkJDakZWLE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixLQUFPLDJCQUEyQixNQUFRLDJCQUEyQixNQUFRLDRCQUE0QixPQUFTLDJCQUEyQixTQUFXLDJCQUEyQixRQUFVLDJCQUEyQixZQUFjLDJCQUEyQixXQUFhLDJCQUEyQixTQUFXLDJCQUEyQixTQUFXLDJCQUEyQixZQUFjLDJCQUEyQixvQkFBc0IsMkJBQTJCLGtCQUFvQiwyQkFBMkIsVUFBWSwyQkFBMkIsUUFBVSw2Qix1TENEdG1CLFlBQVMsZ0ZBQUFwQixZLGtLQ0FULGNBQ0EsVUFFQSxXQWNBLFVBTkEsU0FBcUIsRyxNQUFFb0IsRUFBUSxXQUFFLElBQUFVLGdCQUFRLElBQUcsR0FBSyxFQUFFcEIsRUFBUyxZQUMxRCxPQUNFLCtCQUFLQSxXQUFXLGFBQVMsQ0FBQyxVQUFPbUMsYUFBVyxLQUFHLEVBQUMsVUFBT2YsVUFBV0EsRUFBUSxHQUFHcEIsS0FBY1UsSyw2QkNiL0YsT0FDZSxXQUFDLFlBQWMsMkJBQTJCLFNBQVcsNkIscXVCQ0RwRSxjQUNBLFVBRUEsV0FxRkEsVUEzREEsU0FBb0IsRyxNQUNkMEIsRUFBUyxLQUNiMUIsRUFBUSxXQUNSVixFQUFTLFlBQ1RGLEVBQUksT0FDSnFCLEVBQVksZUFDWixJQUFBQyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsZUFBTyxJQUFHLEdBQUssRUFDZixJQUFBSSxtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUgsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBQyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQXpCLDJCQUFtQixJQUFHLEdBQUssRUFDM0IsSUFBQTJCLHlCQUFpQixJQUFHLEdBQUssRUFDekIsSUFBQTlCLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBZ0MsbUJBQVcsSUFBRyxLQUFFLEVBQ2hCLElBQUFqQyxhQUFLLElBQUcsV0FBUSxFQUNiMEMsRUFBSyxJQWpCVSxxTUF1QmxCLFlBSnlCLElBQWRELElBQ1RBLEVBQVksS0FJWix3QkFBQ0EsRUFBUyxHQUNSM0IsSUFBS1UsRUFBWSxjQUNMLGNBQ1puQixXQUFXLGFBQVMsQ0FDbEIsVUFBT0MsVUFDUCxVQUFPSCxHQUNQLFVBQU9ILEksS0FFTCxFQUFDLFVBQU95QixVQUFXQSxFQUNuQixFQUFDLFVBQU9DLFNBQVVBLEVBQ2xCLEVBQUMsVUFBT0MsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxXQUFZQSxFQUNwQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBTzVCLFVBQVdBLEVBQ25CLEVBQUMsVUFBTzZCLGFBQWNBLEVBQ3RCLEVBQUMsVUFBTzFCLHFCQUFzQkEsRUFDOUIsRUFBQyxVQUFPMkIsbUJBQW9CQSxFQUM1QixFQUFDLFVBQU9JLFlBQWFULEdBQVdPLEVBQVlHLFNBQVMsUUFDckQsRUFBQyxVQUFPQyxhQUFjWCxHQUFXTyxFQUFZRyxTQUFTLFMsR0FFeEQvQixLQUVFcUMsR0FFaUIsaUJBQWIzQixHQUNSM0IsTUFBTUQsUUFBUTRCLElBQ2RBLEVBQVNyQixPQUNQLCtCQUFLVyxVQUFXLFVBQU9rQyxTQUFVeEIsR0FDL0IsSyw2QkNqRlYsT0FDZSxXQUFDLFVBQVksMkJBQTJCLEtBQU8sMkJBQTJCLE1BQVEsNEJBQTRCLE9BQVMsMkJBQTJCLE1BQVEsMkJBQTJCLE9BQVMsMkJBQTJCLFNBQVcsMkJBQTJCLFFBQVUsMkJBQTJCLFlBQWMsMkJBQTJCLFdBQWEsMkJBQTJCLFNBQVcsMkJBQTJCLFlBQWMsMkJBQTJCLG9CQUFzQiwyQkFBMkIsa0JBQW9CLDJCQUEyQixVQUFZLDJCQUEyQixTQUFXLDJCQUEyQixTQUFXLDJCQUEyQixRQUFVLDhCLG9MQ0RockIsWUFBUyw2RUFBQXBCLFksc3lCQ0FULGNBQ0EsVUFFQSxPQUdBLFdBd0RBLFVBeENBLFNBQWtCLEcsSUFDaEJnRCxFQUFLLFFBQ0xDLEVBQVEsV0FDUkMsRUFBVyxjQUNYQyxFQUFPLFVBQ1A3QyxFQUFRLFdBQ1J4QyxFQUFJLE9BQ0o0QyxFQUFTLFlBQ1QwQyxFQUFhLGdCQUNiLElBQUE1QyxZQUFJLElBQUcsV0FBUSxFQUNmLElBQUE2QixpQkFBUyxJQUFHLEdBQUssRUFFWGdCLEdBQWUsSUFBQUMsY0FDbkIsU0FBQ0MsR0FDQyxPQUFBTixFQUFVTSxFQUFFQyxPQUE0QkwsV0FDMUMsQ0FBQ0YsSUFHSCxPQUNFLHdCQUFDLEVBQUFRLE1BQUssQ0FBQ2pGLE1BQU93RSxHQUNaLCtDQUNjLFdBQ1o3QixJQUFLLFNBQUN1QyxHQUNBQSxJQUNGQSxFQUFTTixjQUFnQkEsSUFHN0JELFFBQVNBLEVBQ1Q3QyxTQUFVQSxFQUNWSSxXQUFXLGFBQVMsQ0FBQyxVQUFPaUQsU0FBVWpELEVBQVcsVUFBT0YsS0FDeER5QyxTQUFVSSxFQUNWSCxZQUFhQSxFQUNicEYsS0FBTUEsRUFDTnlFLEtBQUssV0FDTEYsVUFBV0EsTyxrS0N4RG5CLGNBQ0EsVUFFQSxXQXFCQSxVQVpBLFNBQWUsRyxJQUFFM0IsRUFBUyxZQUFFVSxFQUFRLFdBQUU1QyxFQUFLLFFBQUVxRCxFQUFZLGVBQ3ZELE9BQ0UsaUNBQ0VWLElBQUtVLEVBQ0xuQixXQUFXLGFBQVMsQ0FBQyxVQUFPQyxVQUFXRCxLQUV0Q2xDLEVBQ0E0QyxLLDZCQ25CUCxPQUNlLFdBQUMsVUFBWSw2Qiw2QkNENUIsT0FDZSxXQUFDLFNBQVcsMkJBQTJCLE1BQVEsNEJBQTRCLE9BQVMsMkJBQTJCLE1BQVEsMkJBQTJCLE9BQVMsNkIsdUxDRDFLLFlBQVMsZ0ZBQUFwQixZLGtLQ0FULGNBQ0EsVUFFQSxPQUNBLFdBK0NBLFVBbkNBLFNBQXFCLEcsSUFDbkI0RCxFQUFNLFNBQ04vQixFQUFZLGVBQ1pnQyxFQUFRLFdBQ1JDLEVBQWEsZ0JBQ2IsSUFBQUMsaUJBQVMsSUFBRyxhQUFVLEVBQ3RCLElBQUFDLGlCQUFTLElBQUcsR0FBSyxFQUVqQixPQUNFLCtCQUNFN0MsSUFBS1UsRUFDTG5CLFdBQVcsYUFBUyxDQUFDLFVBQU91RCxZQUFhLFVBQU9GLE1BRS9DSCxFQUFPTSxLQUFJLFNBQUNDLEdBU1gsT0FDRSx3QkFBQyxFQUFBQyxZQUFXLENBQ1Z0RixJQUFLcUYsRUFBTXJGLElBQ1hxRixNQUFPQSxFQUNQRSxXQUFZRixFQUFNckYsT0FBUWdGLGFBQWEsRUFBYkEsRUFBZWhGLEtBQ3pDeUIsUUFiaUIsV0FDZnlELEdBQWFHLEVBQU1yRixPQUFRZ0YsYUFBYSxFQUFiQSxFQUFlaEYsS0FDNUMrRSxFQUFTLE1BRVRBLEVBQVNNLFksa0tDbENyQixjQUNBLFVBRUEsV0FxQ0EsVUExQkEsU0FBcUIsRyxNQUNuQkEsRUFBSyxRQUNMdEMsRUFBWSxlQUNaLElBQUF3QyxrQkFBVSxJQUFHLEdBQUssRUFDbEIsSUFBQTdELFlBQUksSUFBRyxXQUFRLEVBQ2ZELEVBQU8sVUFFUCxPQUNFLGtDQUNFWSxJQUFLVSxFQUNMbkIsV0FBVyxhQUFTLENBQ2xCLFVBQU80RCxZQUNQLFVBQU85RCxJLEtBRUwsRUFBQyxVQUFPK0QsVUFBV0YsRSxLQUVyQixjQUNVLGVBQ1o5RCxRQUFTQSxFQUNUaUUsTUFBTyxDQUFFQyxnQkFBaUJOLEVBQU1PLFVBRS9CUCxFQUFNbkIsT0FBUyxnQ0FBTXRDLFVBQVcsVUFBT2lFLFFBQVMsaUJBQVVSLEVBQU1uQixNQUFLLGMsNkJDbkM1RSxPQUNlLFdBQUMsWUFBYywyQkFBMkIsTUFBUSwyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUyw0QkFBNEIsU0FBVywyQkFBMkIsT0FBUyw2Qiw2QkNEbk4sT0FDZSxXQUFDLFlBQWMsMkJBQTJCLFdBQWEsNEJBQTRCLFNBQVcsOEIsNkxDRDdHLFlBQVMsc0ZBQUFoRCxZLGtLQ0FULGNBQ0EsVUFFQSxPQUNBLFdBaUJBLFNBQVM0RSxFQUFrQixHLE1BQ3pCbEUsRUFBUyxZQUNUVSxFQUFRLFdBQ1JTLEVBQVksZUFDWmdELEVBQU0sU0FDTkMsRUFBTSxTQUNOLElBQUFDLG1CQUFXLElBQUcsS0FBRSxFQUNoQixJQUFBQyxvQkFBWSxJQUFHLEtBQUUsRUFDakIsSUFBQUMsZUFBTyxJQUFHLGVBQVEsRUFDbEIsSUFBQWhELGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBaUQsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFsRCxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQW1ELGtCQUFVLElBQUcsT0FBSSxFQUVqQixPQUNFLHdCQUFDLEVBQUFDLE1BQUssQ0FDSnZELGFBQWNBLEVBQ2RpRCxPQUFRQSxFQUNSRyxRQUFTQSxFQUNUQyxVQUFXQSxFQUNYbEQsU0FBVUEsRUFDVm1ELFdBQVlBLEdBRVosK0JBQUt6RSxXQUFXLGFBQVMsQ0FBQyxVQUFPQyxVQUFXRCxPQUN2Q21FLEdBQVUsOEJBQUluRSxVQUFXLFVBQU8yRSxhQUFjUixHQUNqRCwrQkFDRW5FLFdBQVcsYUFBUyxDQUNsQixVQUFPNEUsYyxLQUNMLEVBQUMsVUFBT3JELFdBQVlBLEVBQVMsTUFHaENiLEdBRUgsK0JBQUtWLFVBQVcsVUFBTzZFLHVCQUNyQiwrQkFBSzdFLFVBQVcsVUFBTzhFLGNBQWVULEdBQ3RDLCtCQUFLckUsVUFBVyxVQUFPOEUsY0FBZVIsTUFPaERKLEVBQWtCYSxZQUFjLG9CQUVoQyxVQUFlYixHLHN5QkNqRWYsY0FDQSxRQUNBLFVBRUEsV0FxRUEsVUF2REEsU0FBZSxHLFFBQ2J4RCxFQUFRLFdBQ1JTLEVBQVksZUFDWmlELEVBQU0sU0FDTnpELEVBQU0sU0FDTixJQUFBYyxtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUgsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFrRCxpQkFBUyxJQUFHLEdBQUssRUFDakIsSUFBQUQsZUFBTyxJQUFHLGVBQVEsRUFDbEIsSUFBQUUsa0JBQVUsSUFBRyxPQUFJLEdBRWpCLElBQUFPLFlBQVcsU0FBVVQsR0FFckIsSUFBTVUsR0FBcUIsSUFBQXJDLGNBQVksV0FDckMyQixNQUNDLENBQUNBLElBRUosT0FDRUgsR0FDRSwrQkFBSzNELElBQUtVLEdBQ1IsK0JBQ0UyQyxNQUFPLENBQUVvQixPQUFRVCxHQUNqQnpFLFdBQVcsYUFBUyxDQUNsQixVQUFPbUYsUyxLQUNMLEVBQUMsVUFBT1gsV0FBWUEsRUFBUyxLQUMvQixjQUNVLGdCQUNaM0UsUUFBU29GLElBRVgsK0JBQ0VuQixNQUFPLENBQUVvQixPQUFRVCxFQUFhLEdBQzlCekUsV0FBVyxhQUFTLENBQ2xCLFVBQU9vRixPLEtBRUwsRUFBQyxVQUFPM0QsYUFBY0EsRUFDdEIsRUFBQyxVQUFPSCxVQUFXQSxFLEtBRXJCLGNBQ1UsU0FFWFosR0FFRkMsR0FDQywrQkFDRW1ELE1BQU8sQ0FBRW9CLE9BQVFULEVBQWEsR0FDOUJ6RSxVQUFXLFVBQU9xRixhQUVqQjFFLE0sNkJDakViLE9BQ2UsV0FBQyxRQUFVLDJCQUEyQixVQUFZLDRCQUE0QixNQUFRLDJCQUEyQixZQUFjLDJCQUEyQixTQUFXLDJCQUEyQixZQUFjLDZCLDZCQ0Q3TixPQUNlLFdBQUMsVUFBWSwyQkFBMkIsWUFBYywyQkFBMkIsYUFBZSwyQkFBMkIsVUFBWSw0QkFBNEIsc0JBQXdCLDRCQUE0QixhQUFlLDZCLG9IQ0RyUCxZQUNFLDBFQUFBMkUsWUFPRixXQUNFLG1GQUFBQyxjLHd1QkNURixjQUNBLFFBRUEsT0FDQSxPQTRCQSxvQkFBeUMsRyxJQUN2Q0MsRUFBZ0IsbUJBQ2hCQyxFQUFLLFFBQ0tDLEVBQVksV0FDdEJuRyxFQUFPLFVBQ1BvRyxFQUFlLGtCQUNmQyxFQUFZLGVBQ1osSUFBQWhGLGlCQUFTLElBQUcsR0FBRUUsU0FBVSxTQUFVRCxXQUFZLFFBQVEsRUFFaEQsR0FBc0IsSUFBQWdGLFdBQVMsR0FBOUJ6QixFQUFNLEtBQUUwQixFQUFTLEtBQ2xCckYsR0FBTSxJQUFBc0Ysa0JBQWdCLFdBQU0sT0FBQUQsR0FBVSxNQUt0Q3RHLEdBQWNpRyxHQUEwQixJQUFqQkEsRUFBTXBHLE9BQzdCMkcsRUFBZSxXQUFNLE9BQUFGLEdBQVcxQixJQUV0QyxPQUNFLHdCQUFDLEVBQUE2QixjQUFhLENBQ1p0RixPQUM2QixtQkFBcEJnRixFQUNMQSxFQUFnQixDQUNkcEcsUUFBTyxFQUNQQyxXQUFVLEVBQ1ZvRyxhQUFZLEVBQ1pJLGFBQVksSUFHZCx3QkFBQyxFQUFBVCxVQUFTLENBQ1JoRyxRQUFTQSxFQUNUQyxXQUFZQSxFQUNaSyxRQUFTbUcsSUFJZnBGLFVBQVdBLEVBQ1hILElBQUtBLEdBRUwsd0JBQUMsRUFBQXlGLEtBQUksQ0FBQzlCLE9BQVFBLEdBQ1hxQixHQUNDQSxFQUFNakMsS0FBSSxTQUFDMkMsR0FBUyxPQUNsQix3QkFBQyxFQUFBQyxTQUFRLENBQ1BDLFNBQVVGLEVBQUtHLE1BQU9WLGFBQVksRUFBWkEsRUFBY1UsSUFDcENsSSxJQUFLK0gsRUFBS0csR0FDVnpHLFFBQVMsV0FBTSxPQWxDUCxTQUFDc0csR0FDbkJULEVBQWFTLEdBQ2JMLEdBQVUsR0FnQ2VyRyxDQUFZMEcsS0FFMUJYLEVBQ0dBLEVBQWlCLENBQ2ZXLEtBQUksRUFDSnhDLFdBQVl3QyxFQUFLRyxNQUFPVixhQUFZLEVBQVpBLEVBQWNVLE1BRXhDSCxFQUFLL0ksYTs7Ozs7Ozs7O0dDM0VWLElBQUl5RixFQUFFLEVBQVEsR0FBd0UsSUFBSXpELEVBQUUsbUJBQW9CN0IsT0FBT2dKLEdBQUdoSixPQUFPZ0osR0FBMUcsU0FBV0MsRUFBRUMsR0FBRyxPQUFPRCxJQUFJQyxJQUFJLElBQUlELEdBQUcsRUFBRUEsR0FBSSxFQUFFQyxJQUFJRCxHQUFJQSxHQUFHQyxHQUFJQSxHQUFrRDNKLEVBQUUrRixFQUFFZ0QsU0FBUzVJLEVBQUU0RixFQUFFNkQsVUFBVXBJLEVBQUV1RSxFQUFFOEQsZ0JBQWdCaEksRUFBRWtFLEVBQUUrRCxjQUN0TSxTQUFTakosRUFBRTZJLEdBQUcsSUFBSUMsRUFBRUQsRUFBRUssWUFBWUwsRUFBRUEsRUFBRTFJLE1BQU0sSUFBSSxJQUFJWCxFQUFFc0osSUFBSSxPQUFPckgsRUFBRW9ILEVBQUVySixHQUFHLE1BQU0ySixHQUFHLE9BQU0sR0FBK0IsSUFBSUMsRUFBRSxvQkFBcUJDLGFBQVEsSUFBcUJBLE9BQU9DLGVBQVUsSUFBcUJELE9BQU9DLFNBQVNDLGNBQXpJLFNBQVdWLEVBQUVDLEdBQUcsT0FBT0EsS0FEa0csU0FBV0QsRUFBRUMsR0FBRyxJQUFJdEosRUFBRXNKLElBQUlLLEVBQUVoSyxFQUFFLENBQUNxSyxLQUFLLENBQUNySixNQUFNWCxFQUFFMEosWUFBWUosS0FBS3ZKLEVBQUU0SixFQUFFLEdBQUdLLEtBQUtDLEVBQUVOLEVBQUUsR0FBd0osT0FBckp4SSxHQUFFLFdBQVdwQixFQUFFWSxNQUFNWCxFQUFFRCxFQUFFMkosWUFBWUosRUFBRTlJLEVBQUVULElBQUlrSyxFQUFFLENBQUNELEtBQUtqSyxNQUFLLENBQUNzSixFQUFFckosRUFBRXNKLElBQUl4SixHQUFFLFdBQTZCLE9BQWxCVSxFQUFFVCxJQUFJa0ssRUFBRSxDQUFDRCxLQUFLakssSUFBV3NKLEdBQUUsV0FBVzdJLEVBQUVULElBQUlrSyxFQUFFLENBQUNELEtBQUtqSyxTQUFPLENBQUNzSixJQUFJN0gsRUFBRXhCLEdBQVVBLEdBQzNNUixFQUFRMEssMEJBQXFCLElBQVN4RSxFQUFFd0UscUJBQXFCeEUsRUFBRXdFLHFCQUFxQk4sRyxrS0NWMVUsY0FDQSxVQUNBLFdBaUNBLFVBdkJBLFNBQWMsRyxNQUNaM0csRUFBRyxNQUNIRCxFQUFHLE1BQ0hnQixFQUFZLGVBQ1osSUFBQXJCLFlBQUksSUFBRyxXQUFRLEVBQ2YsSUFBQXNCLGdCQUFRLElBQUcsR0FBSyxFQUVoQixPQUNFLCtCQUNFWCxJQUFLVSxFQUNMbkIsV0FBVyxhQUFTLENBQ2xCLFVBQU9zSCxLQUNQLFVBQU94SCxJLEtBQ0wsRUFBQyxVQUFPc0IsVUFBV0EsRUFBUSxLQUUvQm1HLFlBQVksWUFBVyxjQUNYLE9BQ1pwSCxJQUFLQSxFQUNMQyxJQUFLQSxNLDZCQzlCWCxPQUNlLFdBQUMsS0FBTywyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUywyQkFBMkIsTUFBUSw0QkFBNEIsT0FBUywyQkFBMkIsU0FBVyw2Qiw2QkNENU0sT0FDZSxXQUFDLFVBQVksNkIsNkJDRDVCLE9BQWUsdU4sc3lCQ0FmLGNBT0EsVUFFQSxRQUNBLFdBaUZBLFVBckVBLFNBQWMsRyxRQUNaTSxFQUFRLFdBQ1JTLEVBQVksZUFDWm5CLEVBQVMsWUFDVCxJQUFBb0UsY0FBTSxJQUFHLEdBQUksRUFDYkQsRUFBTSxTQUNOcUQsRUFBTSxTQUNOLElBQUFDLG1CQUFXLElBQUcsR0FBSSxFQUVaQyxHQUFnQixJQUFBQyxZQUFXLEVBQUF0SCxrQkFDM0J1SCxHQUFXLElBQUFDLFFBQThCLE1BQ3pDcEgsRUFBTVUsR0FBZ0J5RyxFQUU1QixJQUFLRixFQUNILE1BQU0sSUFBSUksTUFDUixnRUFxQkosT0FsQkEsSUFBQW5CLGtCQUFnQixXQUNkLEdBQUljLEdBQWVoSCxFQUFJc0gsUUFBUyxDQUN4QixNQUFrQnRILEVBQUlzSCxRQUFRQyx3QkFBNUIsRUFBRyxNQUFFQyxFQUFNLFNBQ2JDLEVBQ3VCLFFBQTNCUixFQUFjNUcsU0FBcUIsRUFBTWtHLE9BQU9tQixZQUFjRixFQUVoRSxHQUFJQyxFQUFpQixFQUFHLENBQ3RCLElBQU1FLEVBQU8zSCxFQUFJc0gsUUFBUU0sY0FBYyxNQUNqQ0MsRUFBZ0JGLEVBQUtHLGlCQUFpQixRQUN0Q0MsRUFBWUosRUFBS0ssYUFBZVAsRUFDaENRLEVBQVNKLEVBQWNqSixPQUN6QnNKLGlCQUFpQkwsRUFBYyxJQUFJTSxVQUNuQyxFQUNKUixFQUFLdEUsTUFBTStFLFVBQVksZUFBUUwsRUFBUyxnQkFBUUUsRUFBTSxTQUd6RCxDQUFDdEUsRUFBUXNELEVBQWVELElBRXRCckQsRUFLSCxnREFDRSwrQkFDRTNELElBQUtBLEVBQ0xULFdBQVcsYUFBUyxDQUNsQixVQUFPOEksTSxLQUNMLEVBQUMsVUFBT0MsTUFBTzNFLEVBQU0sR0FDdkJwRSxLQUdGLG1DQUNHbUUsR0FBVUMsR0FBVSw4QkFBSXBFLFVBQVcsVUFBT21FLFFBQVNBLEdBQ3BELGtDQUFLekQsSUFFTjhHLEdBQVVwRCxHQUNULCtCQUNFcEUsV0FBVyxhQUFTLENBQ2xCLFVBQU93SCxRLEtBQ0wsRUFBQyxVQUFPaEcsV0FBWWQsRUFBUSxNQUcvQjhHLEtBeEJGLE8sNkJDM0RYLE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixjQUFnQiwyQkFBMkIsSUFBTSwyQkFBMkIsTUFBUSwyQkFBMkIsS0FBTywyQkFBMkIsT0FBUyw2Qiw2QkNEak4sT0FDZSxXQUFDLEtBQU8sMkJBQTJCLEtBQU8sMkJBQTJCLFNBQVcsMkJBQTJCLE9BQVMsMkJBQTJCLE9BQVMsMkJBQTJCLFNBQVcsNkIsa0tDRDdNLGNBQ0EsVUFFQSxXQWdDQSxVQXRCQSxTQUFrQixHLFFBQ2hCOUcsRUFBUSxXQUNSVixFQUFTLFlBQ1RILEVBQU8sVUFDUCxJQUFBMEIsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUE4RSxnQkFBUSxJQUFHLEdBQUssRUFFaEIsT0FDRSw4QkFDRXJHLFdBQVcsYUFBUyxDQUNsQixVQUFPZ0osVSxLQUNMLEVBQUMsVUFBT0MsUUFBUzVDLEVBQVEsSSxLQUN6QixFQUFDLFVBQU85RSxXQUFZQSxFQUFTLEdBQy9CdkIsSUFFRkgsUUFBU0EsR0FFUmEsSyw2QkM5QlAsT0FDZSxXQUFDLFNBQVcsMkJBQTJCLFVBQVksMkJBQTJCLE9BQVMsNkIscXVCQ0R0RyxjQUNBLFVBRUEsV0FxQ0EsVUExQkEsU0FBc0IsRyxNQUNoQjBCLEVBQVMsS0FDYjFCLEVBQVEsV0FDUlYsRUFBUyxZQUNULElBQUF1QixpQkFBUyxJQUFHLEdBQUssRUFDZGMsRUFBSyxJQUxZLDJDQVdwQixZQUp5QixJQUFkRCxJQUNUQSxFQUFZLEtBSVosd0JBQUNBLEVBQVMsaUJBQ0ksaUJBQ1pwQyxXQUFXLGFBQVMsQ0FDbEIsVUFBT2tKLGFBQ1BsSixHLEtBQ0UsRUFBQyxVQUFPdUIsV0FBWUEsRUFBUyxNQUU3QmMsR0FFSDNCLEssNkJDbkNQLE9BQ2UsV0FBQyxhQUFlLDJCQUEyQixVQUFZLDRCQUE0QixPQUFTLDJCQUEyQixTQUFXLDZCLHFMQ0RqSixZQUFTLDhFQUFBcEIsWSxrS0NBVCxjQUNBLFVBR0EsV0F1RUEsVUFqREEsU0FBbUIsRyxNQUNqQm9CLEVBQVEsV0FDUnlJLEVBQU0sU0FDTjVHLEVBQVEsV0FDUlMsRUFBUSxXQUNSLElBQUFvRyxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQXhKLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBd0IsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUQsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUFFLG1CQUFXLElBQUcsR0FBSyxFQUNuQixJQUFBMUIsMkJBQW1CLElBQUcsR0FBSyxFQUMzQixJQUFBMkIseUJBQWlCLElBQUcsR0FBSyxFQUN6QixJQUFBTCxlQUFPLElBQUcsR0FBSyxFQUNmLElBQUF2QixZQUFJLElBQUcsV0FBUSxFQUVmLE9BQ0UsaUNBQ0VFLFdBQVcsYUFBUyxDQUNsQixVQUFPc0MsTUFDUCxVQUFPeEMsSSxLQUVMLEVBQUMsVUFBT3NCLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0MsU0FBVUEsRUFDbEIsRUFBQyxVQUFPQyxVQUFXQSxFQUNuQixFQUFDLFVBQU9FLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0QsV0FBWUEsRUFDcEIsRUFBQyxVQUFPRSxhQUFjQSxFQUN0QixFQUFDLFVBQU8xQixxQkFBc0JBLEVBQzlCLEVBQUMsVUFBTzJCLG1CQUFvQkEsRSxNQUloQyxpQ0FDRTFCLFVBQVcsVUFBT3FKLE1BQ2xCeEgsS0FBSyxPQUNMeUUsR0FBRyxPQUNINkMsT0FBUUEsRUFDUkMsU0FBVUEsRUFDVjNJLElBQUt1QyxFQUNMcEQsU0FBVUEsRUFDVjJDLFNBQVVBLElBRVg3QixLLDZCQ3RFUCxPQUNlLFdBQUMsTUFBUSwyQkFBMkIsTUFBUSwyQkFBMkIsTUFBUSwyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUywyQkFBMkIsU0FBVywyQkFBMkIsUUFBVSwyQkFBMkIsU0FBVyw0QkFBNEIsU0FBVywyQkFBMkIsVUFBWSwyQkFBMkIsWUFBYywyQkFBMkIsb0JBQXNCLDJCQUEyQixrQkFBb0IsNkIseUxDRDdlLFlBQVMsa0ZBQUFwQixZLGtLQ0FULGNBQ0EsVUFFQSxXQWtFQSxVQW5DQSxTQUF1QixHLE1BQ3JCVSxFQUFTLFlBQ1RVLEVBQVEsV0FDUlMsRUFBWSxlQUNaLElBQUFtSSxjQUFNLElBQUcsV0FBUSxFQUNqQixJQUFBMUksaUJBQVMsSUFBRyxHQUFFQyxXQUFZLFNBQVVDLFNBQVUsU0FBVXlJLE9BQVEsWUFBWSxFQUV0RUMsRUFDcUIsV0FBekI1SSxFQUFVQyxXQUNOLG1CQUNBRCxFQUFVQyxXQUVWNEksRUFDbUIsV0FBdkI3SSxFQUFVRSxTQUF3QixpQkFBbUJGLEVBQVVFLFNBRWpFLE9BQ0UsK0JBQ0VMLElBQUtVLEVBQVksY0FDTCxpQkFDWm5CLFdBQVcsYUFBUyxDQUNsQixVQUFPQyxVQUNQLFVBQU91SixHQUNQLFVBQU9DLEdBQ1AsVUFBT0gsSSxLQUVMLEVBQUMsVUFBT0ksT0FBNkIsY0FBckI5SSxFQUFVMkksTyxHQUU1QnZKLEtBR0RVLEssNkJDaEVQLE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixJQUFNLDJCQUEyQixPQUFTLDJCQUEyQixNQUFRLDRCQUE0QixNQUFRLDJCQUEyQixZQUFjLDJCQUEyQixJQUFNLDJCQUEyQixRQUFVLDJCQUEyQixVQUFZLDJCQUEyQixNQUFRLDJCQUEyQixVQUFZLDJCQUEyQixZQUFjLDJCQUEyQixPQUFTLDJCQUEyQixXQUFhLDJCQUEyQixhQUFlLDJCQUEyQixLQUFPLDJCQUEyQixTQUFXLDJCQUEyQixXQUFhLDRCQUE0QixpQkFBbUIsMkJBQTJCLGVBQWlCLDhCLHNMQ0RsdkIsWUFBUywrRUFBQXBCLFksa0tDQVQsY0FDQSxVQUVBLE9BQ0EsV0FxRUEsVUEvQ0EsU0FBb0IsRyxNQUNsQlUsRUFBUyxZQUNUbUIsRUFBWSxlQUNaVCxFQUFRLFdBQ1JOLEVBQUcsTUFDSEQsRUFBRyxNQUNILElBQUF5QixtQkFBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQS9CLGVBQU8sSUFBRyxlQUFRLEVBQ2xCLElBQUFELGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBd0IsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUMsbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFKLGVBQU8sSUFBRyxHQUFLLEVBQ2YsSUFBQXZCLFlBQUksSUFBRyxXQUFRLEVBQ2YsSUFBQStCLFlBQUksSUFBRyxXQUFRLEVBRWYsT0FDRSxrQ0FDRXBCLElBQUtVLEVBQ0xuQixXQUFXLGFBQVMsQ0FDbEIsVUFBT0MsVUFDUCxVQUFPSCxJLEtBRUwsRUFBQyxVQUFPc0IsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxhQUFjQSxFQUN0QixFQUFDLFVBQU9rSSxXQUFZdEksR0FBV08sRUFBWUcsU0FBUyxPQUNwRCxFQUFDLFVBQU9DLGFBQWNYLEdBQVdPLEVBQVlHLFNBQVMsU0FDdEQsRUFBQyxVQUFPNkgsY0FBZXZJLEdBQVdPLEVBQVlHLFNBQVMsVUFDdkQsRUFBQyxVQUFPRCxZQUFhVCxHQUFXTyxFQUFZRyxTQUFTLFEsR0FFdkQvQixJQUVGSixTQUFVQSxFQUNWQyxRQUFTQSxFQUNUZ0MsS0FBTUEsRUFDTkksS0FBSyxVQUVMLHdCQUFDLEVBQUEvQixLQUFJLENBQUNFLElBQUtBLEVBQUtELElBQUtBLEVBQUtMLEtBQU1BLEVBQU1zQixTQUFVQSxJQUMvQ1YsSyw2QkNwRVAsT0FDZSxXQUFDLFVBQVksMkJBQTJCLE1BQVEsNEJBQTRCLE9BQVMsNEJBQTRCLE1BQVEsMkJBQTJCLE9BQVMsMkJBQTJCLFFBQVUsMkJBQTJCLFVBQVksNEJBQTRCLFlBQWMsMkJBQTJCLGFBQWUsNEJBQTRCLFdBQWEsMkJBQTJCLFNBQVcsMkJBQTJCLFNBQVcsMkJBQTJCLFNBQVcsMkJBQTJCLFlBQWMsNkIsMExDRGhoQixZQUFTLG1GQUFBcEIsWSxxdUJDQVQsY0FFQSxVQUNBLE9BQ0EsV0EyRUEsVUFsREEsU0FBd0IsRyxNQUNsQjhDLEVBQVMsS0FDYmpCLEVBQVksZUFDWlQsRUFBUSxXQUNSVixFQUFTLFlBQ1RJLEVBQUcsTUFDSEQsRUFBRyxNQUNILElBQUFpQixnQkFBUSxJQUFHLEdBQUssRUFDaEIsSUFBQUUsZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUFFLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBQyxtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUosZUFBTyxJQUFHLEdBQUssRUFDZixJQUFBTyxtQkFBVyxJQUFHLEtBQUUsRUFDaEIsSUFBQWhDLGdCQUFRLElBQUcsR0FBSyxFQUNoQixJQUFBRSxZQUFJLElBQUcsV0FBUSxFQUNadUMsRUFBSyxJQWZjLG1KQXFCdEIsWUFKeUIsSUFBZEQsSUFDVEEsRUFBWSxLQUlaLHdCQUFDQSxFQUFTLEdBQ1IzQixJQUFLVSxFQUFZLGNBQ0wsbUJBQ1puQixXQUFXLGFBQVMsQ0FDbEIsVUFBT0MsVUFDUCxVQUFPSCxJLEtBRUwsRUFBQyxVQUFPc0IsVUFBV0EsRUFDbkIsRUFBQyxVQUFPQyxTQUFVQSxFQUNsQixFQUFDLFVBQU9DLFVBQVdBLEVBQ25CLEVBQUMsVUFBT0UsVUFBV0EsRUFDbkIsRUFBQyxVQUFPNUIsVUFBV0EsRUFDbkIsRUFBQyxVQUFPNkIsYUFBY0EsRUFDdEIsRUFBQyxVQUFPa0ksV0FBWXRJLEdBQVdPLEVBQVlHLFNBQVMsT0FDcEQsRUFBQyxVQUFPQyxhQUFjWCxHQUFXTyxFQUFZRyxTQUFTLFNBQ3RELEVBQUMsVUFBTzZILGNBQWV2SSxHQUFXTyxFQUFZRyxTQUFTLFVBQ3ZELEVBQUMsVUFBT0QsWUFBYVQsR0FBV08sRUFBWUcsU0FBUyxRLEdBRXZEL0IsS0FFRXFDLEdBRUosd0JBQUMsRUFBQW5DLEtBQUksQ0FBQ0UsSUFBS0EsRUFBS0QsSUFBS0EsRUFBS0wsS0FBTUEsRUFBTXNCLFNBQVVBLElBQy9DVixLLDZCQzFFUCxPQUNlLFdBQUMsVUFBWSwyQkFBMkIsTUFBUSwyQkFBMkIsT0FBUyw0QkFBNEIsTUFBUSwyQkFBMkIsT0FBUywyQkFBMkIsUUFBVSwyQkFBMkIsVUFBWSwyQkFBMkIsWUFBYywyQkFBMkIsYUFBZSw0QkFBNEIsV0FBYSwyQkFBMkIsU0FBVywyQkFBMkIsU0FBVywyQkFBMkIsU0FBVywyQkFBMkIsWUFBYywyQkFBMkIsU0FBVyw2QixpTENEcGpCLFlBQVMsMEVBQUFwQixZLGtLQ0FULGNBQ0EsVUFFQSxXQXVEQSxVQXhDQSxTQUF3QixHLElBQ3RCYyxFQUFHLE1BQ0hELEVBQUcsTUFDSDBKLEVBQVEsV0FDUkMsRUFBUyxZQUNUcEosRUFBUSxXQUNSUyxFQUFZLGVBQ1osSUFBQW1JLGNBQU0sSUFBRyxZQUFTLEVBQ2xCLElBQUFTLGdCQUFRLElBQUcsU0FBTSxFQUNqQixJQUFBQyxlQUFPLElBQUcsVUFBTyxFQUNqQmxHLEVBQUssUUFFQ21HLEVBQ0osK0JBQ0VqSyxXQUFXLGFBQVMsQ0FBQyxVQUFPa0ssTUFBTyxVQUFPWixLQUMxQy9CLFlBQVksWUFBVyxjQUNYLFFBQ1pwSCxJQUFLQSxFQUNMQyxJQUFLQSxFQUNMK0osTUFBT04sRUFDUE8sT0FBUU4sRUFDUkMsU0FBVUEsRUFDVkMsUUFBU0EsRUFDVGxHLE1BQU9BLElBSVgsT0FBT3BELEVBQ0wsK0JBQ0VELElBQUtVLEVBQ0xuQixXQUFXLGFBQVMsQ0FBQyxVQUFPQyxVQUFXLFVBQU9vSyxjQUU3Q0osRUFDQXZKLEdBQVksK0JBQUtWLFVBQVcsVUFBT21GLFNBQVV6RSxJQUU5QyxJLDZCQ3JETixPQUNlLFdBQUMsVUFBWSw0QkFBNEIsV0FBYSwyQkFBMkIsUUFBVSw0QkFBNEIsTUFBUSwyQkFBMkIsTUFBUSw0QkFBNEIsUUFBVSwyQkFBMkIsb0JBQXNCLDJCQUEyQixrQkFBb0IsOEIsc05DRHZULFlBQVMsNkVBQUFwQixXQUNULFlBQVMsaUZBQUFBLFdBQ1QsWUFBUyxxRkFBQUEsWSxrS0NGVCxjQUNBLFVBRUEsV0FvQ0EsVUExQkEsU0FBa0IsRyxJQUNoQm9CLEVBQVEsV0FDUlYsRUFBUyxZQUNUbUIsRUFBWSxlQUNaZ0QsRUFBTSxTQUNObUcsRUFBYSxnQkFFYixPQUNFLCtCQUFLN0osSUFBS1UsRUFBY25CLFdBQVcsYUFBUyxDQUFDLFVBQU9DLFVBQVdELE1BQzNEbUUsR0FBVW1HLElBQ1YsK0JBQUt0SyxVQUFXLFVBQU9tRSxRQUNwQkEsR0FDQyw4QkFBSW5FLFVBQVcsVUFBT3VLLFlBQWFqRSxHQUFJbkMsRUFBT21DLElBQzNDbkMsRUFBT3FHLE1BR1hGLEdBR0wsZ0RBQXFCbkcsYUFBTSxFQUFOQSxFQUFRbUMsR0FBSXRHLFVBQVcsVUFBT3lLLE1BQ2hEL0osTSw2QkNqQ1QsT0FDZSxXQUFDLFVBQVksMkJBQTJCLE9BQVMsNEJBQTRCLFlBQWMsMkJBQTJCLEtBQU8sOEIsa0tDRDVJLGNBQ0EsVUFFQSxPQUVBLFdBMkNBLFVBOUJBLFNBQXNCLEcsSUFDcEJBLEVBQVEsV0FDUixJQUFBdUksY0FBTSxJQUFHLEdBQUssRUFDZCxJQUFBckosZ0JBQVEsSUFBRyxHQUFLLEVBQ2hCLElBQUE2QixtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUYsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUF6QixZQUFJLElBQUcsV0FBUSxFQUNmLElBQUFILGFBQUssSUFBRyxXQUFRLEVBQ2hCLElBQUFFLGVBQU8sSUFBRyxlQUFRLEVBRWxCLE9BQ0UsOEJBQUlHLFdBQVcsYUFBUyxDQUFDLFVBQU8wSyxnQkFDOUIsd0JBQUMsRUFBQWhMLE9BQU0sQ0FDTEcsUUFBU0EsRUFDVEQsU0FBVUEsRUFDVndCLFNBQVU2SCxFQUNWeEgsWUFBYUEsRUFDYkYsVUFBV0EsRUFDWDVCLE1BQU9BLEVBQ1BHLEtBQU1BLEVBQ05DLHFCQUFtQixFQUNuQnVCLFVBQVEsRUFDUkUsVUFBUSxHQUVQZCxNLHF1QkMxQ1QsY0FDQSxVQUVBLE9BQ0EsV0FpREEsVUFsQ0EsU0FBMEIsR0FDeEIsSUFBQUEsRUFBUSxXQUNKMEIsRUFBUyxLQUNiLElBQUE2RyxjQUFNLElBQUcsR0FBSyxFQUNkLElBQUF4SCxtQkFBVyxJQUFHLEdBQUssRUFDbkIsSUFBQUYsaUJBQVMsSUFBRyxHQUFLLEVBQ2pCLElBQUE1QixhQUFLLElBQUcsV0FBUSxFQUNoQixJQUFBRyxZQUFJLElBQUcsV0FBUSxFQUNadUMsRUFBSyxJQVJnQixxRUFjeEIsWUFKeUIsSUFBZEQsSUFDVEEsRUFBWSxLQUlaLDhCQUFJcEMsV0FBVyxhQUFTLENBQUMsVUFBTzBLLGdCQUM5Qix3QkFBQyxFQUFBQyxXQUFVLEdBQ1RDLEdBQUl4SSxFQUNKaEIsU0FBVTZILEVBQ1Z4SCxZQUFhQSxFQUNiRixVQUFXQSxFQUNYNUIsTUFBT0EsRUFDUEcsS0FBTUEsRUFDTkMscUJBQW1CLEVBQ25CdUIsVUFBUSxFQUNSRSxVQUFRLEdBQ0phLEdBRUgzQixNLG1MQy9DVCxZQUFTLDRFQUFBcEIsWSxrS0NBVCxjQUNBLFVBQ0EsV0FtQ0EsVUF6QkEsU0FBaUIsRyxNQUNmb0IsRUFBUSxXQUNSUyxFQUFZLGVBQ1osSUFBQU0sbUJBQVcsSUFBRyxHQUFLLEVBQ25CLElBQUFvSixlQUFPLElBQUcsR0FBSyxFQUNmLElBQUFoTCxlQUFPLElBQUcsZUFBUSxFQUVsQixPQUNFLCtCQUNFWSxJQUFLVSxFQUFZLGNBQ0wsVUFDWm5CLFdBQVcsYUFBUyxDQUNsQixVQUFPbUYsUyxLQUVMLEVBQUMsVUFBTzFELGFBQWNBLEVBQ3RCLEVBQUMsVUFBT2lJLE9BQVFtQixFLEtBR3BCaEwsUUFBU0EsR0FFUmEsSyw2QkNoQ1AsT0FDZSxXQUFDLFFBQVUsMkJBQTJCLFlBQWMsMkJBQTJCLE1BQVEsNkIscUxDRHRHLFlBQVMsOEVBQUFwQixZLHN5QkNBVCxjQUNBLFVBRUEsT0FDQSxXQXdFQSxVQXBEQSxTQUFtQixHLE1BQ2pCZ0QsRUFBSyxRQUNMQyxFQUFRLFdBQ1J1SSxFQUFNLFNBQ05DLEVBQVMsWUFDVHZJLEVBQVcsY0FDWDFFLEVBQUssUUFDTFYsRUFBSSxPQUNKNE4sRUFBTyxVQUNQaEksRUFBUSxXQUNSLElBQUFsRCxZQUFJLElBQUcsV0FBUSxFQUNmLElBQUErQixZQUFJLElBQUcsU0FBTSxFQUNiLElBQUFGLGlCQUFTLElBQUcsR0FBSyxFQUNqQixJQUFBSCxnQkFBUSxJQUFHLEdBQUssRUFDaEJ5SixFQUFTLFlBRUh0SSxHQUFlLElBQUFDLGNBQ25CLFNBQUNDLEdBQ0tOLEdBQ0ZBLEVBQVVNLEVBQUVDLE9BQTRCaEYsU0FHNUMsQ0FBQ3lFLElBR0cySSxFQUNKLCtDQUNjLFFBQ1p6SyxJQUFLdUMsRUFDTGhELFdBQVcsYUFBUyxDQUNsQixVQUFPbUwsVUFDUCxVQUFPckwsSSxLQUNMLEVBQUMsVUFBTzBCLFVBQVdBLEVBQVEsS0FFL0JlLFNBQVVJLEVBQ1ZtSSxPQUFRQSxFQUNSQyxVQUFXQSxFQUNYQyxRQUFTQSxFQUNUeEksWUFBYUEsRUFDYnBGLEtBQU1BLEVBQ055RSxLQUFNQSxFQUNOL0QsTUFBT0EsRUFDUDZELFVBQVdBLEVBQ1hzSixVQUFXQSxJQUdmLE9BQUkzSSxFQUNLLHdCQUFDLEVBQUFTLE1BQUssQ0FBQ2pGLE1BQU93RSxHQUFRNEksR0FFdEIsZ0RBQUdBLEssNkJDekVkLE9BQ2UsV0FBQyxVQUFZLDJCQUEyQixNQUFRLDJCQUEyQixPQUFTLDRCQUE0QixNQUFRLDJCQUEyQixPQUFTLDJCQUEyQixTQUFXLDZCLGtNQ0RqTixZQUFTLDBFQUFBNUwsV0FDVCxZQUFTLG1GQUFBQSxZLGtLQ0RULGNBRUEsV0FxQkEsVUFiQSxTQUFlLEcsSUFBRW9CLEVBQVEsV0FBRVMsRUFBWSxlQUFFLElBQUF0QixlQUFPLElBQUcsZUFBUSxFQUN6RCxPQUNFLCtCQUNFWSxJQUFLVSxFQUNMbkIsVUFBVyxVQUFPb0wsTUFDbEJ2TCxRQUFTQSxFQUFPLGNBQ0osU0FFWGEsSyw2QkNsQlAsT0FDZSxXQUFDLE1BQVEsMkJBQTJCLFNBQVcsNkIsa0tDRDlELGNBRUEsVUFDQSxXQWtCQSxVQVpBLFNBQXdCLEcsSUFBRUEsRUFBUSxXQUFFK0QsRUFBVSxhQUM1QyxPQUNFLCtCQUNFekUsV0FBVyxhQUFTLENBQUMsVUFBT3FMLGlCQUM1QnZILE1BQU8sQ0FBRW9CLE9BQVFULEdBQVksY0FDakIsbUJBRVgvRCxLLDZCQ2hCUCxPQUNlLFdBQUMsZUFBaUIsOEIsaUxDRGpDLFlBQVMsMEVBQUFwQixZLGtLQ0FULGNBQ0EsVUFFQSxXQXVFQSxVQTlDQSxTQUFlLEcsSUFDYmMsRUFBRyxNQUNIeUIsRUFBSSxPQUNKbkIsRUFBUSxXQUNSUyxFQUFZLGVBQ1ptSyxFQUFNLFNBQ04sSUFBQUMsYUFBSyxJQUFHLEdBQUksRUFDWixJQUFBQyxZQUFJLElBQUcsR0FBSSxFQUNYLElBQUFDLGdCQUFRLElBQUcsR0FBSSxFQUNmLElBQUFuQyxjQUFNLElBQUcsWUFBUyxFQUVsQixPQUFPNUksRUFDTCwrQkFDRUQsSUFBS1UsRUFDTG5CLFdBQVcsYUFBUyxDQUFDLFVBQU9DLFVBQVcsVUFBT29LLGNBRTlDLCtDQUNjLFFBQ1o5QyxZQUFZLFlBQ1p2SCxXQUFXLGFBQVMsQ0FBQyxVQUFPMEwsTUFBTyxVQUFPcEMsS0FDMUNpQyxNQUFPQSxFQUNQQyxLQUFNQSxFQUNOQyxTQUFVQSxFQUNWSCxPQUFRQSxFQUNSSyxhQUFXLEdBRVgsZ0RBQW9CLFNBQVN2TCxJQUFLQSxFQUFLeUIsS0FBTUEsS0FFOUNuQixHQUFZLCtCQUFLVixVQUFXLFVBQU9tRixTQUFVekUsSUFHaEQsK0NBQ2MsUUFDWjZHLFlBQVksWUFDWnZILFdBQVcsYUFBUyxDQUFDLFVBQU8wTCxNQUFPLFVBQU9wQyxLQUMxQ2lDLE1BQU9BLEVBQ1BDLEtBQU1BLEVBQ05DLFNBQVVBLEVBQ1ZILE9BQVFBLEVBQ1JLLGFBQVcsR0FFWCxnREFBb0IsU0FBU3ZMLElBQUtBLEVBQUt5QixLQUFNQSxPLDZCQ3JFbkQsT0FDZSxXQUFDLFVBQVksMkJBQTJCLFdBQWEsMkJBQTJCLE1BQVEsMkJBQTJCLE1BQVEsMkJBQTJCLFFBQVUsMkJBQTJCLG9CQUFzQiwyQkFBMkIsa0JBQW9CLDJCQUEyQixRQUFVLDZCLDhGQ0RwVCxZQUFTLHdFQUFBK0osVyxrTENBVCxjQUVBLE9BQ0EsT0FFQSxXQUVBLFdBSU1DLEVBQWMsU0FBQ0MsRUFBZ0JDLEdBQ25DLE9BQWdCLEdBQVRELEVBQWNDLEdBR2pCQyxFQUFXLFNBQUNGLEdBQ2hCLE9BQU9HLEtBQUtDLE1BQU1KLEVBQVMsS0FHdkJLLEVBQWlCLENBQUMsSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssS0FReEQsRUFBQVAsT0FBUyxVQUFNcEwsWUFDMUIsU0FBQyxFQUF3Q0MsRyxJQUF0Q3FMLEVBQU0sU0FBRXZKLEVBQVEsV0FBRSxJQUFBM0MsZ0JBQVEsSUFBRyxHQUFLLEVBYzdCd00sRUFBMEIsU0FBQ0MsR0FDL0IsZ0JBQUN4SixHQUNDQSxFQUFFeUosa0JBRUYvSixFQUFTOEosS0FHUEUsRUFBYXhOLE1BQU0sSUFDdEJ5TixLQUFLLEdBQ0xoSixLQUFJLFNBQUNpSixFQUFHQyxHQUNQLElBQU1DLEdBQWdCRCxFQUFRLEdBQUssR0FDbkMsT0FDRSx3QkFBQyxFQUFBaE4sT0FBTSxDQUNMdEIsSUFBS3NPLEVBQ0w5TSxTQUFVQSxFQUNWNEIsVUFBUSxFQUNSRixVQUFRLEVBQ1JKLGNBQWVrTCxFQUF3QlAsRUFBWUMsRUFBUWEsS0FFMURBLE1BS1QsT0FDRSwrQkFBSzNNLFVBQVcsVUFBSTRNLE9BQVFuTSxJQUFLQSxFQUFLb00sVUFBVyxFQUFHOUIsVUF0Q2hDLFNBQUNsSSxHQUNyQixHQUFjLGNBQVZBLEVBQUV6RSxJQUNKeUUsRUFBRXlKLGtCQUVGL0osRUFBU3lKLEVBQVNGLFNBQ2IsR0FBSUssRUFBZXBLLFNBQVNjLEVBQUV6RSxLQUFNLENBQ3pDeUUsRUFBRXlKLGtCQUVGLElBQU1QLEVBQVFlLFNBQVNqSyxFQUFFekUsSUFBSyxJQUM5Qm1FLEVBQVNzSixFQUFZQyxFQUFRQyxNQTZCNkMsY0FBYyxVQUN4RiwrQkFBSy9MLFVBQVcsVUFBSStNLFNBQ2pCUixFQUNELHdCQUFDLEVBQUE3TSxPQUFNLENBQ0xFLFNBQVVBLEVBQ1Y0QixVQUFRLEVBQ1JGLFVBQVEsRUFDUkcsYUFBVyxFQUNYUCxjQUFla0wsRUFBd0JKLEVBQVNGLEtBRWhELHdCQUFDLEVBQUE1TCxLQUFJLENBQUNDLElBQUksWUFBWUMsSUFBSyxtQiw2QkM3RXZDLE9BQ2UsV0FBQyxPQUFTLDJCQUEyQixRQUFVLDhCLDZCQ0Q5RCxPQUFlLDhsQyxpUENDWDRNLEVBQVUsQ0FDVkMsU0FBUyxHQUVFLFNBQVNsSCxFQUFnQm1ILEdBQ3BDLElBQUl6TSxFQUFNLG1CQWVWLE9BZEEscUJBQVUsV0FDTixJQUFJaEIsRUFBYyxTQUFVME4sR0FDbkIxTSxFQUFJc0gsVUFBV3RILEVBQUlzSCxRQUFRcUYsU0FBU0QsRUFBTXJLLFNBRy9Db0ssRUFBU0MsSUFJYixPQUZBbEcsU0FBU29HLGlCQUFpQixVQUFXNU4sRUFBYXVOLEdBQ2xEL0YsU0FBU29HLGlCQUFpQixXQUFZNU4sRUFBYXVOLEdBQzVDLFdBQ0gvRixTQUFTcUcsb0JBQW9CLFVBQVc3TixFQUFhdU4sR0FDckQvRixTQUFTcUcsb0JBQW9CLFdBQVk3TixFQUFhdU4sTUFFM0QsQ0FBQ0UsSUFDR3pNLEVDaURKLFNBQVM4TSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUU5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVWpRLEdBQVMsSUFBTWtRLEVBQUtMLEVBQVVNLEtBQUtuUSxJQUFXLE1BQU8rRSxHQUFLaUwsRUFBT2pMLElBQ3BGLFNBQVNxTCxFQUFTcFEsR0FBUyxJQUFNa1EsRUFBS0wsRUFBaUIsTUFBRTdQLElBQVcsTUFBTytFLEdBQUtpTCxFQUFPakwsSUFDdkYsU0FBU21MLEVBQUtHLEdBSmxCLElBQWVyUSxFQUlhcVEsRUFBT0MsS0FBT1AsRUFBUU0sRUFBT3JRLFFBSjFDQSxFQUl5RHFRLEVBQU9yUSxNQUpoREEsYUFBaUI0UCxFQUFJNVAsRUFBUSxJQUFJNFAsR0FBRSxTQUFVRyxHQUFXQSxFQUFRL1AsT0FJVHVRLEtBQUtOLEVBQVdHLEdBQ2xHRixHQUFNTCxFQUFZQSxFQUFVVyxNQUFNZCxFQUFTQyxHQUFjLEtBQUtRLFdBSS9ELFNBQVNNLEVBQVlmLEVBQVNnQixHQUNqQyxJQUFzRzFILEVBQUcySCxFQUFHMVEsRUFBR3FKLEVBQTNHcUYsRUFBSSxDQUFFbkssTUFBTyxFQUFHb00sS0FBTSxXQUFhLEdBQVcsRUFBUDNRLEVBQUUsR0FBUSxNQUFNQSxFQUFFLEdBQUksT0FBT0EsRUFBRSxJQUFPNFEsS0FBTSxHQUFJQyxJQUFLLElBQ2hHLE9BQU94SCxFQUFJLENBQUU2RyxLQUFNWSxFQUFLLEdBQUksTUFBU0EsRUFBSyxHQUFJLE9BQVVBLEVBQUssSUFBd0IsbUJBQVhqUixTQUEwQndKLEVBQUV4SixPQUFPa1IsVUFBWSxXQUFhLE9BQU9DLE9BQVUzSCxFQUN2SixTQUFTeUgsRUFBS3ZRLEdBQUssT0FBTyxTQUFVMFEsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUluSSxFQUFHLE1BQU0sSUFBSW9JLFVBQVUsbUNBQzNCLEtBQU96QyxHQUFHLElBQ04sR0FBSTNGLEVBQUksRUFBRzJILElBQU0xUSxFQUFZLEVBQVJrUixFQUFHLEdBQVNSLEVBQVUsT0FBSVEsRUFBRyxHQUFLUixFQUFTLFNBQU8xUSxFQUFJMFEsRUFBVSxTQUFNMVEsRUFBRWYsS0FBS3lSLEdBQUksR0FBS0EsRUFBRVIsU0FBV2xRLEVBQUlBLEVBQUVmLEtBQUt5UixFQUFHUSxFQUFHLEtBQUtiLEtBQU0sT0FBT3JRLEVBRTNKLE9BREkwUSxFQUFJLEVBQUcxUSxJQUFHa1IsRUFBSyxDQUFTLEVBQVJBLEVBQUcsR0FBUWxSLEVBQUVELFFBQ3pCbVIsRUFBRyxJQUNQLEtBQUssRUFBRyxLQUFLLEVBQUdsUixFQUFJa1IsRUFBSSxNQUN4QixLQUFLLEVBQWMsT0FBWHhDLEVBQUVuSyxRQUFnQixDQUFFeEUsTUFBT21SLEVBQUcsR0FBSWIsTUFBTSxHQUNoRCxLQUFLLEVBQUczQixFQUFFbkssUUFBU21NLEVBQUlRLEVBQUcsR0FBSUEsRUFBSyxDQUFDLEdBQUksU0FDeEMsS0FBSyxFQUFHQSxFQUFLeEMsRUFBRW1DLElBQUlPLE1BQU8xQyxFQUFFa0MsS0FBS1EsTUFBTyxTQUN4QyxRQUNJLEtBQU1wUixFQUFJME8sRUFBRWtDLE1BQU01USxFQUFJQSxFQUFFc0IsT0FBUyxHQUFLdEIsRUFBRUEsRUFBRXNCLE9BQVMsS0FBa0IsSUFBVjRQLEVBQUcsSUFBc0IsSUFBVkEsRUFBRyxJQUFXLENBQUV4QyxFQUFJLEVBQUcsU0FDakcsR0FBYyxJQUFWd0MsRUFBRyxNQUFjbFIsR0FBTWtSLEVBQUcsR0FBS2xSLEVBQUUsSUFBTWtSLEVBQUcsR0FBS2xSLEVBQUUsSUFBTSxDQUFFME8sRUFBRW5LLE1BQVEyTSxFQUFHLEdBQUksTUFDOUUsR0FBYyxJQUFWQSxFQUFHLElBQVl4QyxFQUFFbkssTUFBUXZFLEVBQUUsR0FBSSxDQUFFME8sRUFBRW5LLE1BQVF2RSxFQUFFLEdBQUlBLEVBQUlrUixFQUFJLE1BQzdELEdBQUlsUixHQUFLME8sRUFBRW5LLE1BQVF2RSxFQUFFLEdBQUksQ0FBRTBPLEVBQUVuSyxNQUFRdkUsRUFBRSxHQUFJME8sRUFBRW1DLElBQUlRLEtBQUtILEdBQUssTUFDdkRsUixFQUFFLElBQUkwTyxFQUFFbUMsSUFBSU8sTUFDaEIxQyxFQUFFa0MsS0FBS1EsTUFBTyxTQUV0QkYsRUFBS1QsRUFBS3hSLEtBQUt3USxFQUFTZixHQUMxQixNQUFPNUosR0FBS29NLEVBQUssQ0FBQyxFQUFHcE0sR0FBSTRMLEVBQUksRUFBSyxRQUFVM0gsRUFBSS9JLEVBQUksRUFDdEQsR0FBWSxFQUFSa1IsRUFBRyxHQUFRLE1BQU1BLEVBQUcsR0FBSSxNQUFPLENBQUVuUixNQUFPbVIsRUFBRyxHQUFLQSxFQUFHLFFBQUssRUFBUWIsTUFBTSxHQXJCOUJKLENBQUssQ0FBQzFQLEVBQUcwUSxNQXlCaEN6UixPQUFPWSxPQTRCN0IsU0FBU2tSLEVBQU8vUixFQUFHZ0IsR0FDdEIsSUFBSXJCLEVBQXNCLG1CQUFYVyxRQUF5Qk4sRUFBRU0sT0FBT2tSLFVBQ2pELElBQUs3UixFQUFHLE9BQU9LLEVBQ2YsSUFBbUJLLEVBQVlrRixFQUEzQmhHLEVBQUlJLEVBQUVELEtBQUtNLEdBQU9nUyxFQUFLLEdBQzNCLElBQ0ksV0FBYyxJQUFOaFIsR0FBZ0JBLEtBQU0sTUFBUVgsRUFBSWQsRUFBRW9SLFFBQVFHLE1BQU1rQixFQUFHRixLQUFLelIsRUFBRUcsT0FFeEUsTUFBT3lSLEdBQVMxTSxFQUFJLENBQUUwTSxNQUFPQSxHQUM3QixRQUNJLElBQ1E1UixJQUFNQSxFQUFFeVEsT0FBU25SLEVBQUlKLEVBQVUsU0FBSUksRUFBRUQsS0FBS0gsR0FFbEQsUUFBVSxHQUFJZ0csRUFBRyxNQUFNQSxFQUFFME0sT0FFN0IsT0FBT0QsRUFnRWMvUixPQUFPWSxPQ25OakIsU0FBU3FSLElBQ3BCLElBQUlDLEVBQVFWLEtBQ1JXLEVBQUtMLEVBQU8sbUJBQVMsQ0FDckJNLFVBQU1wUCxFQUNOZ1AsV0FBT2hQLEVBQ1BxUCxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBQ1gsR0FBSTVCLEVBQVN1QixFQUFHLEdBQUlNLEVBQVlOLEVBQUcsR0FJbkNPLEVBQWUsa0JBQU8sR0FtRDFCLE9BbERBLHFCQUFVLFdBQ04sT0FBTyxXQUNIQSxFQUFhbEksU0FBVSxLQUU1QixJQThDSSxDQUFDb0csRUE3Q08sdUJBQVksU0FBVStCLEdBQVcsT0FBTzNDLEVBQVVrQyxPQUFPLE9BQVEsR0FBUSxXQUNwRixJQUFJRSxFQUFNUSxFQUNWLE9BQU81QixFQUFZUSxNQUFNLFNBQVVXLEdBQy9CLE9BQVFBLEVBQUdwTixPQUNQLEtBQUssRUFVRCxPQVRBb04sRUFBR2YsS0FBS1MsS0FBSyxDQUFDLEVBQUcsRUFBRyxDQUFFLElBQ3RCWSxFQUFVLENBQ05MLFVBQU1wUCxFQUNOZ1AsV0FBT2hQLEVBQ1BxUCxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxXQUFXLElBRVIsQ0FBQyxFQUFhRyxHQUN6QixLQUFLLEVBWUQsT0FYQVAsRUFBT0QsRUFBR2hCLFFBQ21CLElBQXpCdUIsRUFBYWxJLFNBQ2JpSSxFQUFVLENBQ05MLEtBQU1BLEVBQ05KLFdBQU9oUCxFQUNQcVAsV0FBVyxFQUNYQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsV0FBVyxJQUdaLENBQUMsRUFBY0osR0FDMUIsS0FBSyxFQVlELE9BWEFRLEVBQVVULEVBQUdoQixRQUNnQixJQUF6QnVCLEVBQWFsSSxTQUNiaUksRUFBVSxDQUNOVCxNQUFPWSxFQUNQUixVQUFNcFAsRUFDTnFQLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLFdBQVcsSUFHWixDQUFDLEVBQWEsR0FDekIsS0FBSyxFQUFHLE1BQU8sQ0FBQyxZQUdyQixDQUFDRSxLLFlDOURaLE1BQU1HLEVBQWlCLElBQUlDLFFBRXJCQyxFQUFjLEdBQ2RDLEVBQU8sT0FLUEMsRUFBOEJELElBQzlCRSxFQUFTbFQsT0FDVG1ULEVBQWUxQixHQUFJQSxJQUFNd0IsRUFDekJHLEVBQWMzQixHQUFnQixtQkFBTEEsRUFDekI0QixFQUFlLENBQUNwSyxFQUFHQyxLQUFJLElBQ2xCRCxLQUNBQyxJQUlMb0ssRUFGZ0Isb0JBRVM3SixPQUN6QjhKLEVBSGdCLG9CQUdXN0osU0FFM0I4SixFQUFvQixDQUFDQyxFQUFPNVMsS0FDOUIsTUFBTTZTLEVBQVFiLEVBQWUxUyxJQUFJc1QsR0FDakMsTUFBTyxDQUVILElBQUlBLEVBQU10VCxJQUFJVSxJQUFRa1MsRUFFckJZLElBQ0csTUFBTUMsRUFBT0gsRUFBTXRULElBQUlVLEdBQ3ZCNlMsRUFBTSxHQUFHN1MsRUFBS3dTLEVBQWFPLEVBQU1ELEdBQU9DLEdBQVFiLElBR3BEVyxFQUFNLEtBUVJHLEVBQVEsSUFBSWYsUUFFbEIsSUFBSWdCLEVBQVUsRUFTZCxNQUFNQyxFQUFjQyxJQUNoQixNQUFNMVAsU0FBYzBQLEVBQ2RDLEVBQWNELEdBQU9BLEVBQUlDLFlBQ3pCQyxFQUFTRCxHQUFlRSxLQUM5QixJQUFJdkQsRUFDQXpCLEVBQ0osR0FBSStELEVBQU9jLEtBQVNBLEdBQVFFLEdBQVVELEdBQWVHLE9BOEJqRHhELEVBQVNzRCxFQUFTRixFQUFJSyxTQUFtQixVQUFSL1AsRUFBbUIwUCxFQUFJTSxXQUFxQixVQUFSaFEsRUFBbUJpUSxLQUFLQyxVQUFVUixHQUFPLEdBQUtBLE1BOUIxRCxDQUl6RCxHQURBcEQsRUFBU2lELEVBQU0xVCxJQUFJNlQsR0FDZnBELEVBQVEsT0FBT0EsRUFNbkIsR0FGQUEsSUFBV2tELEVBQVUsSUFDckJELEVBQU1ZLElBQUlULEVBQUtwRCxHQUNYcUQsR0FBZXpTLE1BQU8sQ0FHdEIsSUFEQW9QLEVBQVMsSUFDTHpCLEVBQVEsRUFBR0EsRUFBUTZFLEVBQUlsUyxPQUFRcU4sSUFDL0J5QixHQUFVbUQsRUFBV0MsRUFBSTdFLElBQVUsSUFFdkMwRSxFQUFNWSxJQUFJVCxFQUFLcEQsR0FFbkIsR0FBSXFELEdBQWVmLEVBQVEsQ0FFdkJ0QyxFQUFTLElBQ1QsTUFBTThELEVBQU94QixFQUFPd0IsS0FBS1YsR0FBS1csT0FDOUIsTUFBT3hCLEVBQVloRSxFQUFRdUYsRUFBSzlDLFFBQ3ZCdUIsRUFBWWEsRUFBSTdFLE1BQ2pCeUIsR0FBVXpCLEVBQVEsSUFBTTRFLEVBQVdDLEVBQUk3RSxJQUFVLEtBR3pEMEUsRUFBTVksSUFBSVQsRUFBS3BELElBS3ZCLE9BQU9BLEdBU1AsSUFBSWdFLEdBQVMsRUFDakIsTUFFT0MsRUFBZUMsR0FBa0J4QixHQUFtQjdKLE9BQU9xRyxpQkFBbUIsQ0FDakZyRyxPQUFPcUcsaUJBQWlCaFAsS0FBSzJJLFFBQzdCQSxPQUFPc0csb0JBQW9CalAsS0FBSzJJLFNBQ2hDLENBQ0F1SixFQUNBQSxHQW9DRStCLEVBQVMsQ0FDWEMsU0E1Q2EsSUFBSUosRUE2Q2pCSyxVQXBDYyxLQUNkLE1BQU1DLEVBQWtCM0IsR0FBcUI3SixTQUFTd0wsZ0JBQ3RELE9BQU8vQixFQUFZK0IsSUFBd0MsV0FBcEJBLElBb0NyQ0MsRUFBdUIsQ0FDekJDLFVBbkNlekYsSUFFWDRELEdBQ0E3SixTQUFTb0csaUJBQWlCLG1CQUFvQkgsR0FFbERrRixFQUFjLFFBQVNsRixHQUNoQixLQUNDNEQsR0FDQTdKLFNBQVNxRyxvQkFBb0IsbUJBQW9CSixHQUVyRG1GLEVBQWUsUUFBU25GLEtBMEI1QjBGLGNBdkJtQjFGLElBRW5CLE1BQU0yRixFQUFXLEtBQ2JWLEdBQVMsRUFDVGpGLEtBR0U0RixFQUFZLEtBQ2RYLEdBQVMsR0FJYixPQUZBQyxFQUFjLFNBQVVTLEdBQ3hCVCxFQUFjLFVBQVdVLEdBQ2xCLEtBQ0hULEVBQWUsU0FBVVEsR0FDekJSLEVBQWUsVUFBV1MsTUFZNUJDLEdBQW1CLElBQU1DLE1BQ3pCQyxHQUFhcEMsR0FBbUIsU0FBVTdKLE9BRTFDa00sRUFBT3BNLEdBdEl3QitKLFFBSmYsSUFJeUM3SixPQUE4QixzQkFzSS9DQSxPQUE4QixzQkFBRUYsR0FBS3FNLFdBQVdyTSxFQUFHLEdBSTNGc00sRUFBNEJILEVBQVksWUFBWSxrQkFFcERJLEVBQTJDLG9CQUFkQyxXQUE2QkEsVUFBVUMsV0FFcEVDLEdBQWtCUCxHQUFhSSxJQUF3QixDQUN6RCxVQUNBLE1BQ0Z0UixTQUFTc1IsRUFBb0JJLGdCQUFrQkosRUFBb0JLLFVBRS9EQyxFQUFhdlYsSUFDZixHQUFJdVMsRUFBV3ZTLEdBQ1gsSUFDSUEsRUFBTUEsSUFDUixNQUFPd1YsR0FFTHhWLEVBQU0sR0FLZCxNQUFNeVYsRUFBT3pWLEVBR2IsTUFBTyxDQURQQSxFQUFvQixpQkFBUEEsRUFBa0JBLEdBQU9XLE1BQU1ELFFBQVFWLEdBQU9BLEVBQUlpQixPQUFTakIsR0FBT2tULEVBQVdsVCxHQUFPLEdBRzdGeVYsSUFLUixJQUFJQyxFQUFjLEVBQ2xCLE1BQU1DLEVBQWUsTUFBTUQsRUFNM0IsSUFBSUUsRUFKZ0IsRUFJaEJBLEVBSG9CLEVBR3BCQSxFQUZpQixFQVNyQkMsZUFBZUMsS0FBa0JMLEdBQzdCLE1BQU83QyxFQUFPbUQsRUFBTUMsRUFBT0MsR0FBU1IsRUFHOUI3RyxFQUFVNEQsRUFBYSxDQUN6QjBELGVBQWUsRUFDZkMsY0FBYyxHQUNFLGtCQUFWRixFQUFzQixDQUM1QkcsV0FBWUgsR0FDWkEsR0FBUyxJQUNiLElBQUlDLEVBQWdCdEgsRUFBUXNILGNBQzVCLE1BQU1HLEVBQXdCekgsRUFBUTBILGdCQUN0QyxJQUFJQyxFQUFpQjNILEVBQVEySCxlQUM3QixNQUFNSCxHQUFvQyxJQUF2QnhILEVBQVF3SCxXQUlyQkQsRUFBZXZILEVBQVF1SCxhQUc3QixHQUFJNUQsRUFBV3dELEdBQU8sQ0FDbEIsTUFBTVMsRUFBWVQsRUFDWlUsRUFBYyxHQUNkQyxFQUFLOUQsRUFBTWlCLE9BQ2pCLElBQUksSUFBSThDLEVBQVFELEVBQUc3RyxRQUFTOEcsRUFBTTNHLEtBQU0yRyxFQUFRRCxFQUFHN0csT0FBTyxDQUN0RCxNQUFNN1AsRUFBTTJXLEVBQU1qWCxPQUVqQk0sRUFBSTRXLFdBQVcsVUFBWUosRUFBVTVELEVBQU10VCxJQUFJVSxHQUFLNlcsS0FDakRKLEVBQVl6RixLQUFLaFIsR0FHekIsT0FBT3dQLFFBQVFzSCxJQUFJTCxFQUFZclIsSUFBSTJSLElBRXZDLE9BQU9BLEVBQVloQixHQUNuQkYsZUFBZWtCLEVBQVlGLEdBRXZCLE1BQU83VyxHQUFPdVYsRUFBVXNCLEdBQ3hCLElBQUs3VyxFQUFLLE9BQ1YsTUFBT1YsRUFBS3NVLEdBQU9qQixFQUFrQkMsRUFBTzVTLElBQ3JDZ1gsRUFBb0JDLEVBQVVDLEdBQVNsRixFQUFlMVMsSUFBSXNULEdBQzNEdUUsRUFBZUgsRUFBbUJoWCxHQUNsQ29YLEVBQWtCLElBQ2hCaEIsV0FHT2MsRUFBTWxYLEdBQ1RtWCxHQUFnQkEsRUFBYSxJQUN0QkEsRUFBYSxHQXhEbkIsR0F3RG9DbEgsS0FBSyxJQUFJM1EsSUFBTWlTLE1BR3JEalMsSUFBTWlTLEtBR2pCLEdBQUlrRSxFQUFLeFUsT0FBUyxFQUVkLE9BQU9tVyxJQUVYLElBQ0lqRyxFQURBSSxFQUFPeUUsRUFHWCxNQUFNcUIsRUFBbUIxQixJQUN6QnNCLEVBQVNqWCxHQUFPLENBQ1pxWCxFQUNBLEdBRUosTUFBTUMsR0FBcUJoRixFQUFZaUUsR0FDakMxRCxFQUFRdlQsSUFJUmlZLEVBQWdCMUUsRUFBTXRCLEtBQ3RCaUcsRUFBYzNFLEVBQU00RSxHQUNwQkMsRUFBZ0JwRixFQUFZa0YsR0FBZUQsRUFBZ0JDLEVBVWpFLEdBUklGLElBQ0FmLEVBQWlCaEUsRUFBV2dFLEdBQWtCQSxFQUFlbUIsR0FBaUJuQixFQUU5RTNDLEVBQUksQ0FDQXJDLEtBQU1nRixFQUNOa0IsR0FBSUMsS0FHUm5GLEVBQVdoQixHQUVYLElBQ0lBLEVBQU9BLEVBQUttRyxHQUNkLE1BQU9sQyxHQUVMckUsRUFBUXFFLEVBSWhCLEdBQUlqRSxHQUFRZ0IsRUFBV2hCLEVBQUt0QixNQUFPLENBUy9CLEdBTkFzQixRQUFhQSxFQUFLb0csTUFBT25DLElBQ3JCckUsRUFBUXFFLElBS1I2QixJQUFxQkosRUFBU2pYLEdBQUssR0FBSSxDQUN2QyxHQUFJbVIsRUFBTyxNQUFNQSxFQUNqQixPQUFPSSxFQUNBSixHQUFTbUcsR0ExRkosQ0FBQ25HLEdBQ21CLG1CQUExQmtGLEVBQXVDQSxFQUFzQmxGLElBQW1DLElBQTFCa0YsRUF5RnZDQyxDQUFnQm5GLEtBR3JEK0UsR0FBZ0IsRUFDaEIzRSxFQUFPbUcsRUFFUDlELEVBQUksQ0FDQXJDLE9BQ0FrRyxHQUFJckYsS0FLWjhELElBQ0svRSxJQUVHb0IsRUFBVzJELEtBQ1gzRSxFQUFPMkUsRUFBYzNFLEVBQU1tRyxJQUcvQjlELEVBQUksQ0FDQXJDLE9BQ0FrRyxHQUFJckYsTUFLaEI2RSxFQUFTalgsR0FBSyxHQUFLMlYsSUFFbkIsTUFBTWlDLFFBQVlSLElBT2xCLEdBSkF4RCxFQUFJLENBQ0E2RCxHQUFJckYsS0FHSmpCLEVBSUosT0FBTytFLEVBQWdCMEIsRUFBTXJHLEVBSHpCLEdBQUk0RSxFQUFjLE1BQU1oRixHQU9wQyxNQUFNMEcsRUFBb0IsQ0FBQ1YsRUFBYzFULEtBQ3JDLElBQUksTUFBTXpELEtBQU9tWCxFQUNUQSxFQUFhblgsR0FBSyxJQUFJbVgsRUFBYW5YLEdBQUssR0FBR3lELElBR2pEcVUsRUFBWSxDQUFDQyxFQUFVbkosS0FNekIsSUFBS29ELEVBQWVnRyxJQUFJRCxHQUFXLENBQy9CLE1BQU1FLEVBQU96RixFQUFhOEIsRUFBc0IxRixHQUcxQ29JLEVBQXFCLEdBQ3JCa0IsRUFBU3BDLEVBQWU3VixLQUFLbVMsRUFBVzJGLEdBQzlDLElBQUlJLEVBQVVoRyxFQUNkLE1BQU1pRyxFQUFnQixHQUNoQkMsRUFBWSxDQUFDclksRUFBSzhPLEtBQ3BCLE1BQU13SixFQUFPRixFQUFjcFksSUFBUSxHQUduQyxPQUZBb1ksRUFBY3BZLEdBQU9zWSxFQUNyQkEsRUFBS3RILEtBQUtsQyxHQUNILElBQUl3SixFQUFLQyxPQUFPRCxFQUFLRSxRQUFRMUosR0FBVyxJQUU3QzJKLEVBQVMsQ0FBQ3pZLEVBQUtOLEVBQU9xVCxLQUN4QmdGLEVBQVNuRSxJQUFJNVQsRUFBS04sR0FDbEIsTUFBTTRZLEVBQU9GLEVBQWNwWSxHQUMzQixHQUFJc1ksRUFDQSxJQUFJLElBQUk3WixFQUFJNlosRUFBS3JYLE9BQVF4QyxLQUNyQjZaLEVBQUs3WixHQUFHc1UsRUFBTXJULElBSXBCZ1osRUFBZSxLQUNqQixJQUFLMUcsRUFBZWdHLElBQUlELEtBRXBCL0YsRUFBZTRCLElBQUltRSxFQUFVLENBQ3pCZixFQUNBLEdBQ0EsR0FDQSxHQUNBa0IsRUFDQU8sRUFDQUosS0FFQ3hELEdBQVcsQ0FPWixNQUFNOEQsRUFBZVYsRUFBSzFELFVBQVVRLFdBQVc5VSxLQUFLbVMsRUFBV3lGLEVBQWtCNVgsS0FBS21TLEVBQVc0RSxFQXBOakcsS0FxTk00QixFQUFtQlgsRUFBS3pELGNBQWNPLFdBQVc5VSxLQUFLbVMsRUFBV3lGLEVBQWtCNVgsS0FBS21TLEVBQVc0RSxFQXBOckcsS0FxTkptQixFQUFVLEtBQ05RLEdBQWdCQSxJQUNoQkMsR0FBb0JBLElBSXBCNUcsRUFBZTZHLE9BQU9kLE1BV3RDLE9BTkFXLElBTU8sQ0FDSFgsRUFDQUcsRUFDQVEsRUFDQVAsR0FHUixNQUFPLENBQ0hKLEVBQ0EvRixFQUFlMVMsSUFBSXlZLEdBQVUsTUFpQjlCLEVBQU9HLEdBQVVKLEVBQVUsSUFBSWdCLEtBRWhDQyxFQUFnQnZHLEVBQWEsQ0FFL0J3RyxjQUFlN0csRUFDZjhHLFVBQVc5RyxFQUNYK0csUUFBUy9HLEVBQ1RnSCxhQW5CaUIsQ0FBQzlLLEVBQUcrSyxFQUFJQyxFQUFRakQsRUFBWTZCLEtBQzdDLE1BQU1xQixFQUFnQkQsRUFBT0UsZ0JBQ3ZCQyxFQUFvQnZCLEVBQUt3QixXQUV6QkMsTUFBYzdMLEtBQUs4TCxTQUFXLEtBQVEsSUFBTUgsRUFBb0IsRUFBSUEsRUFBb0IsS0FBT0gsRUFBT08sb0JBQ3ZHdEgsRUFBWWdILElBQWtCRSxFQUFvQkYsR0FHdkR2RSxXQUFXcUIsRUFBWXNELEVBQVN6QixJQVloQzRCLFlBQWExSCxFQUViMkgsbUJBQW1CLEVBQ25CQyx1QkFBdUIsRUFDdkJDLG1CQUFtQixFQUNuQkMsb0JBQW9CLEVBRXBCTCxtQkFBb0J4RSxFQUFpQixJQUFRLElBQzdDOEUsc0JBQXVCLElBQ3ZCQyxpQkFBa0IsSUFDbEJDLGVBQWdCaEYsRUFBaUIsSUFBTyxJQUV4Q2lGLFFBdEJZLENBQUM3QyxFQUFhOEMsSUFBVXBILEVBQVdzRSxJQUFnQnRFLEVBQVdvSCxHQXVCMUVDLFNBQVUsS0FBSSxFQUNkM0gsTUFBSyxFQUNMc0YsU0FDQXNDLFNBQVUsSUFFZHRHLEdBRU11RyxFQUFlLENBQUNyUyxFQUFHQyxLQUVyQixNQUFNdUksRUFBSTRCLEVBQWFwSyxFQUFHQyxHQUUxQixHQUFJQSxFQUFHLENBQ0gsTUFBUXFTLElBQUtDLEVBQUtILFNBQVVJLEdBQVF4UyxHQUM1QnNTLElBQUtHLEVBQUtMLFNBQVVNLEdBQVF6UyxFQUNoQ3NTLEdBQU1FLElBQ05qSyxFQUFFOEosSUFBTUMsRUFBR0ksT0FBT0YsSUFFbEJELEdBQU1FLElBQ05sSyxFQUFFNEosU0FBV2hJLEVBQWFvSSxFQUFJRSxJQUd0QyxPQUFPbEssR0FHTG9LLEVBQW1CLHdCQUFjLElBc0NqQ0MsRUFBaUJ4SSxHQUFtQjdKLE9BQU9zUyxxQkFDM0NSLEVBQU1PLEVBQWlCclMsT0FBT3NTLHFCQUF1QixHQVFyREMsRUFBYTFGLEdBQ1JsRCxFQUFXa0QsRUFBSyxJQUFNLENBQ3pCQSxFQUFLLEdBQ0xBLEVBQUssR0FDTEEsRUFBSyxJQUFNLElBQ1gsQ0FDQUEsRUFBSyxHQUNMLE1BQ2EsT0FBWkEsRUFBSyxHQUFjQSxFQUFLLEdBQUtBLEVBQUssS0FBTyxJQUk1QzJGLEdBQWUsSUFDVjVJLEVBQWF1RyxFQUFlLHFCQUFXaUMsSUEyQjVDSyxHQUFzQlgsRUFBSUssT0FmWk8sR0FBYSxDQUFDQyxFQUFNQyxFQUFVbkMsSUFZbkNpQyxFQUFXQyxFQVZGQyxHQUFZLEtBQUsvRixLQUM3QixNQUFNelYsRUFBTXVWLEVBQVVnRyxHQUFNLElBQ3JCLENBQUUsQ0FBRSxDQUFFRSxHQUFXekosRUFBZTFTLElBQUksR0FDckNvYyxFQUFNRCxFQUFRemIsR0FDcEIsT0FBSTBiLFVBQ09ELEVBQVF6YixHQUNSMGIsR0FFSkYsS0FBWS9GLEtBRVU0RCxJQTNDakM0QixJQUVBclMsT0FBTytTLHVCQUF5QixLQ3RoQnhDLE1BQU1DLEdBQWMsQ0FDaEJDLFFBQVEsR0FxYk14SixFQUFPalQsZURzRE42RSxJQUNmLE1BQU0sTUFBRXZFLEdBQVd1RSxFQUNiNlgsRUFBZSxxQkFBV2QsR0FDMUJlLEVBQXFCeEosRUFBVzdTLEdBQ2hDMlosRUFBUyxrQkFBUSxJQUFJMEMsRUFBcUJyYyxFQUFNb2MsR0FBZ0JwYyxFQUFPLENBQ3pFcWMsRUFDQUQsRUFDQXBjLElBR0VzYyxFQUFpQixrQkFBUSxJQUFJRCxFQUFxQjFDLEVBQVNvQixFQUFhcUIsRUFBY3pDLEdBQVMsQ0FDakcwQyxFQUNBRCxFQUNBekMsSUFHRXRCLEVBQVdzQixHQUFVQSxFQUFPdEIsVUFFM0JrRSxHQUFnQixtQkFBUyxJQUFJbEUsRUFBV0QsRUFBVUMsRUFBU2lFLEVBQWVwSixPQUFTLEdBQVF5RyxHQUFVakgsR0FhNUcsT0FYSTZKLElBQ0FELEVBQWVwSixNQUFRcUosRUFBYSxHQUNwQ0QsRUFBZTlELE9BQVMrRCxFQUFhLElBR3pDakgsRUFBMEIsS0FDdEIsR0FBSWlILEVBRUEsT0FEQUEsRUFBYSxJQUFNQSxFQUFhLEtBQ3pCQSxFQUFhLElBRXpCLElBQ0ksd0JBQWNqQixFQUFpQnJZLFNBQVU2UCxFQUFhdk8sRUFBTyxDQUNoRXZFLE1BQU9zYyxNQ3RGc0MsZUFBZ0IsQ0FDakV0YyxNQUFPcVosSUFpQlAsSUQ4SGNtRCxNQ25rQkksQ0FBQ25HLEVBQU1vRyxFQUFTOUMsS0FDbEMsTUFBTSxNQUFFekcsRUFBTSxRQUFFeUgsRUFBUSxTQUFFK0IsRUFBUyxhQUFFQyxFQUFhLGtCQUFFQyxFQUFrQixnQkFBRUMsRUFBZ0Isa0JBQUVDLEVBQWtCLG1CQUFFQyxFQUFtQixpQkFBRUMsR0FBc0JyRCxHQUNsSnJDLEVBQW9CQyxFQUFVQyxHQUFTbEYsRUFBZTFTLElBQUlzVCxJQU0xRDVTLEVBQUsyYyxHQUFTcEgsRUFBVVEsR0FFekI2RyxFQUFvQixrQkFBTyxHQUczQkMsRUFBZSxrQkFBTyxHQUV0QkMsRUFBUyxpQkFBTzljLEdBQ2hCK2MsRUFBYSxpQkFBT1osR0FDcEJhLEVBQVksaUJBQU8zRCxHQUNuQjRELEVBQVksSUFBSUQsRUFBVXJULFFBQzFCMUIsRUFBVyxJQUFJZ1YsSUFBWTdJLGFBQWU2SSxJQUFZOUksWUFDckQrSSxFQUFVQyxFQUFVQyxHQUFrQnpLLEVBQWtCQyxFQUFPNVMsR0FDaEVxZCxFQUFvQixpQkFBTyxJQUFJMVQsUUFFL0I2USxFQUFXbEksRUFBWStKLEdBQWdCaEQsRUFBT21CLFNBQVN4YSxHQUFPcWMsRUFDOURpQixFQUFVLENBQUN2SyxFQUFNcEosS0FDbkIsSUFBSTRULEdBQVEsRUFDWixJQUFJLE1BQU1sUCxLQUFLZ1AsRUFBa0IsQ0FDN0IsTUFBTTFkLEVBQUkwTyxFQUNMZ00sRUFBUTFRLEVBQVFoSyxHQUFJb1QsRUFBS3BULEtBQ2hCLFNBQU5BLEdBQWdCMlMsRUFBWVMsRUFBS3BULEtBQzVCMGEsRUFBUTFRLEVBQVFoSyxHQUFJNmQsTUFJekJELEdBQVEsR0FJcEIsT0FBT0EsR0FFTDlVLEVBQWMsa0JBQVEsS0FDeEIsTUFBTWdWLElBQ0d6ZCxLQUNBbWMsSUFFQTdKLEVBQVlnSyxJQUViVyxJQUFZMUMsYUFDWjZCLEVBSHdDRSxHQU0xQ29CLEVBQW1CLEtBQ3JCLE1BQU03SyxFQUFRcUssSUFFUlMsRUFBV25MLEVBQWFLLEdBRTlCLGNBRE84SyxFQUFTOUcsR0FDWDRHLEVBR0UsQ0FDSEcsY0FBYyxFQUNkQyxXQUFXLEtBQ1JGLEdBTElBLEdBUWYsSUFBSUcsRUFBb0JKLElBQ3hCLE1BQU8sS0FDSCxNQUFNQyxFQUFXRCxJQUNqQixPQUFPSixFQUFRSyxFQUFVRyxHQUFxQkEsRUFBb0JBLEVBQW9CSCxJQUczRixDQUNDL0ssRUFDQTVTLElBR0UrZCxFQUFTLCtCQUFxQixzQkFBYWpQLEdBQVdzTyxFQUFlcGQsRUFBSyxDQUFDK1MsRUFBTXBKLEtBQzFFMlQsRUFBUXZLLEVBQU1wSixJQUFVbUYsTUFFckMsQ0FDSThELEVBQ0E1UyxJQUNBeUksRUFBYUEsR0FDWHVWLEdBQWtCcEIsRUFBa0JqVCxRQUNwQ3NVLEVBQWFGLEVBQU94TSxLQUNwQkEsRUFBT2UsRUFBWTJMLEdBQWN6RCxFQUFXeUQsRUFDNUM5TSxFQUFRNE0sRUFBTzVNLE1BRWYrTSxHQUFlLGlCQUFPM00sR0FDdEJpTSxHQUFlZCxFQUFtQnBLLEVBQVkyTCxHQUFjQyxHQUFhdlUsUUFBVXNVLEVBQWExTSxFQUloRzRNLEdBRUVILElBQW1CMUwsRUFBWWdLLEdBQTJCQSxHQUUxRFcsSUFBWTFDLGFBSVo2QixHQUFpQjlKLEVBQVlmLElBQWdCOEgsRUFBT1csa0JBR2pEMUgsRUFBWWYsSUFBUzhILEVBQU9XLG1CQUlqQ29FLE1BQTRCcGUsR0FBT21jLEdBQVc2QixHQUFrQkcsSUFDaEVQLEdBQWV0TCxFQUFZeUwsRUFBT0gsY0FBZ0JRLEdBQXlCTCxFQUFPSCxhQUNsRkMsR0FBWXZMLEVBQVl5TCxFQUFPRixXQUFhTyxHQUF5QkwsRUFBT0YsVUFHNUV6SCxHQUFhLHNCQUFZUCxNQUFPd0ksSUFDbEMsTUFBTUMsRUFBaUJ2QixFQUFXcFQsUUFDbEMsSUFBSzNKLElBQVFzZSxHQUFrQnpCLEVBQWFsVCxTQUFXc1QsSUFBWTFDLFdBQy9ELE9BQU8sRUFFWCxJQUFJRCxFQUNBaUUsRUFDQTNTLEdBQVUsRUFDZCxNQUFNcU0sRUFBT29HLEdBQWtCLEdBR3pCRyxHQUF5QnRILEVBQU1sWCxLQUFTaVksRUFBSzRELE9BVzVDNEMsRUFBb0IsSUFDbkI5SixHQUNRa0ksRUFBYWxULFNBQVczSixJQUFROGMsRUFBT25ULFNBQVdpVCxFQUFrQmpULFFBRXpFM0osSUFBUThjLEVBQU9uVCxRQUdwQitVLEVBQWEsQ0FDZmQsY0FBYyxFQUNkQyxXQUFXLEdBRVRjLEVBQThCLEtBQ2hDeEIsRUFBU3VCLElBRVBFLEVBQWUsS0FFakIsTUFBTUMsRUFBYzNILEVBQU1sWCxHQUN0QjZlLEdBQWVBLEVBQVksS0FBT04sVUFDM0JySCxFQUFNbFgsSUFJZjhlLEVBQWUsQ0FDakJsQixjQUFjLEdBSWR0TCxFQUFZNEssSUFBVzNMLFFBQ3ZCdU4sRUFBYWpCLFdBQVksR0FFN0IsSUFnQ0ksR0EvQklXLElBQ0FyQixFQUFTMkIsR0FHTHpGLEVBQU9lLGdCQUFrQjlILEVBQVk0SyxJQUFXM0wsT0FDaER3RCxXQUFXLEtBQ0huSixHQUFXNlMsS0FDWHhCLElBQVlqRSxjQUFjaFosRUFBS3FaLElBRXBDQSxFQUFPZSxnQkFJZGxELEVBQU1sWCxHQUFPLENBQ1RzZSxFQUFlM0IsR0FDZmhILE9BR1AyRSxFQUFTaUUsR0FBV3JILEVBQU1sWCxHQUMzQnNhLFFBQWdCQSxFQUNaa0UsR0FHQXpKLFdBQVc2SixFQUFjdkYsRUFBT2MsbUJBUS9CakQsRUFBTWxYLElBQVFrWCxFQUFNbFgsR0FBSyxLQUFPdWUsRUFNakMsT0FMSUMsR0FDSUMsS0FDQXhCLElBQVlwRCxZQUFZN1osSUFHekIsRUFHWDBlLEVBQVd2TixNQUFRaUIsRUFhbkIsTUFBTTJNLEVBQWU5SCxFQUFTalgsR0FDOUIsSUFBS3NTLEVBQVl5TSxLQUNoQlIsR0FBV1EsRUFBYSxJQUN6QlIsR0FBV1EsRUFBYSxJQUNKLElBQXBCQSxFQUFhLElBT1QsT0FOQUosSUFDSUgsR0FDSUMsS0FDQXhCLElBQVlwRCxZQUFZN1osSUFHekIsRUFJWCxNQUFNZ2YsRUFBWTlCLElBQVczTCxLQUc3Qm1OLEVBQVduTixLQUFPOEksRUFBUTJFLEVBQVcxRSxHQUFXMEUsRUFBWTFFLEVBRXhEa0UsR0FDSUMsS0FDQXhCLElBQVloRSxVQUFVcUIsRUFBU3RhLEVBQUtxWixHQUc5QyxNQUFPN0QsR0FDTG9KLElBQ0EsTUFBTUssRUFBZ0JoQyxLQUNoQixtQkFBRWhELEdBQXdCZ0YsRUFFM0JBLEVBQWMxRSxhQUVmbUUsRUFBV3ZOLE1BQVFxRSxFQUdmZ0osR0FBeUJDLE1BQ3pCUSxFQUFjL0YsUUFBUTFELEVBQUt4VixFQUFLaWYsS0FDTCxJQUF2QmhGLEdBQStCMUgsRUFBVzBILElBQXVCQSxFQUFtQnpFLEtBQ2hGdk4sS0FJQWdYLEVBQWM5RixhQUFhM0QsRUFBS3hWLEVBQUtpZixFQUFlN0ksR0FBWSxDQUM1RHFELFlBQWF4QixFQUFLd0IsWUFBYyxHQUFLLEVBQ3JDb0MsUUFBUSxNQVdoQyxPQUhBalEsR0FBVSxFQUVWK1MsS0FDTyxHQVlYLENBQ0kzZSxFQUNBNFMsSUFLRXNNLEdBQWMsc0JBQ3BCLElBQUl6SixJQUNPSyxFQUFlbEQsRUFBT2tLLEVBQU9uVCxXQUFZOEwsR0FFcEQsSUF5R0EsR0F2R0FULEVBQTBCLEtBQ3RCK0gsRUFBV3BULFFBQVV3UyxFQUNyQmEsRUFBVXJULFFBQVUwUCxFQUdmL0csRUFBWTJMLEtBQ2JDLEdBQWF2VSxRQUFVc1UsS0FJL0JqSixFQUEwQixLQUN0QixJQUFLaFYsRUFBSyxPQUNWLE1BQU1tZixFQUFpQi9JLEdBQVduVyxLQUFLbVMsRUFBV3dKLElBR2xELElBQUl3RCxFQUF5QixFQUM3QixNQWdCTUMsRURtVlksRUFBQ3JmLEVBQUtzZixFQUFXeFEsS0FDdkMsTUFBTXlRLEVBQW9CRCxFQUFVdGYsS0FBU3NmLEVBQVV0ZixHQUFPLElBRTlELE9BREF1ZixFQUFrQnZPLEtBQUtsQyxHQUNoQixLQUNILE1BQU1SLEVBQVFpUixFQUFrQi9HLFFBQVExSixHQUNwQ1IsR0FBUyxJQUVUaVIsRUFBa0JqUixHQUFTaVIsRUFBa0JBLEVBQWtCdGUsT0FBUyxHQUN4RXNlLEVBQWtCeE8sU0MzVkZ5TyxDQUFrQnhmLEVBQUtnWCxFQWhCckJ2VCxJQUNsQixHQUFJQSxHQUFRLEVBQThCLENBQ3RDLE1BQU1nYyxFQUFNbk0sS0FBS21NLE1BQ2J4QyxJQUFZbkQsbUJBQXFCMkYsRUFBTUwsR0FBMEJuWCxNQUNqRW1YLEVBQXlCSyxFQUFNeEMsSUFBWS9DLHNCQUMzQ2lGLFVBRUQsR0FBSTFiLEdBQVEsRUFDWHdaLElBQVlsRCx1QkFBeUI5UixLQUNyQ2tYLFNBRUQsR0FBSTFiLEdBQVEsRUFDZixPQUFPMlMsT0F3QmYsT0FsQkF5RyxFQUFhbFQsU0FBVSxFQUN2Qm1ULEVBQU9uVCxRQUFVM0osRUFDakI0YyxFQUFrQmpULFNBQVUsRUFFNUJ3VCxFQUFTLENBQ0x0RyxHQUFJOEYsSUFHSndCLEtBQ0k3TCxFQUFZZixJQUFTc0QsRUFFckJzSyxJQUlBckssRUFBSXFLLElBR0wsS0FFSHRDLEVBQWFsVCxTQUFVLEVBQ3ZCMFYsTUFFTCxDQUNDcmYsSUFHSmdWLEVBQTBCLEtBQ3RCLElBQUkwSyxFQUNKLFNBQVM3UCxJQUdMLE1BQU04UCxFQUFXcE4sRUFBV2dLLEdBQW1CQSxFQUFnQmhMLEdBQVFnTCxFQUluRW9ELElBQXVCLElBQVhELElBQ1pBLEVBQVEzSyxXQUFXNkssRUFBU0QsSUFHcEMsU0FBU0MsSUFHQTFDLElBQVcvTCxRQUFVcUwsSUFBcUJTLElBQVk3SSxjQUFpQnFJLElBQXNCUSxJQUFZOUksV0FJMUd0RSxJQUhBdUcsR0FBV3dGLElBQWEzTCxLQUFLSixHQU9yQyxPQURBQSxJQUNPLEtBQ0M2UCxJQUNBRyxhQUFhSCxHQUNiQSxHQUFTLEtBR2xCLENBQ0NuRCxFQUNBQyxFQUNBQyxFQUNBemMsSUFHSix3QkFBY3dkLElBS1ZwQixHQUFZOUosRUFBWWYsSUFBU3ZSLEVBQUssQ0FJdEMsSUFBSzJVLEdBQW1CRSxFQUNwQixNQUFNLElBQUluTCxNQUFNLHlEQU1wQixNQUhBcVQsRUFBV3BULFFBQVV3UyxFQUNyQmEsRUFBVXJULFFBQVUwUCxFQUNwQndELEVBQWFsVCxTQUFVLEVBQ2pCMkksRUFBWW5CLEdBQVNpRixHQUFXd0YsSUFBZXpLLEVBRXpELE1BQU8sQ0FDSCtHLE9BQVFnSCxHQUNSLFdBRUksT0FEQTdCLEVBQWtCOUwsTUFBTyxFQUNsQmlNLElBRVgsWUFFSSxPQURBSCxFQUFrQmxNLE9BQVEsRUFDbkJBLEdBRVgsbUJBRUksT0FEQWtNLEVBQWtCTyxjQUFlLEVBQzFCQSxJQUVYLGdCQUVJLE9BREFQLEVBQWtCUSxXQUFZLEVBQ3ZCQSxNQ3JiSixTQUFTaUMsS0FDcEIsSUFBSUMsRUFBWTNFLEtBRWhCLE9BRFksbUJBQVEsV0FBYyxNQUFPLENBQUdsRCxPQUFRNkgsRUFBVTdILE9BQVF0RixNQUFPbU4sRUFBVW5OLFNBQWEsQ0FBQ21OLEVBQVU3SCxPQUFRNkgsRUFBVW5OLFFDRnRILFNBQVNvTixHQUFVQyxRQUNULElBQWpCQSxJQUEyQkEsR0FBZSxHQUM5QyxJQUFJM08sRUFBS0wsRUFBTyxtQkFBU2dQLEdBQWUsR0FBSXZnQixFQUFRNFIsRUFBRyxHQUFJNE8sRUFBVzVPLEVBQUcsR0FXekUsTUFBTyxDQUFDNVIsRUFWSyx1QkFBWSxTQUFVeWdCLEdBRTNCRCxFQURvQixrQkFBYkMsRUFDRUEsRUFHQSxTQUFVQyxHQUNmLE9BQVFBLE1BR2pCLE87Ozs7Ozs7OztBQ0xQLElBQUlDLEVBQTRCLG9CQUFkbkwsV0FBNEJBLFVBQVVvTCxVQUFVQyxjQUFjL0gsUUFBUSxXQUFhLEVBRXJHLFNBQVNnSSxFQUFTcmdCLEVBQVE0TyxFQUFPMFIsRUFBUUMsR0FDbkN2Z0IsRUFBTzhPLGlCQUNUOU8sRUFBTzhPLGlCQUFpQkYsRUFBTzBSLEVBQVFDLEdBQzlCdmdCLEVBQU93Z0IsYUFDaEJ4Z0IsRUFBT3dnQixZQUFZLEtBQUs1RixPQUFPaE0sSUFBUSxXQUNyQzBSLEVBQU83WCxPQUFPbUcsVUFNcEIsU0FBUzZSLEVBQVFDLEVBQVU3Z0IsR0FHekIsSUFGQSxJQUFJOGdCLEVBQU85Z0IsRUFBSStnQixNQUFNLEVBQUcvZ0IsRUFBSWlCLE9BQVMsR0FFNUJ4QyxFQUFJLEVBQUdBLEVBQUlxaUIsRUFBSzdmLE9BQVF4QyxJQUMvQnFpQixFQUFLcmlCLEdBQUtvaUIsRUFBU0MsRUFBS3JpQixHQUFHOGhCLGVBRzdCLE9BQU9PLEVBSVQsU0FBU0UsRUFBUWhoQixHQUNJLGlCQUFSQSxJQUFrQkEsRUFBTSxJQU9uQyxJQUpBLElBQUk2VCxHQUZKN1QsRUFBTUEsRUFBSWloQixRQUFRLE1BQU8sS0FFVkMsTUFBTSxLQUVqQjVTLEVBQVF1RixFQUFLc04sWUFBWSxJQUV0QjdTLEdBQVMsR0FDZHVGLEVBQUt2RixFQUFRLElBQU0sSUFDbkJ1RixFQUFLMEUsT0FBT2pLLEVBQU8sR0FDbkJBLEVBQVF1RixFQUFLc04sWUFBWSxJQUczQixPQUFPdE4sRUF1R1QsSUF2RkEsSUFBSXVOLEVBQVUsQ0FDWkMsVUFBVyxFQUNYQyxJQUFLLEVBQ0xDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxPQUFRLEdBQ1JDLElBQUssR0FDTEMsT0FBUSxHQUNSQyxNQUFPLEdBQ1BDLEtBQU0sR0FDTkMsR0FBSSxHQUNKQyxNQUFPLEdBQ1BDLEtBQU0sR0FDTkMsSUFBSyxHQUNMcEosT0FBUSxHQUNScUosSUFBSyxHQUNMQyxPQUFRLEdBQ1JDLEtBQU0sR0FDTkMsSUFBSyxHQUNMQyxPQUFRLEdBQ1JDLFNBQVUsR0FDVkMsU0FBVSxHQUNWQyxNQUFPLEdBQ1BDLE1BQU8sR0FDUEMsTUFBTyxHQUNQQyxNQUFPLEdBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLE1BQU8sSUFDUEMsTUFBTyxJQUNQQyxNQUFPLElBQ1BDLGFBQWMsSUFDZEMsUUFBUyxJQUNUQyxVQUFXLElBQ1hDLGFBQWMsSUFDZEMsWUFBYSxJQUNiQyxXQUFZLElBQ1osSUFBSyxHQUNMLElBQUssSUFDTCxJQUFLLElBQ0wsSUFBSyxJQUNMLElBQUssSUFDTCxJQUFLbkQsRUFBTyxJQUFNLElBQ2xCLElBQUtBLEVBQU8sR0FBSyxJQUNqQixJQUFLQSxFQUFPLEdBQUssSUFDakJvRCxJQUFNLElBQ04sSUFBSyxJQUNMLElBQUssSUFDTCxLQUFNLEtBR0pDLEVBQVksQ0FFZCxJQUFLLEdBQ0xDLE1BQU8sR0FFUCxJQUFLLEdBQ0w1aEIsSUFBSyxHQUNMNmhCLE9BQVEsR0FFUixJQUFLLEdBQ0xDLEtBQU0sR0FDTkMsUUFBUyxHQUVULElBQUssR0FDTEMsSUFBSyxHQUNMQyxRQUFTLElBRVBDLEVBQWMsQ0FDaEJDLEdBQUksV0FDSkMsR0FBSSxTQUNKQyxHQUFJLFVBQ0pDLEdBQUksVUFDSkMsU0FBVSxHQUNWQyxRQUFTLEdBQ1RDLE9BQVEsR0FDUkMsUUFBUyxJQUVQQyxFQUFRLENBQ1ZSLElBQUksRUFDSkMsSUFBSSxFQUNKQyxJQUFJLEVBQ0pDLElBQUksR0FFRk0sRUFBWSxHQUVQM2pCLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxJQUN0Qm9nQixFQUFRLElBQUlyRyxPQUFPL1osSUFBTSxJQUFNQSxFQUdqQyxJQUFJNGpCLEVBQVksR0FFWkMsR0FBa0IsRUFFbEJDLEVBQVMsTUFFVEMsRUFBc0IsR0FHdEJDLEVBQU8sU0FBY0MsR0FDdkIsT0FBTzdELEVBQVE2RCxFQUFFMUUsZ0JBQWtCbUQsRUFBVXVCLEVBQUUxRSxnQkFBa0IwRSxFQUFFQyxjQUFjQyxXQUFXLElBSTlGLFNBQVNDLEVBQVNDLEdBQ2hCUCxFQUFTTyxHQUFTLE1BSXBCLFNBQVNDLElBQ1AsT0FBT1IsR0FBVSxNQXVIbkIsSUFBSVMsRUFBYSxTQUFvQkMsR0FDbkMsSUFBSXhsQixFQUFNd2xCLEVBQUt4bEIsSUFDWHFsQixFQUFRRyxFQUFLSCxNQUNiNUUsRUFBUytFLEVBQUsvRSxPQUNkZ0YsRUFBZ0JELEVBQUtFLFNBQ3JCQSxPQUE2QixJQUFsQkQsRUFBMkIsSUFBTUEsRUFDN0J6RSxFQUFRaGhCLEdBQ2QybEIsU0FBUSxTQUFVQyxHQUM3QixJQUFJQyxFQUFhRCxFQUFVMUUsTUFBTXdFLEdBQzdCSSxFQUFNRCxFQUFXNWtCLE9BQ2pCOGtCLEVBQVVGLEVBQVdDLEVBQU0sR0FDM0JFLEVBQXNCLE1BQVpELEVBQWtCLElBQU1mLEVBQUtlLEdBQzNDLEdBQUtwQixFQUFVcUIsR0FBZixDQUVLWCxJQUFPQSxFQUFRQyxLQUNwQixJQUFJeEUsRUFBT2dGLEVBQU0sRUFBSWxGLEVBQVE4QyxFQUFXbUMsR0FBYyxHQUN0RGxCLEVBQVVxQixHQUFXckIsRUFBVXFCLEdBQVNDLFFBQU8sU0FBVUMsR0FHdkQsVUFEdUJ6RixHQUFTeUYsRUFBT3pGLFNBQVdBLElBQ3JCeUYsRUFBT2IsUUFBVUEsR0FyUXBELFNBQXNCYyxFQUFJQyxHQUt4QixJQUpBLElBQUlDLEVBQU9GLEVBQUdsbEIsUUFBVW1sQixFQUFHbmxCLE9BQVNrbEIsRUFBS0MsRUFDckNFLEVBQU9ILEVBQUdsbEIsUUFBVW1sQixFQUFHbmxCLE9BQVNtbEIsRUFBS0QsRUFDckNJLEdBQVUsRUFFTDluQixFQUFJLEVBQUdBLEVBQUk0bkIsRUFBS3BsQixPQUFReEMsS0FDQSxJQUEzQjZuQixFQUFLOU4sUUFBUTZOLEVBQUs1bkIsTUFBWThuQixHQUFVLEdBRzlDLE9BQU9BLEVBNFBvREMsQ0FBYU4sRUFBT3BGLEtBQU1BLFlBTXZGLFNBQVMyRixFQUFhMVgsRUFBTzJYLEVBQVNyQixFQUFPc0IsR0FLM0MsSUFBSUMsRUFKSixHQUFJRixFQUFRQyxVQUFZQSxJQU1wQkQsRUFBUXJCLFFBQVVBLEdBQTJCLFFBQWxCcUIsRUFBUXJCLE9BQWlCLENBSXRELElBQUssSUFBSWhWLEtBRlR1VyxFQUFpQkYsRUFBUTVGLEtBQUs3ZixPQUFTLEVBRXpCeWpCLEVBQ1J2bEIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLOGxCLEVBQU9yVSxNQUN6Q3FVLEVBQU1yVSxJQUFNcVcsRUFBUTVGLEtBQUt0SSxTQUFTbkksSUFBTSxHQUFLcVUsRUFBTXJVLEtBQW9DLElBQTlCcVcsRUFBUTVGLEtBQUt0SSxTQUFTbkksTUFDbEZ1VyxHQUFpQixJQU1LLElBQXhCRixFQUFRNUYsS0FBSzdmLFFBQWlCeWpCLEVBQU0sS0FBUUEsRUFBTSxLQUFRQSxFQUFNLEtBQVFBLEVBQU0sT0FBT2tDLEdBQXVDLE1BQXJCRixFQUFRRyxXQUMxRSxJQUFuQ0gsRUFBUWpHLE9BQU8xUixFQUFPMlgsS0FDcEIzWCxFQUFNK1gsZUFBZ0IvWCxFQUFNK1gsaUJBQXNCL1gsRUFBTWdZLGFBQWMsRUFDdEVoWSxFQUFNYixpQkFBaUJhLEVBQU1iLGtCQUM3QmEsRUFBTWlZLGVBQWNqWSxFQUFNaVksY0FBZSxLQU9yRCxTQUFTQyxFQUFTbFksRUFBTzRYLEdBQ3ZCLElBQUlPLEVBQVd2QyxFQUFVLEtBQ3JCM2tCLEVBQU0rTyxFQUFNaVgsU0FBV2pYLEVBQU1vWSxPQUFTcFksRUFBTXFZLFNBRWhELEdBQUtDLEVBQVFwQixPQUFPcm5CLEtBQUsrUixLQUFNNUIsR0FBL0IsQ0FzQ0EsR0FuQ1ksS0FBUi9PLEdBQXNCLE1BQVJBLElBQWFBLEVBQU0sS0FRTCxJQUE1QjRrQixFQUFVcE0sUUFBUXhZLElBQXVCLE1BQVJBLEdBQWE0a0IsRUFBVTVULEtBQUtoUixHQU1qRSxDQUFDLFVBQVcsU0FBVSxXQUFZLFdBQVcybEIsU0FBUSxTQUFVMkIsR0FDN0QsSUFBSUMsRUFBU3RELEVBQVlxRCxHQUVyQnZZLEVBQU11WSxLQUEyQyxJQUEvQjFDLEVBQVVwTSxRQUFRK08sR0FDdEMzQyxFQUFVNVQsS0FBS3VXLElBQ0x4WSxFQUFNdVksSUFBWTFDLEVBQVVwTSxRQUFRK08sSUFBVyxFQUN6RDNDLEVBQVVyTSxPQUFPcU0sRUFBVXBNLFFBQVErTyxHQUFTLEdBQ3ZCLFlBQVpELEdBQXlCdlksRUFBTXVZLElBQWlDLElBQXJCMUMsRUFBVTNqQixTQUt4RDhOLEVBQU13VixTQUFXeFYsRUFBTXVWLFVBQVl2VixFQUFNeVYsU0FDN0NJLEVBQVlBLEVBQVU3RCxNQUFNNkQsRUFBVXBNLFFBQVErTyxTQVFoRHZuQixLQUFPMGtCLEVBQU8sQ0FHaEIsSUFBSyxJQUFJMWpCLEtBRlQwakIsRUFBTTFrQixJQUFPLEVBRUMwakIsRUFDUkEsRUFBVTFpQixLQUFPaEIsSUFBS3FuQixFQUFRcm1CLElBQUssR0FHekMsSUFBS2ttQixFQUFVLE9BSWpCLElBQUssSUFBSXppQixLQUFLaWdCLEVBQ1J2bEIsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLOGxCLEVBQU9qZ0IsS0FDOUNpZ0IsRUFBTWpnQixHQUFLc0ssRUFBTWtWLEVBQVl4ZixLQVc3QnNLLEVBQU15WSxvQkFBc0J6WSxFQUFNeVYsUUFBV3pWLEVBQU13VixVQUFZeFYsRUFBTXlZLGlCQUFpQixlQUN6RCxJQUEzQjVDLEVBQVVwTSxRQUFRLEtBQ3BCb00sRUFBVTVULEtBQUssS0FHYyxJQUEzQjRULEVBQVVwTSxRQUFRLEtBQ3BCb00sRUFBVTVULEtBQUssSUFHakIwVCxFQUFNLEtBQU0sRUFDWkEsRUFBTSxLQUFNLEdBSWQsSUFBSVcsRUFBUUMsSUFFWixHQUFJNEIsRUFDRixJQUFLLElBQUl6b0IsRUFBSSxFQUFHQSxFQUFJeW9CLEVBQVNqbUIsT0FBUXhDLElBQy9CeW9CLEVBQVN6b0IsR0FBRzRtQixRQUFVQSxJQUF5QixZQUFmdFcsRUFBTXRMLE1BQXNCeWpCLEVBQVN6b0IsR0FBR2dwQixTQUEwQixVQUFmMVksRUFBTXRMLE1BQW9CeWpCLEVBQVN6b0IsR0FBR2lwQixRQUMzSGpCLEVBQWExWCxFQUFPbVksRUFBU3pvQixHQUFJNG1CLEVBQU9zQixHQU05QyxHQUFNM21CLEtBQU8ya0IsRUFFYixJQUFLLElBQUlnRCxFQUFLLEVBQUdBLEVBQUtoRCxFQUFVM2tCLEdBQUtpQixPQUFRMG1CLElBQzNDLElBQW1CLFlBQWY1WSxFQUFNdEwsTUFBc0JraEIsRUFBVTNrQixHQUFLMm5CLEdBQUlGLFNBQTBCLFVBQWYxWSxFQUFNdEwsTUFBb0JraEIsRUFBVTNrQixHQUFLMm5CLEdBQUlELFFBQ3JHL0MsRUFBVTNrQixHQUFLMm5CLEdBQUkzbkIsSUFBSyxDQU0xQixJQUxBLElBQUlrbUIsRUFBU3ZCLEVBQVUza0IsR0FBSzJuQixHQUN4QmpDLEVBQVdRLEVBQU9SLFNBQ2xCa0MsRUFBYzFCLEVBQU9sbUIsSUFBSWtoQixNQUFNd0UsR0FDL0JtQyxFQUFtQixHQUVkemYsRUFBSSxFQUFHQSxFQUFJd2YsRUFBWTNtQixPQUFRbUgsSUFDdEN5ZixFQUFpQjdXLEtBQUtnVSxFQUFLNEMsRUFBWXhmLEtBR3JDeWYsRUFBaUIvVCxPQUFPZ1UsS0FBSyxNQUFRbEQsRUFBVTlRLE9BQU9nVSxLQUFLLEtBRTdEckIsRUFBYTFYLEVBQU9tWCxFQUFRYixFQUFPc0IsS0FZN0MsU0FBU1UsRUFBUXJuQixFQUFLNGpCLEVBQVFuRCxHQUM1Qm1FLEVBQVksR0FDWixJQUFJL1EsRUFBT21OLEVBQVFoaEIsR0FFZjhnQixFQUFPLEdBQ1B1RSxFQUFRLE1BRVJzQixFQUFVOWQsU0FFVnBLLEVBQUksRUFDSmlwQixHQUFRLEVBQ1JELEdBQVUsRUFDVi9CLEVBQVcsSUFDWDdXLEdBQVUsRUFzQmQsU0FwQmUxTSxJQUFYc2UsR0FBMEMsbUJBQVhtRCxJQUNqQ25ELEVBQVNtRCxHQUdvQyxvQkFBM0N6a0IsT0FBT2tCLFVBQVVvVCxTQUFTN1UsS0FBS2dsQixLQUM3QkEsRUFBT3lCLFFBQU9BLEVBQVF6QixFQUFPeUIsT0FFN0J6QixFQUFPK0MsVUFBU0EsRUFBVS9DLEVBQU8rQyxTQUVqQy9DLEVBQU84RCxRQUFPQSxFQUFROUQsRUFBTzhELFlBRVZ2bEIsSUFBbkJ5aEIsRUFBTzZELFVBQXVCQSxFQUFVN0QsRUFBTzZELGNBRTVCdGxCLElBQW5CeWhCLEVBQU8vVSxVQUF1QkEsRUFBVStVLEVBQU8vVSxTQUVwQixpQkFBcEIrVSxFQUFPOEIsV0FBdUJBLEVBQVc5QixFQUFPOEIsV0FHdkMsaUJBQVg5QixJQUFxQnlCLEVBQVF6QixHQUVqQ25sQixFQUFJb1YsRUFBSzVTLE9BQVF4QyxJQUd0QnFpQixFQUFPLElBRlA5Z0IsRUFBTTZULEVBQUtwVixHQUFHeWlCLE1BQU13RSxJQUlaemtCLE9BQVMsSUFBRzZmLEVBQU9GLEVBQVE4QyxFQUFXMWpCLEtBRzlDQSxFQUFjLE9BRGRBLEVBQU1BLEVBQUlBLEVBQUlpQixPQUFTLElBQ0gsSUFBTStqQixFQUFLaGxCLE1BR2xCMmtCLElBQVlBLEVBQVUza0IsR0FBTyxJQUUxQzJrQixFQUFVM2tCLEdBQUtnUixLQUFLLENBQ2xCMFcsTUFBT0EsRUFDUEQsUUFBU0EsRUFDVHBDLE1BQU9BLEVBQ1B2RSxLQUFNQSxFQUNOK0YsU0FBVWhULEVBQUtwVixHQUNmZ2lCLE9BQVFBLEVBQ1J6Z0IsSUFBSzZULEVBQUtwVixHQUNWaW5CLFNBQVVBLEVBQ1ZpQixRQUFTQSxTQUtVLElBQVpBLElBbEViLFNBQXVCQSxHQUNyQixPQUFPNUIsRUFBb0J2TSxRQUFRbU8sSUFBWSxFQWlFUm9CLENBQWNwQixJQUFZL2QsU0FDL0RtYyxFQUFvQi9ULEtBQUsyVixHQUN6Qm5HLEVBQVNtRyxFQUFTLFdBQVcsU0FBVWxpQixHQUNyQ3dpQixFQUFTeGlCLEVBQUdraUIsS0FDWDlYLEdBRUVnVyxJQUNIQSxHQUFrQixFQUNsQnJFLEVBQVM1WCxPQUFRLFNBQVMsV0FDeEJnYyxFQUFZLEtBQ1gvVixJQUdMMlIsRUFBU21HLEVBQVMsU0FBUyxTQUFVbGlCLEdBQ25Dd2lCLEVBQVN4aUIsRUFBR2tpQixHQTdUbEIsU0FBdUI1WCxHQUNyQixJQUFJL08sRUFBTStPLEVBQU1pWCxTQUFXalgsRUFBTW9ZLE9BQVNwWSxFQUFNcVksU0FFNUMzb0IsRUFBSW1tQixFQUFVcE0sUUFBUXhZLEdBZTFCLEdBWkl2QixHQUFLLEdBQ1BtbUIsRUFBVXJNLE9BQU85WixFQUFHLEdBSWxCc1EsRUFBTS9PLEtBQW1DLFNBQTVCK08sRUFBTS9PLElBQUl1Z0IsZUFDekJxRSxFQUFVck0sT0FBTyxFQUFHcU0sRUFBVTNqQixRQUlwQixLQUFSakIsR0FBc0IsTUFBUkEsSUFBYUEsRUFBTSxJQUVqQ0EsS0FBTzBrQixFQUdULElBQUssSUFBSTFqQixLQUZUMGpCLEVBQU0xa0IsSUFBTyxFQUVDMGpCLEVBQ1JBLEVBQVUxaUIsS0FBT2hCLElBQUtxbkIsRUFBUXJtQixJQUFLLEdBd1N2Q2duQixDQUFjdmpCLEtBQ2JvSyxJQWlCUCxJQUFJb1osRUFBTyxDQUNUN0MsU0FBVUEsRUFDVkUsU0FBVUEsRUFDVjRDLFlBeFdGLFNBQXFCN0MsRUFBTzhDLEdBQzFCLElBQUlDLEVBQ0EzcEIsRUFJSixJQUFLLElBQUl1QixLQUZKcWxCLElBQU9BLEVBQVFDLEtBRUpYLEVBQ2QsR0FBSXhsQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUsrbEIsRUFBVzNrQixHQUdsRCxJQUZBb29CLEVBQVd6RCxFQUFVM2tCLEdBRWhCdkIsRUFBSSxFQUFHQSxFQUFJMnBCLEVBQVNubkIsUUFDbkJtbkIsRUFBUzNwQixHQUFHNG1CLFFBQVVBLEVBQU8rQyxFQUFTN1AsT0FBTzlaLEVBQUcsR0FBUUEsSUFNOUQ2bUIsTUFBZUQsR0FBT0QsRUFBUytDLEdBQVksUUF3Vi9DRSxtQkFyWUYsV0FDRSxPQUFPekQsRUFBVTdELE1BQU0sSUFxWXZCdUgsVUFuWEYsU0FBbUJ0QyxHQUtqQixNQUp1QixpQkFBWkEsSUFDVEEsRUFBVWhCLEVBQUtnQixLQUdzQixJQUFoQ3BCLEVBQVVwTSxRQUFRd04sSUErV3pCQyxPQWpZRixTQUFnQmxYLEdBQ2QsSUFBSXJLLEVBQVNxSyxFQUFNckssUUFBVXFLLEVBQU13WixXQUMvQkMsRUFBVTlqQixFQUFPOGpCLFFBQ2pCQyxHQUFPLEVBTVgsT0FKSS9qQixFQUFPZ2tCLG9CQUFrQyxVQUFaRixHQUFtQyxhQUFaQSxHQUFzQyxXQUFaQSxHQUEwQjlqQixFQUFPaWtCLFlBQ2pIRixHQUFPLEdBR0ZBLEdBeVhQRyxRQXBCRixTQUFpQi9CLEdBQ2YsSUFBSXhCLEVBQVF3RCxVQUFVNW5CLE9BQVMsUUFBc0JrQixJQUFqQjBtQixVQUFVLEdBQW1CQSxVQUFVLEdBQUssTUFDaEYxcEIsT0FBTzBVLEtBQUs4USxHQUFXZ0IsU0FBUSxTQUFVM2xCLEdBQ3ZDLElBQUl1UixFQUFPb1QsRUFBVTNrQixHQUFLOG9CLE1BQUssU0FBVS9nQixHQUN2QyxPQUFPQSxFQUFLc2QsUUFBVUEsR0FBU3RkLEVBQUs4ZSxXQUFhQSxLQUcvQ3RWLEdBQVFBLEVBQUtrUCxRQUNmbFAsRUFBS2tQLGFBYVRzSSxPQTdURixTQUFnQkMsR0FFZCxHQUFLQSxHQUlFLEdBQUlyb0IsTUFBTUQsUUFBUXNvQixHQUV2QkEsRUFBU3JELFNBQVEsU0FBVTdTLEdBQ3JCQSxFQUFLOVMsS0FBS3VsQixFQUFXelMsV0FFdEIsR0FBd0IsaUJBQWJrVyxFQUVaQSxFQUFTaHBCLEtBQUt1bEIsRUFBV3lELFFBQ3hCLEdBQXdCLGlCQUFiQSxFQUF1QixDQUN2QyxJQUFLLElBQUlDLEVBQU9KLFVBQVU1bkIsT0FBUXdVLEVBQU8sSUFBSTlVLE1BQU1zb0IsRUFBTyxFQUFJQSxFQUFPLEVBQUksR0FBSWxULEVBQU8sRUFBR0EsRUFBT2tULEVBQU1sVCxJQUNsR04sRUFBS00sRUFBTyxHQUFLOFMsVUFBVTlTLEdBSzdCLElBQUlzUCxFQUFRNVAsRUFBSyxHQUNiZ0wsRUFBU2hMLEVBQUssR0FFRyxtQkFBVjRQLElBQ1Q1RSxFQUFTNEUsRUFDVEEsRUFBUSxJQUdWRSxFQUFXLENBQ1R2bEIsSUFBS2dwQixFQUNMM0QsTUFBT0EsRUFDUDVFLE9BQVFBLEVBQ1JpRixTQUFVLFlBOUJadm1CLE9BQU8wVSxLQUFLOFEsR0FBV2dCLFNBQVEsU0FBVTNsQixHQUN2QyxjQUFjMmtCLEVBQVUza0IsT0EwVDVCa3BCLE9BQVE5SCxFQUNSUCxTQUFVNkMsRUFDVk8sWUFBYUEsR0FHZixJQUFLLElBQUk3YixLQUFLNmYsRUFDUjlvQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtxcEIsRUFBTTdmLEtBQzdDaWYsRUFBUWpmLEdBQUs2ZixFQUFLN2YsSUFJdEIsR0FBc0Isb0JBQVhRLE9BQXdCLENBQ2pDLElBQUl1Z0IsRUFBV3ZnQixPQUFPeWUsUUFFdEJBLEVBQVErQixXQUFhLFNBQVVDLEdBSzdCLE9BSklBLEdBQVF6Z0IsT0FBT3llLFVBQVlBLElBQzdCemUsT0FBT3llLFFBQVU4QixHQUdaOUIsR0FHVHplLE9BQU95ZSxRQUFVQSxFLFdDM2tCbkIsU0FBU2lDLElBQ1AsT0FBT2pDLEVBQVFpQixVQUdqQmpCLEVBQVFwQixPQUFTLFdBQ2YsT0FBTyxHQUdULElBQUlzRCxFQUFZLFNBQW1CL0QsRUFBTWdFLEdBQ3ZDLElBQUk5a0IsRUFBUzhnQixFQUFLOWdCLE9BQ2Qra0IsRUFBZ0Iva0IsR0FBVUEsRUFBTzhqQixRQUNyQyxPQUFPa0IsUUFBUUQsR0FBaUJELEdBQWdCQSxFQUFhN2xCLFNBQVM4bEIsS0FPeEUsU0FBUzdpQixFQUFXaU4sRUFBTS9FLEVBQVVGLEVBQVMrYSxHQUN2Qy9hLGFBQW1Cak8sUUFDckJncEIsRUFBTy9hLEVBQ1BBLE9BQVV6TSxHQUdaLElBQUl5bkIsRUFBUWhiLEdBQVcsR0FDbkI0YSxFQUFlSSxFQUFNSixhQUNyQnZELEVBQVMyRCxFQUFNM0QsT0FDZnlCLEVBQVFrQyxFQUFNbEMsTUFDZEQsRUFBVW1DLEVBQU1uQyxRQUNoQm9DLEVBQXdCRCxFQUFNRSxxQkFDOUJBLE9BQWlELElBQTFCRCxHQUEwQ0EsRUFDakVFLEVBQWdCSCxFQUFNSSxRQUN0QkEsT0FBNEIsSUFBbEJELEdBQWtDQSxFQUM1Q0UsRUFBd0JMLEVBQU1NLHdCQUM5QkEsT0FBb0QsSUFBMUJELEdBQTJDQSxFQUVyRTVuQixFQUFNLGlCQUFPLE1BRWI4bkIsRUFBbUIsdUJBQVksU0FBVUMsRUFBZUMsR0FDMUQsSUFBSUMsRUFFSixPQUFJckUsSUFBV0EsRUFBT21FLElBQ1pOLEtBM0JMUCxFQStCK0JhLEVBL0JqQixDQUFDLFFBQVMsV0FBWSxhQStCY2IsRUFBVWEsRUFBZVosSUFBbUUsT0FBakRjLEVBQXdCRixFQUFjMWxCLFNBQW1CNGxCLEVBQXNCNUIsb0JBQXNCd0IsS0FJbkwsT0FBaEI3bkIsRUFBSXNILFNBQW9CZCxTQUFTMGhCLGdCQUFrQmxvQixFQUFJc0gsV0FDekRtRixFQUFTc2IsRUFBZUMsSUFDakIsS0FJUlYsRUFBTyxDQUFDdG5CLEVBQUttbkIsRUFBY3ZELEdBQVFsTCxPQUFPNE8sR0FBUSxDQUFDdG5CLEVBQUttbkIsRUFBY3ZELElBaUJ6RSxPQWhCQSxxQkFBVSxXQUNSLEdBQUsrRCxFQVdMLE9BTEl0QyxJQUFxQixJQUFaRCxJQUNYN1ksRUFBUTZZLFNBQVUsR0FHcEJKLEVBQVF4VCxFQUFNakYsR0FBVyxHQUFJdWIsR0FDdEIsV0FDTCxPQUFPOUMsRUFBUTBCLE9BQU9sVixFQUFNc1csSUFYNUI5QyxFQUFRMEIsT0FBT2xWLEVBQU1zVyxLQWF0QixDQUFDQSxFQUFrQnRXLEVBQU1tVyxJQUNyQjNuQixFQUdULElBQUltb0IsRUFBa0JuRCxFQUFRaUIiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlZLWW9OdFdUWnVpMkFPMUlseUpNVHc9PVwifTsiLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ4eW51TXU4WFpTc29uRHVrc2w2QVFnPT1cIixcImxlZnRcIjpcIlBrcDBIaE5IdHRvV0liMmR3cEdudHc9PVwiLFwic21hbGxcIjpcIndET2VlSkdDWm0wazJacE56RmJlSGc9PVwiLFwibGFyZ2VcIjpcIl81UWpCV3RsN1lYeTRlbTRYM0dQYlJBPT1cIixcInhsYXJnZVwiOlwia04wTGdhNGZCT2djaWdEcXRPRFJkZz09XCIsXCJpbnZlcnRlZFwiOlwiKzVuc1RuTGxOT1g4S0ZRaVVoVDFrUT09XCIsXCJyb3VuZGVkXCI6XCJCalAtSk5XSmpvQmZOTU16dG55V09RPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJsR0p3TmNvbDhDQWtucXhZKzhEZnFnPT1cIixcImxlZnRPZmZzZXRcIjpcIkVWK2c2aFVBMXF2OExROVJxZ3JRUlE9PVwiLFwibm9TaGFkb3dcIjpcIlozdVBMcnJ5cUlOZlJqWnBwd1U2TlE9PVwiLFwibm9Cb3JkZXJcIjpcImVFZ2hHNkdYQjlJenlEM2pyTlpmQUE9PVwiLFwidHJhbnNwYXJlbnRcIjpcInNzN0RoVmdGNUpHc3BDQVNkWlVZQmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiaThRUFNyNGNIWWhKN0FpdWUrY3gwZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiV1N4aW1VTTlreFlHYzVWUmMwaVpsQT09XCIsXCJub1BhZGRpbmdcIjpcIlNnWGNoano0ZEpyK3RjOHlrTG5FMUE9PVwiLFwiY29udGVudFwiOlwieG44eWZqTjZtZXhSWElneU5obWtpdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwiLFwiaW52ZXJ0ZWRcIjpcIlg0bzRPS3NTMVQ0bWlJczBDcTV4LWc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpJcjl3LS1mU2l2cVdWR29TcDE0dEE9PVwiLFwibGVmdFwiOlwiclJ5dTlBVkd3WCsteGpUT01UU0Uxdz09XCIsXCJzbWFsbFwiOlwiXzBEQmhHSnZjYmpFTWxTcUVvZkYtcnc9PVwiLFwibWVkaXVtXCI6XCJhNit6Y1VZNlhLeTk0ekFxVVlhRTZ3PT1cIixcImxhcmdlXCI6XCJXK3Y0dkZlYlFreHcxY2RpS1ktS3ZnPT1cIixcInhsYXJnZVwiOlwiZFk5MURRUllVYVdUNEV6T0pKK0dCZz09XCIsXCJpbnZlcnRlZFwiOlwieXBsQ3B5bEw0SWRlcytjT3JxU2ltUT09XCIsXCJyb3VuZGVkXCI6XCJNUkVZMDkrZDY5dlY4NGhabkp1TFl3PT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJIc2FvN21GVzNsWVRyTmhmV3ZmeFd3PT1cIixcImxlZnRPZmZzZXRcIjpcIk1YbEwzTzhLVVllVkFZY1Nzbk5zOXc9PVwiLFwibm9TaGFkb3dcIjpcIkhxejRDcVFjTzRzME1UYXdyRHIwb0E9PVwiLFwidHJhbnNwYXJlbnRcIjpcImgxaE53YzJVbE0wQzVGLXhkZ2E1ZHc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiVG15cTQrdUhVK0pKZVlOZEJIOEwyUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSnp6R25UdDRhTTMrOXJWbE5RV2kwQT09XCIsXCJub1BhZGRpbmdcIjpcIlV2SThVbmpjOVgwek4ybDVXK3RtclE9PVwiLFwibm9Cb3JkZXJcIjpcIlFwNXVCblFnSkZvWkhnWVNoekFQY3c9PVwiLFwiZGlzYWJsZWRcIjpcIlpYbGprWXBQV2pESkxDNEJFR01wcnc9PVwiLFwiY29udGVudFwiOlwiXzBuMk1uT2ZKUG0yd3hzNE0ybmJHSEE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfSA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImJSN1BPOHlSRnRVbE4xdnNQN2VjUlE9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNoZWNrYm94XCI6XCJDQlFaNFBwMWNsYis1UjhJbENPNGdRPT1cIixcInNtYWxsXCI6XCJfNWpianV0N0dndDdneGVuanlmOUxiUT09XCIsXCJtZWRpdW1cIjpcImlQQU93MlpzTkpBMG5XRFhxV0MzN2c9PVwiLFwibGFyZ2VcIjpcIkxFeWtYczltRUVTZHdvNmlab01kVXc9PVwiLFwieGxhcmdlXCI6XCJ1cXBBQ0VKMW9iQTRiUmxhZUFUMjdnPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcInVUZjdtWWZYZU5UN0duMHpublI4RFE9PVwiLFwic21hbGxcIjpcImFBYmV6ak9tdzJOeVQ5UlU3UHV5T0E9PVwiLFwibGFyZ2VcIjpcIlFjNlNDdnFibm5oSjN6dGd6UFpPRkE9PVwiLFwieGxhcmdlXCI6XCJfNm9CQlpEa1JremY3dEY0Ymh5RHRBQT09XCIsXCJzZWxlY3RlZFwiOlwibmljWmZnTWsrdVFGUHlwSklrUXVidz09XCIsXCJzck9ubHlcIjpcIkdIcEhFQjFRWER5amVSOVZuRWQxVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJES3RQNTViT2ZVVEIxa0RhLWlVSHFRPT1cIixcImhvcml6b250YWxcIjpcIl8zNExqOC1iLTEzQzhMMDlSc01pbmVnPT1cIixcInZlcnRpY2FsXCI6XCJfMXl1Z0dRczRFazB0M1Q4dGdvS3hWUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwicFU2SUIycjBMcENGUFhnVHZPcjJnQT09XCIsXCJub092ZXJsYXlcIjpcIl81U1VSOUZoLWZIVHk0WHI2bVFDK3BBPT1cIixcIm1vZGFsXCI6XCJMQ0FUODNtdVhzQUdyUFVIUTF5K2hRPT1cIixcInRyYW5zcGFyZW50XCI6XCJXSFU4UWJweitBdlQtWXB1UWVVSy1RPT1cIixcIm5vU2hhZG93XCI6XCJHaTFWVG1nM0dQTnhuWDkxLW0wLTVnPT1cIixcIm1vZGFsQnV0dG9uXCI6XCJsZm5mSHUreHllRWpjUWJBUXdqSVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImp2S1NpLWZLdWZjcEs5ZUJXV0ZDTGc9PVwiLFwibW9kYWxIZWFkZXJcIjpcImN4MVJvUWRnQWJlbnZWWFU4QjdmU3c9PVwiLFwibW9kYWxDb250ZW50XCI6XCJaRDR2M0hFLUFZWlhWMElUV0RGN0dnPT1cIixcIm5vUGFkZGluZ1wiOlwiXzF6RkY4eHF5bzc3VXhHMnY1NDlCZUE9PVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfNGhRaENlNVU3WUJ5aG5oTystR3Fpdz09XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIkpvSUxiVzVGblppeGFKN0VUdm84K3c9PVwifTsiLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJZQTJJSFFENG9wcE9pb1pJQ0h3end3PT1cIixcInNtYWxsXCI6XCJxZHpzMkVNbUJkYjBNek5TMGlEaE1BPT1cIixcIm1lZGl1bVwiOlwiSTZlRUdJQks1OU9rZHB3VW91YWF1UT09XCIsXCJsYXJnZVwiOlwiXzJiaTZJRVloZE1iUGdQSmZ3b1BqdUE9PVwiLFwieGxhcmdlXCI6XCJja2tyNFpGT1ZHdUNONEVqUE1xZUdBPT1cIixcImludmVydGVkXCI6XCJlbTVyTDRuQUgxSXdmM01IZUllUG1nPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIncwQ3Bhc2pZeUxSLWkyUE5JbjlFc2c9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJxY3ZEU2ZGdCt3MGphMmZxUGMwUzV3PT1cIixcIm1lbnVDb250YWluZXJcIjpcIkx3cjFhM2JQLTk1YWV6em1hY29KZnc9PVwiLFwidG9wXCI6XCJiQkhicytGV2k2LXp3V01aSW1GK05BPT1cIixcInJpZ2h0XCI6XCJCOE00Mk53b1o4cFVWbTVSNEpKdjFnPT1cIixcImxlZnRcIjpcInBPRzd0WGZURms4cXFYdE5DMEUtT3c9PVwiLFwiYm90dG9tXCI6XCJ1Y3ZOMEVGTW5zOGJmVnZzaTlqOXlRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQnZRdHNVQWEtZlFQbVhidlZTVkNOUT09XCIsXCJzbWFsbFwiOlwiXzhaZjRMemNlaUlvZXI3UElWUjhCWUE9PVwiLFwibWVkaXVtXCI6XCJfN1BGMmRuSmdaeElFK3RTMzN4SzRLQT09XCIsXCJsYXJnZVwiOlwiRWJPWXZHS1hpQWFib2hpNE95MUNNdz09XCIsXCJ4bGFyZ2VcIjpcInVPZlo5TGlHem5hQkdJdXg0MHBGR2c9PVwiLFwicm91bmRlZFwiOlwidkFqMHhtalhKVGZEYldJQ1ZLQm8yZz09XCIsXCJ0b3BPZmZzZXRcIjpcIl84WVNzLWtoSUR6SWVmUlJoNXpIMytRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJxNGpJbDJYRk9idnNETS00UXh2dHV3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzgyS2JFY0VaemNSNVZxSGx4ODYyUFE9PVwiLFwibGVmdE9mZnNldFwiOlwieG5jMStPREZtQlBpaWY1Sm9xVG5kQT09XCIsXCJpbnZlcnRlZFwiOlwiYmhWVVRka1FsdGN0bXJaZTBUNzJrdz09XCIsXCJub1NoYWRvd1wiOlwibnNnaDJjNmNIdHp4YVJyTGt2NkZ6dz09XCIsXCJub0JvcmRlclwiOlwiVnp5NkM0ZGp0cGZMMnBWNW9ZY09Qdz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiRnZkUFMtKzF0bHNUWjFjaUVsc3Z4UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfOWdRU1ItK2dxbzVyRHZXUG1Rb0FlUT09XCIsXCJoYXNPdmVybGF5XCI6XCJpaTMrNksrRlc0WWplUUZtLUlOM3NBPT1cIixcIm92ZXJsYXlcIjpcIl8wMEV4TmMzS3crSE9mVENGYTM0R0l3PT1cIixcImltYWdlXCI6XCJyd0Q1ckhjWkZSTmE0ZEhvNmozSnlRPT1cIixcImNvdmVyXCI6XCJfNkFhTjFUNlNZNkVlaitGYVF0YTQyZz09XCIsXCJjb250YWluXCI6XCJFUURrUDBGNXp6Sml0Rjh1TzZIK21BPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkdCS1BrYzhyc3lqVVZ1Q3AxT2xCb1E9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl81U3p3U0orNlo0Ui1ZYTExZ3dMclNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgXSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgLz5cbiAgKTtcbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJoNlBZSkF6eXRWT2s5QmVLNVowK2tnPT1cIixcInNtYWxsXCI6XCJVWG4tQkNWZzgxeU1kOEZvVWZ4S1NBPT1cIixcIm1lZGl1bVwiOlwiXzRhaVA2Z3hOSGhyV2JhYzRrMWdyVXc9PVwiLFwibGFyZ2VcIjpcIk1sblBYWU9VeVE3aGdJN3N3MW8weEE9PVwiLFwieGxhcmdlXCI6XCJIR0J1S0phOVhqeEI4dVZoS29wMDNBPT1cIixcIm5vQm9yZGVyXCI6XCJzUG5TQ0dVTlpYcm9FbFNRUjE5M0dRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdCB9IGZyb20gXCIuL1RvYXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ2V2EyLTFtT0ZVK2lWMTRqcTdRUHNRPT1cIixcImVudHJhbmNlXCI6XCJmVHNXc0tyQUtsd1QrR09FNHdBeVNRPT1cIn07IiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0Q29udGFpbmVyXCI6XCJfMi1YdTJzWk12Tjl0Z0RzK2l5TGM5UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVmlkZW8ubW9kdWxlLmNzc1wiO1xuXG4vKipcbiAqIFRoZXJlIGlzIGEga25vd24gaXNzdWUgaW4gUmVhY3QgaW4gcmVnYXJkcyB0byB0aGUgJ211dGVkJyBwcm9wZXJ0eSB3aGljaCBjYXVzZXMgdGhlIHdhcm5pbmc6XG4gKiBcIldhcm5pbmc6IHVuc3RhYmxlX2ZsdXNoRGlzY3JldGVVcGRhdGVzOiBDYW5ub3QgZmx1c2ggdXBkYXRlcyB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLlwiXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMDM4OVxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NTQ0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vdGVzdGluZy1saWJyYXJ5L3JlYWN0LXRlc3RpbmctbGlicmFyeS9pc3N1ZXMvNDcwXG4gKi9cblxudHlwZSBMYXlvdXQgPSBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuXG5leHBvcnQgdHlwZSBWaWRlb1Byb3BzID0ge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICA+XG4gICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgPC92aWRlbz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlkZW87XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidWxXRS1FcHI4NUYwbVV0N08xZ1VUUT09XCIsXCJoYXNPdmVybGF5XCI6XCJ6Szd1MW5ramM4eDdZREFmWVFDVHB3PT1cIixcInZpZGVvXCI6XCJmUjRENTZMZmR1b0JXLWZpbWZiVDB3PT1cIixcImNvdmVyXCI6XCJWWFFzNFBVbldHeXc1Nmc2MFp0ZldnPT1cIixcImNvbnRhaW5cIjpcImd4ZmxVek80cnFDQkFHdXpzWUVJZXc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSS02M0ttNE5ZMVc0UWdNaGZnVTVNZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwidk5OaEpsZ0lUTStvbmY3emR6YXVmZz09XCIsXCJvdmVybGF5XCI6XCJ3eHVsN1VVWmxtYXJGODZTR3JkLXR3PT1cIn07IiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmNvbnN0IHBvcERpZ2l0ID0gKG51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKG51bWJlciAvIDEwKTtcbn07XG5cbmNvbnN0IGV2ZW50RGlnaXRLZXlzID0gW1wiMFwiLCBcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1wYWRQcm9wcyB7XG4gIG51bWJlcjogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiAobmV3TnVtYmVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOdW1wYWQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBOdW1wYWRQcm9wcz4oXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7ICAgIFxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJCYWNrc3BhY2VcIikge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKHBvcERpZ2l0KG51bWJlcikpO1xuICAgICAgfSBlbHNlIGlmIChldmVudERpZ2l0S2V5cy5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkaWdpdCA9IHBhcnNlSW50KGUua2V5LCAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIG9uQ2hhbmdlKGFwcGVuZERpZ2l0KG51bWJlciwgZGlnaXQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlRW1pdE51bWJlckhhbmRsZXIgPSAobmV3TnVtYmVyOiBudW1iZXIpID0+XG4gICAgICAoZTogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKG5ld051bWJlcik7XG4gICAgICB9O1xuXG4gICAgY29uc3QgTnVtcGFkS2V5cyA9IEFycmF5KDEwKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG51bXBhZFZhbHVlID0gKChpbmRleCArIDEpICUgMTApIGFzIERpZ2l0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bnVtcGFkVmFsdWV9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bXBhZH0gcmVmPXtyZWZ9IHRhYkluZGV4PXstMX0gb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufSBkYXRhLXRlc3RpZD1cIm51bXBhZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJudW1wYWRcIjpcIlBlTysycEJJTG1HaHVYZittUVBKQ2c9PVwiLFwibnVtYmVyc1wiOlwiXzMrWThEZE80dkJKSnRPT3FSQmh0cWc9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzY5JyBoZWlnaHQ9JzI3JyB2aWV3Qm94PScwIDAgNjkgMjcnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuMTMzMyAyNkwxMy43ODg2IDI2LjM2MjJDMTMuODgxNiAyNi40NTA3IDE0LjAwNSAyNi41IDE0LjEzMzMgMjYuNVYyNlpNMSAxMy41TDAuNjU1Mjg3IDEzLjEzNzhDMC41NTYxMjcgMTMuMjMyMiAwLjUgMTMuMzYzMSAwLjUgMTMuNUMwLjUgMTMuNjM2OSAwLjU1NjEyNyAxMy43Njc4IDAuNjU1Mjg3IDEzLjg2MjJMMSAxMy41Wk0xNC4xMzMzIDFWMC41QzE0LjAwNSAwLjUgMTMuODgxNiAwLjU0OTM0NSAxMy43ODg2IDAuNjM3ODIyTDE0LjEzMzMgMVpNNjcuNSAyVjI1SDY4LjVWMkg2Ny41Wk02My40NjY3IDI1LjVIMTQuMTMzM1YyNi41SDYzLjQ2NjdWMjUuNVpNMTQuNDc4IDI1LjYzNzhMMS4zNDQ3MSAxMy4xMzc4TDAuNjU1Mjg3IDEzLjg2MjJMMTMuNzg4NiAyNi4zNjIyTDE0LjQ3OCAyNS42Mzc4Wk0xLjM0NDcxIDEzLjg2MjJMMTQuNDc4IDEuMzYyMThMMTMuNzg4NiAwLjYzNzgyMkwwLjY1NTI4NyAxMy4xMzc4TDEuMzQ0NzEgMTMuODYyMlpNMTQuMTMzMyAxLjVINjMuNDY2N1YwLjVIMTQuMTMzM1YxLjVaTTY3IDI1LjVINjMuNDY2N1YyNi41SDY3VjI1LjVaTTY3IDAuNUg2My40NjY3VjEuNUg2N1YwLjVaTTY3LjUgMjVDNjcuNSAyNS4yNzYxIDY3LjI3NjEgMjUuNSA2NyAyNS41VjI2LjVDNjcuODI4NCAyNi41IDY4LjUgMjUuODI4NCA2OC41IDI1SDY3LjVaTTY4LjUgMkM2OC41IDEuMTcxNTcgNjcuODI4NCAwLjUgNjcgMC41VjEuNUM2Ny4yNzYxIDEuNSA2Ny41IDEuNzIzODYgNjcuNSAySDY4LjVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2NwYXRoIGQ9J00zMi42NDY0IDYuMzUzNTVMNDYuNjQ2NCAyMC4zNTM2TDQ3LjM1MzYgMTkuNjQ2NEwzMy4zNTM2IDUuNjQ2NDVMMzIuNjQ2NCA2LjM1MzU1Wk00Ni42NDY0IDUuNjQ2NDVMMzIuNjQ2NCAxOS42NDY0TDMzLjM1MzYgMjAuMzUzNkw0Ny4zNTM2IDYuMzUzNTVMNDYuNjQ2NCA1LjY0NjQ1WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUsIGNyZWF0ZUVsZW1lbnQsIHVzZVJlZiwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbmNvbnN0IFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgRU1QVFlfQ0FDSEUgPSB7fTtcbmNvbnN0IG5vb3AgPSAoKT0+e307XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFVOREVGSU5FRCA9IC8qI19fTk9JTkxJTkVfXyovIG5vb3AoKTtcbmNvbnN0IE9CSkVDVCA9IE9iamVjdDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHYpPT52ID09PSBVTkRFRklORUQ7XG5jb25zdCBpc0Z1bmN0aW9uID0gKHYpPT50eXBlb2YgdiA9PSAnZnVuY3Rpb24nO1xuY29uc3QgbWVyZ2VPYmplY3RzID0gKGEsIGIpPT4oe1xuICAgICAgICAuLi5hLFxuICAgICAgICAuLi5iXG4gICAgfSk7XG5jb25zdCBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgdGhlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxuY29uc3QgaXNXaW5kb3dEZWZpbmVkID0gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaXNEb2N1bWVudERlZmluZWQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9ICgpPT5pc1dpbmRvd0RlZmluZWQgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGNyZWF0ZUNhY2hlSGVscGVyID0gKGNhY2hlLCBrZXkpPT57XG4gICAgY29uc3Qgc3RhdGUgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgIC8vIEdldHRlclxuICAgICAgICAoKT0+Y2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEUsXG4gICAgICAgIC8vIFNldHRlclxuICAgICAgICAoaW5mbyk9PntcbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgIHN0YXRlWzVdKGtleSwgbWVyZ2VPYmplY3RzKHByZXYsIGluZm8pLCBwcmV2IHx8IEVNUFRZX0NBQ0hFKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gU3Vic2NyaWJlclxuICAgICAgICBzdGF0ZVs2XVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcblxudmFyIGNvbnN0YW50cyA9IHtcbiAgX19wcm90b19fOiBudWxsLFxuICBGT0NVU19FVkVOVDogRk9DVVNfRVZFTlQsXG4gIFJFQ09OTkVDVF9FVkVOVDogUkVDT05ORUNUX0VWRU5ULFxuICBNVVRBVEVfRVZFTlQ6IE1VVEFURV9FVkVOVFxufTtcblxuYXN5bmMgZnVuY3Rpb24gaW50ZXJuYWxNdXRhdGUoLi4uYXJncykge1xuICAgIGNvbnN0IFtjYWNoZSwgX2tleSwgX2RhdGEsIF9vcHRzXSA9IGFyZ3M7XG4gICAgLy8gV2hlbiBwYXNzaW5nIGFzIGEgYm9vbGVhbiwgaXQncyBleHBsaWNpdGx5IHVzZWQgdG8gZGlzYWJsZS9lbmFibGVcbiAgICAvLyByZXZhbGlkYXRpb24uXG4gICAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgICAgIHBvcHVsYXRlQ2FjaGU6IHRydWUsXG4gICAgICAgIHRocm93T25FcnJvcjogdHJ1ZVxuICAgIH0sIHR5cGVvZiBfb3B0cyA9PT0gJ2Jvb2xlYW4nID8ge1xuICAgICAgICByZXZhbGlkYXRlOiBfb3B0c1xuICAgIH0gOiBfb3B0cyB8fCB7fSk7XG4gICAgbGV0IHBvcHVsYXRlQ2FjaGUgPSBvcHRpb25zLnBvcHVsYXRlQ2FjaGU7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yT3B0aW9uID0gb3B0aW9ucy5yb2xsYmFja09uRXJyb3I7XG4gICAgbGV0IG9wdGltaXN0aWNEYXRhID0gb3B0aW9ucy5vcHRpbWlzdGljRGF0YTtcbiAgICBjb25zdCByZXZhbGlkYXRlID0gb3B0aW9ucy5yZXZhbGlkYXRlICE9PSBmYWxzZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3IgPSAoZXJyb3IpPT57XG4gICAgICAgIHJldHVybiB0eXBlb2Ygcm9sbGJhY2tPbkVycm9yT3B0aW9uID09PSAnZnVuY3Rpb24nID8gcm9sbGJhY2tPbkVycm9yT3B0aW9uKGVycm9yKSA6IHJvbGxiYWNrT25FcnJvck9wdGlvbiAhPT0gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd09uRXJyb3IgPSBvcHRpb25zLnRocm93T25FcnJvcjtcbiAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEga2V5IGZpbHRlciwgcmV0dXJuIHRoZSBtdXRhdGlvbiByZXN1bHRzIGZvciBhbGxcbiAgICAvLyBmaWx0ZXJlZCBrZXlzLlxuICAgIGlmIChpc0Z1bmN0aW9uKF9rZXkpKSB7XG4gICAgICAgIGNvbnN0IGtleUZpbHRlciA9IF9rZXk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXlzID0gW107XG4gICAgICAgIGNvbnN0IGl0ID0gY2FjaGUua2V5cygpO1xuICAgICAgICBmb3IobGV0IGtleUl0ID0gaXQubmV4dCgpOyAha2V5SXQuZG9uZTsga2V5SXQgPSBpdC5uZXh0KCkpe1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5SXQudmFsdWU7XG4gICAgICAgICAgICBpZiAoLy8gU2tpcCB0aGUgc3BlY2lhbCB1c2VTV1JJbmZpbml0ZSBrZXlzLlxuICAgICAgICAgICAgIWtleS5zdGFydHNXaXRoKCckaW5mJCcpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSBzdWJzLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNbaV0ocHJldiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5pdFByb3ZpZGVyID0gKCk9PntcbiAgICAgICAgICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgaWYgaXQncyBuZXcsIG9yIGlmIHRoZSBwcm92aWRlciBoYXMgYmVlbiBleHRlbmRlZC5cbiAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5zZXQocHJvdmlkZXIsIFtcbiAgICAgICAgICAgICAgICAgICAgRVZFTlRfUkVWQUxJREFUT1JTLFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICBtdXRhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNldHRlcixcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBsaXN0ZW5pbmcgdG8gdGhlIG5hdGl2ZSBldmVudHMgZm9yIGF1dG8gcmV2YWxpZGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgaW50ZW50aW9uYWxseSBwdXQgYSBkZWxheSAoc2V0VGltZW91dCkgaGVyZSB0byBtYWtlIHN1cmUgdGhleSBhcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyZWQgYWZ0ZXIgaW1tZWRpYXRlIEphdmFTY3JpcHQgZXhlY3V0aW9ucywgd2hpY2ggY2FuIGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWN0J3Mgc3RhdGUgdXBkYXRlcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhdm9pZHMgc29tZSB1bm5lY2Vzc2FyeSByZXZhbGlkYXRpb25zIHN1Y2ggYXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE2ODAuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VGb2N1cyA9IG9wdHMuaW5pdEZvY3VzKHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIEZPQ1VTX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlUmVjb25uZWN0ID0gb3B0cy5pbml0UmVjb25uZWN0KHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIFJFQ09OTkVDVF9FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgdW5tb3VudCA9ICgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlRm9jdXMgJiYgcmVsZWFzZUZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlUmVjb25uZWN0ICYmIHJlbGVhc2VSZWNvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdW4tbW91bnRpbmcsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjYWNoZSBwcm92aWRlciBmcm9tIHRoZSBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmFnZSB0b28gYmVjYXVzZSBpdCdzIGEgc2lkZS1lZmZlY3QuIE90aGVyd2lzZSwgd2hlbiByZS1tb3VudGluZyB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgcmUtcmVnaXN0ZXIgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuZGVsZXRlKHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGluaXRQcm92aWRlcigpO1xuICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3ZpZGVyLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaXQgYW5kIHNldHVwIERPTSBldmVudHNcbiAgICAgICAgLy8gbGlzdGVuZXJzIGZvciBgZm9jdXNgIGFuZCBgcmVjb25uZWN0YCBhY3Rpb25zLlxuICAgICAgICAvLyBXZSBtaWdodCB3YW50IHRvIGluamVjdCBhbiBleHRyYSBsYXllciBvbiB0b3Agb2YgYHByb3ZpZGVyYCBpbiB0aGUgZnV0dXJlLFxuICAgICAgICAvLyBzdWNoIGFzIGtleSBzZXJpYWxpemF0aW9uLCBhdXRvIEdDLCBldGMuXG4gICAgICAgIC8vIEZvciBub3csIGl0J3MganVzdCBhIGBNYXBgIGludGVyZmFjZSB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBtdXRhdGUsXG4gICAgICAgICAgICBpbml0UHJvdmlkZXIsXG4gICAgICAgICAgICB1bm1vdW50XG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBTV1JHbG9iYWxTdGF0ZS5nZXQocHJvdmlkZXIpWzRdXG4gICAgXTtcbn07XG5cbi8vIGVycm9yIHJldHJ5XG5jb25zdCBvbkVycm9yUmV0cnkgPSAoXywgX18sIGNvbmZpZywgcmV2YWxpZGF0ZSwgb3B0cyk9PntcbiAgICBjb25zdCBtYXhSZXRyeUNvdW50ID0gY29uZmlnLmVycm9yUmV0cnlDb3VudDtcbiAgICBjb25zdCBjdXJyZW50UmV0cnlDb3VudCA9IG9wdHMucmV0cnlDb3VudDtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgY29uc3QgdGltZW91dCA9IH5+KChNYXRoLnJhbmRvbSgpICsgMC41KSAqICgxIDw8IChjdXJyZW50UmV0cnlDb3VudCA8IDggPyBjdXJyZW50UmV0cnlDb3VudCA6IDgpKSkgKiBjb25maWcuZXJyb3JSZXRyeUludGVydmFsO1xuICAgIGlmICghaXNVbmRlZmluZWQobWF4UmV0cnlDb3VudCkgJiYgY3VycmVudFJldHJ5Q291bnQgPiBtYXhSZXRyeUNvdW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dChyZXZhbGlkYXRlLCB0aW1lb3V0LCBvcHRzKTtcbn07XG5jb25zdCBjb21wYXJlID0gKGN1cnJlbnREYXRhLCBuZXdEYXRhKT0+c3RhYmxlSGFzaChjdXJyZW50RGF0YSkgPT0gc3RhYmxlSGFzaChuZXdEYXRhKTtcbi8vIERlZmF1bHQgY2FjaGUgcHJvdmlkZXJcbmNvbnN0IFtjYWNoZSwgbXV0YXRlXSA9IGluaXRDYWNoZShuZXcgTWFwKCkpO1xuLy8gRGVmYXVsdCBjb25maWdcbmNvbnN0IGRlZmF1bHRDb25maWcgPSBtZXJnZU9iamVjdHMoe1xuICAgIC8vIGV2ZW50c1xuICAgIG9uTG9hZGluZ1Nsb3c6IG5vb3AsXG4gICAgb25TdWNjZXNzOiBub29wLFxuICAgIG9uRXJyb3I6IG5vb3AsXG4gICAgb25FcnJvclJldHJ5LFxuICAgIG9uRGlzY2FyZGVkOiBub29wLFxuICAgIC8vIHN3aXRjaGVzXG4gICAgcmV2YWxpZGF0ZU9uRm9jdXM6IHRydWUsXG4gICAgcmV2YWxpZGF0ZU9uUmVjb25uZWN0OiB0cnVlLFxuICAgIHJldmFsaWRhdGVJZlN0YWxlOiB0cnVlLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogdHJ1ZSxcbiAgICAvLyB0aW1lb3V0c1xuICAgIGVycm9yUmV0cnlJbnRlcnZhbDogc2xvd0Nvbm5lY3Rpb24gPyAxMDAwMCA6IDUwMDAsXG4gICAgZm9jdXNUaHJvdHRsZUludGVydmFsOiA1ICogMTAwMCxcbiAgICBkZWR1cGluZ0ludGVydmFsOiAyICogMTAwMCxcbiAgICBsb2FkaW5nVGltZW91dDogc2xvd0Nvbm5lY3Rpb24gPyA1MDAwIDogMzAwMCxcbiAgICAvLyBwcm92aWRlcnNcbiAgICBjb21wYXJlLFxuICAgIGlzUGF1c2VkOiAoKT0+ZmFsc2UsXG4gICAgY2FjaGUsXG4gICAgbXV0YXRlLFxuICAgIGZhbGxiYWNrOiB7fVxufSwgLy8gdXNlIHdlYiBwcmVzZXQgYnkgZGVmYXVsdFxucHJlc2V0KTtcblxuY29uc3QgbWVyZ2VDb25maWdzID0gKGEsIGIpPT57XG4gICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBoZXJlLlxuICAgIGNvbnN0IHYgPSBtZXJnZU9iamVjdHMoYSwgYik7XG4gICAgLy8gSWYgdHdvIGNvbmZpZ3MgYXJlIHByb3ZpZGVkLCBtZXJnZSB0aGVpciBgdXNlYCBhbmQgYGZhbGxiYWNrYCBvcHRpb25zLlxuICAgIGlmIChiKSB7XG4gICAgICAgIGNvbnN0IHsgdXNlOiB1MSAsIGZhbGxiYWNrOiBmMSAgfSA9IGE7XG4gICAgICAgIGNvbnN0IHsgdXNlOiB1MiAsIGZhbGxiYWNrOiBmMiAgfSA9IGI7XG4gICAgICAgIGlmICh1MSAmJiB1Mikge1xuICAgICAgICAgICAgdi51c2UgPSB1MS5jb25jYXQodTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmMSAmJiBmMikge1xuICAgICAgICAgICAgdi5mYWxsYmFjayA9IG1lcmdlT2JqZWN0cyhmMSwgZjIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcblxuY29uc3QgU1dSQ29uZmlnQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuY29uc3QgU1dSQ29uZmlnID0gKHByb3BzKT0+e1xuICAgIGNvbnN0IHsgdmFsdWUgIH0gPSBwcm9wcztcbiAgICBjb25zdCBwYXJlbnRDb25maWcgPSB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb25hbENvbmZpZyA9IGlzRnVuY3Rpb24odmFsdWUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IHZhbHVlKHBhcmVudENvbmZpZykgOiB2YWx1ZSwgW1xuICAgICAgICBpc0Z1bmN0aW9uYWxDb25maWcsXG4gICAgICAgIHBhcmVudENvbmZpZyxcbiAgICAgICAgdmFsdWVcbiAgICBdKTtcbiAgICAvLyBFeHRlbmQgcGFyZW50IGNvbnRleHQgdmFsdWVzIGFuZCBtaWRkbGV3YXJlLlxuICAgIGNvbnN0IGV4dGVuZGVkQ29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gY29uZmlnIDogbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSwgW1xuICAgICAgICBpc0Z1bmN0aW9uYWxDb25maWcsXG4gICAgICAgIHBhcmVudENvbmZpZyxcbiAgICAgICAgY29uZmlnXG4gICAgXSk7XG4gICAgLy8gU2hvdWxkIG5vdCB1c2UgdGhlIGluaGVyaXRlZCBwcm92aWRlci5cbiAgICBjb25zdCBwcm92aWRlciA9IGNvbmZpZyAmJiBjb25maWcucHJvdmlkZXI7XG4gICAgLy8gVXNlIGEgbGF6eSBpbml0aWFsaXplZCBzdGF0ZSB0byBjcmVhdGUgdGhlIGNhY2hlIG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBbY2FjaGVDb250ZXh0XSA9IHVzZVN0YXRlKCgpPT5wcm92aWRlciA/IGluaXRDYWNoZShwcm92aWRlcihleHRlbmRlZENvbmZpZy5jYWNoZSB8fCBjYWNoZSksIGNvbmZpZykgOiBVTkRFRklORUQpO1xuICAgIC8vIE92ZXJyaWRlIHRoZSBjYWNoZSBpZiBhIG5ldyBwcm92aWRlciBpcyBnaXZlbi5cbiAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLmNhY2hlID0gY2FjaGVDb250ZXh0WzBdO1xuICAgICAgICBleHRlbmRlZENvbmZpZy5tdXRhdGUgPSBjYWNoZUNvbnRleHRbMV07XG4gICAgfVxuICAgIC8vIFVuc3Vic2NyaWJlIGV2ZW50cy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGNhY2hlQ29udGV4dFsyXSAmJiBjYWNoZUNvbnRleHRbMl0oKTtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZUNvbnRleHRbM107XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoU1dSQ29uZmlnQ29udGV4dC5Qcm92aWRlciwgbWVyZ2VPYmplY3RzKHByb3BzLCB7XG4gICAgICAgIHZhbHVlOiBleHRlbmRlZENvbmZpZ1xuICAgIH0pKTtcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3JcbmNvbnN0IGVuYWJsZURldnRvb2xzID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXztcbmNvbnN0IHVzZSA9IGVuYWJsZURldnRvb2xzID8gd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fIDogW107XG5jb25zdCBzZXR1cERldlRvb2xzID0gKCk9PntcbiAgICBpZiAoZW5hYmxlRGV2dG9vbHMpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICB3aW5kb3cuX19TV1JfREVWVE9PTFNfUkVBQ1RfXyA9IFJlYWN0O1xuICAgIH1cbn07XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IChhcmdzKT0+e1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFyZ3NbMV0pID8gW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBhcmdzWzFdLFxuICAgICAgICBhcmdzWzJdIHx8IHt9XG4gICAgXSA6IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgKGFyZ3NbMV0gPT09IG51bGwgPyBhcmdzWzJdIDogYXJnc1sxXSkgfHwge31cbiAgICBdO1xufTtcblxuY29uc3QgdXNlU1dSQ29uZmlnID0gKCk9PntcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWcsIHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCkpO1xufTtcblxuY29uc3QgcHJlbG9hZCA9IChrZXlfLCBmZXRjaGVyKT0+e1xuICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICBjb25zdCBbLCAsICwgUFJFTE9BRF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIFByZXZlbnQgcHJlbG9hZCB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHVzZWQuXG4gICAgaWYgKFBSRUxPQURba2V5XSkgcmV0dXJuIFBSRUxPQURba2V5XTtcbiAgICBjb25zdCByZXEgPSBmZXRjaGVyKGtleV8pO1xuICAgIFBSRUxPQURba2V5XSA9IHJlcTtcbiAgICByZXR1cm4gcmVxO1xufTtcbmNvbnN0IG1pZGRsZXdhcmUgPSAodXNlU1dSTmV4dCk9PihrZXlfLCBmZXRjaGVyXywgY29uZmlnKT0+e1xuICAgICAgICAvLyBmZXRjaGVyIG1pZ2h0IGJlIGEgc3luYyBmdW5jdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJlIGFuIGFzeW5jIGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IGZldGNoZXIgPSBmZXRjaGVyXyAmJiAoKC4uLmFyZ3MpPT57XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgICAgICAgICBjb25zdCBbLCAsICwgUFJFTE9BRF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmZXRjaGVyXyguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1c2VTV1JOZXh0KGtleV8sIGZldGNoZXIsIGNvbmZpZyk7XG4gICAgfTtcblxuY29uc3QgQlVJTFRfSU5fTUlERExFV0FSRSA9IHVzZS5jb25jYXQobWlkZGxld2FyZSk7XG5cbi8vIEl0J3MgdHJpY2t5IHRvIHBhc3MgZ2VuZXJpYyB0eXBlcyBhcyBwYXJhbWV0ZXJzLCBzbyB3ZSBqdXN0IGRpcmVjdGx5IG92ZXJyaWRlXG4vLyB0aGUgdHlwZXMgaGVyZS5cbmNvbnN0IHdpdGhBcmdzID0gKGhvb2spPT57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNXUkFyZ3MoLi4uYXJncykge1xuICAgICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgYW5kIGluaGVyaXRlZCBjb25maWd1cmF0aW9uLlxuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgICAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLlxuICAgICAgICBjb25zdCBba2V5LCBmbiwgX2NvbmZpZ10gPSBub3JtYWxpemUoYXJncyk7XG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICBjb25zdCBjb25maWcgPSBtZXJnZUNvbmZpZ3MoZmFsbGJhY2tDb25maWcsIF9jb25maWcpO1xuICAgICAgICAvLyBBcHBseSBtaWRkbGV3YXJlXG4gICAgICAgIGxldCBuZXh0ID0gaG9vaztcbiAgICAgICAgY29uc3QgeyB1c2UgIH0gPSBjb25maWc7XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmUgPSAodXNlIHx8IFtdKS5jb25jYXQoQlVJTFRfSU5fTUlERExFV0FSRSk7XG4gICAgICAgIGZvcihsZXQgaSA9IG1pZGRsZXdhcmUubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgIG5leHQgPSBtaWRkbGV3YXJlW2ldKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KGtleSwgZm4gfHwgY29uZmlnLmZldGNoZXIgfHwgbnVsbCwgY29uZmlnKTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSB3aXRoIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gKi8gY29uc3QgdXNlU3RhdGVXaXRoRGVwcyA9IChzdGF0ZSk9PntcbiAgICBjb25zdCByZXJlbmRlciA9IHVzZVN0YXRlKHt9KVsxXTtcbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHN0YXRlUmVmID0gdXNlUmVmKHN0YXRlKTtcbiAgICAvLyBJZiBhIHN0YXRlIHByb3BlcnR5IChkYXRhLCBlcnJvciwgb3IgaXNWYWxpZGF0aW5nKSBpcyBhY2Nlc3NlZCBieSB0aGUgcmVuZGVyXG4gICAgLy8gZnVuY3Rpb24sIHdlIG1hcmsgdGhlIHByb3BlcnR5IGFzIGEgZGVwZW5kZW5jeSBzbyBpZiBpdCBpcyB1cGRhdGVkIGFnYWluXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSwgd2UgdHJpZ2dlciBhIHJlcmVuZGVyLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBrbm93biBhcyBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzUmVmID0gdXNlUmVmKHtcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUbyBjaGFuZ2Ugc3RhdGVSZWYsIHBhc3MgdGhlIHZhbHVlcyBleHBsaWNpdGx5IHRvIHNldFN0YXRlOlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBzZXRTdGF0ZSh7XG4gICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgKiAgIGRhdGE6IG5ld0RhdGEgLy8gc2V0IGRhdGEgdG8gbmV3RGF0YVxuICAgKiAgIGVycm9yOiB1bmRlZmluZWQgLy8gc2V0IGVycm9yIHRvIHVuZGVmaW5lZFxuICAgKiB9KVxuICAgKlxuICAgKiBzZXRTdGF0ZSh7XG4gICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgKiAgIGRhdGE6IHVuZGVmaW5lZCAvLyBzZXQgZGF0YSB0byB1bmRlZmluZWRcbiAgICogICBlcnJvcjogZXJyIC8vIHNldCBlcnJvciB0byBlcnJcbiAgICogfSlcbiAgICogYGBgXG4gICAqLyBjb25zdCBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKChwYXlsb2FkKT0+e1xuICAgICAgICBsZXQgc2hvdWxkUmVyZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gcGF5bG9hZCl7XG4gICAgICAgICAgICBjb25zdCBrID0gXztcbiAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBzdGF0ZSBhbmQgbWFyayByZXJlbmRlciBhc1xuICAgICAgICAgICAgLy8gbmVlZGVkLlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZVtrXSAhPT0gcGF5bG9hZFtrXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZVtrXSA9IHBheWxvYWRba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIGJ5IHRoZSBjb21wb25lbnQsIGEgcmVyZW5kZXIgc2hvdWxkIGJlXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlcmVkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlcmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlcmVuZGVyICYmICF1bm1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKElTX1JFQUNUX0xFR0FDWSkge1xuICAgICAgICAgICAgICAgIHJlcmVuZGVyKHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKCgpPT5yZXJlbmRlcih7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgLy8gY29uZmlnLnN1c3BlbnNlIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0YXRlUmVmLFxuICAgICAgICBzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50LFxuICAgICAgICBzZXRTdGF0ZVxuICAgIF07XG59O1xuXG4vLyBBZGQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGxpc3Qgb2Yga2V5ZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZXR1cm5cbi8vIHRoZSB1bnN1YnNjcmliZSBmdW5jdGlvbi5cbmNvbnN0IHN1YnNjcmliZUNhbGxiYWNrID0gKGtleSwgY2FsbGJhY2tzLCBjYWxsYmFjayk9PntcbiAgICBjb25zdCBrZXllZFJldmFsaWRhdG9ycyA9IGNhbGxiYWNrc1trZXldIHx8IChjYWxsYmFja3Nba2V5XSA9IFtdKTtcbiAgICBrZXllZFJldmFsaWRhdG9ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZXllZFJldmFsaWRhdG9ycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIE8oMSk6IGZhc3RlciB0aGFuIHNwbGljZVxuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnNbaW5kZXhdID0ga2V5ZWRSZXZhbGlkYXRvcnNba2V5ZWRSZXZhbGlkYXRvcnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9ycy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG4vLyBDcmVhdGUgYSBjdXN0b20gaG9vayB3aXRoIGEgbWlkZGxld2FyZVxuY29uc3Qgd2l0aE1pZGRsZXdhcmUgPSAodXNlU1dSLCBtaWRkbGV3YXJlKT0+e1xuICAgIHJldHVybiAoLi4uYXJncyk9PntcbiAgICAgICAgY29uc3QgW2tleSwgZm4sIGNvbmZpZ10gPSBub3JtYWxpemUoYXJncyk7XG4gICAgICAgIGNvbnN0IHVzZXMgPSAoY29uZmlnLnVzZSB8fCBbXSkuY29uY2F0KG1pZGRsZXdhcmUpO1xuICAgICAgICByZXR1cm4gdXNlU1dSKGtleSwgZm4sIHtcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIHVzZTogdXNlc1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcblxuc2V0dXBEZXZUb29scygpO1xuXG5leHBvcnQgeyBJU19SRUFDVF9MRUdBQ1ksIElTX1NFUlZFUiwgT0JKRUNULCBTV1JDb25maWcsIFNXUkdsb2JhbFN0YXRlLCBVTkRFRklORUQsIGNhY2hlLCBjb21wYXJlLCBjcmVhdGVDYWNoZUhlbHBlciwgZGVmYXVsdENvbmZpZywgZGVmYXVsdENvbmZpZ09wdGlvbnMsIGdldFRpbWVzdGFtcCwgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBpbml0Q2FjaGUsIGludGVybmFsTXV0YXRlLCBpc0RvY3VtZW50RGVmaW5lZCwgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWQsIGlzV2luZG93RGVmaW5lZCwgbWVyZ2VDb25maWdzLCBtZXJnZU9iamVjdHMsIG11dGF0ZSwgbm9vcCwgbm9ybWFsaXplLCBwcmVsb2FkLCBwcmVzZXQsIHJBRiwgY29uc3RhbnRzIGFzIHJldmFsaWRhdGVFdmVudHMsIHNlcmlhbGl6ZSwgc2xvd0Nvbm5lY3Rpb24sIHN0YWJsZUhhc2gsIHN1YnNjcmliZUNhbGxiYWNrLCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LCB1c2VTV1JDb25maWcsIHVzZVN0YXRlV2l0aERlcHMsIHdpdGhBcmdzLCB3aXRoTWlkZGxld2FyZSB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyc7XG5pbXBvcnQgeyBPQkpFQ1QsIFNXUkNvbmZpZyBhcyBTV1JDb25maWckMSwgZGVmYXVsdENvbmZpZywgd2l0aEFyZ3MsIFNXUkdsb2JhbFN0YXRlLCBzZXJpYWxpemUsIGNyZWF0ZUNhY2hlSGVscGVyLCBpc1VuZGVmaW5lZCwgZ2V0VGltZXN0YW1wLCBVTkRFRklORUQsIGlzRnVuY3Rpb24sIGludGVybmFsTXV0YXRlLCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LCBzdWJzY3JpYmVDYWxsYmFjaywgSVNfU0VSVkVSLCByQUYsIElTX1JFQUNUX0xFR0FDWSwgbWVyZ2VPYmplY3RzLCByZXZhbGlkYXRlRXZlbnRzIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5leHBvcnQgeyBtdXRhdGUsIHByZWxvYWQsIHVzZVNXUkNvbmZpZyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuXG5jb25zdCBXSVRIX0RFRFVQRSA9IHtcbiAgICBkZWR1cGU6IHRydWVcbn07XG5jb25zdCB1c2VTV1JIYW5kbGVyID0gKF9rZXksIGZldGNoZXIsIGNvbmZpZyk9PntcbiAgICBjb25zdCB7IGNhY2hlICwgY29tcGFyZSAsIHN1c3BlbnNlICwgZmFsbGJhY2tEYXRhICwgcmV2YWxpZGF0ZU9uTW91bnQgLCByZWZyZXNoSW50ZXJ2YWwgLCByZWZyZXNoV2hlbkhpZGRlbiAsIHJlZnJlc2hXaGVuT2ZmbGluZSAsIGtlZXBQcmV2aW91c0RhdGEgIH0gPSBjb25maWc7XG4gICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdgIGlzIHRoZSBhcmd1bWVudC9hcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICBjb25zdCBba2V5LCBmbkFyZ10gPSBzZXJpYWxpemUoX2tleSk7XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIGNvbnN0IGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgY29uc3Qga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgY29uc3QgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICBjb25zdCBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICBjb25zdCBnZXRDb25maWcgPSAoKT0+Y29uZmlnUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoKT0+Z2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBbZ2V0Q2FjaGUsIHNldENhY2hlLCBzdWJzY3JpYmVDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgZmFsbGJhY2sgPSBpc1VuZGVmaW5lZChmYWxsYmFja0RhdGEpID8gY29uZmlnLmZhbGxiYWNrW2tleV0gOiBmYWxsYmFja0RhdGE7XG4gICAgY29uc3QgaXNFcXVhbCA9IChwcmV2LCBjdXJyZW50KT0+e1xuICAgICAgICBsZXQgZXF1YWwgPSB0cnVlO1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBzdGF0ZURlcGVuZGVuY2llcyl7XG4gICAgICAgICAgICBjb25zdCB0ID0gXztcbiAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgIGlmICh0ID09PSAnZGF0YScgJiYgaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHJldHVybmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXF1YWw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTbmFwc2hvdCA9IHVzZU1lbW8oKCk9PntcbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnRSZXF1ZXN0ID0gKCgpPT57XG4gICAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFmZXRjaGVyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2FjaGUgPSAoKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRDYWNoZSgpO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IG1lbW9yaXplZFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZSgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwoc25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBzbmFwc2hvdDtcbiAgICAgICAgfTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3QsIGdldFNuYXBzaG90KTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBjYWNoZWQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBmYWxsYmFjayA6IGNhY2hlZERhdGE7XG4gICAgY29uc3QgZXJyb3IgPSBjYWNoZWQuZXJyb3I7XG4gICAgLy8gVXNlIGEgcmVmIHRvIHN0b3JlIHByZXZpb3VzbHkgcmV0dXJuZWQgZGF0YS4gVXNlIHRoZSBpbml0aWFsIGRhdGEgYXMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgY29uc3QgbGFnZ3lEYXRhUmVmID0gdXNlUmVmKGRhdGEpO1xuICAgIGNvbnN0IHJldHVybmVkRGF0YSA9IGtlZXBQcmV2aW91c0RhdGEgPyBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGxhZ2d5RGF0YVJlZi5jdXJyZW50IDogY2FjaGVkRGF0YSA6IGRhdGE7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICBjb25zdCBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24gPSAoKCk9PntcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiBjb25maWcucmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB3aGVuIG1vdW50O1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHNldCB0byB0cnVlLCB3ZSB3aWxsIGFsd2F5cyByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgfHwgY29uZmlnLnJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH0pKCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nIHN0YXRlOlxuICAgIC8vIElmIGl0J3MgYWJsZSB0byB2YWxpZGF0ZSwgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIHdoZW4gbW91bnQsIHRoaXMgd2lsbCBiZSB0cnVlLlxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgPSAhIShrZXkgJiYgZmV0Y2hlciAmJiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc1ZhbGlkYXRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc1ZhbGlkYXRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzTG9hZGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzTG9hZGluZztcbiAgICAvLyBUaGUgcmV2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgd3JhcHBlciBvZiB0aGUgb3JpZ2luYWxcbiAgICAvLyBgZmV0Y2hlcmAsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG1hbnkgZWRnZSBjYXNlcy5cbiAgICBjb25zdCByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJldmFsaWRhdGVPcHRzKT0+e1xuICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hlciA9IGZldGNoZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWN1cnJlbnRGZXRjaGVyIHx8IHVubW91bnRlZFJlZi5jdXJyZW50IHx8IGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3RGF0YTtcbiAgICAgICAgbGV0IHN0YXJ0QXQ7XG4gICAgICAgIGxldCBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvbmdvaW5nIGNvbmN1cnJlbnQgcmVxdWVzdCwgb3IgYGRlZHVwZWAgaXMgbm90IHNldCwgYVxuICAgICAgICAvLyBuZXcgcmVxdWVzdCBzaG91bGQgYmUgaW5pdGlhdGVkLlxuICAgICAgICBjb25zdCBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgIC8qXG4gICAgICAgICBGb3IgUmVhY3QgMTdcbiAgICAgICAgIERvIHVubW91bnQgY2hlY2sgZm9yIGNhbGxzOlxuICAgICAgICAgSWYga2V5IGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgcmV2YWxpZGF0aW9uLCBvciB0aGUgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAgICB1bm1vdW50ZWQsIG9sZCBkaXNwYXRjaCBhbmQgb2xkIGV2ZW50IGNhbGxiYWNrcyBzaG91bGQgbm90IHRha2UgYW55XG4gICAgICAgICBlZmZlY3RcblxuICAgICAgICBGb3IgUmVhY3QgMThcbiAgICAgICAgb25seSBjaGVjayBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODJcbiAgICAgICovIGNvbnN0IGNhbGxiYWNrU2FmZWd1YXJkID0gKCk9PntcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQgJiYgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgZmluYWwgc3RhdGUgb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgc2V0Q2FjaGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNsZWFudXBTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lIHJlcXVlc3QgYmVmb3JlIGRlbGV0aW5nIGl0LlxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoaW5nLiBDaGFuZ2UgdGhlIGBpc1ZhbGlkYXRpbmdgIHN0YXRlLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSXQgaXMgaW4gdGhlIGBpc0xvYWRpbmdgIHN0YXRlLCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZGF0YS5cbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyBmYWxsYmFjayBkYXRhIGFuZCBsYWdneSBkYXRhLlxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBzZXRDYWNoZShpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vIGNhY2hlIGlzIGJlaW5nIHJlbmRlcmVkIGN1cnJlbnRseSAoaXQgc2hvd3MgYSBibGFuayBwYWdlKSxcbiAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiBpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgYW5kIHNhdmUgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICAvLyBLZXkgbXVzdCBiZSB0cnV0aHkgaWYgZW50ZXJpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmV0Y2hlcihmbkFyZyksXG4gICAgICAgICAgICAgICAgICAgIGdldFRpbWVzdGFtcCgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtuZXdEYXRhLCBzdGFydEF0XSA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBuZXdEYXRhID0gYXdhaXQgbmV3RGF0YTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCBpbnRlcnJ1cHRlZCwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAvLyAgIHJlcTEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzMSAgICAgICAgKGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgbWF5YmUgYmUgYHVuZGVmaW5lZGAgb3IgYSBudW1iZXJcbiAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciBlcnJvci5cbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBVTkRFRklORUQ7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBtdXRhdGlvbnMocyksIHRoYXQgb3ZlcmxhcHBlZCB3aXRoIHRoZSBjdXJyZW50IHJldmFsaWRhdGlvbjpcbiAgICAgICAgICAgIC8vIGNhc2UgMTpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAyOlxuICAgICAgICAgICAgLy8gICAgICAgICByZXEtLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMzpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tLS4uLi0tLS0tLS0tLS0+XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgcmV2YWxpZGF0aW9uIHJlc3VsdCAocmVzKSBiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyIGZyZXNoLlxuICAgICAgICAgICAgLy8gbWVhbndoaWxlLCBhIG5ldyByZXZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBtdXRhdGlvbiBlbmRzLlxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQobXV0YXRpb25JbmZvKSAmJiAvLyBjYXNlIDFcbiAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fCAvLyBjYXNlIDJcbiAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8IC8vIGNhc2UgM1xuICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSB0byBhdm9pZCBleHRyYSByZS1yZW5kZXJzLlxuICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRDYWNoZSgpLmRhdGE7XG4gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29tcGFyZSBmbiBjb3VsZCBiZSBjdXN0b20gZm5cbiAgICAgICAgICAgIC8vIGNhY2hlRGF0YSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBuZXdEYXRhIGV2ZW4gd2hlbiBjb21wYXJlIGZuIHJldHVybnMgVHJ1ZVxuICAgICAgICAgICAgZmluYWxTdGF0ZS5kYXRhID0gY29tcGFyZShjYWNoZURhdGEsIG5ld0RhdGEpID8gY2FjaGVEYXRhIDogbmV3RGF0YTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwU3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnlPbkVycm9yICB9ID0gY3VycmVudENvbmZpZztcbiAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlLCBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgZXJyb3IsIGRvbid0IHVzZSBkZWVwIGNvbXBhcmlzb24gZm9yIGVycm9ycy5cbiAgICAgICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGV2ZW50IGFuZCByZXRyeSBsb2dpYy4gT25seSBmb3IgdGhlIGFjdHVhbCByZXF1ZXN0LCBub3RcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvcihlcnIsIGtleSwgY3VycmVudENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeU9uRXJyb3IgPT09IHRydWUgfHwgaXNGdW5jdGlvbihzaG91bGRSZXRyeU9uRXJyb3IpICYmIHNob3VsZFJldHJ5T25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgaW5hY3RpdmUsIHN0b3AuIEl0IHdpbGwgYXV0by1yZXZhbGlkYXRlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZvY3VzaW5nIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGxpY2F0aW9uIGlzIGFsd2F5cyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvclJldHJ5KGVyciwga2V5LCBjdXJyZW50Q29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQ6IChvcHRzLnJldHJ5Q291bnQgfHwgMCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1cGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGxvYWRpbmcgYXMgc3RvcHBlZC5cbiAgICAgICAgbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgaG9vaydzIHN0YXRlLlxuICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdgLCBhbmRcbiAgICAvLyBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGtleSxcbiAgICAgICAgY2FjaGVcbiAgICBdKTtcbiAgICAvLyBTaW1pbGFyIHRvIHRoZSBnbG9iYWwgbXV0YXRlIGJ1dCBib3VuZCB0byB0aGUgY3VycmVudCBjYWNoZSBhbmQga2V5LlxuICAgIC8vIGBjYWNoZWAgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIGNvbnN0IGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soLy8gVXNlIGNhbGxiYWNrIHRvIG1ha2Ugc3VyZSBga2V5UmVmLmN1cnJlbnRgIHJldHVybnMgbGF0ZXN0IHJlc3VsdCBldmVyeSB0aW1lXG4gICAgKC4uLmFyZ3MpPT57XG4gICAgICAgIHJldHVybiBpbnRlcm5hbE11dGF0ZShjYWNoZSwga2V5UmVmLmN1cnJlbnQsIC4uLmFyZ3MpO1xuICAgIH0sIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gVGhlIGxvZ2ljIGZvciB1cGRhdGluZyByZWZzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIC8vIEhhbmRsZSBsYWdneSBkYXRhIHVwZGF0ZXMuIElmIHRoZXJlJ3MgY2FjaGVkIGRhdGEgb2YgdGhlIGN1cnJlbnQga2V5LFxuICAgICAgICAvLyBpdCdsbCBiZSB0aGUgY29ycmVjdCByZWZlcmVuY2UuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkpIHtcbiAgICAgICAgICAgIGxhZ2d5RGF0YVJlZi5jdXJyZW50ID0gY2FjaGVkRGF0YTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFmdGVyIG1vdW50ZWQgb3Iga2V5IGNoYW5nZWQuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzb2Z0UmV2YWxpZGF0ZSA9IHJldmFsaWRhdGUuYmluZChVTkRFRklORUQsIFdJVEhfREVEVVBFKTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgbGV0IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICBjb25zdCBvblJldmFsaWRhdGUgPSAodHlwZSk9PntcbiAgICAgICAgICAgIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25Gb2N1cyAmJiBub3cgPiBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IG5vdyArIGdldENvbmZpZygpLmZvY3VzVGhyb3R0bGVJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5SRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5NVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bnN1YkV2ZW50cyA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgRVZFTlRfUkVWQUxJREFUT1JTLCBvblJldmFsaWRhdGUpO1xuICAgICAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgYXMgbW91bnRlZCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgcmVmcy5cbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAga2V5UmVmLmN1cnJlbnQgPSBrZXk7XG4gICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAvLyBLZWVwIHRoZSBvcmlnaW5hbCBrZXkgaW4gdGhlIGNhY2hlLlxuICAgICAgICBzZXRDYWNoZSh7XG4gICAgICAgICAgICBfazogZm5BcmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZXZhbGlkYXRlIGlmIHdlIGhhdmUgZGF0YSB0byByZXR1cm4gc28gd2Ugd29uJ3QgYmxvY2tcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcuXG4gICAgICAgICAgICAgICAgckFGKHNvZnRSZXZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJFdmVudHMoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKSA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKSA6IHJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3RhcnQgdGhlIG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSwgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFnZXRDYWNoZSgpLmVycm9yICYmIChyZWZyZXNoV2hlbkhpZGRlbiB8fCBnZXRDb25maWcoKS5pc1Zpc2libGUoKSkgJiYgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgcmVmcmVzaEludGVydmFsLFxuICAgICAgICByZWZyZXNoV2hlbkhpZGRlbixcbiAgICAgICAgcmVmcmVzaFdoZW5PZmZsaW5lLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShyZXR1cm5lZERhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGFuIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gU1dSIHNob3VsZCB0aHJvdyB3aGVuIHRyeWluZyB0byB1c2UgU3VzcGVuc2Ugb24gdGhlIHNlcnZlciB3aXRoIFJlYWN0IDE4LFxuICAgICAgICAvLyB3aXRob3V0IHByb3ZpZGluZyBhbnkgaW5pdGlhbCBkYXRhLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xODMyXG4gICAgICAgIGlmICghSVNfUkVBQ1RfTEVHQUNZICYmIElTX1NFUlZFUikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWxsYmFjayBkYXRhIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc3VzcGVuc2UgaW4gU1NSLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZGF0YSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuZWREYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNWYWxpZGF0aW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNMb2FkaW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBTV1JDb25maWcgPSBPQkpFQ1QuZGVmaW5lUHJvcGVydHkoU1dSQ29uZmlnJDEsICdkZWZhdWx0VmFsdWUnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xuY29uc3QgdW5zdGFibGVfc2VyaWFsaXplID0gKGtleSk9PnNlcmlhbGl6ZShrZXkpWzBdO1xuLyoqXG4gKiBBIGhvb2sgdG8gZmV0Y2ggZGF0YS5cbiAqXG4gKiBAbGluayBodHRwczovL3N3ci52ZXJjZWwuYXBwXG4gKiBAZXhhbXBsZVxuICogYGBganN4XG4gKiBpbXBvcnQgdXNlU1dSIGZyb20gJ3N3cidcbiAqIGZ1bmN0aW9uIFByb2ZpbGUoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUignL2FwaS91c2VyJywgZmV0Y2hlcilcbiAqICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5mYWlsZWQgdG8gbG9hZDwvZGl2PlxuICogICBpZiAoIWRhdGEpIHJldHVybiA8ZGl2PmxvYWRpbmcuLi48L2Rpdj5cbiAqICAgcmV0dXJuIDxkaXY+aGVsbG8ge2RhdGEubmFtZX0hPC9kaXY+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS4zIFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKCFrZXlzSW5mbykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCkge1xuICAgICAgY2FsbGJhY2soa2V5Ym9hcmRFdmVudCwgaG90a2V5c0V2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgZGVwcyA/IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXS5jb25jYXQoZGVwcykgOiBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0pO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJbiB0aGlzIGNhc2Uga2V5ZG93biBpcyBsaWtlbHkgdW5kZWZpbmVkLCBzbyB3ZSBzZXQgaXQgdG8gZmFsc2UsIHNpbmNlIGhvdGtleXMgbmVlZHMgdGhlIGBrZXlkb3duYCBrZXkgdG8gaGF2ZSBhIHZhbHVlLlxuXG5cbiAgICBpZiAoa2V5dXAgJiYga2V5ZG93biAhPT0gdHJ1ZSkge1xuICAgICAgb3B0aW9ucy5rZXlkb3duID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaG90a2V5cyhrZXlzLCBvcHRpb25zIHx8IHt9LCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIH07XG4gIH0sIFttZW1vaXNlZENhbGxiYWNrLCBrZXlzLCBlbmFibGVkXSk7XG4gIHJldHVybiByZWY7XG59XG5cbnZhciBpc0hvdGtleVByZXNzZWQgPSBob3RrZXlzLmlzUHJlc3NlZDtcblxuZXhwb3J0IHsgaXNIb3RrZXlQcmVzc2VkLCB1c2VIb3RrZXlzLCB1c2VJc0hvdGtleVByZXNzZWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlYWN0LWhvdGtleXMtaG9vay5lc20uanMubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9
19
+ var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var h=[],v=!1,p="all",m=[],g=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function _(e){p=e||"all"}function y(){return p||"all"}var b=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":g(i);if(d[s]){n||(n=y());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===h.indexOf(r)&&229!==r&&h.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===h.indexOf(n)?h.push(n):!e[t]&&h.indexOf(n)>-1?h.splice(h.indexOf(n),1):"metaKey"===t&&e[t]&&3===h.length&&(e.ctrlKey||e.shiftKey||e.altKey||(h=h.slice(h.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===h.indexOf(17)&&h.push(17),-1===h.indexOf(18)&&h.push(18),c[17]=!0,c[18]=!0);var i=y();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],p=v.splitKey,m=v.key.split(p),_=[],b=0;b<m.length;b++)_.push(g(m[b]));_.sort().join("")===h.sort().join("")&&O(e,v,i,t)}}}function M(e,t,n){h=[];var r=i(e),l=[],s="all",f=document,p=0,_=!1,y=!0,b="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(_=t.keyup),void 0!==t.keydown&&(y=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(b=t.splitKey)),"string"==typeof t&&(s=t);p<r.length;p++)l=[],(e=r[p].split(b)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":g(e))in d||(d[e]=[]),d[e].push({keyup:_,keydown:y,scope:s,mods:l,shortcut:r[p],method:n,key:r[p],splitKey:b,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){h=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=h.indexOf(t);if(n>=0&&h.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&h.splice(0,h.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:_,getScope:y,deleteScope:function(e,t){var n,r;for(var o in e||(e=y()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;y()===e&&_(t||"all")},getPressedKeyCodes:function(){return h.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=g(e)),-1!==h.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(e){if(Array.isArray(e))e.forEach((function(e){e.key&&b(e)}));else if("object"==typeof e)e.key&&b(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),b({key:e,scope:o,method:a,splitKey:"+"})}}else Object.keys(d).forEach((function(e){return delete d[e]}))},keyMap:l,modifier:u,modifierMap:s};for(var I in S)Object.prototype.hasOwnProperty.call(S,I)&&(M[I]=S[I]);if("undefined"!=typeof window){var P=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=P),M},window.hotkeys=M}var C=n(0);function x(){return M.isPressed}M.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))};function E(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,h=o.enableOnContentEditable,v=void 0!==h&&h,p=Object(C.useRef)(null),m=Object(C.useCallback)((function(e,n){var r;return i&&!i(e)?!c:!!(j(e,["INPUT","TEXTAREA","SELECT"])&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||(null===p.current||document.activeElement===p.current)&&(t(e,n),!0)}),r?[p,a,i].concat(r):[p,a,i]);return Object(C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),p}var R=M.isPressed}]));
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3M/OWE0ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2NkNDYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3M/MzJhYiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay5tb2R1bGUuY3NzPzA4NDEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzFmMTEiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz80ZWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz8yM2ViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ZTE4OCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/MGVkZiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzPzI3YjMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi5tb2R1bGUuY3NzPzliOTMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLm1vZHVsZS5jc3M/M2ViOSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIubW9kdWxlLmNzcz85NmQyIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS5tb2R1bGUuY3NzPzM3MDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS5tb2R1bGUuY3NzPzUwNDkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/MDQyNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzPzEyOTkiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzdhYmYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzP2QyOGQiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmsvSWNvbkJ1dHRvbkxpbmsudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/Y2MzNyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UubW9kdWxlLmNzcz85NWE3Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzQ2NGUiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0xpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MjFjNSIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZS50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3M/ZTY2YiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVSb3dDZWxsLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwubW9kdWxlLmNzcz82YWViIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/MGJlNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9jb25zdGFudHMvVGFibGUudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz8zNWJlIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0Lm1vZHVsZS5jc3M/Y2QzNiIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz9jZjYxIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzPzlhMzYiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZTIyMyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzQ3ZjAiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlT3V0c2lkZUNsaWNrL3VzZU91dHNpZGVDbGljay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL19pbnRlcm5hbC9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dyL2NvcmUvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaG90a2V5cy1qcy9kaXN0L2hvdGtleXMuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwicmVxdWlyZSIsImlzQXJyYXkiLCJBcnJheSIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImxlbmd0aCIsImRlZmF1bHQiLCJkaXNwbGF5IiwiaXNEaXNhYmxlZCIsImhhbmRsZUNsaWNrIiwiQnV0dG9uIiwiYWxpZ24iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJzaXplIiwic3RyZXRjaEhvcml6b250YWxseSIsImNsYXNzTmFtZSIsImNvbnRhaW5lciIsIkljb24iLCJhbHQiLCJzcmMiLCJQbGFjZW1lbnRDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInVuZGVmaW5lZCIsImZvcndhcmRSZWYiLCJyZWYiLCJjaGlsZHJlbiIsImJ1dHRvbiIsInBsYWNlbWVudCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIlByb3ZpZGVyIiwidXNlTWVtbyIsIm1lbnVDb250YWluZXIiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiaW52ZXJ0ZWQiLCJyb3VuZGVkIiwibm9TaGFkb3ciLCJub1BhZGRpbmciLCJub0JvcmRlciIsInRyYW5zcGFyZW50Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsInR5cGUiLCJsZWZ0T2Zmc2V0IiwiaW5jbHVkZXMiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJwcm9wcyIsImxhYmVsIiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiaGFuZGxlQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJlIiwidGFyZ2V0IiwiTGFiZWwiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiY29sb3JzIiwib25TZWxlY3QiLCJzZWxlY3RlZENvbG9yIiwiZGlyZWN0aW9uIiwiY2FuVG9nZ2xlIiwiY29sb3JQaWNrZXIiLCJtYXAiLCJjb2xvciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJzdHlsZSIsImJhY2tncm91bmRDb2xvciIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJ1c2VIb3RrZXlzIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4Iiwib3ZlcmxheSIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJEcm9wZG93biIsIkNsaWNrYWJsZSIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJpdGVtcyIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInVzZVN0YXRlIiwic2V0SXNPcGVuIiwidXNlT3V0c2lkZUNsaWNrIiwidG9nZ2xlSXNPcGVuIiwiTWVudUNvbnRhaW5lciIsIk1lbnUiLCJpdGVtIiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsImlkIiwiaXMiLCJhIiwiYiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZURlYnVnVmFsdWUiLCJnZXRTbmFwc2hvdCIsImYiLCJ1Iiwid2luZG93IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5zdCIsImciLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsImljb24iLCJjcm9zc09yaWdpbiIsImZvb3RlciIsInNtYXJ0TGF5b3V0IiwibWVudVBsYWNlbWVudCIsInVzZUNvbnRleHQiLCJpbm5lclJlZiIsInVzZVJlZiIsIkVycm9yIiwiY3VycmVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImJvdHRvbSIsImRpc3RhbmNlVG9FZGdlIiwiaW5uZXJIZWlnaHQiLCJ1bEVsIiwicXVlcnlTZWxlY3RvciIsImNoaWxkRWxlbWVudHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibmV3SGVpZ2h0IiwiY2xpZW50SGVpZ2h0Iiwib2Zmc2V0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJvcGVuIiwibWVudUl0ZW0iLCJhY3RpdmUiLCJtZW51TGlua0l0ZW0iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwibGF5b3V0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJzcmNXaWR0aCIsInNyY0hlaWdodCIsImRlY29kaW5nIiwibG9hZGluZyIsImltYWdlRWxlbWVudCIsImltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJoYXNPdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwidGV4dCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJpc0ZpeGVkIiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJyb3dIZWlnaHQiLCJST1dfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNjcm9sbFRvcCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsImRhdGEiLCJpbmRleCIsInJvdyIsInRvcCIsImhhbmRsZUxpc3RTY3JvbGwiLCJzY3JvbGxPZmZzZXQiLCJsb2FkTW9yZSIsImlzSXRlbUxvYWRlZCIsIklURU1TX0xPQURFRCIsInRhYmxlIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJpdGVtQ291bnQiLCJsb2FkTW9yZUl0ZW1zIiwib25JdGVtc1JlbmRlcmVkIiwiRml4ZWRTaXplTGlzdCIsIml0ZW1TaXplIiwiaXRlbURhdGEiLCJvblNjcm9sbCIsInNjcm9sbGJhckNvbnRhaW5lciIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3JlZiIsIl90ZW1wIiwiX3RoaXMiLCJ0aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiX19wcm90b19fIiwiZ2V0UHJvdG90eXBlT2YiLCJhcHBseSIsImNvbmNhdCIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsIl9yZWYyIiwidmlzaWJsZVN0YXJ0SW5kZXgiLCJ2aXNpYmxlU3RvcEluZGV4IiwiX2Vuc3VyZVJvd3NMb2FkZWQiLCJfc2V0UmVmIiwibGlzdFJlZiIsIl9saXN0UmVmIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY29uc3RydWN0b3IiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsInN0YXJ0SW5kZXgiLCJzdG9wSW5kZXgiLCJfcHJvcHMiLCJfcHJvcHMkbWluaW11bUJhdGNoU2kiLCJtaW5pbXVtQmF0Y2hTaXplIiwiX3Byb3BzJHRocmVzaG9sZCIsInRocmVzaG9sZCIsInVubG9hZGVkUmFuZ2VzIiwicmFuZ2VTdGFydEluZGV4IiwicmFuZ2VTdG9wSW5kZXgiLCJfaW5kZXgiLCJwdXNoIiwicG90ZW50aWFsU3RvcEluZGV4IiwiTWF0aCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlUm93cyIsIl9sb29wIiwicHJvbWlzZSIsInRoZW4iLCJsYXN0UmVuZGVyZWRTdGFydEluZGV4IiwibGFzdFJlbmRlcmVkU3RvcEluZGV4IiwiaXNSYW5nZVZpc2libGUiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsImJvcmRlckJvdHRvbSIsImNvbHVtbiIsImNvbHVtbkluZGV4IiwidGFibGVIZWFkZXJDZWxsIiwidGl0bGUiLCJoYW5kbGVSb3dDbGljayIsImRhdGFJbmRleCIsInJlbmRlciIsIm9uQmx1ciIsIm9uS2V5RG93biIsInBhdHRlcm4iLCJpbnB1dE1vZGUiLCJpbnB1dEVsZW1lbnQiLCJ0ZXh0SW5wdXQiLCJ0b2FzdCIsInRvYXN0Q29udGFpbmVyIiwicG9zdGVyIiwibXV0ZWQiLCJsb29wIiwiYXV0b1BsYXkiLCJ2aWRlbyIsInBsYXlzSW5saW5lIiwiTnVtcGFkIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZmxvb3IiLCJldmVudERpZ2l0S2V5cyIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwic3RvcFByb3BhZ2F0aW9uIiwiTnVtcGFkS2V5cyIsImZpbGwiLCJfIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsInBhcnNlSW50IiwibnVtYmVycyIsIm9wdGlvbnMiLCJjYXB0dXJlIiwiY2FsbGJhY2siLCJldmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwiX19nZW5lcmF0b3IiLCJib2R5IiwieSIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidiIsIm9wIiwicG9wIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsInVzZVByb21pc2UiLCJfYSIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwiZXJyb3JfMSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImlzV2luZG93RGVmaW5lZCIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiaW5mbyIsInByZXYiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsImlzRGF0ZSIsIkRhdGUiLCJSZWdFeHAiLCJ0b0pTT04iLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXQiLCJrZXlzIiwic29ydCIsIm9ubGluZSIsIm9uV2luZG93RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19SRUFDVF9MRUdBQ1kiLCJ1c2VJZCIsIklTX1NFUlZFUiIsInJBRiIsInNldFRpbWVvdXQiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsInNlcmlhbGl6ZSIsImVyciIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0Iiwic3RhcnRzV2l0aCIsIl9rIiwiYWxsIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsImluZGV4T2YiLCJzZXR0ZXIiLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJyZWxlYXNlUmVjb25uZWN0IiwiZGVsZXRlIiwiTWFwIiwiZGVmYXVsdENvbmZpZyIsIm9uTG9hZGluZ1Nsb3ciLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwib25FcnJvclJldHJ5IiwiX18iLCJjb25maWciLCJtYXhSZXRyeUNvdW50IiwiZXJyb3JSZXRyeUNvdW50IiwiY3VycmVudFJldHJ5Q291bnQiLCJyZXRyeUNvdW50IiwidGltZW91dCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIm1lcmdlQ29uZmlncyIsInVzZSIsInUxIiwiZjEiLCJ1MiIsImYyIiwiU1dSQ29uZmlnQ29udGV4dCIsImVuYWJsZURldnRvb2xzIiwiX19TV1JfREVWVE9PTFNfVVNFX18iLCJub3JtYWxpemUiLCJ1c2VTV1JDb25maWciLCJCVUlMVF9JTl9NSURETEVXQVJFIiwidXNlU1dSTmV4dCIsImtleV8iLCJmZXRjaGVyXyIsIlBSRUxPQUQiLCJyZXEiLCJfX1NXUl9ERVZUT09MU19SRUFDVF9fIiwiV0lUSF9ERURVUEUiLCJkZWR1cGUiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsImNhY2hlQ29udGV4dCIsImhvb2siLCJmZXRjaGVyIiwic3VzcGVuc2UiLCJmYWxsYmFja0RhdGEiLCJyZXZhbGlkYXRlT25Nb3VudCIsInJlZnJlc2hJbnRlcnZhbCIsInJlZnJlc2hXaGVuSGlkZGVuIiwicmVmcmVzaFdoZW5PZmZsaW5lIiwia2VlcFByZXZpb3VzRGF0YSIsImZuQXJnIiwiaW5pdGlhbE1vdW50ZWRSZWYiLCJ1bm1vdW50ZWRSZWYiLCJrZXlSZWYiLCJmZXRjaGVyUmVmIiwiY29uZmlnUmVmIiwiZ2V0Q29uZmlnIiwiZ2V0Q2FjaGUiLCJzZXRDYWNoZSIsInN1YnNjcmliZUNhY2hlIiwic3RhdGVEZXBlbmRlbmNpZXMiLCJpc0VxdWFsIiwiZXF1YWwiLCJyZXR1cm5lZERhdGEiLCJzaG91bGRTdGFydFJlcXVlc3QiLCJnZXRTZWxlY3RlZENhY2hlIiwic25hcHNob3QiLCJpc1ZhbGlkYXRpbmciLCJpc0xvYWRpbmciLCJtZW1vcml6ZWRTbmFwc2hvdCIsImNhY2hlZCIsImlzSW5pdGlhbE1vdW50IiwiY2FjaGVkRGF0YSIsImxhZ2d5RGF0YVJlZiIsInNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiIsImRlZmF1bHRWYWxpZGF0aW5nU3RhdGUiLCJyZXZhbGlkYXRlT3B0cyIsImN1cnJlbnRGZXRjaGVyIiwic3RhcnRBdCIsInNob3VsZFN0YXJ0TmV3UmVxdWVzdCIsImNhbGxiYWNrU2FmZWd1YXJkIiwiZmluYWxTdGF0ZSIsImZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSIsImNsZWFudXBTdGF0ZSIsInJlcXVlc3RJbmZvIiwiaW5pdGlhbFN0YXRlIiwibXV0YXRpb25JbmZvIiwiY2FjaGVEYXRhIiwiY3VycmVudENvbmZpZyIsImJvdW5kTXV0YXRlIiwic29mdFJldmFsaWRhdGUiLCJuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0IiwidW5zdWJFdmVudHMiLCJjYWxsYmFja3MiLCJrZXllZFJldmFsaWRhdG9ycyIsInN1YnNjcmliZUNhbGxiYWNrIiwibm93IiwidGltZXIiLCJpbnRlcnZhbCIsImV4ZWN1dGUiLCJjbGVhclRpbWVvdXQiLCJ1c2VTV1JIb29rc0NvbmZpZyIsInN3ckNvbmZpZyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfc2V0UHJvdG90eXBlT2YiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImxhc3RUaGlzIiwibGFzdFJlc3VsdCIsImxhc3RBcmdzIiwiY2FsbGVkT25jZSIsIm5ld0FyZ3MiLCJfaSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZXhjbHVkZWQiLCJzb3VyY2VLZXlzIiwicGVyZm9ybWFuY2UiLCJjYW5jZWxUaW1lb3V0IiwidGltZW91dElEIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0VGltZW91dCIsImRlbGF5Iiwic3RhcnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aWNrIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsInJlY2FsY3VsYXRlIiwiZGl2Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiZGVmYXVsdEl0ZW1LZXkiLCJyb3dJbmRleCIsImNyZWF0ZUdyaWRDb21wb25lbnQiLCJfY2xhc3MiLCJnZXRDb2x1bW5PZmZzZXQiLCJnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImdldENvbHVtbldpZHRoIiwiZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQiLCJnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoIiwiZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50IiwiZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50IiwiZ2V0Um93SGVpZ2h0IiwiZ2V0Um93T2Zmc2V0IiwiZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCIsImdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJpbml0SW5zdGFuY2VQcm9wcyIsInNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UiLCJ2YWxpZGF0ZVByb3BzIiwiR3JpZCIsIl9pbnN0YW5jZVByb3BzIiwiX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQiLCJfb3V0ZXJSZWYiLCJpc1Njcm9sbGluZyIsImhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJpbml0aWFsU2Nyb2xsTGVmdCIsImluaXRpYWxTY3JvbGxUb3AiLCJzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCJ2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiIsIl9jYWxsT25JdGVtc1JlbmRlcmVkIiwib3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4Iiwib3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgiLCJvdmVyc2NhblJvd1N0YXJ0SW5kZXgiLCJvdmVyc2NhblJvd1N0b3BJbmRleCIsInZpc2libGVDb2x1bW5TdGFydEluZGV4IiwidmlzaWJsZUNvbHVtblN0b3BJbmRleCIsInZpc2libGVSb3dTdGFydEluZGV4IiwidmlzaWJsZVJvd1N0b3BJbmRleCIsIl9jYWxsT25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwicG9zaXRpb24iLCJsZWZ0IiwicmlnaHQiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiX3RoaXMkcHJvcHMyIiwiY29sdW1uQ291bnQiLCJyb3dDb3VudCIsIl90aGlzJHN0YXRlIiwic2Nyb2xsYmFyU2l6ZSIsImVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiaG9yaXpvbnRhbFNjcm9sbGJhclNpemUiLCJ2ZXJ0aWNhbFNjcm9sbGJhclNpemUiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRzdGF0ZTIiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsIl90aGlzJHByb3BzNCIsImlubmVyRWxlbWVudFR5cGUiLCJpbm5lclRhZ05hbWUiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJfcm93SW5kZXgiLCJfY29sdW1uSW5kZXgiLCJlc3RpbWF0ZWRUb3RhbFdpZHRoIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJ3aWxsQ2hhbmdlIiwicG9pbnRlckV2ZW50cyIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJkZWZhdWx0UHJvcHMiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwibGFzdE1lYXN1cmVkSW5kZXgiLCJmaW5kTmVhcmVzdEl0ZW0iLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2giLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCIsImhpZ2giLCJsb3ciLCJtaWRkbGUiLCJjdXJyZW50T2Zmc2V0IiwiZXN0aW1hdGVkVG90YWxTaXplIiwibWF4T2Zmc2V0IiwibWluT2Zmc2V0Iiwicm91bmQiLCJWYXJpYWJsZVNpemVHcmlkIiwicmVzZXRBZnRlckNvbHVtbkluZGV4Iiwic2hvdWxkRm9yY2VVcGRhdGUiLCJyZXNldEFmdGVySW5kaWNlcyIsInJlc2V0QWZ0ZXJSb3dJbmRleCIsIl9yZWY2JHNob3VsZEZvcmNlVXBkYSIsIl9yZWY3IiwiZGVmYXVsdEl0ZW1LZXkkMSIsImNyZWF0ZUxpc3RDb21wb25lbnQiLCJnZXRJdGVtT2Zmc2V0IiwiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwiZ2V0SXRlbVNpemUiLCJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsImdldFN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiTGlzdCIsInNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxPZmZzZXQiLCJvdmVyc2NhblN0YXJ0SW5kZXgiLCJvdmVyc2NhblN0b3BJbmRleCIsImlzSG9yaXpvbnRhbCIsIm9mZnNldEhvcml6b250YWwiLCJfb25TY3JvbGxIb3Jpem9udGFsIiwiX29uU2Nyb2xsVmVydGljYWwiLCJfZXZlbnQkY3VycmVudFRhcmdldDIiLCJ2YWxpZGF0ZVNoYXJlZFByb3BzJDEiLCJfdGhpcyRwcm9wczUkaXRlbUtleSIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZCIsIl9nZXRSYW5nZVRvUmVuZGVyIiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kMiIsIl9vdmVyc2NhblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5TdG9wSW5kZXgiLCJfdmlzaWJsZVN0YXJ0SW5kZXgiLCJfdmlzaWJsZVN0b3BJbmRleCIsIl9zY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsT2Zmc2V0IiwiZ2V0SXRlbU1ldGFkYXRhJDEiLCJmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEiLCJlc3RpbWF0ZWRJdGVtU2l6ZSIsInRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyIsIlZhcmlhYmxlU2l6ZUxpc3QiLCJmaW5kTmVhcmVzdEl0ZW0kMSIsIkZpeGVkU2l6ZUdyaWQiLCJsYXN0Q29sdW1uT2Zmc2V0IiwibWlkZGxlT2Zmc2V0IiwiY2VpbCIsIl9yZWY4IiwibGFzdFJvd09mZnNldCIsIl9yZWY5IiwiX3JlZjEwIiwibnVtVmlzaWJsZUNvbHVtbnMiLCJfcmVmMTEiLCJfcmVmMTIiLCJudW1WaXNpYmxlUm93cyIsIl9yZWYxMyIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlByb3BzIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRTdGF0ZSIsImlzZmYiLCJ1c2VyQWdlbnQiLCJ0b0xvd2VyQ2FzZSIsImFkZEV2ZW50IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsInNsaWNlIiwiZ2V0S2V5cyIsInJlcGxhY2UiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiJyIsIl9tb2RpZmllciIsInNoaWZ0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCIxNiIsIjE4IiwiMTciLCI5MSIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwieCIsInRvVXBwZXJDYXNlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwiZmlsdGVyIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJjYW5jZWxCdWJibGUiLCJkaXNwYXRjaCIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImZpbmQiLCJ1bmJpbmQiLCJrZXlzSW5mbyIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiQm9vbGVhbiIsImRlcHMiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiXSwibWFwcGluZ3MiOiI2REFDRSxJQUFJQSxFQUFtQixH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S0EzQkxOLEVBK0IrQlksRUEvQmpCLENBQUMsUUFBUyxXQUFZLGFBK0JjWixFQUFVWSxFQUFlWCxJQUFtRSxPQUFqRGEsRUFBd0JGLEVBQWM1OUIsU0FBbUI4OUIsRUFBc0J6QixvQkFBc0JxQixLQUluTCxPQUFoQi8vQixFQUFJc0gsU0FBb0JkLFNBQVM0NUIsZ0JBQWtCcGdDLEVBQUlzSCxXQUN6RCtNLEVBQVM0ckIsRUFBZUMsSUFDakIsS0FJUlQsRUFBTyxDQUFDei9CLEVBQUtzL0IsRUFBY3BELEdBQVExdEIsT0FBT2l4QixHQUFRLENBQUN6L0IsRUFBS3MvQixFQUFjcEQsSUFpQnpFLE9BaEJBLHFCQUFVLFdBQ1IsR0FBSzJELEVBV0wsT0FMSWxDLElBQXFCLElBQVpELElBQ1h2cEIsRUFBUXVwQixTQUFVLEdBR3BCSixFQUFRNWtCLEVBQU12RSxHQUFXLEdBQUk2ckIsR0FDdEIsV0FDTCxPQUFPMUMsRUFBUXdCLE9BQU9wbUIsRUFBTXNuQixJQVg1QjFDLEVBQVF3QixPQUFPcG1CLEVBQU1zbkIsS0FhdEIsQ0FBQ0EsRUFBa0J0bkIsRUFBTW1uQixJQUNyQjcvQixFQUdULElBQUlxZ0MsRUFBa0IvQyxFQUFRZ0IiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlZLWW9OdFdUWnVpMkFPMUlseUpNVHc9PVwifTsiLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWJsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ4eW51TXU4WFpTc29uRHVrc2w2QVFnPT1cIixcImxlZnRcIjpcIlBrcDBIaE5IdHRvV0liMmR3cEdudHc9PVwiLFwic21hbGxcIjpcIndET2VlSkdDWm0wazJacE56RmJlSGc9PVwiLFwibGFyZ2VcIjpcIl81UWpCV3RsN1lYeTRlbTRYM0dQYlJBPT1cIixcInhsYXJnZVwiOlwia04wTGdhNGZCT2djaWdEcXRPRFJkZz09XCIsXCJpbnZlcnRlZFwiOlwiKzVuc1RuTGxOT1g4S0ZRaVVoVDFrUT09XCIsXCJyb3VuZGVkXCI6XCJCalAtSk5XSmpvQmZOTU16dG55V09RPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJsR0p3TmNvbDhDQWtucXhZKzhEZnFnPT1cIixcImxlZnRPZmZzZXRcIjpcIkVWK2c2aFVBMXF2OExROVJxZ3JRUlE9PVwiLFwibm9TaGFkb3dcIjpcIlozdVBMcnJ5cUlOZlJqWnBwd1U2TlE9PVwiLFwibm9Cb3JkZXJcIjpcImVFZ2hHNkdYQjlJenlEM2pyTlpmQUE9PVwiLFwidHJhbnNwYXJlbnRcIjpcInNzN0RoVmdGNUpHc3BDQVNkWlVZQmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiaThRUFNyNGNIWWhKN0FpdWUrY3gwZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiV1N4aW1VTTlreFlHYzVWUmMwaVpsQT09XCIsXCJub1BhZGRpbmdcIjpcIlNnWGNoano0ZEpyK3RjOHlrTG5FMUE9PVwiLFwiY29udGVudFwiOlwieG44eWZqTjZtZXhSWElneU5obWtpdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi9CdXR0b25CYWRnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbkJhZGdlLm1vZHVsZS5jc3NcIjtcblxudHlwZSBCdXR0b25CYWRnZVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbkJhZGdlKHsgY2hpbGRyZW4sIGludmVydGVkID0gZmFsc2UsIGNsYXNzTmFtZSB9OiBCdXR0b25CYWRnZVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuYnV0dG9uQmFkZ2UsIHtbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWR9LCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25CYWRnZTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcIlJTamJSaVhGV0FmQnpjQ29hTXBYZUE9PVwiLFwiaW52ZXJ0ZWRcIjpcIlg0bzRPS3NTMVQ0bWlJczBDcTV4LWc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpJcjl3LS1mU2l2cVdWR29TcDE0dEE9PVwiLFwibGVmdFwiOlwiclJ5dTlBVkd3WCsteGpUT01UU0Uxdz09XCIsXCJzbWFsbFwiOlwiXzBEQmhHSnZjYmpFTWxTcUVvZkYtcnc9PVwiLFwibWVkaXVtXCI6XCJhNit6Y1VZNlhLeTk0ekFxVVlhRTZ3PT1cIixcImxhcmdlXCI6XCJXK3Y0dkZlYlFreHcxY2RpS1ktS3ZnPT1cIixcInhsYXJnZVwiOlwiZFk5MURRUllVYVdUNEV6T0pKK0dCZz09XCIsXCJpbnZlcnRlZFwiOlwieXBsQ3B5bEw0SWRlcytjT3JxU2ltUT09XCIsXCJyb3VuZGVkXCI6XCJNUkVZMDkrZDY5dlY4NGhabkp1TFl3PT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJIc2FvN21GVzNsWVRyTmhmV3ZmeFd3PT1cIixcImxlZnRPZmZzZXRcIjpcIk1YbEwzTzhLVVllVkFZY1Nzbk5zOXc9PVwiLFwibm9TaGFkb3dcIjpcIkhxejRDcVFjTzRzME1UYXdyRHIwb0E9PVwiLFwidHJhbnNwYXJlbnRcIjpcImgxaE53YzJVbE0wQzVGLXhkZ2E1ZHc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiVG15cTQrdUhVK0pKZVlOZEJIOEwyUT09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiSnp6R25UdDRhTTMrOXJWbE5RV2kwQT09XCIsXCJub1BhZGRpbmdcIjpcIlV2SThVbmpjOVgwek4ybDVXK3RtclE9PVwiLFwibm9Cb3JkZXJcIjpcIlFwNXVCblFnSkZvWkhnWVNoekFQY3c9PVwiLFwiZGlzYWJsZWRcIjpcIlpYbGprWXBQV2pESkxDNEJFR01wcnc9PVwiLFwiY29udGVudFwiOlwiXzBuMk1uT2ZKUG0yd3hzNE0ybmJHSEE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NoZWNrYm94Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBDaGVja2JveFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U6ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuXG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT5cbiAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfSA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjaGVja2JveFwiXG4gICAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0UmVmKSB7XG4gICAgICAgICAgICBpbnB1dFJlZi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNoZWNrZWQ9e2NoZWNrZWR9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNoZWNrYm94LCBjbGFzc05hbWUsIHN0eWxlc1tzaXplXV0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgLz5cbiAgICA8L0xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImJSN1BPOHlSRnRVbE4xdnNQN2VjUlE9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNoZWNrYm94XCI6XCJDQlFaNFBwMWNsYis1UjhJbENPNGdRPT1cIixcInNtYWxsXCI6XCJfNWpianV0N0dndDdneGVuanlmOUxiUT09XCIsXCJtZWRpdW1cIjpcImlQQU93MlpzTkpBMG5XRFhxV0MzN2c9PVwiLFwibGFyZ2VcIjpcIkxFeWtYczltRUVTZHdvNmlab01kVXc9PVwiLFwieGxhcmdlXCI6XCJ1cXBBQ0VKMW9iQTRiUmxhZUFUMjdnPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclBpY2tlciB9IGZyb20gXCIuL0NvbG9yUGlja2VyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JTd2F0Y2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclN3YXRjaFByb3BzID0ge1xuICBjb2xvcjogQ29sb3I7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBDb2xvclN3YXRjaCh7XG4gIGNvbG9yLFxuICBjb250YWluZXJSZWYsXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIG9uQ2xpY2ssXG59OiBDb2xvclN3YXRjaFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbG9yU3dhdGNoLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNTZWxlY3RlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJjb2xvci1zd2F0Y2hcIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogY29sb3IuaGV4Q29kZSB9fVxuICAgID5cbiAgICAgIHtjb2xvci5sYWJlbCAmJiA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zck9ubHl9PntgU2VsZWN0ICR7Y29sb3IubGFiZWx9IGNvbG9yYH08L3NwYW4+fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclN3YXRjaDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcInVUZjdtWWZYZU5UN0duMHpublI4RFE9PVwiLFwic21hbGxcIjpcImFBYmV6ak9tdzJOeVQ5UlU3UHV5T0E9PVwiLFwibGFyZ2VcIjpcIlFjNlNDdnFibm5oSjN6dGd6UFpPRkE9PVwiLFwieGxhcmdlXCI6XCJfNm9CQlpEa1JremY3dEY0Ymh5RHRBQT09XCIsXCJzZWxlY3RlZFwiOlwibmljWmZnTWsrdVFGUHlwSklrUXVidz09XCIsXCJzck9ubHlcIjpcIkdIcEhFQjFRWER5amVSOVZuRWQxVGc9PVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJES3RQNTViT2ZVVEIxa0RhLWlVSHFRPT1cIixcImhvcml6b250YWxcIjpcIl8zNExqOC1iLTEzQzhMMDlSc01pbmVnPT1cIixcInZlcnRpY2FsXCI6XCJfMXl1Z0dRczRFazB0M1Q4dGdvS3hWUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0RWxlbWVudCwgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTW9kYWwgfSBmcm9tIFwiLi4vTW9kYWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIENvbmZpcm1hdGlvbk1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbn06IENvbmZpcm1hdGlvbk1vZGFsUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8TW9kYWxcbiAgICAgIGNvbnRhaW5lclJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgaXNPcGVuPXtpc09wZW59XG4gICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgbm9PdmVybGF5PXtub092ZXJsYXl9XG4gICAgICBub1NoYWRvdz17bm9TaGFkb3d9XG4gICAgICBiYXNlWkluZGV4PXtiYXNlWkluZGV4fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgICB7ISFoZWFkZXIgJiYgPGgxIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsSGVhZGVyfT57aGVhZGVyfTwvaDE+fVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWxDb250ZW50LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc0xlZnR9PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zUmlnaHR9PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9Nb2RhbD5cbiAgKTtcbn1cblxuQ29uZmlybWF0aW9uTW9kYWwuZGlzcGxheU5hbWUgPSBcIkNvbmZpcm1hdGlvbk1vZGFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpcm1hdGlvbk1vZGFsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwicFU2SUIycjBMcENGUFhnVHZPcjJnQT09XCIsXCJub092ZXJsYXlcIjpcIl81U1VSOUZoLWZIVHk0WHI2bVFDK3BBPT1cIixcIm1vZGFsXCI6XCJMQ0FUODNtdVhzQUdyUFVIUTF5K2hRPT1cIixcInRyYW5zcGFyZW50XCI6XCJXSFU4UWJweitBdlQtWXB1UWVVSy1RPT1cIixcIm5vU2hhZG93XCI6XCJHaTFWVG1nM0dQTnhuWDkxLW0wLTVnPT1cIixcIm1vZGFsQnV0dG9uXCI6XCJsZm5mSHUreHllRWpjUWJBUXdqSVRnPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImp2S1NpLWZLdWZjcEs5ZUJXV0ZDTGc9PVwiLFwibW9kYWxIZWFkZXJcIjpcImN4MVJvUWRnQWJlbnZWWFU4QjdmU3c9PVwiLFwibW9kYWxDb250ZW50XCI6XCJaRDR2M0hFLUFZWlhWMElUV0RGN0dnPT1cIixcIm5vUGFkZGluZ1wiOlwiXzF6RkY4eHF5bzc3VXhHMnY1NDlCZUE9PVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJfNGhRaENlNVU3WUJ5aG5oTystR3Fpdz09XCIsXCJtb2RhbEJ1dHRvbnNcIjpcIkpvSUxiVzVGblppeGFKN0VUdm84K3c9PVwifTsiLCJleHBvcnQge1xuICBEcm9wZG93bixcbiAgRHJvcGRvd25Qcm9wcyxcbiAgSXRlbSBhcyBEcm9wZG93bkl0ZW0sXG4gIEl0ZW1Cb2R5UmVuZGVyZXJGbiBhcyBEcm9wZG93bkl0ZW1Cb2R5UmVuZGVyZXJGbixcbiAgUmVuZGVyQ2xpY2thYmxlRm4gYXMgRHJvcGRvd25SZW5kZXJDbGlja2FibGVGbixcbiAgUmVuZGVyRGlzcGxheVByb3BzIGFzIERyb3Bkb3duUmVuZGVyRGlzcGxheVByb3BzLFxufSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuZXhwb3J0IHtcbiAgQ2xpY2thYmxlIGFzIERyb3Bkb3duQ2xpY2thYmxlLFxuICBDbGlja2FibGVQcm9wcyBhcyBEcm9wZG93bkNsaWNrYWJsZVByb3BzXG59IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Q2hpbGQsIFJlYWN0RWxlbWVudCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuXG5pbXBvcnQgeyBDbGlja2FibGUgfSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbmltcG9ydCB7IE1lbnUsIE1lbnVDb250YWluZXIsIE1lbnVJdGVtLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4uL01lbnVcIjtcblxuZXhwb3J0IHR5cGUgSXRlbSA9IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckRpc3BsYXlQcm9wczxUIGV4dGVuZHMgSXRlbT4gPSBQaWNrPFxuICBEcm9wZG93blByb3BzPFQ+LFxuICBcImRpc3BsYXlcIiB8IFwic2VsZWN0ZWRJdGVtXCJcbj4gJiB7IGlzRGlzYWJsZWQ6IGJvb2xlYW47IHRvZ2dsZUlzT3BlbjogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJDbGlja2FibGVGbjxUIGV4dGVuZHMgSXRlbT4gPSAoXG4gIHByb3BzOiBSZW5kZXJEaXNwbGF5UHJvcHM8VD5cbikgPT4gUmVhY3RFbGVtZW50O1xuXG5leHBvcnQgdHlwZSBJdGVtQm9keVJlbmRlcmVyRm48VCBleHRlbmRzIEl0ZW0+ID0gKHN0YXRlOiB7XG4gIGl0ZW06IFQ7XG4gIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG59KSA9PiBSZWFjdENoaWxkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bkb3duUHJvcHM8VCBleHRlbmRzIEl0ZW0+IHtcbiAgaXRlbUJvZHlSZW5kZXJlcj86IEl0ZW1Cb2R5UmVuZGVyZXJGbjxUPjtcbiAgaXRlbXM6IFRbXTtcbiAgb25TZWxlY3Q6IChpdGVtOiBUKSA9PiB2b2lkO1xuICBkaXNwbGF5OiBSZWFjdENoaWxkO1xuICByZW5kZXJDbGlja2FibGU/OiBSZW5kZXJDbGlja2FibGVGbjxUPjtcbiAgc2VsZWN0ZWRJdGVtOiBUIHwgbnVsbDtcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERyb3Bkb3duPFQgZXh0ZW5kcyBJdGVtPih7XG4gIGl0ZW1Cb2R5UmVuZGVyZXIsXG4gIGl0ZW1zLFxuICBvblNlbGVjdDogaGFuZGxlU2VsZWN0LFxuICBkaXNwbGF5LFxuICByZW5kZXJDbGlja2FibGUsXG4gIHNlbGVjdGVkSXRlbSxcbiAgcGxhY2VtZW50ID0geyB2ZXJ0aWNhbDogXCJib3R0b21cIiwgaG9yaXpvbnRhbDogXCJsZWZ0XCIgfVxufTogRHJvcGRvd25Qcm9wczxUPikge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gc2V0SXNPcGVuKGZhbHNlKSk7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGl0ZW06IFQpID0+IHtcbiAgICBoYW5kbGVTZWxlY3QoaXRlbSk7XG4gICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgfTtcbiAgY29uc3QgaXNEaXNhYmxlZCA9ICFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHRvZ2dsZUlzT3BlbiA9ICgpID0+IHNldElzT3BlbighaXNPcGVuKTtcblxuICByZXR1cm4gKFxuICAgIDxNZW51Q29udGFpbmVyXG4gICAgICBidXR0b249e1xuICAgICAgICB0eXBlb2YgcmVuZGVyQ2xpY2thYmxlID09PSBcImZ1bmN0aW9uXCIgPyAoXG4gICAgICAgICAgcmVuZGVyQ2xpY2thYmxlKHtcbiAgICAgICAgICAgIGRpc3BsYXksXG4gICAgICAgICAgICBpc0Rpc2FibGVkLFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdG9nZ2xlSXNPcGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENsaWNrYWJsZVxuICAgICAgICAgICAgZGlzcGxheT17ZGlzcGxheX1cbiAgICAgICAgICAgIGlzRGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVJc09wZW59XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICByZWY9e3JlZn1cbiAgICA+XG4gICAgICA8TWVudSBpc09wZW49e2lzT3Blbn0+XG4gICAgICAgIHtpdGVtcyAmJlxuICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtXG4gICAgICAgICAgICAgIGlzQWN0aXZlPXtpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWR9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNsaWNrKGl0ZW0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aXRlbUJvZHlSZW5kZXJlclxuICAgICAgICAgICAgICAgID8gaXRlbUJvZHlSZW5kZXJlcih7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGl0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWQsXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogaXRlbS5uYW1lfVxuICAgICAgICAgICAgPC9NZW51SXRlbT5cbiAgICAgICAgICApKX1cbiAgICAgIDwvTWVudT5cbiAgICA8L01lbnVDb250YWluZXI+XG4gICk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJZQTJJSFFENG9wcE9pb1pJQ0h3end3PT1cIixcInNtYWxsXCI6XCJxZHpzMkVNbUJkYjBNek5TMGlEaE1BPT1cIixcIm1lZGl1bVwiOlwiSTZlRUdJQks1OU9rZHB3VW91YWF1UT09XCIsXCJsYXJnZVwiOlwiXzJiaTZJRVloZE1iUGdQSmZ3b1BqdUE9PVwiLFwieGxhcmdlXCI6XCJja2tyNFpGT1ZHdUNONEVqUE1xZUdBPT1cIixcImludmVydGVkXCI6XCJlbTVyTDRuQUgxSXdmM01IZUllUG1nPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIncwQ3Bhc2pZeUxSLWkyUE5JbjlFc2c9PVwifTsiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJxY3ZEU2ZGdCt3MGphMmZxUGMwUzV3PT1cIixcIm1lbnVDb250YWluZXJcIjpcIkx3cjFhM2JQLTk1YWV6em1hY29KZnc9PVwiLFwidG9wXCI6XCJiQkhicytGV2k2LXp3V01aSW1GK05BPT1cIixcInJpZ2h0XCI6XCJCOE00Mk53b1o4cFVWbTVSNEpKdjFnPT1cIixcImxlZnRcIjpcInBPRzd0WGZURms4cXFYdE5DMEUtT3c9PVwiLFwiYm90dG9tXCI6XCJ1Y3ZOMEVGTW5zOGJmVnZzaTlqOXlRPT1cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJyU0Jmc0ZOampvb0pzREgtWCtZWGJ3PT1cIixcIm9wZW5cIjpcInZYN3ZnQTlabEY3VDlFUjlWSm9kYlE9PVwiLFwiZW50cmFuY2VcIjpcIkdwQjJMc2FkaHVHSlp2S29OT2RvekE9PVwiLFwiaGVhZGVyXCI6XCJvQVRsQkZnZXBaNWdBWkFyLUN4bkFBPT1cIixcImZvb3RlclwiOlwid0tlRTczellmYi03Y1JOLUY4T1kxZz09XCIsXCJub0JvcmRlclwiOlwiTEQ2TER2cy15bE1yUGdzbGo0eDNoZz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcIm1KZDdkUlpOT3dZZThJOUNxRmx6cmc9PVwiLFwibm9QYWRkaW5nXCI6XCJ4Y2tET2RuUFBZS1RreW0yYXd0cmpBPT1cIixcImFjdGl2ZVwiOlwieCt5ckNxNUJ1K2pnWDdTUlVyOWZldz09XCJ9OyIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwib0VyOFpKWExuWnlESkJPUlp0SVY0dz09XCIsXCJub1BhZGRpbmdcIjpcIl8zVE5JSkFldEFTeXpiSStLbExUSEN3PT1cIixcImFjdGl2ZVwiOlwiZ2hhdUNUUFRCRUpBdUFvNjMyejVmUT09XCIsXCJtZW51SXRlbVwiOlwibjF4bjRFWXV4RXFPYzNmQ0VhbXozUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJlVXFhMzUrRW0yTGNoMjZOeGpidStRPT1cIixcImxhYmVsXCI6XCJueFcyMWg4VUkwTU50d28ya2NBZEl3PT1cIixcInNtYWxsXCI6XCJOZGExcEFjR0pjeURERVM1RVZKc293PT1cIixcImxhcmdlXCI6XCJ6cUxTM1lIWHRqbE1Cc0ZPenJ2RVpnPT1cIixcInhsYXJnZVwiOlwiVlpsNVd5QWt2MzAxLWhDQ3plNU1uUT09XCIsXCJpbnZlcnRlZFwiOlwidmxTYUpRSmh6dDZJTnZXaThOdFV3Zz09XCIsXCJyb3VuZGVkXCI6XCJiLXg1VHJ5U05HQ0Y5SFk4SjNIdEFBPT1cIixcIm5vU2hhZG93XCI6XCJfNXdsMTRKamYxeXhId0FMeG1FdzZNUT09XCIsXCJub0JvcmRlclwiOlwiZGxYV1FPbE5lK2FGa1ZiUHhETG00QT09XCIsXCJub1BhZGRpbmdcIjpcImlQeFVHLU9OMVhMT2tmVlB6dDdOWVE9PVwiLFwidHJhbnNwYXJlbnRcIjpcIkJQWEk5dTNoZ0F5ZEFjNUJ6emtDTmc9PVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSk0zSlZYdDc3bkg5dXIrYUwrUllEZz09XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiTVhhc2tmZld6MmstaHF0SFJ0MnZPUT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmxvYXRpbmdQYW5lbCB9IGZyb20gXCIuL0Zsb2F0aW5nUGFuZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDpcbiAgICB8IFwicmlnaHRcIlxuICAgIHwgXCJyaWdodEVkZ2VcIlxuICAgIHwgXCJyaWdodE9uRWRnZVwiXG4gICAgfCBcImxlZnRcIlxuICAgIHwgXCJsZWZ0RWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHZlcnRpY2FsOlxuICAgIHwgXCJ0b3BcIlxuICAgIHwgXCJ0b3BFZGdlXCJcbiAgICB8IFwidG9wT25FZGdlXCJcbiAgICB8IFwiYm90dG9tXCJcbiAgICB8IFwiYm90dG9tRWRnZVwiXG4gICAgfCBcImJvdHRvbU9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICBwYXJlbnQ6IFwidmlld3BvcnRcIiB8IFwiY29udGFpbmVyXCI7XG59O1xuXG50eXBlIEZsb2F0aW5nUGFuZWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvbHVtblwiIHwgXCJyb3dcIjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xufTtcblxuZnVuY3Rpb24gRmxvYXRpbmdQYW5lbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgbGF5b3V0ID0gXCJjb2x1bW5cIixcbiAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImNlbnRlclwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiwgcGFyZW50OiBcInZpZXdwb3J0XCIgfSxcbn06IEZsb2F0aW5nUGFuZWxQcm9wcykge1xuICBjb25zdCBob3Jpem9udGFsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQuaG9yaXpvbnRhbCA9PT0gXCJjZW50ZXJcIlxuICAgICAgPyBcImhvcml6b250YWxDZW50ZXJcIlxuICAgICAgOiBwbGFjZW1lbnQuaG9yaXpvbnRhbDtcblxuICBjb25zdCB2ZXJ0aWNhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50LnZlcnRpY2FsID09PSBcImNlbnRlclwiID8gXCJ2ZXJ0aWNhbENlbnRlclwiIDogcGxhY2VtZW50LnZlcnRpY2FsO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImZsb2F0aW5nLXBhbmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbaG9yaXpvbnRhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1t2ZXJ0aWNhbFBsYWNlbWVudF0sXG4gICAgICAgIHN0eWxlc1tsYXlvdXRdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IHBsYWNlbWVudC5wYXJlbnQgIT09IFwiY29udGFpbmVyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmxvYXRpbmdQYW5lbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrVVRDcTdzTzVjUUhybjIwUEpVQ213PT1cIixcInJvd1wiOlwidGRuYzFiREhEbUdiZ0FjN1NKcjY5UT09XCIsXCJjb2x1bW5cIjpcIk1tdDA3Nk42QXh5SDROUkRwQ083V0E9PVwiLFwiZml4ZWRcIjpcIl85MmViUXZKNXhOS0pTOHpha0s3UzJBPT1cIixcInBsYWluXCI6XCJ5K2lkRHhaKzVNcHA3T0kzR1BMQUVnPT1cIixcInRyYW5zcGFyZW50XCI6XCJDRHFvaUswZ0NUSnBuSmdWb1lnSkRRPT1cIixcInRvcFwiOlwiR1BzSGxOUERiRDZLZE5RRUdqOHpRUT09XCIsXCJ0b3BFZGdlXCI6XCJ4Umcwb0FOcnhzeFhOQnlJcG5OSnZ3PT1cIixcInRvcE9uRWRnZVwiOlwiUUF5ZUZGR1JvbnhYUzlGZ0oyZCtXdz09XCIsXCJyaWdodFwiOlwiSThFRENKem8wWndUdGdiVlRNbXpkZz09XCIsXCJyaWdodEVkZ2VcIjpcIlcyQWhtM3h1YTJ2ZUMzSUNUMktRTkE9PVwiLFwicmlnaHRPbkVkZ2VcIjpcInlqQkNRWUVBOG1XaUk5OENGWDVMc3c9PVwiLFwiYm90dG9tXCI6XCJXSnh6WFFMLTVOUHZEZ25lVmdrVndBPT1cIixcImJvdHRvbUVkZ2VcIjpcIkdWSnMtLXBMRGpXdnU5Qy15MzR5Y3c9PVwiLFwiYm90dG9tT25FZGdlXCI6XCJERFZkLVBwbHhuTHBTTEZsR3RGaG53PT1cIixcImxlZnRcIjpcIm9VVE12akwwSHhHZW5VN2tKZFN4SEE9PVwiLFwibGVmdEVkZ2VcIjpcIkJpTnNBa01adWkrNWktS3pZeHEwY1E9PVwiLFwibGVmdE9uRWRnZVwiOlwiXzF2OGltSDBNVGotck1aMHJDLWloUWc9PVwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiRDRwNUFhMDYzVG5tN20wdWFHaExrdz09XCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiXzJkZUctWTJBM3p3NmtGK1dCbkVtanc9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQnZRdHNVQWEtZlFQbVhidlZTVkNOUT09XCIsXCJzbWFsbFwiOlwiXzhaZjRMemNlaUlvZXI3UElWUjhCWUE9PVwiLFwibWVkaXVtXCI6XCJfN1BGMmRuSmdaeElFK3RTMzN4SzRLQT09XCIsXCJsYXJnZVwiOlwiRWJPWXZHS1hpQWFib2hpNE95MUNNdz09XCIsXCJ4bGFyZ2VcIjpcInVPZlo5TGlHem5hQkdJdXg0MHBGR2c9PVwiLFwicm91bmRlZFwiOlwidkFqMHhtalhKVGZEYldJQ1ZLQm8yZz09XCIsXCJ0b3BPZmZzZXRcIjpcIl84WVNzLWtoSUR6SWVmUlJoNXpIMytRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJxNGpJbDJYRk9idnNETS00UXh2dHV3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzgyS2JFY0VaemNSNVZxSGx4ODYyUFE9PVwiLFwibGVmdE9mZnNldFwiOlwieG5jMStPREZtQlBpaWY1Sm9xVG5kQT09XCIsXCJpbnZlcnRlZFwiOlwiYmhWVVRka1FsdGN0bXJaZTBUNzJrdz09XCIsXCJub1NoYWRvd1wiOlwibnNnaDJjNmNIdHp4YVJyTGt2NkZ6dz09XCIsXCJub0JvcmRlclwiOlwiVnp5NkM0ZGp0cGZMMnBWNW9ZY09Qdz09XCIsXCJ0cmFuc3BhcmVudFwiOlwiRnZkUFMtKzF0bHNUWjFjaUVsc3Z4UT09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJtVWhDN1hCWWVoTmwxZitONWhSTzRBPT1cIixcInNtYWxsXCI6XCJzTVMxRmdNM3d3TGcrTGd1dmNYRHdnPT1cIixcIm1lZGl1bVwiOlwiXzFqVTg1bUVQNWlhV3luY0xMYjhsU0E9PVwiLFwibGFyZ2VcIjpcImNJZ2dnUzJmNVBhQkNJVGZ0czByQWc9PVwiLFwieGxhcmdlXCI6XCJUMnphb213TFlIUXgtWUYtdkR0d0h3PT1cIixcInJvdW5kZWRcIjpcIkZNQWg2Z3NGUnJVZkYtQytoeEZKU0E9PVwiLFwidG9wT2Zmc2V0XCI6XCJ5WXZySW1RWnlwS3RKMGNiK2hFZFdRPT1cIixcInJpZ2h0T2Zmc2V0XCI6XCJFaUxRVWUrQkQ4dWJ4ZGorSlF1SHp3PT1cIixcImJvdHRvbU9mZnNldFwiOlwiXzBxSE5JUnNtK01SOXJ5WHBKbUVOUVE9PVwiLFwibGVmdE9mZnNldFwiOlwiTG1JTWx4dnFrUmppSWdZTEh4YVpCZz09XCIsXCJpbnZlcnRlZFwiOlwiQmMrUmg2Qjk3Kzc0amtlTWRDdHJ6Zz09XCIsXCJub1NoYWRvd1wiOlwiaUdHQ0dpZjJ5U2NNSVNEay0ybWtGUT09XCIsXCJub0JvcmRlclwiOlwiZG5qbjFvRnROVkZOMmZSV21La1ozQT09XCIsXCJ0cmFuc3BhcmVudFwiOlwiWndpRjB1NktUSkRnd1JDNFdTTDNyQT09XCIsXCJkaXNhYmxlZFwiOlwibWNaTEp6VDdWczdibFE5Unh3N1JVdz09XCJ9OyIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfOWdRU1ItK2dxbzVyRHZXUG1Rb0FlUT09XCIsXCJoYXNPdmVybGF5XCI6XCJpaTMrNksrRlc0WWplUUZtLUlOM3NBPT1cIixcIm92ZXJsYXlcIjpcIl8wMEV4TmMzS3crSE9mVENGYTM0R0l3PT1cIixcImltYWdlXCI6XCJyd0Q1ckhjWkZSTmE0ZEhvNmozSnlRPT1cIixcImNvdmVyXCI6XCJfNkFhTjFUNlNZNkVlaitGYVF0YTQyZz09XCIsXCJjb250YWluXCI6XCJFUURrUDBGNXp6Sml0Rjh1TzZIK21BPT1cIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkdCS1BrYzhyc3lqVVZ1Q3AxT2xCb1E9PVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIl81U3p3U0orNlo0Ui1ZYTExZ3dMclNRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJsSnpkUDBtbmZwZ2xGU1l0S0tZekp3PT1cIixcImhlYWRlclwiOlwiXzgydkNRN3hyME5rWTRVbHlTUGtwa3c9PVwiLFwiaGVhZGVyTGFiZWxcIjpcInVuV2VQZElLbjRYYXdSdUw3Q1BEMGc9PVwiLFwibGlzdFwiOlwiXzVCWCtaWi1BYVF1dGN6YkRTMmU1LXc9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJFSUI5LWw1OGdDM1p2dFc4dnRVQUxBPT1cIixcInRyYW5zcGFyZW50XCI6XCJDTTEtbjNzRzhZTmQ3M3FKVlhNMjJnPT1cIixcImZpeGVkXCI6XCJvTzFpVE5sUGpkYTFmanJZZXlMdVVBPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBGaXhlZFNpemVMaXN0LCBMaXN0T25TY3JvbGxQcm9wcyB9IGZyb20gXCJyZWFjdC13aW5kb3dcIjtcbmltcG9ydCBJbmZpbml0ZUxvYWRlciBmcm9tIFwicmVhY3Qtd2luZG93LWluZmluaXRlLWxvYWRlclwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXIgZnJvbSBcIi4vVGFibGVIZWFkZXJcIjtcbmltcG9ydCBUYWJsZVJvdyBmcm9tIFwiLi9UYWJsZVJvd1wiO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGUubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGFJbmRleDogc3RyaW5nO1xuICByZW5kZXI/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ7XG4gIHdpZHRoPzogc3RyaW5nO1xufTtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBkYXRhU291cmNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W107XG4gIHRhYmxlSGVpZ2h0OiBudW1iZXI7XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICBvbkxvYWRNb3JlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2V0UGFnZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlcj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgcm93SGVpZ2h0PzogbnVtYmVyO1xuICBkaXNhYmxlTGF6eUxvYWRlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd3M/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpdGVtc0NvdW50PzogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhhc1ZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3Njcm9sbFRvcCwgc2V0U2Nyb2xsVG9wXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHJlbmRlclJvdyA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGRhdGEsIGluZGV4LCBzdHlsZSB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhW2luZGV4XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIHRvcDogc3R5bGUudG9wIH19PlxuICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3cuaWRdfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjb2x1bW5zLCBhY3RpdmVSb3dzLCBoYXNBcnJvdywgcm93SGVpZ2h0LCBvblJvd0NsaWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBzY3JvbGxPZmZzZXQgfTogTGlzdE9uU2Nyb2xsUHJvcHMpID0+IHtcbiAgICAgIHNldFNjcm9sbFRvcChzY3JvbGxPZmZzZXQpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT09IGl0ZW1zQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPCBwYWdlU2l6ZSAqIHBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2V0UGFnZSAmJiBvbkxvYWRNb3JlKSB7XG4gICAgICBzZXRQYWdlKHBhZ2UgKyAxKTtcbiAgICAgIG9uTG9hZE1vcmUocGFnZSArIDEpO1xuICAgIH1cbiAgfSwgW1xuICAgIGRpc2FibGVMYXp5TG9hZGVyLFxuICAgIGRhdGFTb3VyY2UubGVuZ3RoLFxuICAgIGl0ZW1zQ291bnQsXG4gICAgcGFnZVNpemUsXG4gICAgcGFnZSxcbiAgICBzZXRQYWdlLFxuICAgIG9uTG9hZE1vcmUsXG4gIF0pO1xuXG4gIGNvbnN0IGlzSXRlbUxvYWRlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aCAtIFRhYmxlQ29uZmlnLklURU1TX0xPQURFRDtcbiAgICB9LFxuICAgIFtkYXRhU291cmNlLmxlbmd0aCwgZGlzYWJsZUxhenlMb2FkZXJdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2hhc1ZpcnR1YWxTY3JvbGwgPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgICAgIDxUYWJsZUhlYWRlciBjb2x1bW5zPXtjb2x1bW5zfSBzY3JvbGxUb3A9e3Njcm9sbFRvcH0gLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXJdKX1cbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgIGlzSGVhZGVyU3RpY2t5PXtpc0hlYWRlclN0aWNreX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIHNjcm9sbFRvcDogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7IGNvbHVtbnMsIHNjcm9sbFRvcCwgaXNIZWFkZXJTdGlja3kgfTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmJvcmRlckJvdHRvbV06ICEhc2Nyb2xsVG9wIH0sXG4gICAgICAgIHsgW3N0eWxlcy5pc0hlYWRlclN0aWNreV06IGlzSGVhZGVyU3RpY2t5IH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50YWJsZUhlYWRlckNlbGwsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkLWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBjb2x1bW4/LndpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICB7Y29sdW1uLnRpdGxlfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJwWW5iMkJyeUlZSDU0eU1rQnFnN3BBPT1cIixcImlzSGVhZGVyU3RpY2t5XCI6XCJfOXUxbE1jMFFNUmF2Slp6QzY0bG8yZz09XCIsXCJ0YWJsZUhlYWRlckNlbGxcIjpcIm9VRFl1YzNCdFhZQUtzMnRBY2pYbVE9PVwiLFwiYm9yZGVyQm90dG9tXCI6XCJDdHNWelkwSkYrOVl0SGhyNnBmZEpnPT1cIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlUm93Q2VsbCBmcm9tIFwiLi9UYWJsZVJvd0NlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93KHtcbiAgZGF0YSxcbiAgY29sdW1ucyxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIHJvd0hlaWdodCxcbiAgaXNBY3RpdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVSb3dDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Sb3dDbGljayAmJiB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgb25Sb3dDbGljayhkYXRhKTtcbiAgICB9XG4gIH0sIFtkYXRhLCBvblJvd0NsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJfN0xkeXV3R3Z6OVoya1ZQRzdXc1hzdz09XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJOc09mUzdMRXVRcFVLNVVRYTJ5TVlRPT1cIixcImFjdGl2ZVwiOlwiWTJ0cEo1czVrOE83ZUFhNEFYdVF2dz09XCIsXCJoYXNBcnJvd1wiOlwiQ2VqdnJFTi1zTWZ2a3pRZERCSTJvdz09XCJ9OyIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCBlbnVtIFRhYmxlQ29uZmlnIHtcbiAgUk9XX0hFSUdIVCA9IDQ4LFxuICBQQUdFX1NJWkUgPSAxMDAsXG4gIElURU1TX0xPQURFRCA9IDUsXG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidkJUOGJiUGJsWnp4czBsQlRudFVhQT09XCIsXCJ0YWJsZVwiOlwiVVpvRGM1MjN4Y1V1bEFOMGVjRVIyZz09XCIsXCJwbGFjZWhvbGRlckNvbnRhaW5lclwiOlwiYlc1K1ZTTjQzTUowVGRncUU3NExidz09XCIsXCJzY3JvbGxiYXJDb250YWluZXJcIjpcIkJkTC1jeGZoSHgyZXd3bTZ2TWY5cFE9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcImg2UFlKQXp5dFZPazlCZUs1WjAra2c9PVwiLFwic21hbGxcIjpcIlVYbi1CQ1ZnODF5TWQ4Rm9VZnhLU0E9PVwiLFwibWVkaXVtXCI6XCJfNGFpUDZneE5IaHJXYmFjNGsxZ3JVdz09XCIsXCJsYXJnZVwiOlwiTWxuUFhZT1V5UTdoZ0k3c3cxbzB4QT09XCIsXCJ4bGFyZ2VcIjpcIkhHQnVLSmE5WGp4Qjh1VmhLb3AwM0E9PVwiLFwibm9Cb3JkZXJcIjpcInNQblNDR1VOWlhyb0VsU1FSMTkzR1E9PVwifTsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInZXYTItMW1PRlUraVYxNGpxN1FQc1E9PVwiLFwiZW50cmFuY2VcIjpcImZUc1dzS3JBS2x3VCtHT0U0d0F5U1E9PVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIl8yLVh1MnNaTXZOOXRnRHMraXlMYzlRPT1cIn07IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bFdFLUVwcjg1RjBtVXQ3TzFnVVRRPT1cIixcImhhc092ZXJsYXlcIjpcInpLN3UxbmtqYzh4N1lEQWZZUUNUcHc9PVwiLFwidmlkZW9cIjpcImZSNEQ1NkxmZHVvQlctZmltZmJUMHc9PVwiLFwiY292ZXJcIjpcIlZYUXM0UFVuV0d5dzU2ZzYwWnRmV2c9PVwiLFwiY29udGFpblwiOlwiZ3hmbFV6TzRycUNCQUd1enNZRUlldz09XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJLTYzS200TlkxVzRRZ01oZmdVNU1nPT1cIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ2Tk5oSmxnSVRNK29uZjd6ZHphdWZnPT1cIixcIm92ZXJsYXlcIjpcInd4dWw3VVVabG1hckY4NlNHcmQtdHc9PVwifTsiLCJleHBvcnQgeyBOdW1wYWQgfSBmcm9tIFwiLi9OdW1wYWRcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHsgICAgXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9IChuZXdOdW1iZXI6IG51bWJlcikgPT5cbiAgICAgIChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtcGFkfSByZWY9e3JlZn0gdGFiSW5kZXg9ey0xfSBvbktleURvd249e2hhbmRsZUtleURvd259IGRhdGEtdGVzdGlkPVwibnVtcGFkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MubnVtYmVyc30+XG4gICAgICAgICAge051bXBhZEtleXN9XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIocG9wRGlnaXQobnVtYmVyKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gYWx0PVwiQmFja3NwYWNlXCIgc3JjPXtiYWNrc3BhY2VJY29ufSAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbik7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiUGVPKzJwQklMbUdodVhmK21RUEpDZz09XCIsXCJudW1iZXJzXCI6XCJfMytZOERkTzR2QkpKdE9PcVJCaHRxZz09XCJ9OyIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSwgY3JlYXRlRWxlbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuLy8gR2xvYmFsIHN0YXRlIHVzZWQgdG8gZGVkdXBsaWNhdGUgcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVyc1xuY29uc3QgU1dSR2xvYmFsU3RhdGUgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBFTVBUWV9DQUNIRSA9IHt9O1xuY29uc3Qgbm9vcCA9ICgpPT57fTtcbi8vIFVzaW5nIG5vb3AoKSBhcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGFzIHVuZGVmaW5lZCBjYW4gYmUgcmVwbGFjZWRcbi8vIGJ5IHNvbWV0aGluZyBlbHNlLiBQcmV0dGllciBpZ25vcmUgYW5kIGV4dHJhIHBhcmVudGhlc2VzIGFyZSBuZWNlc3NhcnkgaGVyZVxuLy8gdG8gZW5zdXJlIHRoYXQgdHNjIGRvZXNuJ3QgcmVtb3ZlIHRoZSBfX05PSU5MSU5FX18gY29tbWVudC5cbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgVU5ERUZJTkVEID0gLyojX19OT0lOTElORV9fKi8gbm9vcCgpO1xuY29uc3QgT0JKRUNUID0gT2JqZWN0O1xuY29uc3QgaXNVbmRlZmluZWQgPSAodik9PnYgPT09IFVOREVGSU5FRDtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodik9PnR5cGVvZiB2ID09ICdmdW5jdGlvbic7XG5jb25zdCBtZXJnZU9iamVjdHMgPSAoYSwgYik9Pih7XG4gICAgICAgIC4uLmEsXG4gICAgICAgIC4uLmJcbiAgICB9KTtcbmNvbnN0IFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSB0aGUgZnVuY3Rpb24gdG8gZ3VhcmFudGVlIGl0J3MgcmUtZXZhbHVhdGVkIGJldHdlZW4ganNkb20gYW5kIG5vZGUgcnVudGltZSBmb3IgdGVzdHMuXG5jb25zdCBpc1dpbmRvd0RlZmluZWQgPSB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBpc0RvY3VtZW50RGVmaW5lZCA9IHR5cGVvZiBkb2N1bWVudCAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKCk9PmlzV2luZG93RGVmaW5lZCAmJiB0eXBlb2Ygd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgY3JlYXRlQ2FjaGVIZWxwZXIgPSAoY2FjaGUsIGtleSk9PntcbiAgICBjb25zdCBzdGF0ZSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gR2V0dGVyXG4gICAgICAgICgpPT5jYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRSxcbiAgICAgICAgLy8gU2V0dGVyXG4gICAgICAgIChpbmZvKT0+e1xuICAgICAgICAgICAgY29uc3QgcHJldiA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdXG4gICAgXTtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG5jb25zdCB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbmxldCBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNhYmxlLlxuY29uc3Qgc3RhYmxlSGFzaCA9IChhcmcpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUoIWlzVW5kZWZpbmVkKGluZGV4ID0ga2V5cy5wb3AoKSkpe1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlID8gYXJnLnRvSlNPTigpIDogdHlwZSA9PSAnc3ltYm9sJyA/IGFyZy50b1N0cmluZygpIDogdHlwZSA9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGFyZykgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIHRoZSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIHRoZSBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqLyBsZXQgb25saW5lID0gdHJ1ZTtcbmNvbnN0IGlzT25saW5lID0gKCk9Pm9ubGluZTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG5jb25zdCBbb25XaW5kb3dFdmVudCwgb2ZmV2luZG93RXZlbnRdID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gW1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KSxcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbl0gOiBbXG4gICAgbm9vcCxcbiAgICBub29wXG5dO1xuY29uc3QgaXNWaXNpYmxlID0gKCk9PntcbiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGUgPSBpc0RvY3VtZW50RGVmaW5lZCAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG5jb25zdCBpbml0Rm9jdXMgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbmNvbnN0IGluaXRSZWNvbm5lY3QgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIGNvbnN0IG9uT25saW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIGNvbnN0IG9uT2ZmbGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG5jb25zdCBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlXG59O1xuY29uc3QgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Rcbn07XG5cbmNvbnN0IElTX1JFQUNUX0xFR0FDWSA9ICFSZWFjdC51c2VJZDtcbmNvbnN0IElTX1NFUlZFUiA9ICFpc1dpbmRvd0RlZmluZWQgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuY29uc3QgckFGID0gKGYpPT5oYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG5jb25zdCBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxuY29uc3Qgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmIG5hdmlnYXRvckNvbm5lY3Rpb24gJiYgKFtcbiAgICAnc2xvdy0yZycsXG4gICAgJzJnJ1xuXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8IG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoa2V5KT0+e1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwga2V5IGFzIHRoZSBhcmd1bWVudCBvZiBmZXRjaGVyLiBUaGlzIGNhbiBiZSBhIHN0cmluZyBvciBhblxuICAgIC8vIGFycmF5IG9mIHZhbHVlcy5cbiAgICBjb25zdCBhcmdzID0ga2V5O1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPSB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpID8gc3RhYmxlSGFzaChrZXkpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzXG4gICAgXTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG5sZXQgX190aW1lc3RhbXAgPSAwO1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKCk9PisrX190aW1lc3RhbXA7XG5cbmNvbnN0IEZPQ1VTX0VWRU5UID0gMDtcbmNvbnN0IFJFQ09OTkVDVF9FVkVOVCA9IDE7XG5jb25zdCBNVVRBVEVfRVZFTlQgPSAyO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGtleXMuXG4gICAgICAgICAgICAha2V5LnN0YXJ0c1dpdGgoJyRpbmYkJykgJiYga2V5RmlsdGVyKGNhY2hlLmdldChrZXkpLl9rKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWF0Y2hlZEtleXMubWFwKG11dGF0ZUJ5S2V5KSk7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGVCeUtleShfa2V5KTtcbiAgICBhc3luYyBmdW5jdGlvbiBtdXRhdGVCeUtleShfaykge1xuICAgICAgICAvLyBTZXJpYWxpemUga2V5XG4gICAgICAgIGNvbnN0IFtrZXldID0gc2VyaWFsaXplKF9rKTtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2dldCwgc2V0XSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgICAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgICAgIGNvbnN0IHN0YXJ0UmV2YWxpZGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbigoKT0+Z2V0KCkuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldCgpLmRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBfZGF0YTtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHRpbWVzdGFtcHMuXG4gICAgICAgIGNvbnN0IGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtcbiAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXQoKTtcbiAgICAgICAgLy8gYGRpc3BsYXllZERhdGFgIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9uIHNjcmVlbi4gSXQgY291bGQgYmUgdGhlIG9wdGltaXN0aWMgdmFsdWVcbiAgICAgICAgLy8gdGhhdCBpcyBnb2luZyB0byBiZSBvdmVycmlkZGVuIGJ5IGEgYGNvbW1pdHRlZERhdGFgLCBvciBnZXQgcmV2ZXJ0ZWQgYmFjay5cbiAgICAgICAgLy8gYGNvbW1pdHRlZERhdGFgIGlzIHRoZSB2YWxpZGF0ZWQgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZmV0Y2ggb3IgbXV0YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc3BsYXllZERhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHN0YXRlLl9jO1xuICAgICAgICBjb25zdCBjb21taXR0ZWREYXRhID0gaXNVbmRlZmluZWQoY3VycmVudERhdGEpID8gZGlzcGxheWVkRGF0YSA6IGN1cnJlbnREYXRhO1xuICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICBpZiAoaGFzT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihvcHRpbWlzdGljRGF0YSkgPyBvcHRpbWlzdGljRGF0YShjb21taXR0ZWREYXRhKSA6IG9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBzZXQgb3B0aW1pc3RpYyBkYXRhLCBiYWNrdXAgdGhlIGN1cnJlbnQgY29tbWl0dGVkRGF0YSBkYXRhIGluIGBfY2AuXG4gICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IG9wdGltaXN0aWNEYXRhLFxuICAgICAgICAgICAgICAgIF9jOiBjb21taXR0ZWREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBgZGF0YWAgaXMgYSBwcm9taXNlL3RoZW5hYmxlLCByZXNvbHZlIHRoZSBmaW5hbCBkYXRhIGZpcnN0LlxuICAgICAgICBpZiAoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGEuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGhhc09wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNvbW1pdHRlZERhdGE7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSB0byBiZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBkYXRhLCBhbmQgY2xlYXIgdGhlIGBfY2AgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCBjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIFNXUiBIb29rcycgaW50ZXJuYWwgc3RhdGVzOlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgLy8gVGhlIG11dGF0aW9uIGFuZCByZXZhbGlkYXRpb24gYXJlIGVuZGVkLCB3ZSBjYW4gY2xlYXIgaXQgc2luY2UgdGhlIGRhdGEgaXNcbiAgICAgICAgLy8gbm90IGFuIG9wdGltaXN0aWMgdmFsdWUgYW55bW9yZS5cbiAgICAgICAgc2V0KHtcbiAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhO1xuICAgIH1cbn1cblxuY29uc3QgcmV2YWxpZGF0ZUFsbEtleXMgPSAocmV2YWxpZGF0b3JzLCB0eXBlKT0+e1xuICAgIGZvcihjb25zdCBrZXkgaW4gcmV2YWxpZGF0b3JzKXtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKSByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xuY29uc3QgaW5pdENhY2hlID0gKHByb3ZpZGVyLCBvcHRpb25zKT0+e1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICBjb25zdCBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIGNvbnN0IEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICBjb25zdCBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICBsZXQgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gKGtleSwgY2FsbGJhY2spPT57XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldIHx8IFtdO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1trZXldID0gc3VicztcbiAgICAgICAgICAgIHN1YnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCk9PnN1YnMuc3BsaWNlKHN1YnMuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSAoa2V5LCB2YWx1ZSwgcHJldik9PntcbiAgICAgICAgICAgIHByb3ZpZGVyLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IHN1YnMubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgICAgICAgICAgc3Vic1tpXShwcmV2LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBVc2UgYSBsYXp5IGluaXRpYWxpemVkIHN0YXRlIHRvIGNyZWF0ZSB0aGUgY2FjaGUgb24gZmlyc3QgYWNjZXNzLlxuICAgIGNvbnN0IFtjYWNoZUNvbnRleHRdID0gdXNlU3RhdGUoKCk9PnByb3ZpZGVyID8gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKSA6IFVOREVGSU5FRCk7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMsIHJldmFsaWRhdGVFdmVudHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJlZnJlc2hJbnRlcnZhbCAsIHJlZnJlc2hXaGVuSGlkZGVuICwgcmVmcmVzaFdoZW5PZmZsaW5lICwga2VlcFByZXZpb3VzRGF0YSAgfSA9IGNvbmZpZztcbiAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBga2V5YCBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgU1dSIGBkYXRhYCBzdGF0ZSwgYGtleUluZm9gIGhvbGRzIGV4dHJhXG4gICAgLy8gc3RhdGVzIHN1Y2ggYXMgYGVycm9yYCBhbmQgYGlzVmFsaWRhdGluZ2AgaW5zaWRlLFxuICAgIC8vIGFsbCBvZiB0aGVtIGFyZSBkZXJpdmVkIGZyb20gYF9rZXlgLlxuICAgIC8vIGBmbkFyZ2AgaXMgdGhlIGFyZ3VtZW50L2FyZ3VtZW50cyBwYXJzZWQgZnJvbSB0aGUga2V5LCB3aGljaCB3aWxsIGJlIHBhc3NlZFxuICAgIC8vIHRvIHRoZSBmZXRjaGVyLlxuICAgIGNvbnN0IFtrZXksIGZuQXJnXSA9IHNlcmlhbGl6ZShfa2V5KTtcbiAgICAvLyBJZiBpdCdzIHRoZSBpbml0aWFsIHJlbmRlciBvZiB0aGlzIGhvb2suXG4gICAgY29uc3QgaW5pdGlhbE1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIElmIHRoZSBob29rIGlzIHVubW91bnRlZCBhbHJlYWR5LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcmV2ZW50IHNvbWUgZWZmZWN0c1xuICAgIC8vIHRvIGJlIGNhbGxlZCBhZnRlciB1bm1vdW50aW5nLlxuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gUmVmcyB0byBrZWVwIHRoZSBrZXkgYW5kIGNvbmZpZy5cbiAgICBjb25zdCBrZXlSZWYgPSB1c2VSZWYoa2V5KTtcbiAgICBjb25zdCBmZXRjaGVyUmVmID0gdXNlUmVmKGZldGNoZXIpO1xuICAgIGNvbnN0IGNvbmZpZ1JlZiA9IHVzZVJlZihjb25maWcpO1xuICAgIGNvbnN0IGdldENvbmZpZyA9ICgpPT5jb25maWdSZWYuY3VycmVudDtcbiAgICBjb25zdCBpc0FjdGl2ZSA9ICgpPT5nZXRDb25maWcoKS5pc1Zpc2libGUoKSAmJiBnZXRDb25maWcoKS5pc09ubGluZSgpO1xuICAgIGNvbnN0IFtnZXRDYWNoZSwgc2V0Q2FjaGUsIHN1YnNjcmliZUNhY2hlXSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzID0gdXNlUmVmKHt9KS5jdXJyZW50O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJyAmJiBpc1VuZGVmaW5lZChwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY3VycmVudFt0XSwgcmV0dXJuZWREYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgY29uc3QgZ2V0U2VsZWN0ZWRDYWNoZSA9ICgpPT57XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGdldENhY2hlKCk7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNlbGVjdCB0aGUgbmVlZGVkIGZpZWxkcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbWVyZ2VPYmplY3RzKHN0YXRlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzbmFwc2hvdC5faztcbiAgICAgICAgICAgIGlmICghc2hvdWxkU3RhcnRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLnNuYXBzaG90XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBsZXQgbWVtb3JpemVkU25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKCk7XG4gICAgICAgICAgICByZXR1cm4gaXNFcXVhbChzbmFwc2hvdCwgbWVtb3JpemVkU25hcHNob3QpID8gbWVtb3JpemVkU25hcHNob3QgOiBtZW1vcml6ZWRTbmFwc2hvdCA9IHNuYXBzaG90O1xuICAgICAgICB9O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICBjb25zdCBjYWNoZWQgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSh1c2VDYWxsYmFjaygoY2FsbGJhY2spPT5zdWJzY3JpYmVDYWNoZShrZXksIChwcmV2LCBjdXJyZW50KT0+e1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSBjYWxsYmFjaygpO1xuICAgICAgICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pLCBnZXRTbmFwc2hvdCwgZ2V0U25hcHNob3QpO1xuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IGNhY2hlZC5kYXRhO1xuICAgIGNvbnN0IGRhdGEgPSBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGZhbGxiYWNrIDogY2FjaGVkRGF0YTtcbiAgICBjb25zdCBlcnJvciA9IGNhY2hlZC5lcnJvcjtcbiAgICAvLyBVc2UgYSByZWYgdG8gc3RvcmUgcHJldmlvdXNseSByZXR1cm5lZCBkYXRhLiBVc2UgdGhlIGluaXRpYWwgZGF0YSBhcyBpdHMgaW5pdGlhbCB2YWx1ZS5cbiAgICBjb25zdCBsYWdneURhdGFSZWYgPSB1c2VSZWYoZGF0YSk7XG4gICAgY29uc3QgcmV0dXJuZWREYXRhID0ga2VlcFByZXZpb3VzRGF0YSA/IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gbGFnZ3lEYXRhUmVmLmN1cnJlbnQgOiBjYWNoZWREYXRhIDogZGF0YTtcbiAgICAvLyAtIFN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlJ3Mgc3RhbGUgZGF0YSBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgIC8vIC0gTm90IHN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlIGlzIG5vIGZhbGxiYWNrIGRhdGEgYW5kIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZC5cbiAgICAvLyAtIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZCBidXQgYGRhdGFgIGlzIG5vdCBkZWZpbmVkLlxuICAgIGNvbnN0IHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiA9ICgoKT0+e1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG1vdW50IGl0IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IGNvbmZpZy5yZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCBjb25maWcucmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgfSkoKTtcbiAgICAvLyBSZXNvbHZlIHRoZSBkZWZhdWx0IHZhbGlkYXRpbmcgc3RhdGU6XG4gICAgLy8gSWYgaXQncyBhYmxlIHRvIHZhbGlkYXRlLCBhbmQgaXQgc2hvdWxkIHJldmFsaWRhdGUgd2hlbiBtb3VudCwgdGhpcyB3aWxsIGJlIHRydWUuXG4gICAgY29uc3QgZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA9ICEhKGtleSAmJiBmZXRjaGVyICYmIGlzSW5pdGlhbE1vdW50ICYmIHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbik7XG4gICAgY29uc3QgaXNWYWxpZGF0aW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzVmFsaWRhdGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzVmFsaWRhdGluZztcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNMb2FkaW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNMb2FkaW5nO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIGNvbnN0IHJldmFsaWRhdGUgPSB1c2VDYWxsYmFjayhhc3luYyAocmV2YWxpZGF0ZU9wdHMpPT57XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWtleSB8fCAhY3VycmVudEZldGNoZXIgfHwgdW5tb3VudGVkUmVmLmN1cnJlbnQgfHwgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdEYXRhO1xuICAgICAgICBsZXQgc3RhcnRBdDtcbiAgICAgICAgbGV0IGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBvcHRzID0gcmV2YWxpZGF0ZU9wdHMgfHwge307XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG9uZ29pbmcgY29uY3VycmVudCByZXF1ZXN0LCBvciBgZGVkdXBlYCBpcyBub3Qgc2V0LCBhXG4gICAgICAgIC8vIG5ldyByZXF1ZXN0IHNob3VsZCBiZSBpbml0aWF0ZWQuXG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0TmV3UmVxdWVzdCA9ICFGRVRDSFtrZXldIHx8ICFvcHRzLmRlZHVwZTtcbiAgICAgICAgLypcbiAgICAgICAgIEZvciBSZWFjdCAxN1xuICAgICAgICAgRG8gdW5tb3VudCBjaGVjayBmb3IgY2FsbHM6XG4gICAgICAgICBJZiBrZXkgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSByZXZhbGlkYXRpb24sIG9yIHRoZSBjb21wb25lbnQgaGFzIGJlZW5cbiAgICAgICAgIHVubW91bnRlZCwgb2xkIGRpc3BhdGNoIGFuZCBvbGQgZXZlbnQgY2FsbGJhY2tzIHNob3VsZCBub3QgdGFrZSBhbnlcbiAgICAgICAgIGVmZmVjdFxuXG4gICAgICAgIEZvciBSZWFjdCAxOFxuICAgICAgICBvbmx5IGNoZWNrIGlmIGtleSBoYXMgY2hhbmdlZFxuICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vcmVhY3R3Zy9yZWFjdC0xOC9kaXNjdXNzaW9ucy84MlxuICAgICAgKi8gY29uc3QgY2FsbGJhY2tTYWZlZ3VhcmQgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKElTX1JFQUNUX0xFR0FDWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdW5tb3VudGVkUmVmLmN1cnJlbnQgJiYga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJiBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQ7XG4gICAgICAgIH07XG4gICAgICAgIC8vIFRoZSBmaW5hbCBzdGF0ZSBvYmplY3Qgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcy5cbiAgICAgICAgY29uc3QgZmluYWxTdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBzZXRDYWNoZShmaW5hbFN0YXRlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2xlYW51cFN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcgaXQuXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SW5mbyA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBpZiAocmVxdWVzdEluZm8gJiYgcmVxdWVzdEluZm9bMV0gPT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICAvLyBJdCBpcyBpbiB0aGUgYGlzTG9hZGluZ2Agc3RhdGUsIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIG5vIGNhY2hlZCBkYXRhLlxuICAgICAgICAvLyBUaGlzIGJ5cGFzc2VzIGZhbGxiYWNrIGRhdGEgYW5kIGxhZ2d5IGRhdGEuXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHNldENhY2hlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgaXMgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgIC8vIHdlIHRyaWdnZXIgdGhlIGxvYWRpbmcgc2xvdyBldmVudC5cbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxvYWRpbmdUaW1lb3V0ICYmIGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uTG9hZGluZ1Nsb3coa2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgIC8vIEtleSBtdXN0IGJlIHRydXRoeSBpZiBlbnRlcmluZyBoZXJlLlxuICAgICAgICAgICAgICAgIEZFVENIW2tleV0gPSBbXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyKGZuQXJnKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VGltZXN0YW1wKClcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW25ld0RhdGEsIHN0YXJ0QXRdID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIG5ld0RhdGEgPSBhd2FpdCBuZXdEYXRhO1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGxpY2F0aW9uIGludGVydmFsLlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2xlYW51cFN0YXRlLCBjb25maWcuZGVkdXBpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBvbmdvaW5nIHJlcXVlc3QocyksIHN0YXJ0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLFxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBpZ25vcmUgdGhlIGN1cnJlbnQgb25lIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uczpcbiAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAvLyAgICAgICAgcmVxMi0tLS0tLS0tLS0tLS0tLS0+cmVzMlxuICAgICAgICAgICAgLy8gdGhlIHJlcXVlc3QgdGhhdCBmaXJlZCBsYXRlciB3aWxsIGFsd2F5cyBiZSBrZXB0LlxuICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgaWYgKCFGRVRDSFtrZXldIHx8IEZFVENIW2tleV1bMV0gIT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG11dGF0aW9ucyhzKSwgdGhhdCBvdmVybGFwcGVkIHdpdGggdGhlIGN1cnJlbnQgcmV2YWxpZGF0aW9uOlxuICAgICAgICAgICAgLy8gY2FzZSAxOlxuICAgICAgICAgICAgLy8gICByZXEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgICAgICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDI6XG4gICAgICAgICAgICAvLyAgICAgICAgIHJlcS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAzOlxuICAgICAgICAgICAgLy8gICByZXEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgICAgICBtdXRhdGUtLS0tLS0tLi4uLS0tLS0tLS0tLT5cbiAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gaWdub3JlIHRoZSByZXZhbGlkYXRpb24gcmVzdWx0IChyZXMpIGJlY2F1c2UgaXQncyBubyBsb25nZXIgZnJlc2guXG4gICAgICAgICAgICAvLyBtZWFud2hpbGUsIGEgbmV3IHJldmFsaWRhdGlvbiBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG11dGF0aW9uIGVuZHMuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbkluZm8gPSBNVVRBVElPTltrZXldO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmIC8vIGNhc2UgMVxuICAgICAgICAgICAgKHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzBdIHx8IC8vIGNhc2UgMlxuICAgICAgICAgICAgc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMV0gfHwgLy8gY2FzZSAzXG4gICAgICAgICAgICBtdXRhdGlvbkluZm9bMV0gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgd2l0aCB0aGUgbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAvLyBGb3IgbG9jYWwgc3RhdGUsIGNvbXBhcmUgYW5kIGFzc2lnbi5cbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldENhY2hlKCkuZGF0YTtcbiAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBjb21wYXJlIGZuIGNvdWxkIGJlIGN1c3RvbSBmblxuICAgICAgICAgICAgLy8gY2FjaGVEYXRhIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIG5ld0RhdGEgZXZlbiB3aGVuIGNvbXBhcmUgZm4gcmV0dXJucyBUcnVlXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmRhdGEgPSBjb21wYXJlKGNhY2hlRGF0YSwgbmV3RGF0YSkgPyBjYWNoZURhdGEgOiBuZXdEYXRhO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciB0aGUgc3VjY2Vzc2Z1bCBjYWxsYmFjayBpZiBpdCdzIHRoZSBvcmlnaW5hbCByZXF1ZXN0LlxuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uU3VjY2VzcyhuZXdEYXRhLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICAgICAgY29uc3QgeyBzaG91bGRSZXRyeU9uRXJyb3IgIH0gPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgLy8gTm90IHBhdXNlZCwgd2UgY29udGludWUgaGFuZGxpbmcgdGhlIGVycm9yLiBPdGhlcndpc2UsIGRpc2NhcmQgaXQuXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgIC8vIGRlZHVwZWQgb25lcy5cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0ICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5vbkVycm9yKGVyciwga2V5LCBjdXJyZW50Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFJldHJ5T25FcnJvciA9PT0gdHJ1ZSB8fCBpc0Z1bmN0aW9uKHNob3VsZFJldHJ5T25FcnJvcikgJiYgc2hvdWxkUmV0cnlPbkVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBpbmFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvLXJldmFsaWRhdGUgd2hlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZm9jdXNpbmcgb3IgcmVjb25uZWN0aW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gcmV0cnlpbmcsIGRlZHVwbGljYXRpb24gaXMgYWx3YXlzIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5vbkVycm9yUmV0cnkoZXJyLCBrZXksIGN1cnJlbnRDb25maWcsIHJldmFsaWRhdGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlKT0+e1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5GT0NVU19FVkVOVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiYgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLlJFQ09OTkVDVF9FVkVOVCkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25SZWNvbm5lY3QgJiYgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLk1VVEFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIEtlZXAgdGhlIG9yaWdpbmFsIGtleSBpbiB0aGUgY2FjaGUuXG4gICAgICAgIHNldENhY2hlKHtcbiAgICAgICAgICAgIF9rOiBmbkFyZ1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGRhdGEpIHx8IElTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgLy8gTWFyayBpdCBhcyB1bm1vdW50ZWQuXG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gUG9sbGluZ1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgbGV0IHRpbWVyO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBwYXNzZWQgaW50ZXJ2YWxcbiAgICAgICAgICAgIC8vIC4uLm9yIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBkYXRhIHRvIGdldCB0aGUgaW50ZXJ2YWxcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gaXNGdW5jdGlvbihyZWZyZXNoSW50ZXJ2YWwpID8gcmVmcmVzaEludGVydmFsKGRhdGEpIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCB0aGUgbmV4dCBpbnRlcnZhbCBpZiBgcmVmcmVzaEludGVydmFsYCBpcyBub3QgMCwgYW5kOlxuICAgICAgICAgICAgLy8gLSBgZm9yY2VgIGlzIHRydWUsIHdoaWNoIGlzIHRoZSBzdGFydCBvZiBwb2xsaW5nXG4gICAgICAgICAgICAvLyAtIG9yIGB0aW1lcmAgaXMgbm90IDAsIHdoaWNoIG1lYW5zIHRoZSBlZmZlY3Qgd2Fzbid0IGNhbmNlbGVkXG4gICAgICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgdGltZXIgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGV4ZWN1dGUsIGludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBPSyB0byBleGVjdXRlOlxuICAgICAgICAgICAgLy8gT25seSByZXZhbGlkYXRlIHdoZW4gdGhlIHBhZ2UgaXMgdmlzaWJsZSwgb25saW5lLCBhbmQgbm90IGVycm9yZWQuXG4gICAgICAgICAgICBpZiAoIWdldENhY2hlKCkuZXJyb3IgJiYgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJiAocmVmcmVzaFdoZW5PZmZsaW5lIHx8IGdldENvbmZpZygpLmlzT25saW5lKCkpKSB7XG4gICAgICAgICAgICAgICAgcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkudGhlbihuZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhlIG5leHQgaW50ZXJ2YWwgdG8gY2hlY2sgYWdhaW4uXG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHRpbWVyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICByZWZyZXNoSW50ZXJ2YWwsXG4gICAgICAgIHJlZnJlc2hXaGVuSGlkZGVuLFxuICAgICAgICByZWZyZXNoV2hlbk9mZmxpbmUsXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIERpc3BsYXkgZGVidWcgaW5mbyBpbiBSZWFjdCBEZXZUb29scy5cbiAgICB1c2VEZWJ1Z1ZhbHVlKHJldHVybmVkRGF0YSk7XG4gICAgLy8gSW4gU3VzcGVuc2UgbW9kZSwgd2UgY2FuJ3QgcmV0dXJuIHRoZSBlbXB0eSBgZGF0YWAgc3RhdGUuXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gYGVycm9yYCwgdGhlIGBlcnJvcmAgbmVlZHMgdG8gYmUgdGhyb3duIHRvIHRoZSBlcnJvciBib3VuZGFyeS5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBgZXJyb3JgLCB0aGUgYHJldmFsaWRhdGlvbmAgcHJvbWlzZSBuZWVkcyB0byBiZSB0aHJvd24gdG9cbiAgICAvLyB0aGUgc3VzcGVuc2UgYm91bmRhcnkuXG4gICAgaWYgKHN1c3BlbnNlICYmIGlzVW5kZWZpbmVkKGRhdGEpICYmIGtleSkge1xuICAgICAgICAvLyBTV1Igc2hvdWxkIHRocm93IHdoZW4gdHJ5aW5nIHRvIHVzZSBTdXNwZW5zZSBvbiB0aGUgc2VydmVyIHdpdGggUmVhY3QgMTgsXG4gICAgICAgIC8vIHdpdGhvdXQgcHJvdmlkaW5nIGFueSBpbml0aWFsIGRhdGEuIFNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE4MzJcbiAgICAgICAgaWYgKCFJU19SRUFDVF9MRUdBQ1kgJiYgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhbGxiYWNrIGRhdGEgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBzdXNwZW5zZSBpbiBTU1IuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcyBldmVuIHdpdGggdGhlIFN1c3BlbnNlIG1vZGUuXG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBpc1VuZGVmaW5lZChlcnJvcikgPyByZXZhbGlkYXRlKFdJVEhfREVEVVBFKSA6IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtdXRhdGU6IGJvdW5kTXV0YXRlLFxuICAgICAgICBnZXQgZGF0YSAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5lZERhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvciAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuaXNWYWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc0xvYWRpbmcgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmc7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmNvbnN0IFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHRWYWx1ZScsIHtcbiAgICB2YWx1ZTogZGVmYXVsdENvbmZpZ1xufSk7XG5jb25zdCB1bnN0YWJsZV9zZXJpYWxpemUgPSAoa2V5KT0+c2VyaWFsaXplKGtleSlbMF07XG4vKipcbiAqIEEgaG9vayB0byBmZXRjaCBkYXRhLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vc3dyLnZlcmNlbC5hcHBcbiAqIEBleGFtcGxlXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB1c2VTV1IgZnJvbSAnc3dyJ1xuICogZnVuY3Rpb24gUHJvZmlsZSgpIHtcbiAqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gdXNlU1dSKCcvYXBpL3VzZXInLCBmZXRjaGVyKVxuICogICBpZiAoZXJyb3IpIHJldHVybiA8ZGl2PmZhaWxlZCB0byBsb2FkPC9kaXY+XG4gKiAgIGlmICghZGF0YSkgcmV0dXJuIDxkaXY+bG9hZGluZy4uLjwvZGl2PlxuICogICByZXR1cm4gPGRpdj5oZWxsbyB7ZGF0YS5uYW1lfSE8L2Rpdj5cbiAqIH1cbiAqIGBgYFxuICovIHZhciB1c2VTV1IgPSB3aXRoQXJncyh1c2VTV1JIYW5kbGVyKTtcblxuLy8gdXNlU1dSXG5cbmV4cG9ydCB7IFNXUkNvbmZpZywgdXNlU1dSIGFzIGRlZmF1bHQsIHVuc3RhYmxlX3NlcmlhbGl6ZSB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iLCJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG5cbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5ID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoX3JlZikge1xuICB2YXIgY29sdW1uSW5kZXggPSBfcmVmLmNvbHVtbkluZGV4LFxuICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDtcbiAgcmV0dXJuIHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudChfcmVmMikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRDb2x1bW5PZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5PZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgZ2V0Q29sdW1uV2lkdGggPSBfcmVmMi5nZXRDb2x1bW5XaWR0aCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgICAgIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgICAgIGdldFJvd0hlaWdodCA9IF9yZWYyLmdldFJvd0hlaWdodCxcbiAgICAgIGdldFJvd09mZnNldCA9IF9yZWYyLmdldFJvd09mZnNldCxcbiAgICAgIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYyLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYyLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZjIudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShHcmlkLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gR3JpZChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsTGVmdDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0IDogMCxcbiAgICAgICAgc2Nyb2xsVG9wOiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wIDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsIG92ZXJzY2FuUm93U3RvcEluZGV4LCB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIHZpc2libGVSb3dTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdmFyIGtleSA9IHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogX29mZnNldCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IF9vZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6IGdldFJvd09mZnNldChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG5cbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgR3JpZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBHcmlkLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKF9yZWYzKSB7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9yZWYzLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3JlZjMuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCdcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKF9yZWY0KSB7XG4gICAgICB2YXIgX3JlZjQkYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY0JGFsaWduID09PSB2b2lkIDAgPyAnYXV0bycgOiBfcmVmNCRhbGlnbixcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF9yZWY0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjQucm93SW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzMi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczIuaGVpZ2h0LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHMyLnJvd0NvdW50LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZS5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG5cbiAgICAgIHZhciBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdmFyIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6IHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMsIGhvcml6b250YWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbFRvcFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbExlZnQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbExlZnQsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbFRvcCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsVG9wO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMi5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlMi5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkNvdW50LFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM0LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNC5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNC5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczQkaXRlbUtleSA9IF90aGlzJHByb3BzNC5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkgOiBfdGhpcyRwcm9wczQkaXRlbUtleSxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNC5yb3dDb3VudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNC51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNC53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMF0sXG4gICAgICAgICAgY29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzFdO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgcm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblswXSxcbiAgICAgICAgICByb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAodmFyIF9yb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IF9yb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IF9yb3dJbmRleCsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2NvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgX2NvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgX2NvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleSh7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4LFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9yb3dJbmRleCwgX2NvbHVtbkluZGV4KVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNS5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQgPSBfdGhpcyRwcm9wczUub25JdGVtc1JlbmRlcmVkLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM1LnJvd0NvdW50O1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlszXTtcblxuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4yID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgX292ZXJzY2FuUm93U3RhcnRJbmRleCwgX292ZXJzY2FuUm93U3RvcEluZGV4LCBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4LCBfdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIF92aXNpYmxlUm93U3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbExlZnQsXG4gICAgICAgICAgICBfc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUzLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgICAgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsTGVmdCwgX3Njcm9sbFRvcCwgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM2LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNC5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU0LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTQuc2Nyb2xsTGVmdDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczcuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93Q291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNy5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU1LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU1LnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlNS5zY3JvbGxUb3A7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBHcmlkO1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufVxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjUsIF9yZWY2KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjUuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjUub3V0ZXJUYWdOYW1lLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgIG92ZXJzY2FuQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvdW50LFxuICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfcmVmNS5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgIHdpZHRoID0gX3JlZjUud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWY2Lmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIHJvd0NvdW50ID0gX3JlZi5yb3dDb3VudDtcbiAgdmFyIHJvd01ldGFkYXRhTWFwID0gX3JlZjIucm93TWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmMi5lc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IF9yZWYyLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWYzLCBfcmVmNCkge1xuICB2YXIgY29sdW1uQ291bnQgPSBfcmVmMy5jb2x1bW5Db3VudDtcbiAgdmFyIGNvbHVtbk1ldGFkYXRhTWFwID0gX3JlZjQuY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY0LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBfcmVmNC5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLmNvbHVtbldpZHRoO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMucm93SGVpZ2h0O1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICB2YXIgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKSA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuXG4gIH1cbn07XG5cbnZhciBWYXJpYWJsZVNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IHByb3BzLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoO1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgncm93JywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gcHJvcHMucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY1ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjUuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWY1LmVzdGltYXRlZFJvd0hlaWdodDtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge31cbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gZnVuY3Rpb24gKHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciBjb2x1bW5JbmRleCA9IF9yZWY2LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjYucm93SW5kZXgsXG4gICAgICAgICAgX3JlZjYkc2hvdWxkRm9yY2VVcGRhID0gX3JlZjYuc2hvdWxkRm9yY2VVcGRhdGUsXG4gICAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRzaG91bGRGb3JjZVVwZGE7XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LCBjb2x1bW5JbmRleCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCwgcm93SW5kZXggLSAxKTtcbiAgICAgIH0gLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSQxID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoaW5kZXgsIGRhdGEpIHtcbiAgcmV0dXJuIGluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoX3JlZikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRJdGVtT2Zmc2V0ID0gX3JlZi5nZXRJdGVtT2Zmc2V0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gX3JlZi5nZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICBnZXRJdGVtU2l6ZSA9IF9yZWYuZ2V0SXRlbVNpemUsXG4gICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IF9yZWYuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZi5nZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYuZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKExpc3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbE9mZnNldDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5TdGFydEluZGV4LCBvdmVyc2NhblN0b3BJbmRleCwgdmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4OiB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGl0ZW1TaXplID0gX3RoaXMkcHJvcHMuaXRlbVNpemUsXG4gICAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wcy5sYXlvdXQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbik7XG5cbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldEl0ZW1PZmZzZXQoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgc2l6ZSA9IGdldEl0ZW1TaXplKF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIHZhciBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDA7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMCxcbiAgICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbFZlcnRpY2FsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldDIgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsVG9wO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIExpc3QuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzJDEobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBMaXN0LnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKHNjcm9sbE9mZnNldCkge1xuICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pIHtcbiAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczIuaXRlbUNvdW50LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMi5sYXlvdXQ7XG4gICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gdGhpcy5zdGF0ZS5zY3JvbGxPZmZzZXQ7XG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cblxuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSAwO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsSGVpZ2h0ID4gb3V0ZXJSZWYuY2xpZW50SGVpZ2h0ID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvKGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMzLmRpcmVjdGlvbixcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsT2Zmc2V0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxPZmZzZXQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMzLmxheW91dDtcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczQubGF5b3V0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczUuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczUuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNS5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczUuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM1Lml0ZW1Db3VudCxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNS5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczUkaXRlbUtleSA9IF90aGlzJHByb3BzNS5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkkMSA6IF90aGlzJHByb3BzNSRpdGVtS2V5LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNS5sYXlvdXQsXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczUudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczUud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgdmFyIG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZCA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzBdLFxuICAgICAgICAgIHN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgIGtleTogaXRlbUtleShfaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgIGluZGV4OiBfaW5kZXgsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX2luZGV4KVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBpc0hvcml6b250YWwgPyAnMTAwJScgOiBlc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuXG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZDIgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhblN0YXJ0SW5kZXgsIF9vdmVyc2NhblN0b3BJbmRleCwgX3Zpc2libGVTdGFydEluZGV4LCBfdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX3Njcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMi5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsT2Zmc2V0LCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczYuaXRlbUNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGUzLmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbE9mZnNldDtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExpc3Q7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIGxheW91dDogJ3ZlcnRpY2FsJyxcbiAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59IC8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMkMSA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgbGF5b3V0ID0gX3JlZjIubGF5b3V0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjIuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjIub3V0ZXJUYWdOYW1lLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjMuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUkMSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lJDEuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfSAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgKyAoXCJcXFwiXCIgKyBsYXlvdXQgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZlcnRpY2FsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSA9IDUwO1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhJDEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0kMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBpdGVtQ291bnQgPSBfcmVmMi5pdGVtQ291bnQ7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBfcmVmMy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWYzLmVzdGltYXRlZEl0ZW1TaXplLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBfcmVmMy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IGl0ZW1Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaXRlbUNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkSXRlbVNpemU7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBWYXJpYWJsZVNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgb2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY0ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjQuZXN0aW1hdGVkSXRlbVNpemU7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXgsIGluZGV4IC0gMSk7IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY1KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBpbmRleCAqIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjIuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChfcmVmMywgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0O1xuICAgIHJldHVybiBpbmRleCAqIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQoX3JlZjQsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY0LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZjUpIHtcbiAgICB2YXIgcm93Q291bnQgPSBfcmVmNS5yb3dDb3VudCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjUucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQgKiByb3dDb3VudDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmNikge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY2LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY2LmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aCAqIGNvbHVtbkNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChfcmVmNywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjcuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHdpZHRoID0gX3JlZjcud2lkdGg7XG4gICAgdmFyIGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5Db3VudCAqIGNvbHVtbldpZHRoIC0gd2lkdGgpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Q29sdW1uT2Zmc2V0LCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCAtIHdpZHRoICsgc2Nyb2xsYmFyU2l6ZSArIGNvbHVtbldpZHRoKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KF9yZWY4LCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmOC5yb3dIZWlnaHQsXG4gICAgICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmOC5yb3dDb3VudDtcbiAgICB2YXIgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KDAsIHJvd0NvdW50ICogcm93SGVpZ2h0IC0gaGVpZ2h0KTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdFJvd09mZnNldCwgcm93SW5kZXggKiByb3dIZWlnaHQpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCByb3dJbmRleCAqIHJvd0hlaWdodCAtIGhlaWdodCArIHNjcm9sbGJhclNpemUgKyByb3dIZWlnaHQpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjksIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmOS5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmOS5jb2x1bW5Db3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyBjb2x1bW5XaWR0aCkpKTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTAsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTAuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjEwLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IF9yZWYxMC53aWR0aDtcbiAgICB2YXIgbGVmdCA9IHN0YXJ0SW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgICB2YXIgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gY29sdW1uV2lkdGgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWYxMSwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMS5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjExLnJvd0NvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSkpO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMiwgc3RhcnRJbmRleCwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMi5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjEyLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBfcmVmMTIuaGVpZ2h0O1xuICAgIHZhciB0b3AgPSBzdGFydEluZGV4ICogcm93SGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbCgoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvIHJvd0hlaWdodCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmMTMpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTMuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYxMy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaW5kZXggKiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYyLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjMpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjMuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWYzLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZSAqIGl0ZW1Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KF9yZWY0LCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY0LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjQuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY0Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNC5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbUNvdW50ICogaXRlbVNpemUgLSBzaXplKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdEl0ZW1PZmZzZXQsIGluZGV4ICogaXRlbVNpemUpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpbmRleCAqIGl0ZW1TaXplIC0gc2l6ZSArIGl0ZW1TaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEl0ZW1PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY1LCBvZmZzZXQpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjUuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBNYXRoLmZsb29yKG9mZnNldCAvIGl0ZW1TaXplKSkpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWY2LCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjYuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY2Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNi5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjYubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY2LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgb2Zmc2V0ID0gc3RhcnRJbmRleCAqIGl0ZW1TaXplO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVJdGVtcyA9IE1hdGguY2VpbCgoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyBpdGVtU2l6ZSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjcuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldiwgbmV4dCkge1xuICBmb3IgKHZhciBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX2F0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbX2F0dHJpYnV0ZV0gIT09IG5leHRbX2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiXTtcbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5cbmZ1bmN0aW9uIGFyZUVxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3R5bGUgPSBwcmV2UHJvcHMuc3R5bGUsXG4gICAgICBwcmV2UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICB2YXIgbmV4dFN0eWxlID0gbmV4dFByb3BzLnN0eWxlLFxuICAgICAgbmV4dFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShuZXh0UHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIHJldHVybiAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpO1xufVxuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuXG5mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCB7IEZpeGVkU2l6ZUdyaWQsIEZpeGVkU2l6ZUxpc3QsIFZhcmlhYmxlU2l6ZUdyaWQsIFZhcmlhYmxlU2l6ZUxpc3QsIGFyZUVxdWFsLCBzaG91bGRDb21wb25lbnRVcGRhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsIi8qKiEgXG4gKiBob3RrZXlzLWpzIHYzLjkuMyBcbiAqIEEgc2ltcGxlIG1pY3JvLWxpYnJhcnkgZm9yIGRlZmluaW5nIGFuZCBkaXNwYXRjaGluZyBrZXlib2FyZCBzaG9ydGN1dHMuIEl0IGhhcyBubyBkZXBlbmRlbmNpZXMuIFxuICogXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIga2Vubnkgd29uZyA8d293b2hvb0BxcS5jb20+IFxuICogaHR0cDovL2pheXdjamxvdmUuZ2l0aHViLmlvL2hvdGtleXMgXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgXG4gKi9cblxudmFyIGlzZmYgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyA/IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAwIDogZmFsc2U7IC8vIOe7keWumuS6i+S7tlxuXG5mdW5jdGlvbiBhZGRFdmVudChvYmplY3QsIGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpIHtcbiAgaWYgKG9iamVjdC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0LmF0dGFjaEV2ZW50KSB7XG4gICAgb2JqZWN0LmF0dGFjaEV2ZW50KFwib25cIi5jb25jYXQoZXZlbnQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtZXRob2Qod2luZG93LmV2ZW50KTtcbiAgICB9KTtcbiAgfVxufSAvLyDkv67ppbDplK7ovazmjaLmiJDlr7nlupTnmoTplK7noIFcblxuXG5mdW5jdGlvbiBnZXRNb2RzKG1vZGlmaWVyLCBrZXkpIHtcbiAgdmFyIG1vZHMgPSBrZXkuc2xpY2UoMCwga2V5Lmxlbmd0aCAtIDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kcy5sZW5ndGg7IGkrKykge1xuICAgIG1vZHNbaV0gPSBtb2RpZmllclttb2RzW2ldLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgcmV0dXJuIG1vZHM7XG59IC8vIOWkhOeQhuS8oOeahGtleeWtl+espuS4sui9rOaNouaIkOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGdldEtleXMoa2V5KSB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykga2V5ID0gJyc7XG4gIGtleSA9IGtleS5yZXBsYWNlKC9cXHMvZywgJycpOyAvLyDljLnphY3ku7vkvZXnqbrnmb3lrZfnrKYs5YyF5ous56m65qC844CB5Yi26KGo56ym44CB5o2i6aG156ym562J562JXG5cbiAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJywnKTsgLy8g5ZCM5pe26K6+572u5aSa5Liq5b+r5o236ZSu77yM5LulJywn5YiG5YmyXG5cbiAgdmFyIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7IC8vIOW/q+aNt+mUruWPr+iDveWMheWQqycsJ++8jOmcgOeJueauiuWkhOeQhlxuXG4gIGZvciAoOyBpbmRleCA+PSAwOykge1xuICAgIGtleXNbaW5kZXggLSAxXSArPSAnLCc7XG4gICAga2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGluZGV4ID0ga2V5cy5sYXN0SW5kZXhPZignJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn0gLy8g5q+U6L6D5L+u6aWw6ZSu55qE5pWw57uEXG5cblxuZnVuY3Rpb24gY29tcGFyZUFycmF5KGExLCBhMikge1xuICB2YXIgYXJyMSA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMSA6IGEyO1xuICB2YXIgYXJyMiA9IGExLmxlbmd0aCA+PSBhMi5sZW5ndGggPyBhMiA6IGExO1xuICB2YXIgaXNJbmRleCA9IHRydWU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycjIuaW5kZXhPZihhcnIxW2ldKSA9PT0gLTEpIGlzSW5kZXggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0luZGV4O1xufVxuXG52YXIgX2tleU1hcCA9IHtcbiAgYmFja3NwYWNlOiA4LFxuICB0YWI6IDksXG4gIGNsZWFyOiAxMixcbiAgZW50ZXI6IDEzLFxuICByZXR1cm46IDEzLFxuICBlc2M6IDI3LFxuICBlc2NhcGU6IDI3LFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGRlbDogNDYsXG4gIGRlbGV0ZTogNDYsXG4gIGluczogNDUsXG4gIGluc2VydDogNDUsXG4gIGhvbWU6IDM2LFxuICBlbmQ6IDM1LFxuICBwYWdldXA6IDMzLFxuICBwYWdlZG93bjogMzQsXG4gIGNhcHNsb2NrOiAyMCxcbiAgbnVtXzA6IDk2LFxuICBudW1fMTogOTcsXG4gIG51bV8yOiA5OCxcbiAgbnVtXzM6IDk5LFxuICBudW1fNDogMTAwLFxuICBudW1fNTogMTAxLFxuICBudW1fNjogMTAyLFxuICBudW1fNzogMTAzLFxuICBudW1fODogMTA0LFxuICBudW1fOTogMTA1LFxuICBudW1fbXVsdGlwbHk6IDEwNixcbiAgbnVtX2FkZDogMTA3LFxuICBudW1fZW50ZXI6IDEwOCxcbiAgbnVtX3N1YnRyYWN0OiAxMDksXG4gIG51bV9kZWNpbWFsOiAxMTAsXG4gIG51bV9kaXZpZGU6IDExMSxcbiAgJ+KHqic6IDIwLFxuICAnLCc6IDE4OCxcbiAgJy4nOiAxOTAsXG4gICcvJzogMTkxLFxuICAnYCc6IDE5MixcbiAgJy0nOiBpc2ZmID8gMTczIDogMTg5LFxuICAnPSc6IGlzZmYgPyA2MSA6IDE4NyxcbiAgJzsnOiBpc2ZmID8gNTkgOiAxODYsXG4gICdcXCcnOiAyMjIsXG4gICdbJzogMjE5LFxuICAnXSc6IDIyMSxcbiAgJ1xcXFwnOiAyMjBcbn07IC8vIE1vZGlmaWVyIEtleXNcblxudmFyIF9tb2RpZmllciA9IHtcbiAgLy8gc2hpZnRLZXlcbiAgJ+KHpyc6IDE2LFxuICBzaGlmdDogMTYsXG4gIC8vIGFsdEtleVxuICAn4oylJzogMTgsXG4gIGFsdDogMTgsXG4gIG9wdGlvbjogMTgsXG4gIC8vIGN0cmxLZXlcbiAgJ+KMgyc6IDE3LFxuICBjdHJsOiAxNyxcbiAgY29udHJvbDogMTcsXG4gIC8vIG1ldGFLZXlcbiAgJ+KMmCc6IDkxLFxuICBjbWQ6IDkxLFxuICBjb21tYW5kOiA5MVxufTtcbnZhciBtb2RpZmllck1hcCA9IHtcbiAgMTY6ICdzaGlmdEtleScsXG4gIDE4OiAnYWx0S2V5JyxcbiAgMTc6ICdjdHJsS2V5JyxcbiAgOTE6ICdtZXRhS2V5JyxcbiAgc2hpZnRLZXk6IDE2LFxuICBjdHJsS2V5OiAxNyxcbiAgYWx0S2V5OiAxOCxcbiAgbWV0YUtleTogOTFcbn07XG52YXIgX21vZHMgPSB7XG4gIDE2OiBmYWxzZSxcbiAgMTg6IGZhbHNlLFxuICAxNzogZmFsc2UsXG4gIDkxOiBmYWxzZVxufTtcbnZhciBfaGFuZGxlcnMgPSB7fTsgLy8gRjF+RjEyIHNwZWNpYWwga2V5XG5cbmZvciAodmFyIGsgPSAxOyBrIDwgMjA7IGsrKykge1xuICBfa2V5TWFwW1wiZlwiLmNvbmNhdChrKV0gPSAxMTEgKyBrO1xufVxuXG52YXIgX2Rvd25LZXlzID0gW107IC8vIOiusOW9leaRgeS4i+eahOe7keWumumUrlxuXG52YXIgd2luTGlzdGVuZEZvY3VzID0gZmFsc2U7IC8vIHdpbmRvd+aYr+WQpuW3sue7j+ebkeWQrOS6hmZvY3Vz5LqL5Lu2XG5cbnZhciBfc2NvcGUgPSAnYWxsJzsgLy8g6buY6K6k54Ot6ZSu6IyD5Zu0XG5cbnZhciBlbGVtZW50SGFzQmluZEV2ZW50ID0gW107IC8vIOW3sue7keWumuS6i+S7tueahOiKgueCueiusOW9lVxuLy8g6L+U5Zue6ZSu56CBXG5cbnZhciBjb2RlID0gZnVuY3Rpb24gY29kZSh4KSB7XG4gIHJldHVybiBfa2V5TWFwW3gudG9Mb3dlckNhc2UoKV0gfHwgX21vZGlmaWVyW3gudG9Mb3dlckNhc2UoKV0gfHwgeC50b1VwcGVyQ2FzZSgpLmNoYXJDb2RlQXQoMCk7XG59OyAvLyDorr7nva7ojrflj5blvZPliY3ojIPlm7TvvIjpu5jorqTkuLon5omA5pyJJ++8iVxuXG5cbmZ1bmN0aW9uIHNldFNjb3BlKHNjb3BlKSB7XG4gIF9zY29wZSA9IHNjb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5blvZPliY3ojIPlm7RcblxuXG5mdW5jdGlvbiBnZXRTY29wZSgpIHtcbiAgcmV0dXJuIF9zY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5pGB5LiL57uR5a6a6ZSu55qE6ZSu5YC8XG5cblxuZnVuY3Rpb24gZ2V0UHJlc3NlZEtleUNvZGVzKCkge1xuICByZXR1cm4gX2Rvd25LZXlzLnNsaWNlKDApO1xufSAvLyDooajljZXmjqfku7bmjqfku7bliKTmlq0g6L+U5ZueIEJvb2xlYW5cbi8vIGhvdGtleSBpcyBlZmZlY3RpdmUgb25seSB3aGVuIGZpbHRlciByZXR1cm4gdHJ1ZVxuXG5cbmZ1bmN0aW9uIGZpbHRlcihldmVudCkge1xuICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIHZhciB0YWdOYW1lID0gdGFyZ2V0LnRhZ05hbWU7XG4gIHZhciBmbGFnID0gdHJ1ZTsgLy8gaWdub3JlOiBpc0NvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnLCA8aW5wdXQ+IGFuZCA8dGV4dGFyZWE+IHdoZW4gcmVhZE9ubHkgc3RhdGUgaXMgZmFsc2UsIDxzZWxlY3Q+XG5cbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSB8fCAodGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhZ05hbWUgPT09ICdTRUxFQ1QnKSAmJiAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgZmxhZyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZsYWc7XG59IC8vIOWIpOaWreaRgeS4i+eahOmUruaYr+WQpuS4uuafkOS4qumUru+8jOi/lOWbnnRydWXmiJbogIVmYWxzZVxuXG5cbmZ1bmN0aW9uIGlzUHJlc3NlZChrZXlDb2RlKSB7XG4gIGlmICh0eXBlb2Yga2V5Q29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICBrZXlDb2RlID0gY29kZShrZXlDb2RlKTsgLy8g6L2s5o2i5oiQ6ZSu56CBXG4gIH1cblxuICByZXR1cm4gX2Rvd25LZXlzLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xufSAvLyDlvqrnjq/liKDpmaRoYW5kbGVyc+S4reeahOaJgOaciSBzY29wZSjojIPlm7QpXG5cblxuZnVuY3Rpb24gZGVsZXRlU2NvcGUoc2NvcGUsIG5ld1Njb3BlKSB7XG4gIHZhciBoYW5kbGVycztcbiAgdmFyIGk7IC8vIOayoeacieaMh+WumnNjb3Bl77yM6I635Y+Wc2NvcGVcblxuICBpZiAoIXNjb3BlKSBzY29wZSA9IGdldFNjb3BlKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIF9oYW5kbGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2hhbmRsZXJzLCBrZXkpKSB7XG4gICAgICBoYW5kbGVycyA9IF9oYW5kbGVyc1trZXldO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOykge1xuICAgICAgICBpZiAoaGFuZGxlcnNbaV0uc2NvcGUgPT09IHNjb3BlKSBoYW5kbGVycy5zcGxpY2UoaSwgMSk7ZWxzZSBpKys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIOWmguaenHNjb3Bl6KKr5Yig6Zmk77yM5bCGc2NvcGXph43nva7kuLphbGxcblxuXG4gIGlmIChnZXRTY29wZSgpID09PSBzY29wZSkgc2V0U2NvcGUobmV3U2NvcGUgfHwgJ2FsbCcpO1xufSAvLyDmuIXpmaTkv67ppbDplK5cblxuXG5mdW5jdGlvbiBjbGVhck1vZGlmaWVyKGV2ZW50KSB7XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlO1xuXG4gIHZhciBpID0gX2Rvd25LZXlzLmluZGV4T2Yoa2V5KTsgLy8g5LuO5YiX6KGo5Lit5riF6Zmk5oyJ5Y6L6L+H55qE6ZSuXG5cblxuICBpZiAoaSA+PSAwKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZShpLCAxKTtcbiAgfSAvLyDnibnmrorlpITnkIYgY21tYW5kIOmUru+8jOWcqCBjbW1hbmQg57uE5ZCI5b+r5o236ZSuIGtleXVwIOWPquaJp+ihjOS4gOasoeeahOmXrumimFxuXG5cbiAgaWYgKGV2ZW50LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ21ldGEnKSB7XG4gICAgX2Rvd25LZXlzLnNwbGljZSgwLCBfZG93bktleXMubGVuZ3RoKTtcbiAgfSAvLyDkv67ppbDplK4gc2hpZnRLZXkgYWx0S2V5IGN0cmxLZXkgKGNvbW1hbmR8fG1ldGFLZXkpIOa4hemZpFxuXG5cbiAgaWYgKGtleSA9PT0gOTMgfHwga2V5ID09PSAyMjQpIGtleSA9IDkxO1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gZmFsc2U7IC8vIOWwhuS/rumlsOmUrumHjee9ruS4umZhbHNlXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuYmluZChrZXlzSW5mbykge1xuICAvLyB1bmJpbmQoKSwgdW5iaW5kIGFsbCBrZXlzXG4gIGlmICgha2V5c0luZm8pIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0O1xuXG4gICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKGtleWJvYXJkRXZlbnQpKSB7XG4gICAgICByZXR1cm4gIWZpbHRlclByZXZlbnREZWZhdWx0O1xuICAgIH0gLy8gQ2hlY2sgd2hldGhlciB0aGUgaG90a2V5cyB3YXMgdHJpZ2dlcmVkIGluc2lkZSBhbiBpbnB1dCBhbmQgdGhhdCBpbnB1dCBpcyBlbmFibGVkIG9yIGlmIGl0IHdhcyB0cmlnZ2VyZWQgYnkgYSBjb250ZW50IGVkaXRhYmxlIHRhZyBhbmQgaXQgaXMgZW5hYmxlZC5cblxuXG4gICAgaWYgKGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoa2V5Ym9hcmRFdmVudCkgJiYgIXRhZ0ZpbHRlcihrZXlib2FyZEV2ZW50LCBlbmFibGVPblRhZ3MpIHx8IChfa2V5Ym9hcmRFdmVudCR0YXJnZXQgPSBrZXlib2FyZEV2ZW50LnRhcmdldCkgIT0gbnVsbCAmJiBfa2V5Ym9hcmRFdmVudCR0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgJiYgIWVuYWJsZU9uQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIl0sInNvdXJjZVJvb3QiOiIifQ==