| import { c as _c } from "react/compiler-runtime"; | |
| import { basename } from 'path'; | |
| import { toString as qrToString } from 'qrcode'; | |
| import * as React from 'react'; | |
| import { useEffect, useState } from 'react'; | |
| import { getOriginalCwd } from '../bootstrap/state.js'; | |
| import { buildActiveFooterText, buildIdleFooterText, FAILED_FOOTER_TEXT, getBridgeStatus } from '../bridge/bridgeStatusUtil.js'; | |
| import { BRIDGE_FAILED_INDICATOR, BRIDGE_READY_INDICATOR } from '../constants/figures.js'; | |
| import { useRegisterOverlay } from '../context/overlayContext.js'; | |
| // eslint-disable-next-line custom-rules/prefer-use-keybindings -- raw 'd' key for disconnect, not a configurable keybinding action | |
| import { Box, Text, useInput } from '../ink.js'; | |
| import { useKeybindings } from '../keybindings/useKeybinding.js'; | |
| import { useAppState, useSetAppState } from '../state/AppState.js'; | |
| import { saveGlobalConfig } from '../utils/config.js'; | |
| import { getBranch } from '../utils/git.js'; | |
| import { Dialog } from './design-system/Dialog.js'; | |
| type Props = { | |
| onDone: () => void; | |
| }; | |
| export function BridgeDialog(t0) { | |
| const $ = _c(87); | |
| const { | |
| onDone | |
| } = t0; | |
| useRegisterOverlay("bridge-dialog"); | |
| const connected = useAppState(_temp); | |
| const sessionActive = useAppState(_temp2); | |
| const reconnecting = useAppState(_temp3); | |
| const connectUrl = useAppState(_temp4); | |
| const sessionUrl = useAppState(_temp5); | |
| const error = useAppState(_temp6); | |
| const explicit = useAppState(_temp7); | |
| const environmentId = useAppState(_temp8); | |
| const sessionId = useAppState(_temp9); | |
| const verbose = useAppState(_temp0); | |
| const setAppState = useSetAppState(); | |
| const [showQR, setShowQR] = useState(false); | |
| const [qrText, setQrText] = useState(""); | |
| const [branchName, setBranchName] = useState(""); | |
| let t1; | |
| if ($[0] === Symbol.for("react.memo_cache_sentinel")) { | |
| t1 = basename(getOriginalCwd()); | |
| $[0] = t1; | |
| } else { | |
| t1 = $[0]; | |
| } | |
| const repoName = t1; | |
| let t2; | |
| let t3; | |
| if ($[1] === Symbol.for("react.memo_cache_sentinel")) { | |
| t2 = () => { | |
| getBranch().then(setBranchName).catch(_temp1); | |
| }; | |
| t3 = []; | |
| $[1] = t2; | |
| $[2] = t3; | |
| } else { | |
| t2 = $[1]; | |
| t3 = $[2]; | |
| } | |
| useEffect(t2, t3); | |
| const displayUrl = sessionActive ? sessionUrl : connectUrl; | |
| let t4; | |
| let t5; | |
| if ($[3] !== displayUrl || $[4] !== showQR) { | |
| t4 = () => { | |
| if (!showQR || !displayUrl) { | |
| setQrText(""); | |
| return; | |
| } | |
| qrToString(displayUrl, { | |
| type: "utf8", | |
| errorCorrectionLevel: "L", | |
| small: true | |
| }).then(setQrText).catch(() => setQrText("")); | |
| }; | |
| t5 = [showQR, displayUrl]; | |
| $[3] = displayUrl; | |
| $[4] = showQR; | |
| $[5] = t4; | |
| $[6] = t5; | |
| } else { | |
| t4 = $[5]; | |
| t5 = $[6]; | |
| } | |
| useEffect(t4, t5); | |
| let t6; | |
| if ($[7] === Symbol.for("react.memo_cache_sentinel")) { | |
| t6 = () => { | |
| setShowQR(_temp10); | |
| }; | |
| $[7] = t6; | |
| } else { | |
| t6 = $[7]; | |
| } | |
| let t7; | |
| if ($[8] !== onDone) { | |
| t7 = { | |
| "confirm:yes": onDone, | |
| "confirm:toggle": t6 | |
| }; | |
| $[8] = onDone; | |
| $[9] = t7; | |
| } else { | |
| t7 = $[9]; | |
| } | |
| let t8; | |
| if ($[10] === Symbol.for("react.memo_cache_sentinel")) { | |
| t8 = { | |
| context: "Confirmation" | |
| }; | |
| $[10] = t8; | |
| } else { | |
| t8 = $[10]; | |
| } | |
| useKeybindings(t7, t8); | |
| let t9; | |
| if ($[11] !== explicit || $[12] !== onDone || $[13] !== setAppState) { | |
| t9 = input => { | |
| if (input === "d") { | |
| if (explicit) { | |
| saveGlobalConfig(_temp11); | |
| } | |
| setAppState(_temp12); | |
| onDone(); | |
| } | |
| }; | |
| $[11] = explicit; | |
| $[12] = onDone; | |
| $[13] = setAppState; | |
| $[14] = t9; | |
| } else { | |
| t9 = $[14]; | |
| } | |
| useInput(t9); | |
| let t10; | |
| if ($[15] !== connected || $[16] !== error || $[17] !== reconnecting || $[18] !== sessionActive) { | |
| t10 = getBridgeStatus({ | |
| error, | |
| connected, | |
| sessionActive, | |
| reconnecting | |
| }); | |
| $[15] = connected; | |
| $[16] = error; | |
| $[17] = reconnecting; | |
| $[18] = sessionActive; | |
| $[19] = t10; | |
| } else { | |
| t10 = $[19]; | |
| } | |
| const { | |
| label: statusLabel, | |
| color: statusColor | |
| } = t10; | |
| const indicator = error ? BRIDGE_FAILED_INDICATOR : BRIDGE_READY_INDICATOR; | |
| let T0; | |
| let T1; | |
| let footerText; | |
| let t11; | |
| let t12; | |
| let t13; | |
| let t14; | |
| let t15; | |
| let t16; | |
| let t17; | |
| if ($[20] !== branchName || $[21] !== displayUrl || $[22] !== environmentId || $[23] !== error || $[24] !== indicator || $[25] !== onDone || $[26] !== qrText || $[27] !== sessionActive || $[28] !== sessionId || $[29] !== showQR || $[30] !== statusColor || $[31] !== statusLabel || $[32] !== verbose) { | |
| const qrLines = qrText ? qrText.split("\n").filter(_temp13) : []; | |
| let contextParts; | |
| if ($[43] !== branchName) { | |
| contextParts = []; | |
| if (repoName) { | |
| contextParts.push(repoName); | |
| } | |
| if (branchName) { | |
| contextParts.push(branchName); | |
| } | |
| $[43] = branchName; | |
| $[44] = contextParts; | |
| } else { | |
| contextParts = $[44]; | |
| } | |
| const contextSuffix = contextParts.length > 0 ? " \xB7 " + contextParts.join(" \xB7 ") : ""; | |
| let t18; | |
| if ($[45] !== displayUrl || $[46] !== error || $[47] !== sessionActive) { | |
| t18 = error ? FAILED_FOOTER_TEXT : displayUrl ? sessionActive ? buildActiveFooterText(displayUrl) : buildIdleFooterText(displayUrl) : undefined; | |
| $[45] = displayUrl; | |
| $[46] = error; | |
| $[47] = sessionActive; | |
| $[48] = t18; | |
| } else { | |
| t18 = $[48]; | |
| } | |
| footerText = t18; | |
| T1 = Dialog; | |
| t15 = "Remote Control"; | |
| t16 = onDone; | |
| t17 = true; | |
| T0 = Box; | |
| t11 = "column"; | |
| t12 = 1; | |
| let t19; | |
| if ($[49] !== indicator || $[50] !== statusColor || $[51] !== statusLabel) { | |
| t19 = <Text color={statusColor}>{indicator} {statusLabel}</Text>; | |
| $[49] = indicator; | |
| $[50] = statusColor; | |
| $[51] = statusLabel; | |
| $[52] = t19; | |
| } else { | |
| t19 = $[52]; | |
| } | |
| let t20; | |
| if ($[53] !== contextSuffix) { | |
| t20 = <Text dimColor={true}>{contextSuffix}</Text>; | |
| $[53] = contextSuffix; | |
| $[54] = t20; | |
| } else { | |
| t20 = $[54]; | |
| } | |
| let t21; | |
| if ($[55] !== t19 || $[56] !== t20) { | |
| t21 = <Text>{t19}{t20}</Text>; | |
| $[55] = t19; | |
| $[56] = t20; | |
| $[57] = t21; | |
| } else { | |
| t21 = $[57]; | |
| } | |
| let t22; | |
| if ($[58] !== error) { | |
| t22 = error && <Text color="error">{error}</Text>; | |
| $[58] = error; | |
| $[59] = t22; | |
| } else { | |
| t22 = $[59]; | |
| } | |
| let t23; | |
| if ($[60] !== environmentId || $[61] !== verbose) { | |
| t23 = verbose && environmentId && <Text dimColor={true}>Environment: {environmentId}</Text>; | |
| $[60] = environmentId; | |
| $[61] = verbose; | |
| $[62] = t23; | |
| } else { | |
| t23 = $[62]; | |
| } | |
| let t24; | |
| if ($[63] !== sessionId || $[64] !== verbose) { | |
| t24 = verbose && sessionId && <Text dimColor={true}>Session: {sessionId}</Text>; | |
| $[63] = sessionId; | |
| $[64] = verbose; | |
| $[65] = t24; | |
| } else { | |
| t24 = $[65]; | |
| } | |
| if ($[66] !== t21 || $[67] !== t22 || $[68] !== t23 || $[69] !== t24) { | |
| t13 = <Box flexDirection="column">{t21}{t22}{t23}{t24}</Box>; | |
| $[66] = t21; | |
| $[67] = t22; | |
| $[68] = t23; | |
| $[69] = t24; | |
| $[70] = t13; | |
| } else { | |
| t13 = $[70]; | |
| } | |
| t14 = showQR && qrLines.length > 0 && <Box flexDirection="column">{qrLines.map(_temp14)}</Box>; | |
| $[20] = branchName; | |
| $[21] = displayUrl; | |
| $[22] = environmentId; | |
| $[23] = error; | |
| $[24] = indicator; | |
| $[25] = onDone; | |
| $[26] = qrText; | |
| $[27] = sessionActive; | |
| $[28] = sessionId; | |
| $[29] = showQR; | |
| $[30] = statusColor; | |
| $[31] = statusLabel; | |
| $[32] = verbose; | |
| $[33] = T0; | |
| $[34] = T1; | |
| $[35] = footerText; | |
| $[36] = t11; | |
| $[37] = t12; | |
| $[38] = t13; | |
| $[39] = t14; | |
| $[40] = t15; | |
| $[41] = t16; | |
| $[42] = t17; | |
| } else { | |
| T0 = $[33]; | |
| T1 = $[34]; | |
| footerText = $[35]; | |
| t11 = $[36]; | |
| t12 = $[37]; | |
| t13 = $[38]; | |
| t14 = $[39]; | |
| t15 = $[40]; | |
| t16 = $[41]; | |
| t17 = $[42]; | |
| } | |
| let t18; | |
| if ($[71] !== footerText) { | |
| t18 = footerText && <Text dimColor={true}>{footerText}</Text>; | |
| $[71] = footerText; | |
| $[72] = t18; | |
| } else { | |
| t18 = $[72]; | |
| } | |
| let t19; | |
| if ($[73] === Symbol.for("react.memo_cache_sentinel")) { | |
| t19 = <Text dimColor={true}>d to disconnect · space for QR code · Enter/Esc to close</Text>; | |
| $[73] = t19; | |
| } else { | |
| t19 = $[73]; | |
| } | |
| let t20; | |
| if ($[74] !== T0 || $[75] !== t11 || $[76] !== t12 || $[77] !== t13 || $[78] !== t14 || $[79] !== t18) { | |
| t20 = <T0 flexDirection={t11} gap={t12}>{t13}{t14}{t18}{t19}</T0>; | |
| $[74] = T0; | |
| $[75] = t11; | |
| $[76] = t12; | |
| $[77] = t13; | |
| $[78] = t14; | |
| $[79] = t18; | |
| $[80] = t20; | |
| } else { | |
| t20 = $[80]; | |
| } | |
| let t21; | |
| if ($[81] !== T1 || $[82] !== t15 || $[83] !== t16 || $[84] !== t17 || $[85] !== t20) { | |
| t21 = <T1 title={t15} onCancel={t16} hideInputGuide={t17}>{t20}</T1>; | |
| $[81] = T1; | |
| $[82] = t15; | |
| $[83] = t16; | |
| $[84] = t17; | |
| $[85] = t20; | |
| $[86] = t21; | |
| } else { | |
| t21 = $[86]; | |
| } | |
| return t21; | |
| } | |
| function _temp14(line, i) { | |
| return <Text key={i}>{line}</Text>; | |
| } | |
| function _temp13(l) { | |
| return l.length > 0; | |
| } | |
| function _temp12(prev_0) { | |
| if (!prev_0.replBridgeEnabled) { | |
| return prev_0; | |
| } | |
| return { | |
| ...prev_0, | |
| replBridgeEnabled: false | |
| }; | |
| } | |
| function _temp11(current) { | |
| if (current.remoteControlAtStartup === false) { | |
| return current; | |
| } | |
| return { | |
| ...current, | |
| remoteControlAtStartup: false | |
| }; | |
| } | |
| function _temp10(prev) { | |
| return !prev; | |
| } | |
| function _temp1() {} | |
| function _temp0(s_8) { | |
| return s_8.verbose; | |
| } | |
| function _temp9(s_7) { | |
| return s_7.replBridgeSessionId; | |
| } | |
| function _temp8(s_6) { | |
| return s_6.replBridgeEnvironmentId; | |
| } | |
| function _temp7(s_5) { | |
| return s_5.replBridgeExplicit; | |
| } | |
| function _temp6(s_4) { | |
| return s_4.replBridgeError; | |
| } | |
| function _temp5(s_3) { | |
| return s_3.replBridgeSessionUrl; | |
| } | |
| function _temp4(s_2) { | |
| return s_2.replBridgeConnectUrl; | |
| } | |
| function _temp3(s_1) { | |
| return s_1.replBridgeReconnecting; | |
| } | |
| function _temp2(s_0) { | |
| return s_0.replBridgeSessionActive; | |
| } | |
| function _temp(s) { | |
| return s.replBridgeConnected; | |
| } | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlbmFtZSIsInRvU3RyaW5nIiwicXJUb1N0cmluZyIsIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJnZXRPcmlnaW5hbEN3ZCIsImJ1aWxkQWN0aXZlRm9vdGVyVGV4dCIsImJ1aWxkSWRsZUZvb3RlclRleHQiLCJGQUlMRURfRk9PVEVSX1RFWFQiLCJnZXRCcmlkZ2VTdGF0dXMiLCJCUklER0VfRkFJTEVEX0lORElDQVRPUiIsIkJSSURHRV9SRUFEWV9JTkRJQ0FUT1IiLCJ1c2VSZWdpc3Rlck92ZXJsYXkiLCJCb3giLCJUZXh0IiwidXNlSW5wdXQiLCJ1c2VLZXliaW5kaW5ncyIsInVzZUFwcFN0YXRlIiwidXNlU2V0QXBwU3RhdGUiLCJzYXZlR2xvYmFsQ29uZmlnIiwiZ2V0QnJhbmNoIiwiRGlhbG9nIiwiUHJvcHMiLCJvbkRvbmUiLCJCcmlkZ2VEaWFsb2ciLCJ0MCIsIiQiLCJfYyIsImNvbm5lY3RlZCIsIl90ZW1wIiwic2Vzc2lvbkFjdGl2ZSIsIl90ZW1wMiIsInJlY29ubmVjdGluZyIsIl90ZW1wMyIsImNvbm5lY3RVcmwiLCJfdGVtcDQiLCJzZXNzaW9uVXJsIiwiX3RlbXA1IiwiZXJyb3IiLCJfdGVtcDYiLCJleHBsaWNpdCIsIl90ZW1wNyIsImVudmlyb25tZW50SWQiLCJfdGVtcDgiLCJzZXNzaW9uSWQiLCJfdGVtcDkiLCJ2ZXJib3NlIiwiX3RlbXAwIiwic2V0QXBwU3RhdGUiLCJzaG93UVIiLCJzZXRTaG93UVIiLCJxclRleHQiLCJzZXRRclRleHQiLCJicmFuY2hOYW1lIiwic2V0QnJhbmNoTmFtZSIsInQxIiwiU3ltYm9sIiwiZm9yIiwicmVwb05hbWUiLCJ0MiIsInQzIiwidGhlbiIsImNhdGNoIiwiX3RlbXAxIiwiZGlzcGxheVVybCIsInQ0IiwidDUiLCJ0eXBlIiwiZXJyb3JDb3JyZWN0aW9uTGV2ZWwiLCJzbWFsbCIsInQ2IiwiX3RlbXAxMCIsInQ3IiwidDgiLCJjb250ZXh0IiwidDkiLCJpbnB1dCIsIl90ZW1wMTEiLCJfdGVtcDEyIiwidDEwIiwibGFiZWwiLCJzdGF0dXNMYWJlbCIsImNvbG9yIiwic3RhdHVzQ29sb3IiLCJpbmRpY2F0b3IiLCJUMCIsIlQxIiwiZm9vdGVyVGV4dCIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsInQxNSIsInQxNiIsInQxNyIsInFyTGluZXMiLCJzcGxpdCIsImZpbHRlciIsIl90ZW1wMTMiLCJjb250ZXh0UGFydHMiLCJwdXNoIiwiY29udGV4dFN1ZmZpeCIsImxlbmd0aCIsImpvaW4iLCJ0MTgiLCJ1bmRlZmluZWQiLCJ0MTkiLCJ0MjAiLCJ0MjEiLCJ0MjIiLCJ0MjMiLCJ0MjQiLCJtYXAiLCJfdGVtcDE0IiwibGluZSIsImkiLCJsIiwicHJldl8wIiwicHJldiIsInJlcGxCcmlkZ2VFbmFibGVkIiwiY3VycmVudCIsInJlbW90ZUNvbnRyb2xBdFN0YXJ0dXAiLCJzXzgiLCJzIiwic183IiwicmVwbEJyaWRnZVNlc3Npb25JZCIsInNfNiIsInJlcGxCcmlkZ2VFbnZpcm9ubWVudElkIiwic181IiwicmVwbEJyaWRnZUV4cGxpY2l0Iiwic180IiwicmVwbEJyaWRnZUVycm9yIiwic18zIiwicmVwbEJyaWRnZVNlc3Npb25VcmwiLCJzXzIiLCJyZXBsQnJpZGdlQ29ubmVjdFVybCIsInNfMSIsInJlcGxCcmlkZ2VSZWNvbm5lY3RpbmciLCJzXzAiLCJyZXBsQnJpZGdlU2Vzc2lvbkFjdGl2ZSIsInJlcGxCcmlkZ2VDb25uZWN0ZWQiXSwic291cmNlcyI6WyJCcmlkZ2VEaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IHRvU3RyaW5nIGFzIHFyVG9TdHJpbmcgfSBmcm9tICdxcmNvZGUnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldE9yaWdpbmFsQ3dkIH0gZnJvbSAnLi4vYm9vdHN0cmFwL3N0YXRlLmpzJ1xuaW1wb3J0IHtcbiAgYnVpbGRBY3RpdmVGb290ZXJUZXh0LFxuICBidWlsZElkbGVGb290ZXJUZXh0LFxuICBGQUlMRURfRk9PVEVSX1RFWFQsXG4gIGdldEJyaWRnZVN0YXR1cyxcbn0gZnJvbSAnLi4vYnJpZGdlL2JyaWRnZVN0YXR1c1V0aWwuanMnXG5pbXBvcnQge1xuICBCUklER0VfRkFJTEVEX0lORElDQVRPUixcbiAgQlJJREdFX1JFQURZX0lORElDQVRPUixcbn0gZnJvbSAnLi4vY29uc3RhbnRzL2ZpZ3VyZXMuanMnXG5pbXBvcnQgeyB1c2VSZWdpc3Rlck92ZXJsYXkgfSBmcm9tICcuLi9jb250ZXh0L292ZXJsYXlDb250ZXh0LmpzJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGN1c3RvbS1ydWxlcy9wcmVmZXItdXNlLWtleWJpbmRpbmdzIC0tIHJhdyAnZCcga2V5IGZvciBkaXNjb25uZWN0LCBub3QgYSBjb25maWd1cmFibGUga2V5YmluZGluZyBhY3Rpb25cbmltcG9ydCB7IEJveCwgVGV4dCwgdXNlSW5wdXQgfSBmcm9tICcuLi9pbmsuanMnXG5pbXBvcnQgeyB1c2VLZXliaW5kaW5ncyB9IGZyb20gJy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyB1c2VBcHBTdGF0ZSwgdXNlU2V0QXBwU3RhdGUgfSBmcm9tICcuLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IHNhdmVHbG9iYWxDb25maWcgfSBmcm9tICcuLi91dGlscy9jb25maWcuanMnXG5pbXBvcnQgeyBnZXRCcmFuY2ggfSBmcm9tICcuLi91dGlscy9naXQuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vRGlhbG9nLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBvbkRvbmU6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJyaWRnZURpYWxvZyh7IG9uRG9uZSB9OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHVzZVJlZ2lzdGVyT3ZlcmxheSgnYnJpZGdlLWRpYWxvZycpXG5cbiAgY29uc3QgY29ubmVjdGVkID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VDb25uZWN0ZWQpXG4gIGNvbnN0IHNlc3Npb25BY3RpdmUgPSB1c2VBcHBTdGF0ZShzID0+IHMucmVwbEJyaWRnZVNlc3Npb25BY3RpdmUpXG4gIGNvbnN0IHJlY29ubmVjdGluZyA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlUmVjb25uZWN0aW5nKVxuICBjb25zdCBjb25uZWN0VXJsID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VDb25uZWN0VXJsKVxuICBjb25zdCBzZXNzaW9uVXJsID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VTZXNzaW9uVXJsKVxuICBjb25zdCBlcnJvciA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlRXJyb3IpXG4gIGNvbnN0IGV4cGxpY2l0ID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VFeHBsaWNpdClcbiAgY29uc3QgZW52aXJvbm1lbnRJZCA9IHVzZUFwcFN0YXRlKHMgPT4gcy5yZXBsQnJpZGdlRW52aXJvbm1lbnRJZClcbiAgY29uc3Qgc2Vzc2lvbklkID0gdXNlQXBwU3RhdGUocyA9PiBzLnJlcGxCcmlkZ2VTZXNzaW9uSWQpXG4gIGNvbnN0IHZlcmJvc2UgPSB1c2VBcHBTdGF0ZShzID0+IHMudmVyYm9zZSlcbiAgY29uc3Qgc2V0QXBwU3RhdGUgPSB1c2VTZXRBcHBTdGF0ZSgpXG5cbiAgY29uc3QgW3Nob3dRUiwgc2V0U2hvd1FSXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcXJUZXh0LCBzZXRRclRleHRdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IFticmFuY2hOYW1lLCBzZXRCcmFuY2hOYW1lXSA9IHVzZVN0YXRlKCcnKVxuXG4gIGNvbnN0IHJlcG9OYW1lID0gYmFzZW5hbWUoZ2V0T3JpZ2luYWxDd2QoKSlcblxuICAvLyBGZXRjaCBicmFuY2ggbmFtZSBvbiBtb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGdldEJyYW5jaCgpXG4gICAgICAudGhlbihzZXRCcmFuY2hOYW1lKVxuICAgICAgLmNhdGNoKCgpID0+IHt9KVxuICB9LCBbXSlcblxuICAvLyBUaGUgVVJMIHRvIGRpc3BsYXkvUVI6IHNlc3Npb24gVVJMIHdoZW4gY29ubmVjdGVkLCBjb25uZWN0IFVSTCB3aGVuIHJlYWR5XG4gIGNvbnN0IGRpc3BsYXlVcmwgPSBzZXNzaW9uQWN0aXZlID8gc2Vzc2lvblVybCA6IGNvbm5lY3RVcmxcblxuICAvLyBHZW5lcmF0ZSBRUiBjb2RlIHdoZW4gVVJMIGNoYW5nZXMgb3IgUVIgaXMgdG9nZ2xlZCBvblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1FSIHx8ICFkaXNwbGF5VXJsKSB7XG4gICAgICBzZXRRclRleHQoJycpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgcXJUb1N0cmluZyhkaXNwbGF5VXJsLCB7XG4gICAgICB0eXBlOiAndXRmOCcsXG4gICAgICBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ0wnLFxuICAgICAgc21hbGw6IHRydWUsXG4gICAgfSlcbiAgICAgIC50aGVuKHNldFFyVGV4dClcbiAgICAgIC5jYXRjaCgoKSA9PiBzZXRRclRleHQoJycpKVxuICB9LCBbc2hvd1FSLCBkaXNwbGF5VXJsXSlcblxuICB1c2VLZXliaW5kaW5ncyhcbiAgICB7XG4gICAgICAnY29uZmlybTp5ZXMnOiBvbkRvbmUsXG4gICAgICAnY29uZmlybTp0b2dnbGUnOiAoKSA9PiB7XG4gICAgICAgIHNldFNob3dRUihwcmV2ID0+ICFwcmV2KVxuICAgICAgfSxcbiAgICB9LFxuICAgIHsgY29udGV4dDogJ0NvbmZpcm1hdGlvbicgfSxcbiAgKVxuXG4gIHVzZUlucHV0KGlucHV0ID0+IHtcbiAgICBpZiAoaW5wdXQgPT09ICdkJykge1xuICAgICAgLy8gUGVyc2lzdCBvcHQtb3V0IG9ubHkgZm9yIENMSS1mbGFnL2NvbW1hbmQtYWN0aXZhdGVkIGJyaWRnZS5cbiAgICAgIC8vIENvbmZpZy1kcml2ZW4gYW5kIEdCLWF1dG8tY29ubmVjdCB1c2VycyBnZXQgc2Vzc2lvbi1vbmx5IGRpc2Nvbm5lY3RcbiAgICAgIC8vIOKAlCB3cml0aW5nIGZhbHNlIHdvdWxkIHNpbGVudGx5IHVuZG8gYSBTZXR0aW5ncyBjaG9pY2Ugb3Igb3B0IGFcbiAgICAgIC8vIEdCLXJvbGxvdXQgdXNlciBvdXQgcGVybWFuZW50bHkuXG4gICAgICBpZiAoZXhwbGljaXQpIHtcbiAgICAgICAgc2F2ZUdsb2JhbENvbmZpZyhjdXJyZW50ID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudC5yZW1vdGVDb250cm9sQXRTdGFydHVwID09PSBmYWxzZSkgcmV0dXJuIGN1cnJlbnRcbiAgICAgICAgICByZXR1cm4geyAuLi5jdXJyZW50LCByZW1vdGVDb250cm9sQXRTdGFydHVwOiBmYWxzZSB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBzZXRBcHBTdGF0ZShwcmV2ID0+IHtcbiAgICAgICAgaWYgKCFwcmV2LnJlcGxCcmlkZ2VFbmFibGVkKSByZXR1cm4gcHJldlxuICAgICAgICByZXR1cm4geyAuLi5wcmV2LCByZXBsQnJpZGdlRW5hYmxlZDogZmFsc2UgfVxuICAgICAgfSlcbiAgICAgIG9uRG9uZSgpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IHsgbGFiZWw6IHN0YXR1c0xhYmVsLCBjb2xvcjogc3RhdHVzQ29sb3IgfSA9IGdldEJyaWRnZVN0YXR1cyh7XG4gICAgZXJyb3IsXG4gICAgY29ubmVjdGVkLFxuICAgIHNlc3Npb25BY3RpdmUsXG4gICAgcmVjb25uZWN0aW5nLFxuICB9KVxuICBjb25zdCBpbmRpY2F0b3IgPSBlcnJvciA/IEJSSURHRV9GQUlMRURfSU5ESUNBVE9SIDogQlJJREdFX1JFQURZX0lORElDQVRPUlxuICBjb25zdCBxckxpbmVzID0gcXJUZXh0ID8gcXJUZXh0LnNwbGl0KCdcXG4nKS5maWx0ZXIobCA9PiBsLmxlbmd0aCA+IDApIDogW11cblxuICAvLyBCdWlsZCBzdWZmaXggd2l0aCByZXBvIGFuZCBicmFuY2ggKG1hdGNoZXMgc3RhbmRhbG9uZSBicmlkZ2UgZm9ybWF0KVxuICBjb25zdCBjb250ZXh0UGFydHM6IHN0cmluZ1tdID0gW11cbiAgaWYgKHJlcG9OYW1lKSBjb250ZXh0UGFydHMucHVzaChyZXBvTmFtZSlcbiAgaWYgKGJyYW5jaE5hbWUpIGNvbnRleHRQYXJ0cy5wdXNoKGJyYW5jaE5hbWUpXG4gIGNvbnN0IGNvbnRleHRTdWZmaXggPVxuICAgIGNvbnRleHRQYXJ0cy5sZW5ndGggPiAwID8gJyBcXHUwMGI3ICcgKyBjb250ZXh0UGFydHMuam9pbignIFxcdTAwYjcgJykgOiAnJ1xuXG4gIC8vIEZvb3RlciB0ZXh0IG1hdGNoZXMgc3RhbmRhbG9uZSBicmlkZ2VcbiAgY29uc3QgZm9vdGVyVGV4dCA9IGVycm9yXG4gICAgPyBGQUlMRURfRk9PVEVSX1RFWFRcbiAgICA6IGRpc3BsYXlVcmxcbiAgICAgID8gc2Vzc2lvbkFjdGl2ZVxuICAgICAgICA/IGJ1aWxkQWN0aXZlRm9vdGVyVGV4dChkaXNwbGF5VXJsKVxuICAgICAgICA6IGJ1aWxkSWRsZUZvb3RlclRleHQoZGlzcGxheVVybClcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIHRpdGxlPVwiUmVtb3RlIENvbnRyb2xcIiBvbkNhbmNlbD17b25Eb25lfSBoaWRlSW5wdXRHdWlkZT5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIGdhcD17MX0+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgPFRleHQgY29sb3I9e3N0YXR1c0NvbG9yfT5cbiAgICAgICAgICAgICAge2luZGljYXRvcn0ge3N0YXR1c0xhYmVsfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+e2NvbnRleHRTdWZmaXh9PC9UZXh0PlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICB7ZXJyb3IgJiYgPFRleHQgY29sb3I9XCJlcnJvclwiPntlcnJvcn08L1RleHQ+fVxuICAgICAgICAgIHt2ZXJib3NlICYmIGVudmlyb25tZW50SWQgJiYgKFxuICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+RW52aXJvbm1lbnQ6IHtlbnZpcm9ubWVudElkfTwvVGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHt2ZXJib3NlICYmIHNlc3Npb25JZCAmJiA8VGV4dCBkaW1Db2xvcj5TZXNzaW9uOiB7c2Vzc2lvbklkfTwvVGV4dD59XG4gICAgICAgIDwvQm94PlxuICAgICAgICB7c2hvd1FSICYmIHFyTGluZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICAgICAgICB7cXJMaW5lcy5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPFRleHQga2V5PXtpfT57bGluZX08L1RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cbiAgICAgICAge2Zvb3RlclRleHQgJiYgPFRleHQgZGltQ29sb3I+e2Zvb3RlclRleHR9PC9UZXh0Pn1cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgZCB0byBkaXNjb25uZWN0IMK3IHNwYWNlIGZvciBRUiBjb2RlIMK3IEVudGVyL0VzYyB0byBjbG9zZVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0JveD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUEsU0FBU0EsUUFBUSxRQUFRLE1BQU07QUFDL0IsU0FBU0MsUUFBUSxJQUFJQyxVQUFVLFFBQVEsUUFBUTtBQUMvQyxPQUFPLEtBQUtDLEtBQUssTUFBTSxPQUFPO0FBQzlCLFNBQVNDLFNBQVMsRUFBRUMsUUFBUSxRQUFRLE9B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 |