source dump of claude code
at main 441 lines 45 kB view raw
1import { c as _c } from "react/compiler-runtime"; 2import { getSentinelCategory } from '@ant/computer-use-mcp/sentinelApps'; 3import type { CuPermissionRequest, CuPermissionResponse } from '@ant/computer-use-mcp/types'; 4import { DEFAULT_GRANT_FLAGS } from '@ant/computer-use-mcp/types'; 5import figures from 'figures'; 6import * as React from 'react'; 7import { useMemo, useState } from 'react'; 8import { Box, Text } from '../../../ink.js'; 9import { execFileNoThrow } from '../../../utils/execFileNoThrow.js'; 10import { plural } from '../../../utils/stringUtils.js'; 11import type { OptionWithDescription } from '../../CustomSelect/select.js'; 12import { Select } from '../../CustomSelect/select.js'; 13import { Dialog } from '../../design-system/Dialog.js'; 14type ComputerUseApprovalProps = { 15 request: CuPermissionRequest; 16 onDone: (response: CuPermissionResponse) => void; 17}; 18const DENY_ALL_RESPONSE: CuPermissionResponse = { 19 granted: [], 20 denied: [], 21 flags: DEFAULT_GRANT_FLAGS 22}; 23 24/** 25 * Two-panel dispatcher. When `request.tccState` is present, macOS permissions 26 * (Accessibility / Screen Recording) are missing and the app list is 27 * irrelevant — show a TCC panel that opens System Settings. Otherwise show the 28 * app allowlist + grant-flags panel. 29 */ 30export function ComputerUseApproval(t0) { 31 const $ = _c(3); 32 const { 33 request, 34 onDone 35 } = t0; 36 let t1; 37 if ($[0] !== onDone || $[1] !== request) { 38 t1 = request.tccState ? <ComputerUseTccPanel tccState={request.tccState} onDone={() => onDone(DENY_ALL_RESPONSE)} /> : <ComputerUseAppListPanel request={request} onDone={onDone} />; 39 $[0] = onDone; 40 $[1] = request; 41 $[2] = t1; 42 } else { 43 t1 = $[2]; 44 } 45 return t1; 46} 47 48// ── TCC panel ───────────────────────────────────────────────────────────── 49 50type TccOption = 'open_accessibility' | 'open_screen_recording' | 'retry'; 51function ComputerUseTccPanel(t0) { 52 const $ = _c(26); 53 const { 54 tccState, 55 onDone 56 } = t0; 57 let opts; 58 if ($[0] !== tccState.accessibility || $[1] !== tccState.screenRecording) { 59 opts = []; 60 if (!tccState.accessibility) { 61 let t1; 62 if ($[3] === Symbol.for("react.memo_cache_sentinel")) { 63 t1 = { 64 label: "Open System Settings \u2192 Accessibility", 65 value: "open_accessibility" 66 }; 67 $[3] = t1; 68 } else { 69 t1 = $[3]; 70 } 71 opts.push(t1); 72 } 73 if (!tccState.screenRecording) { 74 let t1; 75 if ($[4] === Symbol.for("react.memo_cache_sentinel")) { 76 t1 = { 77 label: "Open System Settings \u2192 Screen Recording", 78 value: "open_screen_recording" 79 }; 80 $[4] = t1; 81 } else { 82 t1 = $[4]; 83 } 84 opts.push(t1); 85 } 86 let t1; 87 if ($[5] === Symbol.for("react.memo_cache_sentinel")) { 88 t1 = { 89 label: "Try again", 90 value: "retry" 91 }; 92 $[5] = t1; 93 } else { 94 t1 = $[5]; 95 } 96 opts.push(t1); 97 $[0] = tccState.accessibility; 98 $[1] = tccState.screenRecording; 99 $[2] = opts; 100 } else { 101 opts = $[2]; 102 } 103 const options = opts; 104 let t1; 105 if ($[6] !== onDone) { 106 t1 = function onChange(value) { 107 switch (value) { 108 case "open_accessibility": 109 { 110 execFileNoThrow("open", ["x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"], { 111 useCwd: false 112 }); 113 return; 114 } 115 case "open_screen_recording": 116 { 117 execFileNoThrow("open", ["x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"], { 118 useCwd: false 119 }); 120 return; 121 } 122 case "retry": 123 { 124 onDone(); 125 return; 126 } 127 } 128 }; 129 $[6] = onDone; 130 $[7] = t1; 131 } else { 132 t1 = $[7]; 133 } 134 const onChange = t1; 135 const t2 = tccState.accessibility ? `${figures.tick} granted` : `${figures.cross} not granted`; 136 let t3; 137 if ($[8] !== t2) { 138 t3 = <Text>Accessibility:{" "}{t2}</Text>; 139 $[8] = t2; 140 $[9] = t3; 141 } else { 142 t3 = $[9]; 143 } 144 const t4 = tccState.screenRecording ? `${figures.tick} granted` : `${figures.cross} not granted`; 145 let t5; 146 if ($[10] !== t4) { 147 t5 = <Text>Screen Recording:{" "}{t4}</Text>; 148 $[10] = t4; 149 $[11] = t5; 150 } else { 151 t5 = $[11]; 152 } 153 let t6; 154 if ($[12] !== t3 || $[13] !== t5) { 155 t6 = <Box flexDirection="column">{t3}{t5}</Box>; 156 $[12] = t3; 157 $[13] = t5; 158 $[14] = t6; 159 } else { 160 t6 = $[14]; 161 } 162 let t7; 163 if ($[15] === Symbol.for("react.memo_cache_sentinel")) { 164 t7 = <Text dimColor={true}>Grant the missing permissions in System Settings, then select "Try again". macOS may require you to restart Claude Code after granting Screen Recording.</Text>; 165 $[15] = t7; 166 } else { 167 t7 = $[15]; 168 } 169 let t8; 170 if ($[16] !== onChange || $[17] !== onDone || $[18] !== options) { 171 t8 = <Select options={options} onChange={onChange} onCancel={onDone} />; 172 $[16] = onChange; 173 $[17] = onDone; 174 $[18] = options; 175 $[19] = t8; 176 } else { 177 t8 = $[19]; 178 } 179 let t9; 180 if ($[20] !== t6 || $[21] !== t8) { 181 t9 = <Box flexDirection="column" paddingX={1} paddingY={1} gap={1}>{t6}{t7}{t8}</Box>; 182 $[20] = t6; 183 $[21] = t8; 184 $[22] = t9; 185 } else { 186 t9 = $[22]; 187 } 188 let t10; 189 if ($[23] !== onDone || $[24] !== t9) { 190 t10 = <Dialog title="Computer Use needs macOS permissions" onCancel={onDone}>{t9}</Dialog>; 191 $[23] = onDone; 192 $[24] = t9; 193 $[25] = t10; 194 } else { 195 t10 = $[25]; 196 } 197 return t10; 198} 199 200// ── App allowlist panel ─────────────────────────────────────────────────── 201 202type AppListOption = 'allow_all' | 'deny'; 203const SENTINEL_WARNING: Record<NonNullable<ReturnType<typeof getSentinelCategory>>, string> = { 204 shell: 'equivalent to shell access', 205 filesystem: 'can read/write any file', 206 system_settings: 'can change system settings' 207}; 208function ComputerUseAppListPanel(t0) { 209 const $ = _c(48); 210 const { 211 request, 212 onDone 213 } = t0; 214 let t1; 215 if ($[0] !== request.apps) { 216 t1 = () => new Set(request.apps.flatMap(_temp)); 217 $[0] = request.apps; 218 $[1] = t1; 219 } else { 220 t1 = $[1]; 221 } 222 const [checked] = useState(t1); 223 let t2; 224 if ($[2] === Symbol.for("react.memo_cache_sentinel")) { 225 t2 = ["clipboardRead", "clipboardWrite", "systemKeyCombos"]; 226 $[2] = t2; 227 } else { 228 t2 = $[2]; 229 } 230 const ALL_FLAG_KEYS = t2; 231 let t3; 232 if ($[3] !== request.requestedFlags) { 233 t3 = ALL_FLAG_KEYS.filter(k => request.requestedFlags[k]); 234 $[3] = request.requestedFlags; 235 $[4] = t3; 236 } else { 237 t3 = $[4]; 238 } 239 const requestedFlagKeys = t3; 240 const t4 = checked.size; 241 let t5; 242 if ($[5] !== checked.size) { 243 t5 = plural(checked.size, "app"); 244 $[5] = checked.size; 245 $[6] = t5; 246 } else { 247 t5 = $[6]; 248 } 249 const t6 = `Allow for this session (${t4} ${t5})`; 250 let t7; 251 if ($[7] !== t6) { 252 t7 = { 253 label: t6, 254 value: "allow_all" 255 }; 256 $[7] = t6; 257 $[8] = t7; 258 } else { 259 t7 = $[8]; 260 } 261 let t8; 262 if ($[9] === Symbol.for("react.memo_cache_sentinel")) { 263 t8 = { 264 label: <Text>Deny, and tell Claude what to do differently <Text bold={true}>(esc)</Text></Text>, 265 value: "deny" 266 }; 267 $[9] = t8; 268 } else { 269 t8 = $[9]; 270 } 271 let t9; 272 if ($[10] !== t7) { 273 t9 = [t7, t8]; 274 $[10] = t7; 275 $[11] = t9; 276 } else { 277 t9 = $[11]; 278 } 279 const options = t9; 280 let t10; 281 if ($[12] !== checked || $[13] !== onDone || $[14] !== request.apps || $[15] !== requestedFlagKeys) { 282 t10 = function respond(allow) { 283 if (!allow) { 284 onDone(DENY_ALL_RESPONSE); 285 return; 286 } 287 const now = Date.now(); 288 const granted = request.apps.flatMap(a_0 => a_0.resolved && checked.has(a_0.resolved.bundleId) ? [{ 289 bundleId: a_0.resolved.bundleId, 290 displayName: a_0.resolved.displayName, 291 grantedAt: now 292 }] : []); 293 const denied = request.apps.filter(a_1 => !a_1.resolved || !checked.has(a_1.resolved.bundleId)).map(_temp2); 294 const flags = { 295 ...DEFAULT_GRANT_FLAGS, 296 ...Object.fromEntries(requestedFlagKeys.map(_temp3)) 297 }; 298 onDone({ 299 granted, 300 denied, 301 flags 302 }); 303 }; 304 $[12] = checked; 305 $[13] = onDone; 306 $[14] = request.apps; 307 $[15] = requestedFlagKeys; 308 $[16] = t10; 309 } else { 310 t10 = $[16]; 311 } 312 const respond = t10; 313 let t11; 314 if ($[17] !== respond) { 315 t11 = () => respond(false); 316 $[17] = respond; 317 $[18] = t11; 318 } else { 319 t11 = $[18]; 320 } 321 let t12; 322 if ($[19] !== request.reason) { 323 t12 = request.reason ? <Text dimColor={true}>{request.reason}</Text> : null; 324 $[19] = request.reason; 325 $[20] = t12; 326 } else { 327 t12 = $[20]; 328 } 329 let t13; 330 if ($[21] !== checked || $[22] !== request.apps) { 331 let t14; 332 if ($[24] !== checked) { 333 t14 = a_3 => { 334 const resolved = a_3.resolved; 335 if (!resolved) { 336 return <Text key={a_3.requestedName} dimColor={true}>{" "}{figures.circle} {a_3.requestedName}{" "}<Text dimColor={true}>(not installed)</Text></Text>; 337 } 338 if (a_3.alreadyGranted) { 339 return <Text key={resolved.bundleId} dimColor={true}>{" "}{figures.tick} {resolved.displayName}{" "}<Text dimColor={true}>(already granted)</Text></Text>; 340 } 341 const sentinel = getSentinelCategory(resolved.bundleId); 342 const isChecked = checked.has(resolved.bundleId); 343 return <Box key={resolved.bundleId} flexDirection="column"><Text>{" "}{isChecked ? figures.circleFilled : figures.circle}{" "}{resolved.displayName}</Text>{sentinel ? <Text bold={true}>{" "}{figures.warning} {SENTINEL_WARNING[sentinel]}</Text> : null}</Box>; 344 }; 345 $[24] = checked; 346 $[25] = t14; 347 } else { 348 t14 = $[25]; 349 } 350 t13 = request.apps.map(t14); 351 $[21] = checked; 352 $[22] = request.apps; 353 $[23] = t13; 354 } else { 355 t13 = $[23]; 356 } 357 let t14; 358 if ($[26] !== t13) { 359 t14 = <Box flexDirection="column">{t13}</Box>; 360 $[26] = t13; 361 $[27] = t14; 362 } else { 363 t14 = $[27]; 364 } 365 let t15; 366 if ($[28] !== requestedFlagKeys) { 367 t15 = requestedFlagKeys.length > 0 ? <Box flexDirection="column"><Text dimColor={true}>Also requested:</Text>{requestedFlagKeys.map(_temp4)}</Box> : null; 368 $[28] = requestedFlagKeys; 369 $[29] = t15; 370 } else { 371 t15 = $[29]; 372 } 373 let t16; 374 if ($[30] !== request.willHide) { 375 t16 = request.willHide && request.willHide.length > 0 ? <Text dimColor={true}>{request.willHide.length} other{" "}{plural(request.willHide.length, "app")} will be hidden while Claude works.</Text> : null; 376 $[30] = request.willHide; 377 $[31] = t16; 378 } else { 379 t16 = $[31]; 380 } 381 let t17; 382 let t18; 383 if ($[32] !== respond) { 384 t17 = v => respond(v === "allow_all"); 385 t18 = () => respond(false); 386 $[32] = respond; 387 $[33] = t17; 388 $[34] = t18; 389 } else { 390 t17 = $[33]; 391 t18 = $[34]; 392 } 393 let t19; 394 if ($[35] !== options || $[36] !== t17 || $[37] !== t18) { 395 t19 = <Select options={options} onChange={t17} onCancel={t18} />; 396 $[35] = options; 397 $[36] = t17; 398 $[37] = t18; 399 $[38] = t19; 400 } else { 401 t19 = $[38]; 402 } 403 let t20; 404 if ($[39] !== t12 || $[40] !== t14 || $[41] !== t15 || $[42] !== t16 || $[43] !== t19) { 405 t20 = <Box flexDirection="column" paddingX={1} paddingY={1} gap={1}>{t12}{t14}{t15}{t16}{t19}</Box>; 406 $[39] = t12; 407 $[40] = t14; 408 $[41] = t15; 409 $[42] = t16; 410 $[43] = t19; 411 $[44] = t20; 412 } else { 413 t20 = $[44]; 414 } 415 let t21; 416 if ($[45] !== t11 || $[46] !== t20) { 417 t21 = <Dialog title="Computer Use wants to control these apps" onCancel={t11}>{t20}</Dialog>; 418 $[45] = t11; 419 $[46] = t20; 420 $[47] = t21; 421 } else { 422 t21 = $[47]; 423 } 424 return t21; 425} 426function _temp4(flag) { 427 return <Text key={flag} dimColor={true}>{" "}· {flag}</Text>; 428} 429function _temp3(k_0) { 430 return [k_0, true] as const; 431} 432function _temp2(a_2) { 433 return { 434 bundleId: a_2.resolved?.bundleId ?? a_2.requestedName, 435 reason: a_2.resolved ? "user_denied" as const : "not_installed" as const 436 }; 437} 438function _temp(a) { 439 return a.resolved && !a.alreadyGranted ? [a.resolved.bundleId] : []; 440} 441//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZW50aW5lbENhdGVnb3J5IiwiQ3VQZXJtaXNzaW9uUmVxdWVzdCIsIkN1UGVybWlzc2lvblJlc3BvbnNlIiwiREVGQVVMVF9HUkFOVF9GTEFHUyIsImZpZ3VyZXMiLCJSZWFjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkJveCIsIlRleHQiLCJleGVjRmlsZU5vVGhyb3ciLCJwbHVyYWwiLCJPcHRpb25XaXRoRGVzY3JpcHRpb24iLCJTZWxlY3QiLCJEaWFsb2ciLCJDb21wdXRlclVzZUFwcHJvdmFsUHJvcHMiLCJyZXF1ZXN0Iiwib25Eb25lIiwicmVzcG9uc2UiLCJERU5ZX0FMTF9SRVNQT05TRSIsImdyYW50ZWQiLCJkZW5pZWQiLCJmbGFncyIsIkNvbXB1dGVyVXNlQXBwcm92YWwiLCJ0MCIsIiQiLCJfYyIsInQxIiwidGNjU3RhdGUiLCJUY2NPcHRpb24iLCJDb21wdXRlclVzZVRjY1BhbmVsIiwib3B0cyIsImFjY2Vzc2liaWxpdHkiLCJzY3JlZW5SZWNvcmRpbmciLCJTeW1ib2wiLCJmb3IiLCJsYWJlbCIsInZhbHVlIiwicHVzaCIsIm9wdGlvbnMiLCJvbkNoYW5nZSIsInVzZUN3ZCIsInQyIiwidGljayIsImNyb3NzIiwidDMiLCJ0NCIsInQ1IiwidDYiLCJ0NyIsInQ4IiwidDkiLCJ0MTAiLCJBcHBMaXN0T3B0aW9uIiwiU0VOVElORUxfV0FSTklORyIsIlJlY29yZCIsIk5vbk51bGxhYmxlIiwiUmV0dXJuVHlwZSIsInNoZWxsIiwiZmlsZXN5c3RlbSIsInN5c3RlbV9zZXR0aW5ncyIsIkNvbXB1dGVyVXNlQXBwTGlzdFBhbmVsIiwiYXBwcyIsIlNldCIsImZsYXRNYXAiLCJfdGVtcCIsImNoZWNrZWQiLCJBTExfRkxBR19LRVlTIiwicmVxdWVzdGVkRmxhZ3MiLCJmaWx0ZXIiLCJrIiwicmVxdWVzdGVkRmxhZ0tleXMiLCJzaXplIiwicmVzcG9uZCIsImFsbG93Iiwibm93IiwiRGF0ZSIsImFfMCIsImEiLCJyZXNvbHZlZCIsImhhcyIsImJ1bmRsZUlkIiwiZGlzcGxheU5hbWUiLCJncmFudGVkQXQiLCJhXzEiLCJtYXAiLCJfdGVtcDIiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsIl90ZW1wMyIsInQxMSIsInQxMiIsInJlYXNvbiIsInQxMyIsInQxNCIsImFfMyIsInJlcXVlc3RlZE5hbWUiLCJjaXJjbGUiLCJhbHJlYWR5R3JhbnRlZCIsInNlbnRpbmVsIiwiaXNDaGVja2VkIiwiY2lyY2xlRmlsbGVkIiwid2FybmluZyIsInQxNSIsImxlbmd0aCIsIl90ZW1wNCIsInQxNiIsIndpbGxIaWRlIiwidDE3IiwidDE4IiwidiIsInQxOSIsInQyMCIsInQyMSIsImZsYWciLCJrXzAiLCJjb25zdCIsImFfMiJdLCJzb3VyY2VzIjpbIkNvbXB1dGVyVXNlQXBwcm92YWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNlbnRpbmVsQ2F0ZWdvcnkgfSBmcm9tICdAYW50L2NvbXB1dGVyLXVzZS1tY3Avc2VudGluZWxBcHBzJ1xuaW1wb3J0IHR5cGUge1xuICBDdVBlcm1pc3Npb25SZXF1ZXN0LFxuICBDdVBlcm1pc3Npb25SZXNwb25zZSxcbn0gZnJvbSAnQGFudC9jb21wdXRlci11c2UtbWNwL3R5cGVzJ1xuaW1wb3J0IHsgREVGQVVMVF9HUkFOVF9GTEFHUyB9IGZyb20gJ0BhbnQvY29tcHV0ZXItdXNlLW1jcC90eXBlcydcbmltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQgfSBmcm9tICcuLi8uLi8uLi9pbmsuanMnXG5pbXBvcnQgeyBleGVjRmlsZU5vVGhyb3cgfSBmcm9tICcuLi8uLi8uLi91dGlscy9leGVjRmlsZU5vVGhyb3cuanMnXG5pbXBvcnQgeyBwbHVyYWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJpbmdVdGlscy5qcydcbmltcG9ydCB0eXBlIHsgT3B0aW9uV2l0aERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vLi4vQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IFNlbGVjdCB9IGZyb20gJy4uLy4uL0N1c3RvbVNlbGVjdC9zZWxlY3QuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuLi8uLi9kZXNpZ24tc3lzdGVtL0RpYWxvZy5qcydcblxudHlwZSBDb21wdXRlclVzZUFwcHJvdmFsUHJvcHMgPSB7XG4gIHJlcXVlc3Q6IEN1UGVybWlzc2lvblJlcXVlc3RcbiAgb25Eb25lOiAocmVzcG9uc2U6IEN1UGVybWlzc2lvblJlc3BvbnNlKSA9PiB2b2lkXG59XG5cbmNvbnN0IERFTllfQUxMX1JFU1BPTlNFOiBDdVBlcm1pc3Npb25SZXNwb25zZSA9IHtcbiAgZ3JhbnRlZDogW10sXG4gIGRlbmllZDogW10sXG4gIGZsYWdzOiBERUZBVUxUX0dSQU5UX0ZMQUdTLFxufVxuXG4vKipcbiAqIFR3by1wYW5lbCBkaXNwYXRjaGVyLiBXaGVuIGByZXF1ZXN0LnRjY1N0YXRlYCBpcyBwcmVzZW50LCBtYWNPUyBwZXJtaXNzaW9uc1xuICogKEFjY2Vzc2liaWxpdHkgLyBTY3JlZW4gUmVjb3JkaW5nKSBhcmUgbWlzc2luZyBhbmQgdGhlIGFwcCBsaXN0IGlzXG4gKiBpcnJlbGV2YW50IOKAlCBzaG93IGEgVENDIHBhbmVsIHRoYXQgb3BlbnMgU3lzdGVtIFNldHRpbmdzLiBPdGhlcndpc2Ugc2hvdyB0aGVcbiAqIGFwcCBhbGxvd2xpc3QgKyBncmFudC1mbGFncyBwYW5lbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENvbXB1dGVyVXNlQXBwcm92YWwoe1xuICByZXF1ZXN0LFxuICBvbkRvbmUsXG59OiBDb21wdXRlclVzZUFwcHJvdmFsUHJvcHMpOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gcmVxdWVzdC50Y2NTdGF0ZSA/IChcbiAgICA8Q29tcHV0ZXJVc2VUY2NQYW5lbFxuICAgICAgdGNjU3RhdGU9e3JlcXVlc3QudGNjU3RhdGV9XG4gICAgICBvbkRvbmU9eygpID0+IG9uRG9uZShERU5ZX0FMTF9SRVNQT05TRSl9XG4gICAgLz5cbiAgKSA6IChcbiAgICA8Q29tcHV0ZXJVc2VBcHBMaXN0UGFuZWwgcmVxdWVzdD17cmVxdWVzdH0gb25Eb25lPXtvbkRvbmV9IC8+XG4gIClcbn1cblxuLy8g4pSA4pSAIFRDQyBwYW5lbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxudHlwZSBUY2NPcHRpb24gPSAnb3Blbl9hY2Nlc3NpYmlsaXR5JyB8ICdvcGVuX3NjcmVlbl9yZWNvcmRpbmcnIHwgJ3JldHJ5J1xuXG5mdW5jdGlvbiBDb21wdXRlclVzZVRjY1BhbmVsKHtcbiAgdGNjU3RhdGUsXG4gIG9uRG9uZSxcbn06IHtcbiAgdGNjU3RhdGU6IE5vbk51bGxhYmxlPEN1UGVybWlzc2lvblJlcXVlc3RbJ3RjY1N0YXRlJ10+XG4gIG9uRG9uZTogKCkgPT4gdm9pZFxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vPE9wdGlvbldpdGhEZXNjcmlwdGlvbjxUY2NPcHRpb24+W10+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzOiBPcHRpb25XaXRoRGVzY3JpcHRpb248VGNjT3B0aW9uPltdID0gW11cbiAgICBpZiAoIXRjY1N0YXRlLmFjY2Vzc2liaWxpdHkpIHtcbiAgICAgIG9wdHMucHVzaCh7XG4gICAgICAgIGxhYmVsOiAnT3BlbiBTeXN0ZW0gU2V0dGluZ3Mg4oaSIEFjY2Vzc2liaWxpdHknLFxuICAgICAgICB2YWx1ZTogJ29wZW5fYWNjZXNzaWJpbGl0eScsXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoIXRjY1N0YXRlLnNjcmVlblJlY29yZGluZykge1xuICAgICAgb3B0cy5wdXNoKHtcbiAgICAgICAgbGFiZWw6ICdPcGVuIFN5c3RlbSBTZXR0aW5ncyDihpIgU2NyZWVuIFJlY29yZGluZycsXG4gICAgICAgIHZhbHVlOiAnb3Blbl9zY3JlZW5fcmVjb3JkaW5nJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIG9wdHMucHVzaCh7IGxhYmVsOiAnVHJ5IGFnYWluJywgdmFsdWU6ICdyZXRyeScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9LCBbdGNjU3RhdGUuYWNjZXNzaWJpbGl0eSwgdGNjU3RhdGUuc2NyZWVuUmVjb3JkaW5nXSlcblxuICBmdW5jdGlvbiBvbkNoYW5nZSh2YWx1ZTogVGNjT3B0aW9uKTogdm9pZCB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnb3Blbl9hY2Nlc3NpYmlsaXR5JzpcbiAgICAgICAgdm9pZCBleGVjRmlsZU5vVGhyb3coXG4gICAgICAgICAgJ29wZW4nLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgICd4LWFwcGxlLnN5c3RlbXByZWZlcmVuY2VzOmNvbS5hcHBsZS5wcmVmZXJlbmNlLnNlY3VyaXR5P1ByaXZhY3lfQWNjZXNzaWJpbGl0eScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICB7IHVzZUN3ZDogZmFsc2UgfSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIGNhc2UgJ29wZW5fc2NyZWVuX3JlY29yZGluZyc6XG4gICAgICAgIHZvaWQgZXhlY0ZpbGVOb1Rocm93KFxuICAgICAgICAgICdvcGVuJyxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAneC1hcHBsZS5zeXN0ZW1wcmVmZXJlbmNlczpjb20uYXBwbGUucHJlZmVyZW5jZS5zZWN1cml0eT9Qcml2YWN5X1NjcmVlbkNhcHR1cmUnLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgeyB1c2VDd2Q6IGZhbHNlIH0sXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICBjYXNlICdyZXRyeSc6XG4gICAgICAgIC8vIFJlc29sdmUgd2l0aCBkZW55LWFsbCDigJQgdGhlIG1vZGVsIHJlLWNhbGxzIHJlcXVlc3RfYWNjZXNzLCB3aGljaFxuICAgICAgICAvLyByZS1jaGVja3MgVENDIGFuZCByZW5kZXJzIHRoZSBhcHAgbGlzdCBpZiBub3cgZ3JhbnRlZC5cbiAgICAgICAgb25Eb25lKClcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIHRpdGxlPVwiQ29tcHV0ZXIgVXNlIG5lZWRzIG1hY09TIHBlcm1pc3Npb25zXCIgb25DYW5jZWw9e29uRG9uZX0+XG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nWD17MX0gcGFkZGluZ1k9ezF9IGdhcD17MX0+XG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgQWNjZXNzaWJpbGl0eTp7JyAnfVxuICAgICAgICAgICAge3RjY1N0YXRlLmFjY2Vzc2liaWxpdHlcbiAgICAgICAgICAgICAgPyBgJHtmaWd1cmVzLnRpY2t9IGdyYW50ZWRgXG4gICAgICAgICAgICAgIDogYCR7ZmlndXJlcy5jcm9zc30gbm90IGdyYW50ZWRgfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFNjcmVlbiBSZWNvcmRpbmc6eycgJ31cbiAgICAgICAgICAgIHt0Y2NTdGF0ZS5zY3JlZW5SZWNvcmRpbmdcbiAgICAgICAgICAgICAgPyBgJHtmaWd1cmVzLnRpY2t9IGdyYW50ZWRgXG4gICAgICAgICAgICAgIDogYCR7ZmlndXJlcy5jcm9zc30gbm90IGdyYW50ZWRgfVxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICAgIDxUZXh0IGRpbUNvbG9yPlxuICAgICAgICAgIEdyYW50IHRoZSBtaXNzaW5nIHBlcm1pc3Npb25zIGluIFN5c3RlbSBTZXR0aW5ncywgdGhlbiBzZWxlY3RcbiAgICAgICAgICAmcXVvdDtUcnkgYWdhaW4mcXVvdDsuIG1hY09TIG1heSByZXF1aXJlIHlvdSB0byByZXN0YXJ0IENsYXVkZSBDb2RlXG4gICAgICAgICAgYWZ0ZXIgZ3JhbnRpbmcgU2NyZWVuIFJlY29yZGluZy5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8U2VsZWN0IG9wdGlvbnM9e29wdGlvbnN9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gb25DYW5jZWw9e29uRG9uZX0gLz5cbiAgICAgIDwvQm94PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG5cbi8vIOKUgOKUgCBBcHAgYWxsb3dsaXN0IHBhbmVsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG50eXBlIEFwcExpc3RPcHRpb24gPSAnYWxsb3dfYWxsJyB8ICdkZW55J1xuXG5jb25zdCBTRU5USU5FTF9XQVJOSU5HOiBSZWNvcmQ8XG4gIE5vbk51bGxhYmxlPFJldHVyblR5cGU8dHlwZW9mIGdldFNlbnRpbmVsQ2F0ZWdvcnk+PixcbiAgc3RyaW5nXG4+ID0ge1xuICBzaGVsbDogJ2VxdWl2YWxlbnQgdG8gc2hlbGwgYWNjZXNzJyxcbiAgZmlsZXN5c3RlbTogJ2NhbiByZWFkL3dyaXRlIGFueSBmaWxlJyxcbiAgc3lzdGVtX3NldHRpbmdzOiAnY2FuIGNoYW5nZSBzeXN0ZW0gc2V0dGluZ3MnLFxufVxuXG5mdW5jdGlvbiBDb21wdXRlclVzZUFwcExpc3RQYW5lbCh7XG4gIHJlcXVlc3QsXG4gIG9uRG9uZSxcbn06IENvbXB1dGVyVXNlQXBwcm92YWxQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIFByZS1jaGVjayBldmVyeSByZXNvbHZlZCwgbm90LXlldC1ncmFudGVkIGFwcC4gU2VudGluZWxzIHN0YXkgY2hlY2tlZFxuICAvLyB0b28g4oCUIHRoZSB3YXJuaW5nIHRleHQgaXMgdGhlIHNpZ25hbCwgbm90IGFuIHVuY2hlY2tlZCBib3guXG4gIC8vIFBlci1pdGVtIHRvZ2dsZXMgYXJlIGEgZm9sbG93LXVwOyBmb3Igbm93IGV2ZXJ5IHJlc29sdmVkIGFwcCBpcyBncmFudGVkXG4gIC8vIHdoZW4gdGhlIHVzZXIgYWNjZXB0cy4gYHNldENoZWNrZWRgIGlzIHVudXNlZCB1bnRpbCB0aGVuLlxuICBjb25zdCBbY2hlY2tlZF0gPSB1c2VTdGF0ZTxSZWFkb25seVNldDxzdHJpbmc+PihcbiAgICAoKSA9PlxuICAgICAgbmV3IFNldChcbiAgICAgICAgcmVxdWVzdC5hcHBzLmZsYXRNYXAoYSA9PlxuICAgICAgICAgIGEucmVzb2x2ZWQgJiYgIWEuYWxyZWFkeUdyYW50ZWQgPyBbYS5yZXNvbHZlZC5idW5kbGVJZF0gOiBbXSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gIClcblxuICB0eXBlIEZsYWdLZXkgPSBrZXlvZiB0eXBlb2YgREVGQVVMVF9HUkFOVF9GTEFHU1xuICBjb25zdCBBTExfRkxBR19LRVlTOiBGbGFnS2V5W10gPSBbXG4gICAgJ2NsaXBib2FyZFJlYWQnLFxuICAgICdjbGlwYm9hcmRXcml0ZScsXG4gICAgJ3N5c3RlbUtleUNvbWJvcycsXG4gIF1cbiAgY29uc3QgcmVxdWVzdGVkRmxhZ0tleXMgPSB1c2VNZW1vKFxuICAgICgpOiBGbGFnS2V5W10gPT4gQUxMX0ZMQUdfS0VZUy5maWx0ZXIoayA9PiByZXF1ZXN0LnJlcXVlc3RlZEZsYWdzW2tdKSxcbiAgICBbcmVxdWVzdC5yZXF1ZXN0ZWRGbGFnc10sXG4gIClcblxuICBjb25zdCBvcHRpb25zID0gdXNlTWVtbzxPcHRpb25XaXRoRGVzY3JpcHRpb248QXBwTGlzdE9wdGlvbj5bXT4oXG4gICAgKCkgPT4gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogYEFsbG93IGZvciB0aGlzIHNlc3Npb24gKCR7Y2hlY2tlZC5zaXplfSAke3BsdXJhbChjaGVja2VkLnNpemUsICdhcHAnKX0pYCxcbiAgICAgICAgdmFsdWU6ICdhbGxvd19hbGwnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6IChcbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIERlbnksIGFuZCB0ZWxsIENsYXVkZSB3aGF0IHRvIGRvIGRpZmZlcmVudGx5IDxUZXh0IGJvbGQ+KGVzYyk8L1RleHQ+XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICApLFxuICAgICAgICB2YWx1ZTogJ2RlbnknLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtjaGVja2VkLnNpemVdLFxuICApXG5cbiAgZnVuY3Rpb24gcmVzcG9uZChhbGxvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghYWxsb3cpIHtcbiAgICAgIG9uRG9uZShERU5ZX0FMTF9SRVNQT05TRSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgZ3JhbnRlZCA9IHJlcXVlc3QuYXBwcy5mbGF0TWFwKGEgPT5cbiAgICAgIGEucmVzb2x2ZWQgJiYgY2hlY2tlZC5oYXMoYS5yZXNvbHZlZC5idW5kbGVJZClcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJ1bmRsZUlkOiBhLnJlc29sdmVkLmJ1bmRsZUlkLFxuICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogYS5yZXNvbHZlZC5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgZ3JhbnRlZEF0OiBub3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSxcbiAgICApXG4gICAgY29uc3QgZGVuaWVkID0gcmVxdWVzdC5hcHBzXG4gICAgICAuZmlsdGVyKGEgPT4gIWEucmVzb2x2ZWQgfHwgIWNoZWNrZWQuaGFzKGEucmVzb2x2ZWQuYnVuZGxlSWQpKVxuICAgICAgLm1hcChhID0+ICh7XG4gICAgICAgIGJ1bmRsZUlkOiBhLnJlc29sdmVkPy5idW5kbGVJZCA/PyBhLnJlcXVlc3RlZE5hbWUsXG4gICAgICAgIHJlYXNvbjogYS5yZXNvbHZlZFxuICAgICAgICAgID8gKCd1c2VyX2RlbmllZCcgYXMgY29uc3QpXG4gICAgICAgICAgOiAoJ25vdF9pbnN0YWxsZWQnIGFzIGNvbnN0KSxcbiAgICAgIH0pKVxuICAgIC8vIEdyYW50IGFsbCByZXF1ZXN0ZWQgZmxhZ3Mgb24gYWxsb3cg4oCUIHBlci1mbGFnIHRvZ2dsZXMgYXJlIGEgZm9sbG93LXVwLlxuICAgIGNvbnN0IGZsYWdzID0ge1xuICAgICAgLi4uREVGQVVMVF9HUkFOVF9GTEFHUyxcbiAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhyZXF1ZXN0ZWRGbGFnS2V5cy5tYXAoayA9PiBbaywgdHJ1ZV0gYXMgY29uc3QpKSxcbiAgICB9XG4gICAgb25Eb25lKHsgZ3JhbnRlZCwgZGVuaWVkLCBmbGFncyB9KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nXG4gICAgICB0aXRsZT1cIkNvbXB1dGVyIFVzZSB3YW50cyB0byBjb250cm9sIHRoZXNlIGFwcHNcIlxuICAgICAgb25DYW5jZWw9eygpID0+IHJlc3BvbmQoZmFsc2UpfVxuICAgID5cbiAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIHBhZGRpbmdYPXsxfSBwYWRkaW5nWT17MX0gZ2FwPXsxfT5cbiAgICAgICAge3JlcXVlc3QucmVhc29uID8gPFRleHQgZGltQ29sb3I+e3JlcXVlc3QucmVhc29ufTwvVGV4dD4gOiBudWxsfVxuXG4gICAgICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgIHtyZXF1ZXN0LmFwcHMubWFwKGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhLnJlc29sdmVkXG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRleHQga2V5PXthLnJlcXVlc3RlZE5hbWV9IGRpbUNvbG9yPlxuICAgICAgICAgICAgICAgICAgeycgICd9XG4gICAgICAgICAgICAgICAgICB7ZmlndXJlcy5jaXJjbGV9IHthLnJlcXVlc3RlZE5hbWV9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPihub3QgaW5zdGFsbGVkKTwvVGV4dD5cbiAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhLmFscmVhZHlHcmFudGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPFRleHQga2V5PXtyZXNvbHZlZC5idW5kbGVJZH0gZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgICB7JyAgJ31cbiAgICAgICAgICAgICAgICAgIHtmaWd1cmVzLnRpY2t9IHtyZXNvbHZlZC5kaXNwbGF5TmFtZX17JyAnfVxuICAgICAgICAgICAgICAgICAgPFRleHQgZGltQ29sb3I+KGFscmVhZHkgZ3JhbnRlZCk8L1RleHQ+XG4gICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZW50aW5lbCA9IGdldFNlbnRpbmVsQ2F0ZWdvcnkocmVzb2x2ZWQuYnVuZGxlSWQpXG4gICAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSBjaGVja2VkLmhhcyhyZXNvbHZlZC5idW5kbGVJZClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxCb3gga2V5PXtyZXNvbHZlZC5idW5kbGVJZH0gZmxleERpcmVjdGlvbj1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgICAgeycgICd9XG4gICAgICAgICAgICAgICAgICB7aXNDaGVja2VkID8gZmlndXJlcy5jaXJjbGVGaWxsZWQgOiBmaWd1cmVzLmNpcmNsZX17JyAnfVxuICAgICAgICAgICAgICAgICAge3Jlc29sdmVkLmRpc3BsYXlOYW1lfVxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICB7c2VudGluZWwgPyAoXG4gICAgICAgICAgICAgICAgICA8VGV4dCBib2xkPlxuICAgICAgICAgICAgICAgICAgICB7JyAgICAnfVxuICAgICAgICAgICAgICAgICAgICB7ZmlndXJlcy53YXJuaW5nfSB7U0VOVElORUxfV0FSTklOR1tzZW50aW5lbF19XG4gICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L0JveD5cblxuICAgICAgICB7cmVxdWVzdGVkRmxhZ0tleXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgIDxUZXh0IGRpbUNvbG9yPkFsc28gcmVxdWVzdGVkOjwvVGV4dD5cbiAgICAgICAgICAgIHtyZXF1ZXN0ZWRGbGFnS2V5cy5tYXAoZmxhZyA9PiAoXG4gICAgICAgICAgICAgIDxUZXh0IGtleT17ZmxhZ30gZGltQ29sb3I+XG4gICAgICAgICAgICAgICAgeycgICd9wrcge2ZsYWd9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQm94PlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7cmVxdWVzdC53aWxsSGlkZSAmJiByZXF1ZXN0LndpbGxIaWRlLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgICB7cmVxdWVzdC53aWxsSGlkZS5sZW5ndGh9IG90aGVyeycgJ31cbiAgICAgICAgICAgIHtwbHVyYWwocmVxdWVzdC53aWxsSGlkZS5sZW5ndGgsICdhcHAnKX0gd2lsbCBiZSBoaWRkZW4gd2hpbGUgQ2xhdWRlXG4gICAgICAgICAgICB3b3Jrcy5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIDxTZWxlY3RcbiAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgIG9uQ2hhbmdlPXt2ID0+IHJlc3BvbmQodiA9PT0gJ2FsbG93X2FsbCcpfVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiByZXNwb25kKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxTQUFTQSxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsY0FDRUMsbUJBQW1CLEVBQ25CQyxvQkFBb0IsUUFDZiw2QkFBNkI7QUFDcEMsU0FBU0MsbUJBQW1CLFFBQVEsNkJBQTZCO0FBQ2pFLE9BQU9DLE9BQU8sTUFBTSxTQUFTO0FBQzdCLE9BQU8sS0FBS0MsS0FBSyxNQUFNLE9BQU87QUFDOUIsU0FBU0MsT0FBTyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN6QyxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxpQkFBaUI7QUFDM0MsU0FBU0MsZUFBZSxRQUFRLG1DQUFtQztBQUNuRSxTQUFTQyxNQUFNLFFBQVEsK0JBQStCO0FBQ3RELGNBQWNDLHFCQUFxQixRQUFRLDhCQUE4QjtBQUN6RSxTQUFTQyxNQUFNLFFBQVEsOEJBQThCO0FBQ3JELFNBQVNDLE1BQU0sUUFBUSwrQkFBK0I7QUFFdEQsS0FBS0Msd0JBQXdCLEdBQUc7RUFDOUJDLE9BQU8sRUFBRWYsbUJBQW1CO0VBQzVCZ0IsTUFBTSxFQUFFLENBQUNDLFFBQVEsRUFBRWhCLG9CQUFvQixFQUFFLEdBQUcsSUFBSTtBQUNsRCxDQUFDO0FBRUQsTUFBTWlCLGlCQUFpQixFQUFFakIsb0JBQW9CLEdBQUc7RUFDOUNrQixPQUFPLEVBQUUsRUFBRTtFQUNYQyxNQUFNLEVBQUUsRUFB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