@bikdotai/bik-component-library 0.0.77-4.beta.0.11 → 0.0.77-4.beta.0.2
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/cjs/components/WhatsAppTextEditor/AIRephraseButton.d.ts +1 -3
- package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.js +1 -1
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +1 -3
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +1 -5
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +1 -5
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
- package/dist/cjs/components/WhatsAppTextEditor/ai/actionRegistry.js +1 -1
- package/dist/cjs/components/bik-layout/MockMenus.d.ts +0 -1
- package/dist/cjs/helpers/BaseWhatsappContentLang.helper.js +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.d.ts +1 -3
- package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.js +1 -1
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +1 -3
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +1 -5
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +1 -5
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
- package/dist/esm/components/WhatsAppTextEditor/ai/actionRegistry.js +1 -1
- package/dist/esm/components/bik-layout/MockMenus.d.ts +0 -1
- package/dist/esm/helpers/BaseWhatsappContentLang.helper.js +1 -1
- package/dist/esm/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1 @@
|
|
|
1
|
-
import I from"@emotion/styled/base";import{__rest as g,__awaiter as C}from"../../_virtual/_tslib.js";import{jsxs as A,jsx as c,Fragment as l}from"react/jsx-runtime";import{keyframes as b}from"@emotion/react";import G from"../../assets/icons/check.svg.js";import Z from"../../assets/icons/chevronLeft.svg.js";import X from"../../assets/icons/chevronRight.svg.js";import d from"../../assets/icons/cross.svg.js";import V from"../../assets/icons/edit.svg.js";import W from"../../assets/icons/info.svg.js";import B from"../../assets/icons/refresh.svg.js";import R from"../../assets/icons/thumbs_down.svg.js";import H from"../../assets/icons/thumbs_up.svg.js";import{BaseWhatsappContentLangHelper as u}from"../../helpers/BaseWhatsappContentLang.helper.js";import J,{useRef as m,useState as N,useMemo as y,useCallback as x,useEffect as Y,useImperativeHandle as F}from"react";import{COLORS as h}from"../../constants/Theme.js";import{Tooltip as a}from"../tooltips/Tooltip.js";import{BodyCaption as p}from"../TypographyStyle.js";import{DEFAULT_INSTRUCTION_SUGGESTIONS as i,resolveActionPrompts as n,DEFAULT_AI_ACTION_MIN_CHARS as S}from"./ai/actionRegistry.js";import{buildActionPrompt as k,requestAISuggestion as s}from"./ai/api.js";import{OuterContainer as Q,Container as U,TextSpace as z}from"./CustomEditor.styled.js";import{EditorActionTypes as v,AIEditorActionTypes as w,AIActionVariant as o,WhatsAppTextEditorHeader as t}from"./WhatsAppTextEditorHeader.js";function D(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const j="Character limit reached",T=b`
|
|
2
|
-
0% { opacity: 0.55; }
|
|
3
|
-
50% { opacity: 1; }
|
|
4
|
-
100% { opacity: 0.55; }
|
|
5
|
-
`,L=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh14"}:{target:"ea7i3sh14",label:"EditorSkeletonContainer"})("production"===process.env.NODE_ENV?{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px"}:{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUMyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:D}),e=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh13"}:{target:"ea7i3sh13",label:"EditorSkeletonLine"})("height:16px;border-radius:6px;width:",(I=>I.width),";background:#ececef;animation:",T," 1.1s ease-in-out infinite;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),K=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh12"}:{target:"ea7i3sh12",label:"SuggestionSessionContainer"})("production"===process.env.NODE_ENV?{name:"lwqbyv",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:scroll;scrollbar-width:thin;scrollbar-color:#c8c8cf transparent;::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-thumb{background:#c8c8cf;border-radius:8px;}::-webkit-scrollbar-track{background:transparent;}"}:{name:"lwqbyv",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:scroll;scrollbar-width:thin;scrollbar-color:#c8c8cf transparent;::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-thumb{background:#c8c8cf;border-radius:8px;}::-webkit-scrollbar-track{background:transparent;}",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0M4QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:D}),O=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh11"}:{target:"ea7i3sh11",label:"SuggestionBaselineText"})("text-decoration:line-through;color:",h.content.secondary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUUwQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),E=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh10"}:{target:"ea7i3sh10",label:"SuggestionControlsRow"})("production"===process.env.NODE_ENV?{name:"1yydxi7",styles:"display:flex;align-items:center;gap:8px"}:{name:"1yydxi7",styles:"display:flex;align-items:center;gap:8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUV5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:D}),P=I("span","production"===process.env.NODE_ENV?{target:"ea7i3sh9"}:{target:"ea7i3sh9",label:"SuggestionCounter"})("color:",h.content.primary,";font-size:14px;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEVzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),f=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh8"}:{target:"ea7i3sh8",label:"SuggestionIconButton"})("border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:",h.content.primary,";:disabled{opacity:0.35;cursor:not-allowed;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0YyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),M=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("production"===process.env.NODE_ENV?{name:"6cf6k2",styles:"padding:10px 12px 8px"}:{name:"6cf6k2",styles:"padding:10px 12px 8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEZ3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:D}),r=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",h.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUd1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),q=I("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",h.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEdzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),_=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUhzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:D}),$=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",h.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0h3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),II=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",h.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUl5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),gI=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",h.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEk2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),CI=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",h.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":h.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUprRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDhweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogMDtcblx0ZGlzcGxheTogaW5saW5lLWZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuXHQ6ZGlzYWJsZWQge1xuXHRcdG9wYWNpdHk6IDAuMzU7XG5cdFx0Y3Vyc29yOiBub3QtYWxsb3dlZDtcblx0fVxuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25Db250YWluZXIgPSBzdHlsZWQuZGl2IGBcblx0cGFkZGluZzogMTBweCAxMnB4IDhweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmZ1bmN0aW9uIGdldEVkaXREaXN0YW5jZShvbGRUZXh0LCBuZXdUZXh0KSB7XHJcbiAgICBjb25zdCBtID0gb2xkVGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBuID0gbmV3VGV4dC5sZW5ndGg7XHJcbiAgICBjb25zdCBkcCA9IEFycmF5KG4gKyAxKVxyXG4gICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgLm1hcCgoXywgaikgPT4gaik7XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBtOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJldkRpYWdvbmFsID0gZHBbMF07XHJcbiAgICAgICAgZHBbMF0gPSBpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IG47IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gZHBbal07XHJcbiAgICAgICAgICAgIGlmIChvbGRUZXh0W2kgLSAxXSA9PT0gbmV3VGV4dFtqIC0gMV0pIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gcHJldkRpYWdvbmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBNYXRoLm1pbihkcFtqIC0gMV0sIGRwW2pdLCBwcmV2RGlhZ29uYWwpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2RGlhZ29uYWwgPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcFtuXTtcclxufVxyXG5leHBvcnQgY29uc3QgV2hhdHNBcHBUZXh0RWRpdG9yID0gUmVhY3QuZm9yd2FyZFJlZigoX2EsIHJlZikgPT4ge1xyXG4gICAgdmFyIHsgb25DaGFuZ2UsIG9uQ2xpY2tWYXJpYWJsZSwgdGV4dDogaW5wdXRWYWx1ZSwgUmlnaHRDb21wb25lbnQsIGVycm9yLCBsaW1pdCwgb25FcnJvciwgcm93cywgYWN0aW9ucywgZWRpdG9ySW5zdGFuY2VLZXksIHRlbXBsYXRlVHlwZSA9ICdtYXJrZXRpbmcnLCB0ZW1wbGF0ZUlkLCByZXF1ZXN0RXhlY3V0b3IsIGJhc2VVcmwsIGVuZHBvaW50UGF0aCwgdXNlQ2FzZSwgc3RvcmVJZCwgYXBpQWRhcHRlciwgY29udmVyc2F0aW9uSWQgPSAnd2hhdHNhcHAtdGVtcGxhdGUtZWRpdG9yJywgc3lzdGVtSWQgPSAnd2hhdHNhcHAtd3JpdGVyJywgaW50ZW50ID0gJ2RlZmF1bHQnLCBlbmFibGVkQUlBY3Rpb25zID0gW1xyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5TSE9SVEVOLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRVhQQU5ELFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuRU1PSklGWSxcclxuICAgIF0sIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zID0gZmFsc2UsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcywgYWlBY3Rpb25NaW5DaGFycywgaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIG9uQUlFdmVudCwgb25BSVRhZ0NvbXB1dGVkLCBvbkFJVG9uZVNlbGVjdCwgb25BSUFjdGlvblJlcXVlc3QsIG9uQnVpbGRBSVByb21wdCB9ID0gX2EsIHRleHRBcmVhUHJvcHMgPSBfX3Jlc3QoX2EsIFtcIm9uQ2hhbmdlXCIsIFwib25DbGlja1ZhcmlhYmxlXCIsIFwidGV4dFwiLCBcIlJpZ2h0Q29tcG9uZW50XCIsIFwiZXJyb3JcIiwgXCJsaW1pdFwiLCBcIm9uRXJyb3JcIiwgXCJyb3dzXCIsIFwiYWN0aW9uc1wiLCBcImVkaXRvckluc3RhbmNlS2V5XCIsIFwidGVtcGxhdGVUeXBlXCIsIFwidGVtcGxhdGVJZFwiLCBcInJlcXVlc3RFeGVjdXRvclwiLCBcImJhc2VVcmxcIiwgXCJlbmRwb2ludFBhdGhcIiwgXCJ1c2VDYXNlXCIsIFwic3RvcmVJZFwiLCBcImFwaUFkYXB0ZXJcIiwgXCJjb252ZXJzYXRpb25JZFwiLCBcInN5c3RlbUlkXCIsIFwiaW50ZW50XCIsIFwiZW5hYmxlZEFJQWN0aW9uc1wiLCBcImRpc2FibGVCdWlsdEluQUlBY3Rpb25zXCIsIFwicHJvbXB0T3ZlcnJpZGVzXCIsIFwicmVwaHJhc2VUb25lc1wiLCBcImFpQWN0aW9uTWluQ2hhcnNcIiwgXCJpbnN0cnVjdGlvblN1Z2dlc3Rpb25zXCIsIFwib25BSUV2ZW50XCIsIFwib25BSVRhZ0NvbXB1dGVkXCIsIFwib25BSVRvbmVTZWxlY3RcIiwgXCJvbkFJQWN0aW9uUmVxdWVzdFwiLCBcIm9uQnVpbGRBSVByb21wdFwiXSk7XHJcbiAgICBjb25zdCB0ZXh0U3BhY2VSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBbY3VycmVudFRleHQsIHNldEN1cnJlbnRUZXh0XSA9IHVzZVN0YXRlKGlucHV0VmFsdWUgfHwgJycpO1xyXG4gICAgY29uc3QgW2lzUmVwaHJhc2VIaWdobGlnaHRlZCwgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtyZXBocmFzZUhpZ2hsaWdodENvdW50LCBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW2lzR2VuZXJhdGluZywgc2V0SXNHZW5lcmF0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcclxuICAgIGNvbnN0IFtpbnN0cnVjdGlvblRleHQsIHNldEluc3RydWN0aW9uVGV4dF0gPSB1c2VTdGF0ZSgnJyk7XHJcbiAgICBjb25zdCBbdG9uZUJ5QWN0aW9uLCBzZXRUb25lQnlBY3Rpb25dID0gdXNlU3RhdGUoe30pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25CYXNlVGV4dCwgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0XSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25DYW5kaWRhdGVzLCBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlc10gPSB1c2VTdGF0ZShbXSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkluZGV4LCBzZXRTdWdnZXN0aW9uSW5kZXhdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHNldFN1Z2dlc3Rpb25BY3Rpb25UeXBlXSA9IHVzZVN0YXRlKG51bGwpO1xyXG4gICAgY29uc3Qgc3VnZ2VzdGlvblNjcm9sbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb25dKTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSwgX2pzeChcImRpdlwiLCB7IGNoaWxkcmVuOiBhY3RpdmVDYW5kaWRhdGUgfSksIF9qc3hzKFN1Z2dlc3Rpb25Db250cm9sc1JvdywgeyBjaGlsZHJlbjogW19qc3hzKFN1Z2dlc3Rpb25Db3VudGVyLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJQcmV2aW91cyBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQsIG9uQ2xpY2s6ICgpID0+IHNldFN1Z2dlc3Rpb25JbmRleCgoaWR4KSA9PiBNYXRoLm1heCgwLCBpZHggLSAxKSkgfSwgeyBjaGlsZHJlbjogX2pzeChDaGV2cm9uTGVmdEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIk5leHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5taW4oc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMSwgaWR4ICsgMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvblJpZ2h0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkxpa2VcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzbGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdkaXNsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNEb3duSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgY2FuUmVnZW5lcmF0ZSA/IChfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIlJlZ2VuZXJhdGVcIiwgcGxhY2VtZW50OiBcInRvcFwiIH0sIHsgY2hpbGRyZW46IF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJSZWdlbmVyYXRlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IF9qc3goUmVmcmVzaEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),AI=new u,cI={[v.BOLD]:"*",[v.ITALIC]:"_",[v.STRIKETHROUGH]:"~"};function lI(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const bI=J.forwardRef(((I,b)=>{var{onChange:u,onClickVariable:J,text:v,RightComponent:D,error:T,limit:bI,onError:GI,rows:ZI,actions:XI,editorInstanceKey:dI,templateType:VI="marketing",templateId:WI,requestExecutor:BI,baseUrl:RI,endpointPath:HI,useCase:uI,storeId:JI,apiAdapter:mI,conversationId:NI="whatsapp-template-editor",systemId:yI="whatsapp-writer",intent:xI="default",enabledAIActions:YI=[w.REPHRASE,w.SHORTEN,w.EXPAND,w.EMOJIFY],disableBuiltInAIActions:FI=!1,promptOverrides:hI,rephraseTones:aI,aiActionMinChars:pI,instructionSuggestions:iI=i,onAIEvent:nI,onAITagComputed:SI,onAIToneSelect:kI,onAIActionRequest:sI,onBuildAIPrompt:QI}=I,UI=g(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const zI=m(null),[vI,wI]=N(v||""),[oI,tI]=N(!1),[DI,jI]=N(0),[TI,LI]=N(!1),[eI,KI]=N(!1),[OI,EI]=N(""),[PI,fI]=N({}),[MI,rI]=N(null),[qI,_I]=N([]),[$I,Ig]=N(0),[gg,Cg]=N(null),Ag=m(null),cg=m(null),lg=m(null),bg=m(!1),Gg=m(null),Zg=m(null),Xg=y((()=>n(VI,hI,aI)),[hI,aI,VI]),dg=y((()=>{const I=OI.trim().toLowerCase();return I?iI.filter((g=>g.toLowerCase().includes(I))):[]}),[iI,OI]),Vg=y((()=>Object.assign(Object.assign({},S),pI||{})),[pI]),Wg=Vg[w.REPHRASE]||S[w.REPHRASE],Bg=x(((I,g)=>{null==nI||nI(I,g)}),[nI]),Rg=x((I=>{wI((g=>g===I?g:I))}),[]),Hg=x((I=>{if(Gg.current&&clearTimeout(Gg.current),I.length>1200)return null==u||u(I,I),void(Gg.current=setTimeout((()=>{null==u||u(I,AI.getHTML(I))}),16));null==u||u(I,AI.getHTML(I))}),[u]),ug=x((()=>{rI(null),_I([]),Ig(0),Cg(null)}),[]),Jg=x((()=>{if(DI>=5)return;const I=DI+1;jI(I),"undefined"!=typeof window&&dI&&sessionStorage.setItem(lI(dI),String(I)),tI(!0),lg.current&&clearTimeout(lg.current),lg.current=setTimeout((()=>{tI(!1)}),1200)}),[dI,DI]);function mg(I){const g=null==zI?void 0:zI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function Ng(I){var g,C;let A=null!==(C=null===(g=zI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(zI.current&&I){const g=zI.current.selectionStart,C=zI.current.selectionEnd,c=I;if(g===C)return yg(c);{A=AI.wrappWildcard(g,C,c,A);const I=AI.getHTML(A);return Rg(A),{text:A,html:I}}}return{text:A,html:A}}function yg(I){var g,C;const A=null!==(C=null===(g=zI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(zI.current&&I){const g=zI.current.selectionStart;if(g===zI.current.selectionEnd)return xg(I,g)}return{text:A,html:A}}function xg(I,g){var C,A;let c=null!==(A=null===(C=zI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=AI.getHTML(c);return Rg(c),{text:c,html:l}}Y((()=>{if("undefined"==typeof window||!dI)return;const I=Number(sessionStorage.getItem(lI(dI))||"0");Number.isNaN(I)||jI(I)}),[dI]),Y((()=>{if(!(vI.length>=Wg))return bg.current=!1,tI(!1),void(cg.current&&(clearTimeout(cg.current),cg.current=null));bg.current||Jg(),cg.current&&clearTimeout(cg.current),cg.current=setTimeout((()=>{Jg()}),3e3),bg.current=!0}),[vI,Wg,Jg]),Y((()=>()=>{cg.current&&clearTimeout(cg.current),lg.current&&clearTimeout(lg.current),Gg.current&&clearTimeout(Gg.current)}),[]);const Yg=qI[$I]||"",Fg=qI.length<3,hg=!!MI&&qI.length>0,ag=qI.length<=1||$I<=0,pg=qI.length<=1||$I>=qI.length-1;Y((()=>{if(!hg)return;const I=Ag.current;I&&(I.scrollTop=I.scrollHeight)}),[Yg,hg]);const ig=x((function(I){let g=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.DEFAULT;return C(void 0,void 0,void 0,(function*(){var C,b,G;if(!(sI||mI||BI&&RI))return void(null==GI||GI("AI configuration missing"));if(!vI.trim())return;const Z=Vg[I]||S[I]||50;if(vI.length<Z)return;if(TI)return;if(g&&!Fg)return;const X=Xg[I],d=I===w.REPHRASE&&"utility"===VI&&l===o.REPHRASE?Object.assign(Object.assign({},X),{label:"Rephrase",basePrompt:"Rephrase this WhatsApp utility template to improve clarity and readability while preserving variables, intent, and compliance."}):X,V=c||PI[I]||d.defaultToneId||(null===(b=null===(C=d.tones)||void 0===C?void 0:C[0])||void 0===b?void 0:b.id),W=null===(G=d.tones)||void 0===G?void 0:G.find((I=>I.id===V)),B=void 0!==A?A:OI,R=(null==QI?void 0:QI({actionType:I,actionVariant:l,currentText:vI,templateType:VI,config:d,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0}))||k({config:d,currentText:vI,selectedToneId:V,instructionText:B});LI(!0),Bg("ai_action_triggered",{action_type:I,template_id:WI});try{const C=sI?yield sI({actionType:I,actionVariant:l,currentText:vI,templateType:VI,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0,prompt:R}):yield s({apiAdapter:mI,requestExecutor:BI,baseUrl:RI,endpointPath:HI,prompt:R,intent:xI,conversationId:NI,systemId:yI,useCase:uI,storeId:JI}),A="string"==typeof C?C.trim():((null==C?void 0:C.body)||"").trim();if(!A)return;if(!g)return rI(vI),Cg(I),_I([A]),void Ig(0);_I((I=>{const g=[...I,A].slice(0,3);return Ig(g.length-1),g}))}catch(I){null==GI||GI("Failed to generate AI suggestion")}finally{LI(!1)}}))}),[BI,RI,vI,TI,Fg,Xg,PI,OI,Bg,WI,HI,mI,xI,NI,yI,uI,JI,VI,GI,Vg,sI,QI]),ng=x((()=>{if(!Yg||!MI||!gg)return;Rg(Yg),Hg(Yg),Bg("ai_suggestion_accepted",{action_type:gg,template_id:WI});const I=function(I,g){const C=I.length,A=g.length,c=Array(A+1).fill(0).map(((I,g)=>g));for(let l=1;l<=C;l++){let C=c[0];c[0]=l;for(let b=1;b<=A;b++){const A=c[b];I[l-1]===g[b-1]?c[b]=C:c[b]=Math.min(c[b-1],c[b],C)+1,C=A}}return c[A]}(MI,Yg),g=Math.max(MI.length,Yg.length,1),C=I/g;null==SI||SI({changedCharacters:I,templateLength:g,changePercent:C,isAiTagged:C>=.5}),ug()}),[Yg,MI,gg,Rg,Hg,Bg,WI,SI,ug]),Sg=x((()=>{gg&&(Bg("ai_suggestion_discarded",{action_type:gg,template_id:WI}),ug())}),[ug,Bg,gg,WI]),kg=x((I=>{gg&&Bg("ai_feedback_submitted",{action_type:gg,template_id:WI,rating:I,candidate_index:$I+1})}),[Bg,gg,$I,WI]),sg=y((()=>FI?[]:YI.map((I=>{var g,C,A;const c=Xg[I],l=PI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===w.REPHRASE,loading:TI&&gg===I,highlighted:I===w.REPHRASE&&oI,disabled:!vI.trim()||vI.length<(Vg[I]||S[I]||50)||TI||hg&&gg===I,showToneDropdown:I===w.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[YI,FI,Xg,PI,TI,gg,hg,oI,vI,Vg]);return F(b,(()=>({addTextOrWrap:Ng,addText:yg,get:()=>vI,setCaretPosition:mg})),[Ng,yg,vI]),Y((()=>{void 0!==v&&Rg(v||"")}),[v,Rg]),Y((()=>{if(!bI||!GI)return;const I=vI.length>bI?j:null!=T?T:"";Zg.current!==I&&(Zg.current=I,GI(I))}),[vI,T,bI,GI]),A(Q,{children:[A(U,Object.assign({isError:!!T},{children:[hg?A(K,Object.assign({ref:Ag},{children:[c(O,{children:MI}),c("div",{children:Yg}),A(E,{children:[A(P,{children:[$I+1,"/",qI.length]}),c(f,Object.assign({"aria-label":"Previous suggestion",type:"button",disabled:ag,onClick:()=>Ig((I=>Math.max(0,I-1)))},{children:c(Z,{width:14,height:14})})),c(f,Object.assign({"aria-label":"Next suggestion",type:"button",disabled:pg,onClick:()=>Ig((I=>Math.min(qI.length-1,I+1)))},{children:c(X,{width:14,height:14})})),c(a,Object.assign({body:"Like",placement:"top"},{children:c(f,Object.assign({"aria-label":"Like suggestion",type:"button",onClick:()=>kg("like")},{children:c(H,{width:14,height:14})}))})),c(a,Object.assign({body:"Dislike",placement:"top"},{children:c(f,Object.assign({"aria-label":"Dislike suggestion",type:"button",onClick:()=>kg("dislike")},{children:c(R,{width:14,height:14})}))})),Fg?c(a,Object.assign({body:"Regenerate",placement:"top"},{children:c(f,Object.assign({"aria-label":"Regenerate suggestion",type:"button",disabled:TI,onClick:()=>{gg&&ig(gg,!0)}},{children:c(B,{width:14,height:14})}))})):null,c(a,Object.assign({body:"Discard",placement:"top"},{children:c(f,Object.assign({"aria-label":"Discard suggestion",type:"button",onClick:Sg},{children:c(d,{width:14,height:14})}))})),c(a,Object.assign({body:"Accept",placement:"top"},{children:c(f,Object.assign({"aria-label":"Accept suggestion",type:"button",onClick:ng},{children:c(G,{width:14,height:14})}))}))]})]})):TI?A(L,{children:[c(e,{width:"96%"}),c(e,{width:"92%"}),c(e,{width:"88%"}),c(e,{width:"54%"})]}):c(z,Object.assign({ref:zI},UI,{value:vI,onChange:function(I){const g=I.target.value;Rg(g),Hg(g)},onPaste:I=>{var g,C;const A=I.clipboardData.getData("text");if(A.length>1200){const c=(null===(g=zI.current)||void 0===g?void 0:g.selectionStart)||0,l=(null===(C=zI.current)||void 0===C?void 0:C.selectionEnd)||c,b=vI.slice(0,c)+A+vI.slice(l);requestAnimationFrame((()=>{Rg(b),Hg(b)})),I.preventDefault()}},rows:ZI})),eI?A(M,{children:[A(r,{children:[c(V,{width:18,height:18,color:h.content.secondary}),c(q,{value:OI,placeholder:"Add specific instructions to refine your message",onChange:I=>EI(I.target.value)}),A(_,{children:[c($,Object.assign({type:"button",onClick:()=>{EI(""),KI(!1)}},{children:"Cancel"})),c(II,Object.assign({type:"button",onClick:()=>{const I=OI.trim();KI(!1),EI(""),ig(w.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),OI.trim().length>0&&dg.length>0?c(gI,{children:dg.map((I=>c(CI,Object.assign({type:"button",selected:OI===I,onClick:()=>EI(I)},{children:I}),I)))}):null]}):null,c(t,{actions:XI,ref:zI,onActionSelect:function(I){const g=cI[I];if(g&&zI.current){const I=zI.current.selectionStart;if(I===zI.current.selectionEnd){const{text:C}=xg(g,I);mg(I+1),Hg(C)}else{const{text:I}=Ng(g);Hg(I)}}},RightComponent:D,onEmojiClick:function(I){const{text:g}=yg(I);Hg(g)},aiActions:sg,disableAllActions:hg||TI,instructionActive:eI,onAIInstructionsClick:()=>KI(!0),onAIToneChange:(I,g)=>{fI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==kI||kI(I,g),I===w.REPHRASE&&ig(I,!1,void 0,g,o.DEFAULT)},onAIActionClick:function(I){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.DEFAULT;if(!TI){if(hg){if(gg===I)return;return ug(),void ig(I,!1,void 0,void 0,g)}ig(I,!1,void 0,void 0,g)}}})]})),T&&T!==j?A("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[c(W,{width:16,height:16,color:h.content.negative}),c(p,Object.assign({color:h.content.negative},{children:T}))]})):c(l,{children:bI?A(p,Object.assign({style:{color:T===j||vI.length>bI?h.content.negative:h.content.secondary}},{children:[vI.length,"/",bI]})):c(l,{})})]})}));bI.displayName="WhatsAppTextEditor";export{bI as WhatsAppTextEditor};
|
|
1
|
+
import I from"@emotion/styled/base";import{__rest as g,__awaiter as C}from"../../_virtual/_tslib.js";import{jsxs as A,jsx as c,Fragment as l}from"react/jsx-runtime";import b from"../../assets/icons/check.svg.js";import Z from"../../assets/icons/chevronLeft.svg.js";import G from"../../assets/icons/chevronRight.svg.js";import d from"../../assets/icons/cross.svg.js";import X from"../../assets/icons/edit.svg.js";import V from"../../assets/icons/info.svg.js";import W from"../../assets/icons/refresh.svg.js";import H from"../../assets/icons/thumbs_down.svg.js";import B from"../../assets/icons/thumbs_up.svg.js";import{BaseWhatsappContentLangHelper as R}from"../../helpers/BaseWhatsappContentLang.helper.js";import u,{useRef as J,useState as N,useMemo as x,useCallback as m,useEffect as i,useImperativeHandle as F}from"react";import{COLORS as y}from"../../constants/Theme.js";import{Tooltip as Y}from"../tooltips/Tooltip.js";import{BodyCaption as n}from"../TypographyStyle.js";import{DEFAULT_INSTRUCTION_SUGGESTIONS as a,resolveActionPrompts as p,DEFAULT_AI_ACTION_MIN_CHARS as h}from"./ai/actionRegistry.js";import{buildActionPrompt as S,requestAISuggestion as s}from"./ai/api.js";import{OuterContainer as U,Container as k,TextSpace as Q}from"./CustomEditor.styled.js";import{EditorActionTypes as v,AIEditorActionTypes as o,WhatsAppTextEditorHeader as w}from"./WhatsAppTextEditorHeader.js";function z(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const t="Character limit reached",e=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("production"===process.env.NODE_ENV?{name:"6cf6k2",styles:"padding:10px 12px 8px"}:{name:"6cf6k2",styles:"padding:10px 12px 8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJ3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:z}),j=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",y.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkJ1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),T=I("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",y.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),D=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:z}),L=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",y.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0R3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),K=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",y.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkR5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),O=I("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",y.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0U2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),P=I("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",y.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":y.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0VrRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XHJcbmltcG9ydCBDaGVja0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvY2hlY2suc3ZnJztcclxuaW1wb3J0IENoZXZyb25MZWZ0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uTGVmdC5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvblJpZ2h0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGV2cm9uUmlnaHQuc3ZnJztcclxuaW1wb3J0IENyb3NzSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jcm9zcy5zdmcnO1xyXG5pbXBvcnQgRWRpdEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvZWRpdC5zdmcnO1xyXG5pbXBvcnQgSW5mb0ljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvaW5mby5zdmcnO1xyXG5pbXBvcnQgUmVmcmVzaEljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvcmVmcmVzaC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24gfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBPdXRlckNvbnRhaW5lciwgVGV4dFNwYWNlIH0gZnJvbSAnLi9DdXN0b21FZGl0b3Iuc3R5bGVkJztcclxuaW1wb3J0IHsgQUlFZGl0b3JBY3Rpb25UeXBlcywgRWRpdG9yQWN0aW9uVHlwZXMsIFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgfSBmcm9tICcuL1doYXRzQXBwVGV4dEVkaXRvckhlYWRlcic7XHJcbmNvbnN0IExJTUlUX1JFQUNIRUQgPSAnQ2hhcmFjdGVyIGxpbWl0IHJlYWNoZWQnO1xyXG5jb25zdCBSRVBIUkFTRV9JRExFX01TID0gMzAwMDtcclxuY29uc3QgTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMgPSA1O1xyXG5jb25zdCBNQVhfU1VHR0VTVElPTlMgPSAzO1xyXG5jb25zdCBMQVJHRV9JTlBVVF9USFJFU0hPTEQgPSAxMjAwO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dFJvdyA9IHN0eWxlZC5kaXYgYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjZjVhNGMwO1xuXHRib3JkZXItcmFkaXVzOiAxMHB4O1xuXHRwYWRkaW5nOiA4cHggMTBweDtcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXQgPSBzdHlsZWQuaW5wdXQgYFxuXHRmbGV4OiAxO1xuXHRtaW4td2lkdGg6IDA7XG5cdGJvcmRlcjogMDtcblx0b3V0bGluZTogbm9uZTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkFjdGlvbnMgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiAxMHB4O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25DYW5jZWwgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRmb250LXdlaWdodDogNTAwO1xuXHRwYWRkaW5nOiAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkltcHJvdmUgPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAxcHggc29saWQgIzVkM2E3Mjtcblx0Y29sb3I6ICM1ZDNhNzI7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3JkZXItcmFkaXVzOiA4cHg7XG5cdHBhZGRpbmc6IDhweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjE7XG5cdGZvbnQtd2VpZ2h0OiA2MDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QgPSBzdHlsZWQuZGl2IGBcblx0bWFyZ2luLXRvcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMTJweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXHRvdmVyZmxvdzogaGlkZGVuO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdHdpZHRoOiAxMDAlO1xuXHRib3JkZXI6IDA7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAke0NPTE9SUy5zdHJva2UucHJpbWFyeX07XG5cdGJhY2tncm91bmQ6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnI2U1ZjNlOCcgOiAndHJhbnNwYXJlbnQnKX07XG5cdGNvbG9yOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyMxZTZiMzQnIDogQ09MT1JTLmNvbnRlbnQucHJpbWFyeSl9O1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xuXHRwYWRkaW5nOiAxMnB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHQ6Zmlyc3Qtb2YtdHlwZSB7XG5cdFx0Ym9yZGVyLXRvcDogMDtcblx0fVxuYDtcclxuY29uc3QgYmFzZVdoYXRzYXBwQ29udGVudExhbmcgPSBuZXcgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIoKTtcclxuY29uc3QgV2lsZENhcmRNYXAgPSB7XHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuQk9MRF06ICcqJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5JVEFMSUNdOiAnXycsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuU1RSSUtFVEhST1VHSF06ICd+JyxcclxufTtcclxuZnVuY3Rpb24gZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkge1xyXG4gICAgcmV0dXJuIGB3aGF0c2FwcC1lZGl0b3ItcmVwaHJhc2UtaGlnaGxpZ2h0LSR7ZWRpdG9ySW5zdGFuY2VLZXkgfHwgJ2RlZmF1bHQnfWA7XHJcbn1cclxuZnVuY3Rpb24gZ2V0RWRpdERpc3RhbmNlKG9sZFRleHQsIG5ld1RleHQpIHtcclxuICAgIGNvbnN0IG0gPSBvbGRUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IG4gPSBuZXdUZXh0Lmxlbmd0aDtcclxuICAgIGNvbnN0IGRwID0gQXJyYXkobiArIDEpXHJcbiAgICAgICAgLmZpbGwoMClcclxuICAgICAgICAubWFwKChfLCBqKSA9PiBqKTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG07IGkrKykge1xyXG4gICAgICAgIGxldCBwcmV2RGlhZ29uYWwgPSBkcFswXTtcclxuICAgICAgICBkcFswXSA9IGk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBkcFtqXTtcclxuICAgICAgICAgICAgaWYgKG9sZFRleHRbaSAtIDFdID09PSBuZXdUZXh0W2ogLSAxXSkge1xyXG4gICAgICAgICAgICAgICAgZHBbal0gPSBwcmV2RGlhZ29uYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IE1hdGgubWluKGRwW2ogLSAxXSwgZHBbal0sIHByZXZEaWFnb25hbCkgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByZXZEaWFnb25hbCA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRwW25dO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCByZXBocmFzZUlkbGVSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBoaWdobGlnaHRSZXNldFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IHByZXZFbGlnaWJpbGl0eVJlZiA9IHVzZVJlZihmYWxzZSk7XHJcbiAgICBjb25zdCBkZWZlcnJlZEh0bWxSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQobmV4dFRleHQpO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0ZXh0U3BhY2VSZWYuY3VycmVudC52YWx1ZSA9IG5leHRUZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVPbkNoYW5nZShlKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oY2FyZXRQb3MpIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gdGV4dFNwYWNlUmVmID09PSBudWxsIHx8IHRleHRTcGFjZVJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgaWYgKGVsZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5zZWxlY3Rpb25TdGFydCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgZWxlbS5zZWxlY3Rpb25FbmQgPSBjYXJldFBvcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25BY3Rpb25TZWxlY3QoYWN0aW9uVHlwZSkge1xyXG4gICAgICAgIGNvbnN0IHdpbGRDYXJkID0gV2lsZENhcmRNYXBbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgaWYgKHdpbGRDYXJkICYmIHRleHRTcGFjZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gaW5zZXJ0VGV4dEF0SW5kZXgod2lsZENhcmQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24oc3RhcnQgKyAxKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHRPcldyYXAod2lsZENhcmQpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uRW1vamlBZGRpdGlvbihlbW9qaSkge1xyXG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dChlbW9qaSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHRPcldyYXAodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IHRleHRUb0FkZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIC8qKiBub3RoaW5nIGlzIHNlbGVjdGVkICovXHJcbiAgICAgICAgICAgICAgICAvKiogc28gYXBwZW5kIHRoZSB3aWxkY2FyZCBhdCB0aGUgZW5kICovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGV4dCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0ID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcud3JhcHBXaWxkY2FyZChzdGFydCwgZW5kLCB3aWxkQ2FyZCwgdGV4dCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIHN0YXJ0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBpbnNlcnRUZXh0QXRJbmRleCh0ZXh0VG9BZGQsIGluZGV4KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBsZXQgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIGluZGV4KSArIHRleHRUb0FkZCArIHRleHQuc2xpY2UoaW5kZXgpO1xyXG4gICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQodGV4dCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgfVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgIWVkaXRvckluc3RhbmNlS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2FjaGVkID0gTnVtYmVyKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSkpIHx8XHJcbiAgICAgICAgICAgICcwJyk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4oY2FjaGVkKSkge1xyXG4gICAgICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KGNhY2hlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRWxpZ2libGUgPSBjdXJyZW50VGV4dC5sZW5ndGggPj0gcmVwaHJhc2VNaW5DaGFycztcclxuICAgICAgICBpZiAoIWlzRWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH0sIFJFUEhSQVNFX0lETEVfTVMpO1xyXG4gICAgICAgIHByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50ID0gdHJ1ZTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgcmVwaHJhc2VNaW5DaGFycywgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXBocmFzZUlkbGVSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCBhY3RpdmVDYW5kaWRhdGUgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlc1tzdWdnZXN0aW9uSW5kZXhdIHx8ICcnO1xyXG4gICAgY29uc3QgY2FuUmVnZW5lcmF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8IE1BWF9TVUdHRVNUSU9OUztcclxuICAgIGNvbnN0IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiA9ICEhc3VnZ2VzdGlvbkJhc2VUZXh0ICYmIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA+IDA7XHJcbiAgICBjb25zdCBpc1ByZXZTdWdnZXN0aW9uRGlzYWJsZWQgPSBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGggPD0gMSB8fCBzdWdnZXN0aW9uSW5kZXggPD0gMDtcclxuICAgIGNvbnN0IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8XHJcbiAgICAgICAgc3VnZ2VzdGlvbkluZGV4ID49IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBleGVjdXRlQUlBY3Rpb24gPSB1c2VDYWxsYmFjaygoYWN0aW9uVHlwZSwgcmVnZW5lcmF0ZUV4aXN0aW5nID0gZmFsc2UsIGluc3RydWN0aW9uT3ZlcnJpZGUsIHRvbmVPdmVycmlkZUlkKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lSWQgPSB0b25lT3ZlcnJpZGVJZCB8fFxyXG4gICAgICAgICAgICB0b25lQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgKChfYyA9IChfYiA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuaWQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZSA9IChfZCA9IGNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmZpbmQoKHRvbmUpID0+IHRvbmUuaWQgPT09IHNlbGVjdGVkVG9uZUlkKTtcclxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbkZvclByb21wdCA9IGluc3RydWN0aW9uT3ZlcnJpZGUgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IGluc3RydWN0aW9uT3ZlcnJpZGVcclxuICAgICAgICAgICAgOiBpbnN0cnVjdGlvblRleHQ7XHJcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gKG9uQnVpbGRBSVByb21wdCA9PT0gbnVsbCB8fCBvbkJ1aWxkQUlQcm9tcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQnVpbGRBSVByb21wdCh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZVR5cGUsXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgdG9uZUlkOiBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH0pKSB8fFxyXG4gICAgICAgICAgICBidWlsZEFjdGlvblByb21wdCh7XHJcbiAgICAgICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgc2V0SXNHZW5lcmF0aW5nKHRydWUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9hY3Rpb25fdHJpZ2dlcmVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb25BSUFjdGlvblJlcXVlc3RcclxuICAgICAgICAgICAgICAgID8geWllbGQgb25BSUFjdGlvblJlcXVlc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRDaGFyYWN0ZXJzID0gZ2V0RWRpdERpc3RhbmNlKHN1Z2dlc3Rpb25CYXNlVGV4dCwgYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUxlbmd0aCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25CYXNlVGV4dC5sZW5ndGgsIGFjdGl2ZUNhbmRpZGF0ZS5sZW5ndGgsIDEpO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZVBlcmNlbnQgPSBjaGFuZ2VkQ2hhcmFjdGVycyAvIHRlbXBsYXRlTGVuZ3RoO1xyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCA9PT0gbnVsbCB8fCBvbkFJVGFnQ29tcHV0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQUlUYWdDb21wdXRlZCh7XHJcbiAgICAgICAgICAgIGNoYW5nZWRDaGFyYWN0ZXJzLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZUxlbmd0aCxcclxuICAgICAgICAgICAgY2hhbmdlUGVyY2VudCxcclxuICAgICAgICAgICAgaXNBaVRhZ2dlZDogY2hhbmdlUGVyY2VudCA+PSAwLjUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQgJiYgbGltaXQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoTElNSVRfUkVBQ0hFRCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIGNvbnN0IGljb25CdXR0b25TdHlsZSA9IHtcclxuICAgICAgICBib3JkZXI6IDAsXHJcbiAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXHJcbiAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxyXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICAgIGNvbG9yOiBDT0xPUlMuY29udGVudC5wcmltYXJ5LFxyXG4gICAgfTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhDb250YWluZXIsIE9iamVjdC5hc3NpZ24oeyBpc0Vycm9yOiAhIWVycm9yIH0sIHsgY2hpbGRyZW46IFtzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gPyAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhcDogOCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogMjYwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uOiAnbGluZS10aHJvdWdoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IHN1Z2dlc3Rpb25CYXNlVGV4dCB9KSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiA4IH0gfSwgeyBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNoaWxkcmVuOiBbc3VnZ2VzdGlvbkluZGV4ICsgMSwgXCIvXCIsIHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aF0gfSksIF9qc3goXCJidXR0b25cIiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIlByZXZpb3VzIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWF4KDAsIGlkeCAtIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25MZWZ0SWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpLCBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJMaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic1VwSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNsaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJEaXNsaWtlIHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgc3R5bGU6IGljb25CdXR0b25TdHlsZSwgb25DbGljazogKCkgPT4gaGFuZGxlRmVlZGJhY2soJ2Rpc2xpa2UnKSB9LCB7IGNoaWxkcmVuOiBfanN4KFRodW1ic0Rvd25JY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBjYW5SZWdlbmVyYXRlID8gKF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiUmVnZW5lcmF0ZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChcImJ1dHRvblwiLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIHN0eWxlOiBpY29uQnV0dG9uU3R5bGUsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFwiYnV0dG9uXCIsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJBY2NlcHQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBzdHlsZTogaWNvbkJ1dHRvblN0eWxlLCBvbkNsaWNrOiBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hlY2tJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpXSB9KSldIH0pKSkgOiAoX2pzeChUZXh0U3BhY2UsIE9iamVjdC5hc3NpZ24oeyByZWY6IHRleHRTcGFjZVJlZiB9LCB0ZXh0QXJlYVByb3BzLCB7IHZhbHVlOiBjdXJyZW50VGV4dCwgb25DaGFuZ2U6IGhhbmRsZU9uQ2hhbmdlLCBvblBhc3RlOiAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3RlZFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAoKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25TdGFydCkgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoKF9iID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zZWxlY3Rpb25FbmQpIHx8IHN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY3VycmVudFRleHQuc2xpY2UoMCwgc3RhcnQpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGVkVGV4dCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcm93czogcm93cyB9KSkpLCBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlID8gKF9qc3hzKEluc3RydWN0aW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoSW5zdHJ1Y3Rpb25JbnB1dFJvdywgeyBjaGlsZHJlbjogW19qc3goRWRpdEljb24sIHsgd2lkdGg6IDE4LCBoZWlnaHQ6IDE4LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5IH0pLCBfanN4KEluc3RydWN0aW9uSW5wdXQsIHsgdmFsdWU6IGluc3RydWN0aW9uVGV4dCwgcGxhY2Vob2xkZXI6IFwiQWRkIHNwZWNpZmljIGluc3RydWN0aW9ucyB0byByZWZpbmUgeW91ciBtZXNzYWdlXCIsIG9uQ2hhbmdlOiAoZSkgPT4gc2V0SW5zdHJ1Y3Rpb25UZXh0KGUudGFyZ2V0LnZhbHVlKSB9KSwgX2pzeHMoSW5zdHJ1Y3Rpb25BY3Rpb25zLCB7IGNoaWxkcmVuOiBbX2pzeChJbnN0cnVjdGlvbkNhbmNlbCwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEluc3RydWN0aW9uVGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkNhbmNlbFwiIH0pKSwgX2pzeChJbnN0cnVjdGlvbkltcHJvdmUsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVjdGlvblRvQXBwbHkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsIGZhbHNlLCBpbnN0cnVjdGlvblRvQXBwbHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFwiSW1wcm92ZVwiIH0pKV0gfSldIH0pLCBpbnN0cnVjdGlvblRleHQudHJpbSgpLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkxpc3QsIHsgY2hpbGRyZW46IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5tYXAoKHN1Z2dlc3Rpb24pID0+IChfanN4KEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwiYnV0dG9uXCIsIHNlbGVjdGVkOiBpbnN0cnVjdGlvblRleHQgPT09IHN1Z2dlc3Rpb24sIG9uQ2xpY2s6ICgpID0+IHNldEluc3RydWN0aW9uVGV4dChzdWdnZXN0aW9uKSB9LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uIH0pLCBzdWdnZXN0aW9uKSkpIH0pKSA6IG51bGxdIH0pKSA6IG51bGwsIF9qc3goV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyLCB7IGFjdGlvbnM6IGFjdGlvbnMsIHJlZjogdGV4dFNwYWNlUmVmLCBvbkFjdGlvblNlbGVjdDogb25BY3Rpb25TZWxlY3QsIFJpZ2h0Q29tcG9uZW50OiBSaWdodENvbXBvbmVudCwgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgb25BSUFjdGlvbkNsaWNrOiAoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),f=new R,E={[v.BOLD]:"*",[v.ITALIC]:"_",[v.STRIKETHROUGH]:"~"};function M(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const r=u.forwardRef(((I,R)=>{var{onChange:u,onClickVariable:v,text:z,RightComponent:r,error:q,limit:_,onError:$,rows:II,actions:gI,editorInstanceKey:CI,templateType:AI="marketing",templateId:cI,requestExecutor:lI,baseUrl:bI,endpointPath:ZI,useCase:GI,storeId:dI,apiAdapter:XI,conversationId:VI="whatsapp-template-editor",systemId:WI="whatsapp-writer",intent:HI="default",enabledAIActions:BI=[o.REPHRASE,o.SHORTEN,o.EXPAND,o.EMOJIFY],disableBuiltInAIActions:RI=!1,promptOverrides:uI,rephraseTones:JI,aiActionMinChars:NI,instructionSuggestions:xI=a,onAIEvent:mI,onAITagComputed:iI,onAIToneSelect:FI,onAIActionRequest:yI,onBuildAIPrompt:YI}=I,nI=g(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const aI=J(null),[pI,hI]=N(z||""),[SI,sI]=N(!1),[UI,kI]=N(0),[QI,vI]=N(!1),[oI,wI]=N(!1),[zI,tI]=N(""),[eI,jI]=N({}),[TI,DI]=N(null),[LI,KI]=N([]),[OI,PI]=N(0),[fI,EI]=N(null),MI=J(null),rI=J(null),qI=J(!1),_I=J(null),$I=x((()=>p(AI,uI,JI)),[uI,JI,AI]),Ig=x((()=>{const I=zI.trim().toLowerCase();return I?xI.filter((g=>g.toLowerCase().includes(I))):[]}),[xI,zI]),gg=x((()=>Object.assign(Object.assign({},h),NI||{})),[NI]),Cg=gg[o.REPHRASE]||h[o.REPHRASE],Ag=m(((I,g)=>{null==mI||mI(I,g)}),[mI]),cg=m((I=>{hI(I),aI.current&&(aI.current.value=I)}),[]),lg=m((I=>{if(_I.current&&clearTimeout(_I.current),I.length>1200)return null==u||u(I,I),void(_I.current=setTimeout((()=>{null==u||u(I,f.getHTML(I))}),16));null==u||u(I,f.getHTML(I))}),[u]),bg=m((()=>{DI(null),KI([]),PI(0),EI(null)}),[]),Zg=m((()=>{if(UI>=5)return;const I=UI+1;kI(I),"undefined"!=typeof window&&CI&&sessionStorage.setItem(M(CI),String(I)),sI(!0),rI.current&&clearTimeout(rI.current),rI.current=setTimeout((()=>{sI(!1)}),1200)}),[CI,UI]);function Gg(I){const g=null==aI?void 0:aI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function dg(I){var g,C;let A=null!==(C=null===(g=aI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(aI.current&&I){const g=aI.current.selectionStart,C=aI.current.selectionEnd,c=I;if(g===C)return Xg(c);{A=f.wrappWildcard(g,C,c,A);const I=f.getHTML(A);return cg(A),{text:A,html:I}}}return{text:A,html:A}}function Xg(I){var g,C;const A=null!==(C=null===(g=aI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(aI.current&&I){const g=aI.current.selectionStart;if(g===aI.current.selectionEnd)return Vg(I,g)}return{text:A,html:A}}function Vg(I,g){var C,A;let c=null!==(A=null===(C=aI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=f.getHTML(c);return cg(c),{text:c,html:l}}i((()=>{if("undefined"==typeof window||!CI)return;const I=Number(sessionStorage.getItem(M(CI))||"0");Number.isNaN(I)||kI(I)}),[CI]),i((()=>{if(!(pI.length>=Cg))return qI.current=!1,sI(!1),void(MI.current&&(clearTimeout(MI.current),MI.current=null));qI.current||Zg(),MI.current&&clearTimeout(MI.current),MI.current=setTimeout((()=>{Zg()}),3e3),qI.current=!0}),[pI,Cg,Zg]),i((()=>()=>{MI.current&&clearTimeout(MI.current),rI.current&&clearTimeout(rI.current),_I.current&&clearTimeout(_I.current)}),[]);const Wg=LI[OI]||"",Hg=LI.length<3,Bg=!!TI&&LI.length>0,Rg=LI.length<=1||OI<=0,ug=LI.length<=1||OI>=LI.length-1,Jg=m((function(I){let g=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0;return C(void 0,void 0,void 0,(function*(){var C,l,b;if(!(yI||XI||lI&&bI))return void(null==$||$("AI configuration missing"));if(!pI.trim())return;const Z=gg[I]||h[I]||50;if(pI.length<Z)return;if(QI)return;if(g&&!Hg)return;const G=$I[I],d=c||eI[I]||G.defaultToneId||(null===(l=null===(C=G.tones)||void 0===C?void 0:C[0])||void 0===l?void 0:l.id),X=null===(b=G.tones)||void 0===b?void 0:b.find((I=>I.id===d)),V=void 0!==A?A:zI,W=(null==YI?void 0:YI({actionType:I,currentText:pI,templateType:AI,config:G,toneId:d,toneLabel:null==X?void 0:X.label,instructionText:V||void 0}))||S({config:G,currentText:pI,selectedToneId:d,instructionText:V});vI(!0),Ag("ai_action_triggered",{action_type:I,template_id:cI});try{const C=yI?yield yI({actionType:I,currentText:pI,templateType:AI,toneId:d,toneLabel:null==X?void 0:X.label,instructionText:V||void 0,prompt:W}):yield s({apiAdapter:XI,requestExecutor:lI,baseUrl:bI,endpointPath:ZI,prompt:W,intent:HI,conversationId:VI,systemId:WI,useCase:GI,storeId:dI}),A="string"==typeof C?C.trim():((null==C?void 0:C.body)||"").trim();if(!A)return;if(!g)return DI(pI),EI(I),KI([A]),void PI(0);KI((I=>{const g=[...I,A].slice(0,3);return PI(g.length-1),g}))}catch(I){null==$||$("Failed to generate AI suggestion")}finally{vI(!1)}}))}),[lI,bI,pI,QI,Hg,$I,eI,zI,Ag,cI,ZI,XI,HI,VI,WI,GI,dI,AI,$,gg,yI,YI]),Ng=m((()=>{if(!Wg||!TI||!fI)return;cg(Wg),lg(Wg),Ag("ai_suggestion_accepted",{action_type:fI,template_id:cI});const I=function(I,g){const C=I.length,A=g.length,c=Array(A+1).fill(0).map(((I,g)=>g));for(let l=1;l<=C;l++){let C=c[0];c[0]=l;for(let b=1;b<=A;b++){const A=c[b];I[l-1]===g[b-1]?c[b]=C:c[b]=Math.min(c[b-1],c[b],C)+1,C=A}}return c[A]}(TI,Wg),g=Math.max(TI.length,Wg.length,1),C=I/g;null==iI||iI({changedCharacters:I,templateLength:g,changePercent:C,isAiTagged:C>=.5}),bg()}),[Wg,TI,fI,cg,lg,Ag,cI,iI,bg]),xg=m((()=>{fI&&(Ag("ai_suggestion_discarded",{action_type:fI,template_id:cI}),bg())}),[bg,Ag,fI,cI]),mg=m((I=>{fI&&Ag("ai_feedback_submitted",{action_type:fI,template_id:cI,rating:I,candidate_index:OI+1})}),[Ag,fI,OI,cI]),ig=x((()=>RI?[]:BI.map((I=>{var g,C,A;const c=$I[I],l=eI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===o.REPHRASE,loading:QI&&fI===I,highlighted:I===o.REPHRASE&&SI,disabled:!pI.trim()||pI.length<(gg[I]||h[I]||50)||QI||Bg&&fI===I,showToneDropdown:I===o.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[BI,RI,$I,eI,QI,fI,Bg,SI,pI,gg]);F(R,(()=>({addTextOrWrap:dg,addText:Xg,get(){var I,g;return null!==(g=null===(I=aI.current)||void 0===I?void 0:I.value)&&void 0!==g?g:""},setCaretPosition:Gg}))),i((()=>{void 0!==z&&cg(z||"")}),[z,cg]),i((()=>{pI&&_&&(pI.length>_?null==$||$(t):null==$||$(null!=q?q:""))}),[pI,q,_,$]);const Fg={border:0,background:"transparent",padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",cursor:"pointer",color:y.content.primary};return A(U,{children:[A(k,Object.assign({isError:!!q},{children:[Bg?A("div",Object.assign({style:{padding:"12px",display:"flex",flexDirection:"column",gap:8,maxHeight:260,overflowY:"auto"}},{children:[c("div",Object.assign({style:{textDecoration:"line-through",color:y.content.secondary}},{children:TI})),c("div",{children:Wg}),A("div",Object.assign({style:{display:"flex",alignItems:"center",gap:8}},{children:[A("span",{children:[OI+1,"/",LI.length]}),c("button",Object.assign({"aria-label":"Previous suggestion",type:"button",style:Fg,disabled:Rg,onClick:()=>PI((I=>Math.max(0,I-1)))},{children:c(Z,{width:14,height:14})})),c("button",Object.assign({"aria-label":"Next suggestion",type:"button",style:Fg,disabled:ug,onClick:()=>PI((I=>Math.min(LI.length-1,I+1)))},{children:c(G,{width:14,height:14})})),c(Y,Object.assign({body:"Like",placement:"top"},{children:c("button",Object.assign({"aria-label":"Like suggestion",type:"button",style:Fg,onClick:()=>mg("like")},{children:c(B,{width:14,height:14})}))})),c(Y,Object.assign({body:"Dislike",placement:"top"},{children:c("button",Object.assign({"aria-label":"Dislike suggestion",type:"button",style:Fg,onClick:()=>mg("dislike")},{children:c(H,{width:14,height:14})}))})),Hg?c(Y,Object.assign({body:"Regenerate",placement:"top"},{children:c("button",Object.assign({"aria-label":"Regenerate suggestion",type:"button",style:Fg,disabled:QI,onClick:()=>{fI&&Jg(fI,!0)}},{children:c(W,{width:14,height:14})}))})):null,c(Y,Object.assign({body:"Discard",placement:"top"},{children:c("button",Object.assign({"aria-label":"Discard suggestion",type:"button",style:Fg,onClick:xg},{children:c(d,{width:14,height:14})}))})),c(Y,Object.assign({body:"Accept",placement:"top"},{children:c("button",Object.assign({"aria-label":"Accept suggestion",type:"button",style:Fg,onClick:Ng},{children:c(b,{width:14,height:14})}))}))]}))]})):c(Q,Object.assign({ref:aI},nI,{value:pI,onChange:function(I){const g=I.target.value;cg(g),lg(g)},onPaste:I=>{var g,C;const A=I.clipboardData.getData("text");if(A.length>1200){const c=(null===(g=aI.current)||void 0===g?void 0:g.selectionStart)||0,l=(null===(C=aI.current)||void 0===C?void 0:C.selectionEnd)||c,b=pI.slice(0,c)+A+pI.slice(l);requestAnimationFrame((()=>{cg(b),lg(b)})),I.preventDefault()}},rows:II})),oI?A(e,{children:[A(j,{children:[c(X,{width:18,height:18,color:y.content.secondary}),c(T,{value:zI,placeholder:"Add specific instructions to refine your message",onChange:I=>tI(I.target.value)}),A(D,{children:[c(L,Object.assign({type:"button",onClick:()=>{tI(""),wI(!1)}},{children:"Cancel"})),c(K,Object.assign({type:"button",onClick:()=>{const I=zI.trim();wI(!1),tI(""),Jg(o.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),zI.trim().length>0&&Ig.length>0?c(O,{children:Ig.map((I=>c(P,Object.assign({type:"button",selected:zI===I,onClick:()=>tI(I)},{children:I}),I)))}):null]}):null,c(w,{actions:gI,ref:aI,onActionSelect:function(I){const g=E[I];if(g&&aI.current){const I=aI.current.selectionStart;if(I===aI.current.selectionEnd){const{text:C}=Vg(g,I);Gg(I+1),lg(C)}else{const{text:I}=dg(g);lg(I)}}},RightComponent:r,onEmojiClick:function(I){const{text:g}=Xg(I);lg(g)},aiActions:ig,disableAllActions:Bg||QI,instructionActive:oI,onAIInstructionsClick:()=>wI(!0),onAIToneChange:(I,g)=>{jI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==FI||FI(I,g),I===o.REPHRASE&&Jg(I,!1,void 0,g)},onAIActionClick:I=>{if(!QI){if(Bg){if(fI===I)return;return bg(),void Jg(I,!1)}Jg(I,!1)}}})]})),q&&q!==t?A("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[c(V,{width:16,height:16,color:y.content.negative}),c(n,Object.assign({color:y.content.negative},{children:q}))]})):c(l,{children:_?A(n,Object.assign({style:{color:q===t||pI.length>_?y.content.negative:y.content.secondary}},{children:[pI.length,"/",_]})):c(l,{})})]})}));r.displayName="WhatsAppTextEditor";export{r as WhatsAppTextEditor};
|