@dollhousemcp/mcp-server 2.0.30 → 2.0.31

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.
@@ -1 +1 @@
1
- {"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;AAqDD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAiBnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1F,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC"}
1
+ {"version":3,"file":"evaluatePermission.d.ts","sourceRoot":"","sources":["../../../src/handlers/mcp-aql/evaluatePermission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACtG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,wEAAwE;AACxE,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,SAAgB,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACpF,SAAgB,QAAQ,EAAE,MAAM,CAAC;gBAG/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,GAAG,eAAe,EACnE,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,OAAO;CAOlB;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,wBAAwB,CAAC;IACjG,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,mBAAmB,CAAC;IAChI,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACrE;AAyDD,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,UAAkC,CAAC;AAiBnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,EAC1F,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiDlC"}
@@ -40,13 +40,16 @@ function formatCursor(decision, reason) {
40
40
  function formatWindsurf(decision, reason) {
41
41
  return withReason({ allowed: decision === 'allow' }, reason);
42
42
  }
43
- /** Codex: explicit PreToolUse payload, maps 'ask' to 'deny' */
43
+ /** Codex PreToolUse currently supports block/deny only; allow is empty stdout. */
44
44
  function formatCodex(decision, reason) {
45
+ if (decision === 'allow') {
46
+ return {};
47
+ }
45
48
  return {
46
49
  hookSpecificOutput: {
47
50
  hookEventName: 'PreToolUse',
48
51
  permissionDecision: decision === 'ask' ? 'deny' : decision,
49
- permissionDecisionReason: reason ?? '',
52
+ ...(reason ? { permissionDecisionReason: reason } : {}),
50
53
  },
51
54
  };
52
55
  }
@@ -147,4 +150,4 @@ export async function evaluatePermission(params, deps) {
147
150
  // Default: allow
148
151
  return formatPermissionResponse('allow', platform, input);
149
152
  }
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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T0FBTyxJQUFJLDBDQUEwQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixPQUFPLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVybWlzc2lvbiBldmFsdWF0aW9uIGZvciBQcmVUb29sVXNlIGhvb2tzIGFjcm9zcyBhbGwgQUkgcGxhdGZvcm1zLlxuICpcbiAqIFByb3ZpZGVzIHRoZSBgZXZhbHVhdGVfcGVybWlzc2lvbmAgTUNQLUFRTCBSRUFEIG9wZXJhdGlvbiwgZW5hYmxpbmdcbiAqIENsYXVkZSBDb2RlLCBDdXJzb3IsIEdlbWluaSBDTEksIFdpbmRzdXJmLCBhbmQgQ29kZXggdG8gdXNlXG4gKiBEb2xsaG91c2VNQ1AgYXMgdGhlaXIgcGVybWlzc2lvbiBldmFsdWF0aW9uIGJhY2tlbmQgdmlhIGhvb2tzLlxuICpcbiAqIFRocmVlLXN0YWdlIGV2YWx1YXRpb24gcGlwZWxpbmU6XG4gKiAxLiBSYXRlIGxpbWl0aW5nIOKAlCBwcmV2ZW50cyBhYnVzZVxuICogMi4gU3RhdGljIHRvb2wgY2xhc3NpZmljYXRpb24g4oCUIGJ1aWx0LWluIGFsbG93L2RlbnkgcnVsZXNcbiAqIDMuIEVsZW1lbnQgcG9saWN5IGV2YWx1YXRpb24g4oCUIGFjdGl2ZSBlbGVtZW50IGdhdGVrZWVwZXIgcG9saWNpZXNcbiAqXG4gKiBSZXR1cm5zIHBsYXRmb3JtLXNwZWNpZmljIHJlc3BvbnNlIGZvcm1hdHMgc28gZWFjaCBwbGF0Zm9ybSdzIGhvb2tcbiAqIHNjcmlwdCByZWNlaXZlcyB0aGUgSlNPTiBzaGFwZSBpdCBleHBlY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdCwgQ2xpVG9vbFBvbGljeVJlc3VsdCB9IGZyb20gJy4vcG9saWNpZXMvVG9vbENsYXNzaWZpY2F0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aXZlRWxlbWVudCB9IGZyb20gJy4vcG9saWNpZXMvRWxlbWVudFBvbGljaWVzLmpzJztcblxuLyoqIEVycm9yIHRocm93biB3aGVuIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBmYWlscyBhdCBhIHNwZWNpZmljIHN0YWdlICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiAncmF0ZV9saW1pdCcgfCAnY2xhc3NpZmljYXRpb24nIHwgJ3BvbGljeScgfCAnZWxlbWVudF9mZXRjaCc7XG4gIHB1YmxpYyByZWFkb25seSB0b29sTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnLFxuICAgIHRvb2xOYW1lOiBzdHJpbmcsXG4gICAgY2F1c2U/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSA/IHsgY2F1c2UgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1Blcm1pc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgIHRoaXMuc3RhZ2UgPSBzdGFnZTtcbiAgICB0aGlzLnRvb2xOYW1lID0gdG9vbE5hbWU7XG4gIH1cbn1cblxuLyoqIERlcGVuZGVuY2llcyBpbmplY3RlZCBmcm9tIE1DUEFRTEhhbmRsZXIgKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyB7XG4gIHBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgY2xhc3NpZnlUb29sOiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gVG9vbENsYXNzaWZpY2F0aW9uUmVzdWx0O1xuICBldmFsdWF0ZUNsaVRvb2xQb2xpY3k6ICh0b29sTmFtZTogc3RyaW5nLCB0b29sSW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdKSA9PiBDbGlUb29sUG9saWN5UmVzdWx0O1xuICBnZXRBY3RpdmVFbGVtZW50czogKHNlc3Npb25JZD86IHN0cmluZykgPT4gUHJvbWlzZTxBY3RpdmVFbGVtZW50W10+O1xufVxuXG4vKiogT3B0aW9uYWwgcmVhc29uIGZpZWxkLCBvbmx5IGluY2x1ZGVkIHdoZW4gcmVhc29uIGlzIHByb3ZpZGVkICovXG5mdW5jdGlvbiB3aXRoUmVhc29uKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlYXNvbj86IHN0cmluZywga2V5ID0gJ3JlYXNvbicpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiByZWFzb24gPyB7IC4uLm9iaiwgW2tleV06IHJlYXNvbiB9IDogb2JqO1xufVxuXG4vKiogR2VtaW5pOiBtYXBzICdhc2snIHRvICdkZW55JyAobm8gaW50ZXJhY3RpdmUgc3VwcG9ydCkgKi9cbmZ1bmN0aW9uIGZvcm1hdEdlbWluaShkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgZGVjaXNpb246IGRlY2lzaW9uID09PSAnYXNrJyA/ICdkZW55JyA6IGRlY2lzaW9uIH0sIHJlYXNvbik7XG59XG5cbi8qKiBDdXJzb3I6IHVzZXMgJ3Blcm1pc3Npb24nIGZpZWxkIGluc3RlYWQgb2YgJ2RlY2lzaW9uJyAqL1xuZnVuY3Rpb24gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBwZXJtaXNzaW9uOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogV2luZHN1cmY6IHVzZXMgYm9vbGVhbiAnYWxsb3dlZCcgZmllbGQgKi9cbmZ1bmN0aW9uIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHdpdGhSZWFzb24oeyBhbGxvd2VkOiBkZWNpc2lvbiA9PT0gJ2FsbG93JyB9LCByZWFzb24pO1xufVxuXG4vKiogQ29kZXg6IGV4cGxpY2l0IFByZVRvb2xVc2UgcGF5bG9hZCwgbWFwcyAnYXNrJyB0byAnZGVueScgKi9cbmZ1bmN0aW9uIGZvcm1hdENvZGV4KGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBob29rU3BlY2lmaWNPdXRwdXQ6IHtcbiAgICAgIGhvb2tFdmVudE5hbWU6ICdQcmVUb29sVXNlJyxcbiAgICAgIHBlcm1pc3Npb25EZWNpc2lvbjogZGVjaXNpb24gPT09ICdhc2snID8gJ2RlbnknIDogZGVjaXNpb24sXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb25SZWFzb246IHJlYXNvbiA/PyAnJyxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ2xhdWRlIENvZGUgKGRlZmF1bHQpOiB1c2VzIGhvb2tTcGVjaWZpY091dHB1dC5wZXJtaXNzaW9uRGVjaXNpb24gZm9yIFByZVRvb2xVc2UgKi9cbmZ1bmN0aW9uIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDogd2l0aFJlYXNvbih7XG4gICAgICBob29rRXZlbnROYW1lOiAnUHJlVG9vbFVzZScsXG4gICAgICBwZXJtaXNzaW9uRGVjaXNpb246IGRlY2lzaW9uLFxuICAgIH0sIHJlYXNvbiwgJ3Blcm1pc3Npb25EZWNpc2lvblJlYXNvbicpLFxuICB9O1xufVxuXG4vKiogUGxhdGZvcm0gZm9ybWF0dGVyIGxvb2t1cCAqL1xuY29uc3QgcGxhdGZvcm1Gb3JtYXR0ZXJzOiBSZWNvcmQ8c3RyaW5nLCAoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIGdlbWluaTogZm9ybWF0R2VtaW5pLFxuICBjdXJzb3I6IGZvcm1hdEN1cnNvcixcbiAgd2luZHN1cmY6IGZvcm1hdFdpbmRzdXJmLFxuICBjb2RleDogZm9ybWF0Q29kZXgsXG4gIHZzY29kZTogZm9ybWF0Q2xhdWRlQ29kZSxcbiAgY2xhdWRlX2NvZGU6IGZvcm1hdENsYXVkZUNvZGUsXG59O1xuXG4vKiogS25vd24gcGxhdGZvcm0gaWRlbnRpZmllcnMgKi9cbmV4cG9ydCBjb25zdCBTVVBQT1JURURfUExBVEZPUk1TID0gT2JqZWN0LmtleXMocGxhdGZvcm1Gb3JtYXR0ZXJzKTtcblxuZnVuY3Rpb24gd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtOiBzdHJpbmcpOiB2b2lkIHtcbiAgdm9pZCBpbXBvcnQoJy4uLy4uL3V0aWxzL2xvZ2dlci5qcycpXG4gICAgLnRoZW4oKHsgbG9nZ2VyIH0pID0+IHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gVW5rbm93biBwbGF0Zm9ybSBcIiR7cGxhdGZvcm19XCIsIGRlZmF1bHRpbmcgdG8gY2xhdWRlX2NvZGUgZm9ybWF0LiBTdXBwb3J0ZWQ6ICR7U1VQUE9SVEVEX1BMQVRGT1JNUy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2V2YWx1YXRlUGVybWlzc2lvbl0gRmFpbGVkIHRvIGxvYWQgbG9nZ2VyIHdoaWxlIGhhbmRsaW5nIHVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLmAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgcGVybWlzc2lvbiBldmFsdWF0aW9uIHJlc3BvbnNlIGZvciBwbGF0Zm9ybS1zcGVjaWZpYyBob29rIHNjcmlwdHMuXG4gKiBFYWNoIHBsYXRmb3JtIGV4cGVjdHMgYSBkaWZmZXJlbnQgSlNPTiBzaGFwZSBmcm9tIGl0cyBob29rIHJlc3BvbnNlLlxuICpcbiAqIFVua25vd24gcGxhdGZvcm1zIGRlZmF1bHQgdG8gY2xhdWRlX2NvZGUgZm9ybWF0IHdpdGggYSB3YXJuaW5nIGxvZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZShcbiAgZGVjaXNpb246ICdhbGxvdycgfCAnZGVueScgfCAnYXNrJyxcbiAgcGxhdGZvcm06IHN0cmluZyxcbiAgX2lucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgcmVhc29uPzogc3RyaW5nLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgY2FzZSAnZ2VtaW5pJzogcmV0dXJuIGZvcm1hdEdlbWluaShkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjdXJzb3InOiByZXR1cm4gZm9ybWF0Q3Vyc29yKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ3dpbmRzdXJmJzogcmV0dXJuIGZvcm1hdFdpbmRzdXJmKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NvZGV4JzogcmV0dXJuIGZvcm1hdENvZGV4KGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGNhc2UgJ2NsYXVkZV9jb2RlJzogcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEltcG9ydCBsYXppbHkgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCBtb2R1bGUgbG9hZCB0aW1lXG4gICAgICB3YXJuT25Vbmtub3duUGxhdGZvcm0ocGxhdGZvcm0pO1xuICAgICAgcmV0dXJuIGZvcm1hdENsYXVkZUNvZGUoZGVjaXNpb24sIHJlYXNvbik7XG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZSBhIENMSSBwZXJtaXNzaW9uIHJlcXVlc3QgZm9yIFByZVRvb2xVc2UgaG9va3MuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRvb2wgbmFtZSwgaW5wdXQsIGFuZCB0YXJnZXQgcGxhdGZvcm1cbiAqIEBwYXJhbSBkZXBzIC0gSW5qZWN0ZWQgZGVwZW5kZW5jaWVzIGZyb20gTUNQQVFMSGFuZGxlclxuICogQHJldHVybnMgUGxhdGZvcm0tZm9ybWF0dGVkIHBlcm1pc3Npb24gZGVjaXNpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2YWx1YXRlUGVybWlzc2lvbihcbiAgcGFyYW1zOiB7IHRvb2xfbmFtZT86IHVua25vd247IGlucHV0PzogdW5rbm93bjsgcGxhdGZvcm0/OiB1bmtub3duOyBzZXNzaW9uX2lkPzogdW5rbm93biB9LFxuICBkZXBzOiBFdmFsdWF0ZVBlcm1pc3Npb25EZXBzLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCB0b29sTmFtZSA9IHR5cGVvZiBwYXJhbXMudG9vbF9uYW1lID09PSAnc3RyaW5nJyA/IHBhcmFtcy50b29sX25hbWUgOiAnJztcbiAgY29uc3QgaW5wdXRSYXcgPSBwYXJhbXMuaW5wdXQ7XG4gIGNvbnN0IGlucHV0ID0gKGlucHV0UmF3ICYmIHR5cGVvZiBpbnB1dFJhdyA9PT0gJ29iamVjdCcpXG4gICAgPyBpbnB1dFJhdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIDoge307XG4gIGNvbnN0IHBsYXRmb3JtID0gdHlwZW9mIHBhcmFtcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycgPyBwYXJhbXMucGxhdGZvcm0gOiAnY2xhdWRlX2NvZGUnO1xuICBjb25zdCBzZXNzaW9uSWQgPSB0eXBlb2YgcGFyYW1zLnNlc3Npb25faWQgPT09ICdzdHJpbmcnICYmIHBhcmFtcy5zZXNzaW9uX2lkLnRyaW0oKSAhPT0gJydcbiAgICA/IHBhcmFtcy5zZXNzaW9uX2lkXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgLy8gUmF0ZSBsaW1pdFxuICBjb25zdCByYXRlU3RhdHVzID0gZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jaGVja0xpbWl0KCk7XG4gIGlmICghcmF0ZVN0YXR1cy5hbGxvd2VkKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgJ1JhdGUgbGltaXQgZXhjZWVkZWQnKTtcbiAgfVxuICBkZXBzLnBlcm1pc3Npb25Qcm9tcHRMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuXG4gIC8vIFN0YWdlIDE6IFN0YXRpYyBjbGFzc2lmaWNhdGlvblxuICBjb25zdCBjbGFzc2lmaWNhdGlvbiA9IGRlcHMuY2xhc3NpZnlUb29sKHRvb2xOYW1lLCBpbnB1dCk7XG4gIGlmIChjbGFzc2lmaWNhdGlvbi5iZWhhdmlvciA9PT0gJ2FsbG93Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbiAgfVxuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdkZW55Jykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsIGNsYXNzaWZpY2F0aW9uLnJlYXNvbik7XG4gIH1cblxuICAvLyBTdGFnZSAyOiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uXG4gIGxldCBlbGVtZW50czogQWN0aXZlRWxlbWVudFtdO1xuICB0cnkge1xuICAgIGVsZW1lbnRzID0gYXdhaXQgZGVwcy5nZXRBY3RpdmVFbGVtZW50cyhzZXNzaW9uSWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgUGVybWlzc2lvbkV2YWx1YXRpb25FcnJvcihcbiAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggYWN0aXZlIGVsZW1lbnRzIGZvciBwb2xpY3kgZXZhbHVhdGlvbjogJHtlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycil9YCxcbiAgICAgICdlbGVtZW50X2ZldGNoJywgdG9vbE5hbWUsIGVycixcbiAgICApO1xuICB9XG4gIGNvbnN0IGRlY2lzaW9uID0gZGVwcy5ldmFsdWF0ZUNsaVRvb2xQb2xpY3kodG9vbE5hbWUsIGlucHV0LCBlbGVtZW50cyk7XG5cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBkZWNpc2lvbi5tZXNzYWdlKTtcbiAgfVxuICBpZiAoZGVjaXNpb24uYmVoYXZpb3IgPT09ICdjb25maXJtJykge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FzaycsIHBsYXRmb3JtLCBpbnB1dCxcbiAgICAgIGRlY2lzaW9uLm1lc3NhZ2UgfHwgJ1JlcXVpcmVzIGNvbmZpcm1hdGlvbiBwZXIgZWxlbWVudCBwb2xpY3knKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQ6IGFsbG93XG4gIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2FsbG93JywgcGxhdGZvcm0sIGlucHV0KTtcbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGVQZXJtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hhbmRsZXJzL21jcC1hcWwvZXZhbHVhdGVQZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBTUgsd0VBQXdFO0FBQ3hFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0lBQ2xDLEtBQUssQ0FBK0Q7SUFDcEUsUUFBUSxDQUFTO0lBRWpDLFlBQ0UsT0FBZSxFQUNmLEtBQW1FLEVBQ25FLFFBQWdCLEVBQ2hCLEtBQWU7UUFFZixLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFVRCxtRUFBbUU7QUFDbkUsU0FBUyxVQUFVLENBQUMsR0FBNEIsRUFBRSxNQUFlLEVBQUUsR0FBRyxHQUFHLFFBQVE7SUFDL0UsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2xELENBQUM7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxNQUFlO0lBQ3JELE9BQU8sVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFT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O0lBQzdFLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDcEMsT0FBTyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFDcEQsUUFBUSxDQUFDLE9BQU8sSUFBSSwwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcm1pc3Npb24gZXZhbHVhdGlvbiBmb3IgUHJlVG9vbFVzZSBob29rcyBhY3Jvc3MgYWxsIEFJIHBsYXRmb3Jtcy5cbiAqXG4gKiBQcm92aWRlcyB0aGUgYGV2YWx1YXRlX3Blcm1pc3Npb25gIE1DUC1BUUwgUkVBRCBvcGVyYXRpb24sIGVuYWJsaW5nXG4gKiBDbGF1ZGUgQ29kZSwgQ3Vyc29yLCBHZW1pbmkgQ0xJLCBXaW5kc3VyZiwgYW5kIENvZGV4IHRvIHVzZVxuICogRG9sbGhvdXNlTUNQIGFzIHRoZWlyIHBlcm1pc3Npb24gZXZhbHVhdGlvbiBiYWNrZW5kIHZpYSBob29rcy5cbiAqXG4gKiBUaHJlZS1zdGFnZSBldmFsdWF0aW9uIHBpcGVsaW5lOlxuICogMS4gUmF0ZSBsaW1pdGluZyDigJQgcHJldmVudHMgYWJ1c2VcbiAqIDIuIFN0YXRpYyB0b29sIGNsYXNzaWZpY2F0aW9uIOKAlCBidWlsdC1pbiBhbGxvdy9kZW55IHJ1bGVzXG4gKiAzLiBFbGVtZW50IHBvbGljeSBldmFsdWF0aW9uIOKAlCBhY3RpdmUgZWxlbWVudCBnYXRla2VlcGVyIHBvbGljaWVzXG4gKlxuICogUmV0dXJucyBwbGF0Zm9ybS1zcGVjaWZpYyByZXNwb25zZSBmb3JtYXRzIHNvIGVhY2ggcGxhdGZvcm0ncyBob29rXG4gKiBzY3JpcHQgcmVjZWl2ZXMgdGhlIEpTT04gc2hhcGUgaXQgZXhwZWN0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBUb29sQ2xhc3NpZmljYXRpb25SZXN1bHQsIENsaVRvb2xQb2xpY3lSZXN1bHQgfSBmcm9tICcuL3BvbGljaWVzL1Rvb2xDbGFzc2lmaWNhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEFjdGl2ZUVsZW1lbnQgfSBmcm9tICcuL3BvbGljaWVzL0VsZW1lbnRQb2xpY2llcy5qcyc7XG5cbi8qKiBFcnJvciB0aHJvd24gd2hlbiBwZXJtaXNzaW9uIGV2YWx1YXRpb24gZmFpbHMgYXQgYSBzcGVjaWZpYyBzdGFnZSAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBzdGFnZTogJ3JhdGVfbGltaXQnIHwgJ2NsYXNzaWZpY2F0aW9uJyB8ICdwb2xpY3knIHwgJ2VsZW1lbnRfZmV0Y2gnO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9vbE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhZ2U6ICdyYXRlX2xpbWl0JyB8ICdjbGFzc2lmaWNhdGlvbicgfCAncG9saWN5JyB8ICdlbGVtZW50X2ZldGNoJyxcbiAgICB0b29sTmFtZTogc3RyaW5nLFxuICAgIGNhdXNlPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY2F1c2UgPyB7IGNhdXNlIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZSA9ICdQZXJtaXNzaW9uRXZhbHVhdGlvbkVycm9yJztcbiAgICB0aGlzLnN0YWdlID0gc3RhZ2U7XG4gICAgdGhpcy50b29sTmFtZSA9IHRvb2xOYW1lO1xuICB9XG59XG5cbi8qKiBEZXBlbmRlbmNpZXMgaW5qZWN0ZWQgZnJvbSBNQ1BBUUxIYW5kbGVyICovXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlUGVybWlzc2lvbkRlcHMge1xuICBwZXJtaXNzaW9uUHJvbXB0TGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIGNsYXNzaWZ5VG9vbDogKHRvb2xOYW1lOiBzdHJpbmcsIHRvb2xJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFRvb2xDbGFzc2lmaWNhdGlvblJlc3VsdDtcbiAgZXZhbHVhdGVDbGlUb29sUG9saWN5OiAodG9vbE5hbWU6IHN0cmluZywgdG9vbElucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXSkgPT4gQ2xpVG9vbFBvbGljeVJlc3VsdDtcbiAgZ2V0QWN0aXZlRWxlbWVudHM6IChzZXNzaW9uSWQ/OiBzdHJpbmcpID0+IFByb21pc2U8QWN0aXZlRWxlbWVudFtdPjtcbn1cblxuLyoqIE9wdGlvbmFsIHJlYXNvbiBmaWVsZCwgb25seSBpbmNsdWRlZCB3aGVuIHJlYXNvbiBpcyBwcm92aWRlZCAqL1xuZnVuY3Rpb24gd2l0aFJlYXNvbihvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByZWFzb24/OiBzdHJpbmcsIGtleSA9ICdyZWFzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gcmVhc29uID8geyAuLi5vYmosIFtrZXldOiByZWFzb24gfSA6IG9iajtcbn1cblxuLyoqIEdlbWluaTogbWFwcyAnYXNrJyB0byAnZGVueScgKG5vIGludGVyYWN0aXZlIHN1cHBvcnQpICovXG5mdW5jdGlvbiBmb3JtYXRHZW1pbmkoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gd2l0aFJlYXNvbih7IGRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbiB9LCByZWFzb24pO1xufVxuXG4vKiogQ3Vyc29yOiB1c2VzICdwZXJtaXNzaW9uJyBmaWVsZCBpbnN0ZWFkIG9mICdkZWNpc2lvbicgKi9cbmZ1bmN0aW9uIGZvcm1hdEN1cnNvcihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgcGVybWlzc2lvbjogZGVjaXNpb24gfSwgcmVhc29uKTtcbn1cblxuLyoqIFdpbmRzdXJmOiB1c2VzIGJvb2xlYW4gJ2FsbG93ZWQnIGZpZWxkICovXG5mdW5jdGlvbiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbjogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB3aXRoUmVhc29uKHsgYWxsb3dlZDogZGVjaXNpb24gPT09ICdhbGxvdycgfSwgcmVhc29uKTtcbn1cblxuLyoqIENvZGV4IFByZVRvb2xVc2UgY3VycmVudGx5IHN1cHBvcnRzIGJsb2NrL2Rlbnkgb25seTsgYWxsb3cgaXMgZW1wdHkgc3Rkb3V0LiAqL1xuZnVuY3Rpb24gZm9ybWF0Q29kZXgoZGVjaXNpb246IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoZGVjaXNpb24gPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGhvb2tTcGVjaWZpY091dHB1dDoge1xuICAgICAgaG9va0V2ZW50TmFtZTogJ1ByZVRvb2xVc2UnLFxuICAgICAgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbiA9PT0gJ2FzaycgPyAnZGVueScgOiBkZWNpc2lvbixcbiAgICAgIC4uLihyZWFzb24gPyB7IHBlcm1pc3Npb25EZWNpc2lvblJlYXNvbjogcmVhc29uIH0gOiB7fSksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIENsYXVkZSBDb2RlIChkZWZhdWx0KTogdXNlcyBob29rU3BlY2lmaWNPdXRwdXQucGVybWlzc2lvbkRlY2lzaW9uIGZvciBQcmVUb29sVXNlICovXG5mdW5jdGlvbiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBob29rU3BlY2lmaWNPdXRwdXQ6IHdpdGhSZWFzb24oe1xuICAgICAgaG9va0V2ZW50TmFtZTogJ1ByZVRvb2xVc2UnLFxuICAgICAgcGVybWlzc2lvbkRlY2lzaW9uOiBkZWNpc2lvbixcbiAgICB9LCByZWFzb24sICdwZXJtaXNzaW9uRGVjaXNpb25SZWFzb24nKSxcbiAgfTtcbn1cblxuLyoqIFBsYXRmb3JtIGZvcm1hdHRlciBsb29rdXAgKi9cbmNvbnN0IHBsYXRmb3JtRm9ybWF0dGVyczogUmVjb3JkPHN0cmluZywgKGRlY2lzaW9uOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge1xuICBnZW1pbmk6IGZvcm1hdEdlbWluaSxcbiAgY3Vyc29yOiBmb3JtYXRDdXJzb3IsXG4gIHdpbmRzdXJmOiBmb3JtYXRXaW5kc3VyZixcbiAgY29kZXg6IGZvcm1hdENvZGV4LFxuICB2c2NvZGU6IGZvcm1hdENsYXVkZUNvZGUsXG4gIGNsYXVkZV9jb2RlOiBmb3JtYXRDbGF1ZGVDb2RlLFxufTtcblxuLyoqIEtub3duIHBsYXRmb3JtIGlkZW50aWZpZXJzICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX1BMQVRGT1JNUyA9IE9iamVjdC5rZXlzKHBsYXRmb3JtRm9ybWF0dGVycyk7XG5cbmZ1bmN0aW9uIHdhcm5PblVua25vd25QbGF0Zm9ybShwbGF0Zm9ybTogc3RyaW5nKTogdm9pZCB7XG4gIHZvaWQgaW1wb3J0KCcuLi8uLi91dGlscy9sb2dnZXIuanMnKVxuICAgIC50aGVuKCh7IGxvZ2dlciB9KSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIFVua25vd24gcGxhdGZvcm0gXCIke3BsYXRmb3JtfVwiLCBkZWZhdWx0aW5nIHRvIGNsYXVkZV9jb2RlIGZvcm1hdC4gU3VwcG9ydGVkOiAke1NVUFBPUlRFRF9QTEFURk9STVMuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYFtldmFsdWF0ZVBlcm1pc3Npb25dIEZhaWxlZCB0byBsb2FkIGxvZ2dlciB3aGlsZSBoYW5kbGluZyB1bmtub3duIHBsYXRmb3JtIFwiJHtwbGF0Zm9ybX1cIi5gLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRm9ybWF0IHBlcm1pc3Npb24gZXZhbHVhdGlvbiByZXNwb25zZSBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgaG9vayBzY3JpcHRzLlxuICogRWFjaCBwbGF0Zm9ybSBleHBlY3RzIGEgZGlmZmVyZW50IEpTT04gc2hhcGUgZnJvbSBpdHMgaG9vayByZXNwb25zZS5cbiAqXG4gKiBVbmtub3duIHBsYXRmb3JtcyBkZWZhdWx0IHRvIGNsYXVkZV9jb2RlIGZvcm1hdCB3aXRoIGEgd2FybmluZyBsb2cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoXG4gIGRlY2lzaW9uOiAnYWxsb3cnIHwgJ2RlbnknIHwgJ2FzaycsXG4gIHBsYXRmb3JtOiBzdHJpbmcsXG4gIF9pbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHJlYXNvbj86IHN0cmluZyxcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgIGNhc2UgJ2dlbWluaSc6IHJldHVybiBmb3JtYXRHZW1pbmkoZGVjaXNpb24sIHJlYXNvbik7XG4gICAgY2FzZSAnY3Vyc29yJzogcmV0dXJuIGZvcm1hdEN1cnNvcihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICd3aW5kc3VyZic6IHJldHVybiBmb3JtYXRXaW5kc3VyZihkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjb2RleCc6IHJldHVybiBmb3JtYXRDb2RleChkZWNpc2lvbiwgcmVhc29uKTtcbiAgICBjYXNlICdjbGF1ZGVfY29kZSc6IHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBJbXBvcnQgbGF6aWx5IHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY3kgYXQgbW9kdWxlIGxvYWQgdGltZVxuICAgICAgd2Fybk9uVW5rbm93blBsYXRmb3JtKHBsYXRmb3JtKTtcbiAgICAgIHJldHVybiBmb3JtYXRDbGF1ZGVDb2RlKGRlY2lzaW9uLCByZWFzb24pO1xuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGUgYSBDTEkgcGVybWlzc2lvbiByZXF1ZXN0IGZvciBQcmVUb29sVXNlIGhvb2tzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUb29sIG5hbWUsIGlucHV0LCBhbmQgdGFyZ2V0IHBsYXRmb3JtXG4gKiBAcGFyYW0gZGVwcyAtIEluamVjdGVkIGRlcGVuZGVuY2llcyBmcm9tIE1DUEFRTEhhbmRsZXJcbiAqIEByZXR1cm5zIFBsYXRmb3JtLWZvcm1hdHRlZCBwZXJtaXNzaW9uIGRlY2lzaW9uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZVBlcm1pc3Npb24oXG4gIHBhcmFtczogeyB0b29sX25hbWU/OiB1bmtub3duOyBpbnB1dD86IHVua25vd247IHBsYXRmb3JtPzogdW5rbm93bjsgc2Vzc2lvbl9pZD86IHVua25vd24gfSxcbiAgZGVwczogRXZhbHVhdGVQZXJtaXNzaW9uRGVwcyxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgdG9vbE5hbWUgPSB0eXBlb2YgcGFyYW1zLnRvb2xfbmFtZSA9PT0gJ3N0cmluZycgPyBwYXJhbXMudG9vbF9uYW1lIDogJyc7XG4gIGNvbnN0IGlucHV0UmF3ID0gcGFyYW1zLmlucHV0O1xuICBjb25zdCBpbnB1dCA9IChpbnB1dFJhdyAmJiB0eXBlb2YgaW5wdXRSYXcgPT09ICdvYmplY3QnKVxuICAgID8gaW5wdXRSYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICA6IHt9O1xuICBjb25zdCBwbGF0Zm9ybSA9IHR5cGVvZiBwYXJhbXMucGxhdGZvcm0gPT09ICdzdHJpbmcnID8gcGFyYW1zLnBsYXRmb3JtIDogJ2NsYXVkZV9jb2RlJztcbiAgY29uc3Qgc2Vzc2lvbklkID0gdHlwZW9mIHBhcmFtcy5zZXNzaW9uX2lkID09PSAnc3RyaW5nJyAmJiBwYXJhbXMuc2Vzc2lvbl9pZC50cmltKCkgIT09ICcnXG4gICAgPyBwYXJhbXMuc2Vzc2lvbl9pZFxuICAgIDogdW5kZWZpbmVkO1xuXG4gIC8vIFJhdGUgbGltaXRcbiAgY29uc3QgcmF0ZVN0YXR1cyA9IGRlcHMucGVybWlzc2lvblByb21wdExpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICBpZiAoIXJhdGVTdGF0dXMuYWxsb3dlZCkge1xuICAgIHJldHVybiBmb3JtYXRQZXJtaXNzaW9uUmVzcG9uc2UoJ2RlbnknLCBwbGF0Zm9ybSwgaW5wdXQsICdSYXRlIGxpbWl0IGV4Y2VlZGVkJyk7XG4gIH1cbiAgZGVwcy5wZXJtaXNzaW9uUHJvbXB0TGltaXRlci5jb25zdW1lVG9rZW4oKTtcblxuICAvLyBTdGFnZSAxOiBTdGF0aWMgY2xhc3NpZmljYXRpb25cbiAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBkZXBzLmNsYXNzaWZ5VG9vbCh0b29sTmFtZSwgaW5wdXQpO1xuICBpZiAoY2xhc3NpZmljYXRpb24uYmVoYXZpb3IgPT09ICdhbGxvdycpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG4gIH1cbiAgaWYgKGNsYXNzaWZpY2F0aW9uLmJlaGF2aW9yID09PSAnZGVueScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdkZW55JywgcGxhdGZvcm0sIGlucHV0LCBjbGFzc2lmaWNhdGlvbi5yZWFzb24pO1xuICB9XG5cbiAgLy8gU3RhZ2UgMjogRWxlbWVudCBwb2xpY3kgZXZhbHVhdGlvblxuICBsZXQgZWxlbWVudHM6IEFjdGl2ZUVsZW1lbnRbXTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50cyA9IGF3YWl0IGRlcHMuZ2V0QWN0aXZlRWxlbWVudHMoc2Vzc2lvbklkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IFBlcm1pc3Npb25FdmFsdWF0aW9uRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIGZldGNoIGFjdGl2ZSBlbGVtZW50cyBmb3IgcG9saWN5IGV2YWx1YXRpb246ICR7ZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpfWAsXG4gICAgICAnZWxlbWVudF9mZXRjaCcsIHRvb2xOYW1lLCBlcnIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBkZWNpc2lvbiA9IGRlcHMuZXZhbHVhdGVDbGlUb29sUG9saWN5KHRvb2xOYW1lLCBpbnB1dCwgZWxlbWVudHMpO1xuXG4gIGlmIChkZWNpc2lvbi5iZWhhdmlvciA9PT0gJ2RlbnknKSB7XG4gICAgcmV0dXJuIGZvcm1hdFBlcm1pc3Npb25SZXNwb25zZSgnZGVueScsIHBsYXRmb3JtLCBpbnB1dCwgZGVjaXNpb24ubWVzc2FnZSk7XG4gIH1cbiAgaWYgKGRlY2lzaW9uLmJlaGF2aW9yID09PSAnY29uZmlybScpIHtcbiAgICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhc2snLCBwbGF0Zm9ybSwgaW5wdXQsXG4gICAgICBkZWNpc2lvbi5tZXNzYWdlIHx8ICdSZXF1aXJlcyBjb25maXJtYXRpb24gcGVyIGVsZW1lbnQgcG9saWN5Jyk7XG4gIH1cblxuICAvLyBEZWZhdWx0OiBhbGxvd1xuICByZXR1cm4gZm9ybWF0UGVybWlzc2lvblJlc3BvbnNlKCdhbGxvdycsIHBsYXRmb3JtLCBpbnB1dCk7XG59XG4iXX0=
@@ -10,7 +10,7 @@
10
10
  */
11
11
  import { IFileOperationsService } from './FileOperationsService.js';
12
12
  import type { StartupTimer, StartupReport } from '../telemetry/StartupTimer.js';
13
- import { type PermissionHookHealthSummary, type PermissionHookStartupRepairSummary } from '../utils/permissionHooks.js';
13
+ import { type PermissionHookDiagnosticRecord, type PermissionHookHealthSummary, type PermissionHookStartupRepairSummary } from '../utils/permissionHooks.js';
14
14
  export interface BuildInfo {
15
15
  sessionId: string;
16
16
  runtimeSessionId: string;
@@ -51,6 +51,8 @@ export interface BuildInfo {
51
51
  currentHosts: string[];
52
52
  repairedHosts: string[];
53
53
  needsRepairHosts: string[];
54
+ diagnosticsPath: string;
55
+ lastDiagnostic: PermissionHookDiagnosticRecord | null;
54
56
  lastStartupRepair: PermissionHookStartupRepairSummary | null;
55
57
  };
56
58
  /** Issue #706: Startup timing and readiness status. */
@@ -1 +1 @@
1
- {"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACxC,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;KACjC,CAAC;IACF,WAAW,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,MAAM,EAAE,2BAA2B,CAAC;QACpC,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,iBAAiB,EAAE,kCAAkC,GAAG,IAAI,CAAC;KAC9D,CAAC;IACF,uDAAuD;IACvD,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,aAAa,CAAC;KACjC,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,qEAAqE;IACrE,OAAO,CAAC,YAAY,CAA6B;IACjD,2DAA2D;IAC3D,OAAO,CAAC,oBAAoB,CAAgC;gBAEhD,cAAc,EAAE,sBAAsB;IAKlD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI;IAIrD;;;;;;;OAOG;IACU,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IA2F/C;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IA+H/C;;;OAGG;YACW,UAAU;IAcxB;;;OAGG;YACW,aAAa;IA+B3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAIrB"}
1
+ {"version":3,"file":"BuildInfoService.d.ts","sourceRoot":"","sources":["../../src/services/BuildInfoService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACxC,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;KACjC,CAAC;IACF,WAAW,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE;QAChB,MAAM,EAAE,2BAA2B,CAAC;QACpC,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,8BAA8B,GAAG,IAAI,CAAC;QACtD,iBAAiB,EAAE,kCAAkC,GAAG,IAAI,CAAC;KAC9D,CAAC;IACF,uDAAuD;IACvD,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,aAAa,CAAC;KACjC,CAAC;CACH;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAO;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,qEAAqE;IACrE,OAAO,CAAC,YAAY,CAA6B;IACjD,2DAA2D;IAC3D,OAAO,CAAC,oBAAoB,CAAgC;gBAEhD,cAAc,EAAE,sBAAsB;IAKlD;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,OAAO,GAAG,IAAI;IAIrD;;;;;;;OAOG;IACU,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;IAuG/C;;;;OAIG;IACI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAoJ/C;;;OAGG;YACW,UAAU;IAcxB;;;OAGG;YACW,aAAa;IA+B3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAIrB"}
@@ -62,18 +62,27 @@ export class BuildInfoService {
62
62
  : { isDocker: false, info: undefined };
63
63
  const permissionHookInfo = results[2].status === 'fulfilled'
64
64
  ? results[2].value
65
- : { installedHosts: [], currentHosts: [], repairedHosts: [], needsRepairHosts: [], lastStartupRepair: null };
65
+ : {
66
+ installedHosts: [],
67
+ currentHosts: [],
68
+ repairedHosts: [],
69
+ needsRepairHosts: [],
70
+ diagnosticsPath: '',
71
+ lastDiagnostic: null,
72
+ lastStartupRepair: null,
73
+ };
66
74
  const permissionHookHealth = summarizePermissionHookHealth(permissionHookInfo);
75
+ const formatSettledReason = (reason) => (reason instanceof Error ? `${reason.name}: ${reason.message}` : String(reason));
67
76
  // Log any failures for diagnostics
68
77
  const failures = [];
69
78
  if (results[0].status === 'rejected') {
70
- failures.push(`git info: ${results[0].reason}`);
79
+ failures.push(`git info: ${formatSettledReason(results[0].reason)}`);
71
80
  }
72
81
  if (results[1].status === 'rejected') {
73
- failures.push(`docker info: ${results[1].reason}`);
82
+ failures.push(`docker info: ${formatSettledReason(results[1].reason)}`);
74
83
  }
75
84
  if (results[2].status === 'rejected') {
76
- failures.push(`permission hook audit: ${results[2].reason}`);
85
+ failures.push(`permission hook audit: ${formatSettledReason(results[2].reason)}`);
77
86
  }
78
87
  if (failures.length > 0) {
79
88
  logger.debug(`Build info collection had ${failures.length} failure(s): ${failures.join('; ')}`);
@@ -206,9 +215,22 @@ export class BuildInfoService {
206
215
  .join('; ')
207
216
  : '';
208
217
  lines.push('', '## 🔐 Permission Hooks', `- **Health**: ${info.permissionHooks.health.status.toUpperCase()} — ${info.permissionHooks.health.message}`, `- **Installed Hosts**: ${installedHosts}`, `- **Current Assets**: ${currentHosts}`, `- **Needs Repair**: ${needsRepairHosts}`);
218
+ if (info.permissionHooks.diagnosticsPath) {
219
+ lines.push(`- **Diagnostics Log**: ${info.permissionHooks.diagnosticsPath}`);
220
+ }
209
221
  if (lastStartupRepair) {
210
222
  lines.push(`- **Last Startup Audit**: ${lastStartupRepair.completedAt} (${lastStartupRepair.durationMs}ms)`, `- **Startup Repairs Applied**: ${lastStartupRepair.repairedCount}`, `- **Startup Repair Issues**: ${startupRepairIssues || 'None'}`);
211
223
  }
224
+ if (info.permissionHooks.lastDiagnostic) {
225
+ const lastDiagnostic = info.permissionHooks.lastDiagnostic;
226
+ const diagnosticOutcome = lastDiagnostic.outcome
227
+ ? `${lastDiagnostic.event} / ${lastDiagnostic.outcome}`
228
+ : lastDiagnostic.event;
229
+ lines.push(`- **Last Diagnostic Event**: ${lastDiagnostic.timestamp} (${diagnosticOutcome})`, `- **Last Diagnostic Stage**: ${lastDiagnostic.stage}`, `- **Last Diagnostic Input Bytes**: ${lastDiagnostic.rawInputLength ?? 0}`, `- **Last Diagnostic Normalized Bytes**: ${lastDiagnostic.normalizedResponseLength ?? 0}`, `- **Last Diagnostic Emitted Bytes**: ${lastDiagnostic.emittedResponseLength ?? 0}`);
230
+ if (lastDiagnostic.reason) {
231
+ lines.push(`- **Last Diagnostic Reason**: ${lastDiagnostic.reason}`);
232
+ }
233
+ }
212
234
  }
213
235
  // Issue #706: Startup timing
214
236
  if (info.startup) {
@@ -305,4 +327,4 @@ export class BuildInfoService {
305
327
  return `${mb.toFixed(1)} MB`;
306
328
  }
307
329
  }
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXFEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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QUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG59IGZyb20gJy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRJbmZvIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTZXNzaW9uSWQ6IHN0cmluZztcbiAgc2Vzc2lvblNvdXJjZTogJ2VudicgfCAnZGVyaXZlZCc7XG4gIHBhY2thZ2U6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICBidWlsZDoge1xuICAgIHRpbWVzdGFtcD86IHN0cmluZztcbiAgICB0eXBlOiAnZ2l0JyB8ICducG0nIHwgJ3Vua25vd24nO1xuICAgIGdpdENvbW1pdD86IHN0cmluZztcbiAgICBnaXRCcmFuY2g/OiBzdHJpbmc7XG4gIH07XG4gIHJ1bnRpbWU6IHtcbiAgICBub2RlVmVyc2lvbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIHVwdGltZTogbnVtYmVyO1xuICAgIG1lbW9yeVVzYWdlOiBOb2RlSlMuTWVtb3J5VXNhZ2U7XG4gIH07XG4gIGVudmlyb25tZW50OiB7XG4gICAgbm9kZUVudj86IHN0cmluZztcbiAgICBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XG4gICAgaXNEZXZlbG9wbWVudDogYm9vbGVhbjtcbiAgICBpc0RlYnVnOiBib29sZWFuO1xuICAgIGlzRG9ja2VyOiBib29sZWFuO1xuICAgIGRvY2tlckluZm8/OiBzdHJpbmc7XG4gIH07XG4gIHNlcnZlcjoge1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtY3BDb25uZWN0aW9uOiBib29sZWFuO1xuICB9O1xuICBwZXJtaXNzaW9uSG9va3M/OiB7XG4gICAgaGVhbHRoOiBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnk7XG4gICAgaW5zdGFsbGVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIGN1cnJlbnRIb3N0czogc3RyaW5nW107XG4gICAgcmVwYWlyZWRIb3N0czogc3RyaW5nW107XG4gICAgbmVlZHNSZXBhaXJIb3N0czogc3RyaW5nW107XG4gICAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xuICB9O1xuICAvKiogSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzcyBzdGF0dXMuICovXG4gIHN0YXJ0dXA/OiB7XG4gICAgc3RhdHVzOiAncmVhZHknIHwgJ2luaXRpYWxpemluZyc7XG4gICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBib29sZWFuO1xuICAgIHVwdGltZU1zOiBudW1iZXI7XG4gICAgc3RhcnR1cFRpbWluZ01zPzogU3RhcnR1cFJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSW5mb1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogRGF0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgLyoqIElzc3VlICM3MDY6IE9wdGlvbmFsIHN0YXJ0dXAgdGltZXIgZm9yIHRpbWluZyBpbnN0cnVtZW50YXRpb24uICovXG4gIHByaXZhdGUgc3RhcnR1cFRpbWVyOiBTdGFydHVwVGltZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IENhbGxiYWNrIHRvIGNoZWNrIGRlZmVycmVkIHNldHVwIHN0YXR1cy4gKi9cbiAgcHJpdmF0ZSBkZWZlcnJlZFNldHVwQ2hlY2tlcjogKCgpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gc3RhcnR1cCBpbnN0cnVtZW50YXRpb24gYWZ0ZXIgREkgaXMgcmVhZHkuXG4gICAqIENhbGxlZCBmcm9tIENvbnRhaW5lciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxuICAgKi9cbiAgc2V0U3RhcnR1cFRpbWVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lciA9IHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gZGVmZXJyZWQgc2V0dXAgc3RhdHVzIGNoZWNrZXIuXG4gICAqL1xuICBzZXREZWZlcnJlZFNldHVwQ2hlY2tlcihjaGVja2VyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA9IGNoZWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXByZWhlbnNpdmUgYnVpbGQgaW5mb3JtYXRpb25cbiAgICogU0VDVVJJVFkgTk9URTogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIG9ubHkgc3lzdGVtLWdlbmVyYXRlZCBkYXRhXG4gICAqIE5vIHVzZXIgaW5wdXQgaXMgaW52b2x2ZWQgLSBhbGwgZGF0YSBjb21lcyBmcm9tIGZpbGVzeXN0ZW0sIGdpdCwgYW5kIE5vZGUuanMgcHJvY2Vzc1xuICAgKlxuICAgKiBVc2VzIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IHBhcnRpYWwgcmVzdWx0cyBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsLFxuICAgKiBwcm92aWRpbmcgbWF4aW11bSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCdWlsZEluZm8oKTogUHJvbWlzZTxCdWlsZEluZm8+IHtcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNvbGxlY3QgYWxsIGF2YWlsYWJsZSBpbmZvLCBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICB0aGlzLmdldEdpdEluZm8oKSxcbiAgICAgIHRoaXMuZ2V0RG9ja2VySW5mbygpLFxuICAgICAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoKSxcbiAgICBdKTtcblxuICAgIC8vIFBhY2thZ2UgaW5mbyBjb21lcyBmcm9tIGJ1aWxkLXRpbWUgZ2VuZXJhdGVkIGNvbnN0YW50c1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiBQQUNLQUdFX05BTUUsIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTiB9O1xuXG4gICAgY29uc3QgZ2l0SW5mbyA9IHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzBdLnZhbHVlXG4gICAgICA6IHsgY29tbWl0OiB1bmRlZmluZWQsIGJyYW5jaDogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBkb2NrZXJJbmZvID0gcmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnXG4gICAgICA/IHJlc3VsdHNbMV0udmFsdWVcbiAgICAgIDogeyBpc0RvY2tlcjogZmFsc2UsIGluZm86IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSW5mbyA9IHJlc3VsdHNbMl0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzJdLnZhbHVlXG4gICAgICA6IHsgaW5zdGFsbGVkSG9zdHM6IFtdLCBjdXJyZW50SG9zdHM6IFtdLCByZXBhaXJlZEhvc3RzOiBbXSwgbmVlZHNSZXBhaXJIb3N0czogW10sIGxhc3RTdGFydHVwUmVwYWlyOiBudWxsIH07XG4gICAgY29uc3QgcGVybWlzc2lvbkhvb2tIZWFsdGggPSBzdW1tYXJpemVQZXJtaXNzaW9uSG9va0hlYWx0aChwZXJtaXNzaW9uSG9va0luZm8pO1xuXG4gICAgLy8gTG9nIGFueSBmYWlsdXJlcyBmb3IgZGlhZ25vc3RpY3NcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVzdWx0c1swXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGdpdCBpbmZvOiAke3Jlc3VsdHNbMF0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1sxXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGRvY2tlciBpbmZvOiAke3Jlc3VsdHNbMV0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1syXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYHBlcm1pc3Npb24gaG9vayBhdWRpdDogJHtyZXN1bHRzWzJdLnJlYXNvbn1gKTtcbiAgICB9XG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBCdWlsZCBpbmZvIGNvbGxlY3Rpb24gaGFkICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpOiAke2ZhaWx1cmVzLmpvaW4oJzsgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGltZXN0YW1wIGNvbWVzIGZyb20gYnVpbGQtdGltZSBnZW5lcmF0ZWQgY29uc3RhbnRzXG4gICAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBCVUlMRF9USU1FU1RBTVA7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBTdGFydHVwIHRpbWluZyBhbmQgcmVhZGluZXNzXG4gICAgY29uc3QgZGVmZXJyZWRDb21wbGV0ZSA9IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPyB0aGlzLmRlZmVycmVkU2V0dXBDaGVja2VyKCkgOiB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0dXBJbmZvOiBCdWlsZEluZm9bJ3N0YXJ0dXAnXSA9IHtcbiAgICAgIHN0YXR1czogZGVmZXJyZWRDb21wbGV0ZSA/ICdyZWFkeScgOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogZGVmZXJyZWRDb21wbGV0ZSxcbiAgICAgIHVwdGltZU1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgc3RhcnR1cFRpbWluZ01zOiB0aGlzLnN0YXJ0dXBUaW1lcj8uZ2V0UmVwb3J0KCksXG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uSWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkuc2Vzc2lvbklkLFxuICAgICAgcnVudGltZVNlc3Npb25JZDogc2Vzc2lvbklkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWQsXG4gICAgICBzZXNzaW9uU291cmNlOiBzZXNzaW9uSWRlbnRpdHkuc291cmNlLFxuICAgICAgcGFja2FnZTogcGFja2FnZUluZm8sXG4gICAgICBidWlsZDoge1xuICAgICAgICB0aW1lc3RhbXA6IGJ1aWxkVGltZXN0YW1wLFxuICAgICAgICB0eXBlOiBCVUlMRF9UWVBFLFxuICAgICAgICBnaXRDb21taXQ6IGdpdEluZm8uY29tbWl0LFxuICAgICAgICBnaXRCcmFuY2g6IGdpdEluZm8uYnJhbmNoLFxuICAgICAgfSxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgbm9kZVZlcnNpb246IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgICAgdXB0aW1lOiBwcm9jZXNzLnVwdGltZSgpLFxuICAgICAgICBtZW1vcnlVc2FnZTogcHJvY2Vzcy5tZW1vcnlVc2FnZSgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbm9kZUVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG4gICAgICAgIGlzUHJvZHVjdGlvbjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgaXNEZXZlbG9wbWVudDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgICAgIGlzRGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcxJyxcbiAgICAgICAgaXNEb2NrZXI6IGRvY2tlckluZm8uaXNEb2NrZXIsXG4gICAgICAgIGRvY2tlckluZm86IGRvY2tlckluZm8uaW5mb1xuICAgICAgfSxcbiAgICAgIHNlcnZlcjoge1xuICAgICAgICBzdGFydFRpbWU6IHRoaXMuc3RhcnRUaW1lLFxuICAgICAgICB1cHRpbWU6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICAgIG1jcENvbm5lY3Rpb246IHRydWUgLy8gV2UncmUgY29ubmVjdGVkIGlmIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCB2aWEgTUNQXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbkhvb2tzOiB7XG4gICAgICAgIC4uLnBlcm1pc3Npb25Ib29rSW5mbyxcbiAgICAgICAgaGVhbHRoOiBwZXJtaXNzaW9uSG9va0hlYWx0aCxcbiAgICAgIH0sXG4gICAgICBzdGFydHVwOiBzdGFydHVwSW5mbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBidWlsZCBpbmZvIGFzIHVzZXItZnJpZW5kbHkgbWFya2Rvd25cbiAgICogU0VDVVJJVFkgTk9URTogT25seSBmb3JtYXRzIHN5c3RlbS1nZW5lcmF0ZWQgZGF0YSAtIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZ1xuICAgKiBBbGwgaW5wdXQgZGF0YSBjb21lcyBmcm9tIGdldEJ1aWxkSW5mbygpIHdoaWNoIG9ubHkgcmVhZHMgc3lzdGVtIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0QnVpbGRJbmZvKGluZm86IEJ1aWxkSW5mbyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgbGluZXMucHVzaCgnIyDwn5SnIEJ1aWxkIEluZm9ybWF0aW9uXFxuJyk7XG4gICAgXG4gICAgLy8gUGFja2FnZSBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+TpiBQYWNrYWdlJyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5hbWUqKjogJHtpbmZvLnBhY2thZ2UubmFtZX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVmVyc2lvbioqOiAke2luZm8ucGFja2FnZS52ZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goJycpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlTb3VyY2VMYWJlbCA9IGluZm8uc2Vzc2lvblNvdXJjZSA9PT0gJ2VudidcbiAgICAgID8gJ0V4cGxpY2l0IGVudmlyb25tZW50J1xuICAgICAgOiAnRGVyaXZlZCBmcm9tIHdvcmtzcGFjZSBjb250ZXh0JztcbiAgICBjb25zdCBzZXNzaW9uTGluZXMgPSBbXG4gICAgICAnIyMg8J+qqiBTZXNzaW9uJyxcbiAgICAgIGAtICoqU2Vzc2lvbiBJRCoqOiAke2luZm8uc2Vzc2lvbklkfWAsXG4gICAgICBgLSAqKklkZW50aXR5IFNvdXJjZSoqOiAke2lkZW50aXR5U291cmNlTGFiZWx9YCxcbiAgICBdO1xuICAgIGlmIChpbmZvLnJ1bnRpbWVTZXNzaW9uSWQgIT09IGluZm8uc2Vzc2lvbklkKSB7XG4gICAgICBzZXNzaW9uTGluZXMuc3BsaWNlKDIsIDAsIGAtICoqUnVudGltZSBTZXNzaW9uIElEKio6ICR7aW5mby5ydW50aW1lU2Vzc2lvbklkfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKC4uLnNlc3Npb25MaW5lcywgJycpO1xuICAgIFxuICAgIC8vIEJ1aWxkIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn4+X77iPIEJ1aWxkJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlR5cGUqKjogJHtpbmZvLmJ1aWxkLnR5cGV9YCk7XG4gICAgaWYgKGluZm8uYnVpbGQudGltZXN0YW1wKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqVGltZXN0YW1wKio6ICR7aW5mby5idWlsZC50aW1lc3RhbXB9YCk7XG4gICAgfVxuICAgIGlmIChpbmZvLmJ1aWxkLmdpdENvbW1pdCkge1xuICAgICAgbGluZXMucHVzaChgLSAqKkdpdCBDb21taXQqKjogXFxgJHtpbmZvLmJ1aWxkLmdpdENvbW1pdH1cXGBgKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0QnJhbmNoKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IEJyYW5jaCoqOiAke2luZm8uYnVpbGQuZ2l0QnJhbmNofWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBSdW50aW1lIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5K7IFJ1bnRpbWUnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTm9kZS5qcyoqOiAke2luZm8ucnVudGltZS5ub2RlVmVyc2lvbn1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqUGxhdGZvcm0qKjogJHtpbmZvLnJ1bnRpbWUucGxhdGZvcm19YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkFyY2hpdGVjdHVyZSoqOiAke2luZm8ucnVudGltZS5hcmNofWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQcm9jZXNzIFVwdGltZSoqOiAke3RoaXMuZm9ybWF0VXB0aW1lKGluZm8ucnVudGltZS51cHRpbWUpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipNZW1vcnkgVXNhZ2UqKjogJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFVzZWQpfSAvICR7dGhpcy5mb3JtYXRNZW1vcnkoaW5mby5ydW50aW1lLm1lbW9yeVVzYWdlLmhlYXBUb3RhbCl9YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgXG4gICAgLy8gRW52aXJvbm1lbnQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIOKame+4jyBFbnZpcm9ubWVudCcpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOT0RFX0VOVioqOiAke2luZm8uZW52aXJvbm1lbnQubm9kZUVudiB8fCAnbm90IHNldCd9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1vZGUqKjogJHtpbmZvLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbiA/ICdQcm9kdWN0aW9uJyA6IGluZm8uZW52aXJvbm1lbnQuaXNEZXZlbG9wbWVudCA/ICdEZXZlbG9wbWVudCcgOiAnVW5rbm93bid9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkRlYnVnKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RlYnVnID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRG9ja2VyKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RvY2tlciA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICBpZiAoaW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqQ29udGFpbmVyKio6ICR7aW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBTZXJ2ZXIgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfmoAgU2VydmVyJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlN0YXJ0ZWQqKjogJHtpbmZvLnNlcnZlci5zdGFydFRpbWUudG9JU09TdHJpbmcoKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5zZXJ2ZXIudXB0aW1lIC8gMTAwMCl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1DUCBDb25uZWN0aW9uKio6ICR7aW5mby5zZXJ2ZXIubWNwQ29ubmVjdGlvbiA/ICfinIUgQ29ubmVjdGVkJyA6ICfinYwgRGlzY29ubmVjdGVkJ31gKTtcblxuICAgIGlmIChpbmZvLnBlcm1pc3Npb25Ib29rcykge1xuICAgICAgY29uc3QgaW5zdGFsbGVkSG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuaW5zdGFsbGVkSG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmN1cnJlbnRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBuZWVkc1JlcGFpckhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgbGFzdFN0YXJ0dXBSZXBhaXIgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5sYXN0U3RhcnR1cFJlcGFpcjtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXBhaXJJc3N1ZXMgPSBsYXN0U3RhcnR1cFJlcGFpclxuICAgICAgICA/IGxhc3RTdGFydHVwUmVwYWlyLmhvc3RSZXN1bHRzXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ25lZWRzX3JlcGFpcicgfHwgcmVzdWx0Lm91dGNvbWUgPT09ICdlcnJvcicpXG4gICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVwYWlyRXJyb3IgPyBgJHtyZXN1bHQuaG9zdH0gKCR7cmVzdWx0LnJlcGFpckVycm9yfSlgIDogcmVzdWx0Lmhvc3QpXG4gICAgICAgICAgLmpvaW4oJzsgJylcbiAgICAgICAgOiAnJztcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJycsXG4gICAgICAgICcjIyDwn5SQIFBlcm1pc3Npb24gSG9va3MnLFxuICAgICAgICBgLSAqKkhlYWx0aCoqOiAke2luZm8ucGVybWlzc2lvbkhvb2tzLmhlYWx0aC5zdGF0dXMudG9VcHBlckNhc2UoKX0g4oCUICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLm1lc3NhZ2V9YCxcbiAgICAgICAgYC0gKipJbnN0YWxsZWQgSG9zdHMqKjogJHtpbnN0YWxsZWRIb3N0c31gLFxuICAgICAgICBgLSAqKkN1cnJlbnQgQXNzZXRzKio6ICR7Y3VycmVudEhvc3RzfWAsXG4gICAgICAgIGAtICoqTmVlZHMgUmVwYWlyKio6ICR7bmVlZHNSZXBhaXJIb3N0c31gLFxuICAgICAgKTtcblxuICAgICAgaWYgKGxhc3RTdGFydHVwUmVwYWlyKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgYC0gKipMYXN0IFN0YXJ0dXAgQXVkaXQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5jb21wbGV0ZWRBdH0gKCR7bGFzdFN0YXJ0dXBSZXBhaXIuZHVyYXRpb25Nc31tcylgLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXJzIEFwcGxpZWQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5yZXBhaXJlZENvdW50fWAsXG4gICAgICAgICAgYC0gKipTdGFydHVwIFJlcGFpciBJc3N1ZXMqKjogJHtzdGFydHVwUmVwYWlySXNzdWVzIHx8ICdOb25lJ31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUU3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXVEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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LE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQsXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxufSBmcm9tICcuLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW5mbyB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNlc3Npb25Tb3VyY2U6ICdlbnYnIHwgJ2Rlcml2ZWQnO1xuICBwYWNrYWdlOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgYnVpbGQ6IHtcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dpdCcgfCAnbnBtJyB8ICd1bmtub3duJztcbiAgICBnaXRDb21taXQ/OiBzdHJpbmc7XG4gICAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICB9O1xuICBydW50aW1lOiB7XG4gICAgbm9kZVZlcnNpb246IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIGFyY2g6IHN0cmluZztcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtZW1vcnlVc2FnZTogTm9kZUpTLk1lbW9yeVVzYWdlO1xuICB9O1xuICBlbnZpcm9ubWVudDoge1xuICAgIG5vZGVFbnY/OiBzdHJpbmc7XG4gICAgaXNQcm9kdWN0aW9uOiBib29sZWFuO1xuICAgIGlzRGV2ZWxvcG1lbnQ6IGJvb2xlYW47XG4gICAgaXNEZWJ1ZzogYm9vbGVhbjtcbiAgICBpc0RvY2tlcjogYm9vbGVhbjtcbiAgICBkb2NrZXJJbmZvPzogc3RyaW5nO1xuICB9O1xuICBzZXJ2ZXI6IHtcbiAgICBzdGFydFRpbWU6IERhdGU7XG4gICAgdXB0aW1lOiBudW1iZXI7XG4gICAgbWNwQ29ubmVjdGlvbjogYm9vbGVhbjtcbiAgfTtcbiAgcGVybWlzc2lvbkhvb2tzPzoge1xuICAgIGhlYWx0aDogUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5O1xuICAgIGluc3RhbGxlZEhvc3RzOiBzdHJpbmdbXTtcbiAgICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICAgIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIG5lZWRzUmVwYWlySG9zdHM6IHN0cmluZ1tdO1xuICAgIGRpYWdub3N0aWNzUGF0aDogc3RyaW5nO1xuICAgIGxhc3REaWFnbm9zdGljOiBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQgfCBudWxsO1xuICAgIGxhc3RTdGFydHVwUmVwYWlyOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbDtcbiAgfTtcbiAgLyoqIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3Mgc3RhdHVzLiAqL1xuICBzdGFydHVwPzoge1xuICAgIHN0YXR1czogJ3JlYWR5JyB8ICdpbml0aWFsaXppbmcnO1xuICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB1cHRpbWVNczogbnVtYmVyO1xuICAgIHN0YXJ0dXBUaW1pbmdNcz86IFN0YXJ0dXBSZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEluZm9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydFRpbWU6IERhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG4gIC8qKiBJc3N1ZSAjNzA2OiBPcHRpb25hbCBzdGFydHVwIHRpbWVyIGZvciB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uLiAqL1xuICBwcml2YXRlIHN0YXJ0dXBUaW1lcjogU3RhcnR1cFRpbWVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBDYWxsYmFjayB0byBjaGVjayBkZWZlcnJlZCBzZXR1cCBzdGF0dXMuICovXG4gIHByaXZhdGUgZGVmZXJyZWRTZXR1cENoZWNrZXI6ICgoKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVPcGVyYXRpb25zOiBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZmlsZU9wZXJhdGlvbnMgPSBmaWxlT3BlcmF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIHN0YXJ0dXAgaW5zdHJ1bWVudGF0aW9uIGFmdGVyIERJIGlzIHJlYWR5LlxuICAgKiBDYWxsZWQgZnJvbSBDb250YWluZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCByZWdpc3RyYXRpb24gdGltZS5cbiAgICovXG4gIHNldFN0YXJ0dXBUaW1lcih0aW1lcjogU3RhcnR1cFRpbWVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydHVwVGltZXIgPSB0aW1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIGRlZmVycmVkIHNldHVwIHN0YXR1cyBjaGVja2VyLlxuICAgKi9cbiAgc2V0RGVmZXJyZWRTZXR1cENoZWNrZXIoY2hlY2tlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPSBjaGVja2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wcmVoZW5zaXZlIGJ1aWxkIGluZm9ybWF0aW9uXG4gICAqIFNFQ1VSSVRZIE5PVEU6IFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBvbmx5IHN5c3RlbS1nZW5lcmF0ZWQgZGF0YVxuICAgKiBObyB1c2VyIGlucHV0IGlzIGludm9sdmVkIC0gYWxsIGRhdGEgY29tZXMgZnJvbSBmaWxlc3lzdGVtLCBnaXQsIGFuZCBOb2RlLmpzIHByb2Nlc3NcbiAgICpcbiAgICogVXNlcyBQcm9taXNlLmFsbFNldHRsZWQgdG8gY29sbGVjdCBwYXJ0aWFsIHJlc3VsdHMgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbCxcbiAgICogcHJvdmlkaW5nIG1heGltdW0gaW5mb3JtYXRpb24gYXZhaWxhYmlsaXR5IHdpdGggZ3JhY2VmdWwgZGVncmFkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QnVpbGRJbmZvKCk6IFByb21pc2U8QnVpbGRJbmZvPiB7XG4gICAgLy8gVXNlIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IGFsbCBhdmFpbGFibGUgaW5mbywgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbFxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgdGhpcy5nZXRHaXRJbmZvKCksXG4gICAgICB0aGlzLmdldERvY2tlckluZm8oKSxcbiAgICAgIGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KCksXG4gICAgXSk7XG5cbiAgICAvLyBQYWNrYWdlIGluZm8gY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogUEFDS0FHRV9OQU1FLCB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04gfTtcblxuICAgIGNvbnN0IGdpdEluZm8gPSByZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1swXS52YWx1ZVxuICAgICAgOiB7IGNvbW1pdDogdW5kZWZpbmVkLCBicmFuY2g6IHVuZGVmaW5lZCB9O1xuXG4gICAgY29uc3QgZG9ja2VySW5mbyA9IHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzFdLnZhbHVlXG4gICAgICA6IHsgaXNEb2NrZXI6IGZhbHNlLCBpbmZvOiB1bmRlZmluZWQgfTtcbiAgICBjb25zdCBwZXJtaXNzaW9uSG9va0luZm8gPSByZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1syXS52YWx1ZVxuICAgICAgOiB7XG4gICAgICAgIGluc3RhbGxlZEhvc3RzOiBbXSxcbiAgICAgICAgY3VycmVudEhvc3RzOiBbXSxcbiAgICAgICAgcmVwYWlyZWRIb3N0czogW10sXG4gICAgICAgIG5lZWRzUmVwYWlySG9zdHM6IFtdLFxuICAgICAgICBkaWFnbm9zdGljc1BhdGg6ICcnLFxuICAgICAgICBsYXN0RGlhZ25vc3RpYzogbnVsbCxcbiAgICAgICAgbGFzdFN0YXJ0dXBSZXBhaXI6IG51bGwsXG4gICAgICB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSGVhbHRoID0gc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgocGVybWlzc2lvbkhvb2tJbmZvKTtcblxuICAgIGNvbnN0IGZvcm1hdFNldHRsZWRSZWFzb24gPSAocmVhc29uOiB1bmtub3duKTogc3RyaW5nID0+IChcbiAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gYCR7cmVhc29uLm5hbWV9OiAke3JlYXNvbi5tZXNzYWdlfWAgOiBTdHJpbmcocmVhc29uKVxuICAgICk7XG5cbiAgICAvLyBMb2cgYW55IGZhaWx1cmVzIGZvciBkaWFnbm9zdGljc1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZ2l0IGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzBdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzFdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZG9ja2VyIGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzFdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgcGVybWlzc2lvbiBob29rIGF1ZGl0OiAke2Zvcm1hdFNldHRsZWRSZWFzb24ocmVzdWx0c1syXS5yZWFzb24pfWApO1xuICAgIH1cblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEJ1aWxkIGluZm8gY29sbGVjdGlvbiBoYWQgJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocyk6ICR7ZmFpbHVyZXMuam9pbignOyAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aW1lc3RhbXAgY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBidWlsZFRpbWVzdGFtcCA9IEJVSUxEX1RJTUVTVEFNUDtcblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3NcbiAgICBjb25zdCBkZWZlcnJlZENvbXBsZXRlID0gdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA/IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIoKSA6IHRydWU7XG4gICAgY29uc3Qgc3RhcnR1cEluZm86IEJ1aWxkSW5mb1snc3RhcnR1cCddID0ge1xuICAgICAgc3RhdHVzOiBkZWZlcnJlZENvbXBsZXRlID8gJ3JlYWR5JyA6ICdpbml0aWFsaXppbmcnLFxuICAgICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBkZWZlcnJlZENvbXBsZXRlLFxuICAgICAgdXB0aW1lTXM6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICBzdGFydHVwVGltaW5nTXM6IHRoaXMuc3RhcnR1cFRpbWVyPy5nZXRSZXBvcnQoKSxcbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb25JZGVudGl0eSA9IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZGVudGl0eS5zZXNzaW9uSWQsXG4gICAgICBydW50aW1lU2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkucnVudGltZVNlc3Npb25JZCxcbiAgICAgIHNlc3Npb25Tb3VyY2U6IHNlc3Npb25JZGVudGl0eS5zb3VyY2UsXG4gICAgICBwYWNrYWdlOiBwYWNrYWdlSW5mbyxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIHRpbWVzdGFtcDogYnVpbGRUaW1lc3RhbXAsXG4gICAgICAgIHR5cGU6IEJVSUxEX1RZUEUsXG4gICAgICAgIGdpdENvbW1pdDogZ2l0SW5mby5jb21taXQsXG4gICAgICAgIGdpdEJyYW5jaDogZ2l0SW5mby5icmFuY2gsXG4gICAgICB9LFxuICAgICAgcnVudGltZToge1xuICAgICAgICBub2RlVmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLFxuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgYXJjaDogcHJvY2Vzcy5hcmNoLFxuICAgICAgICB1cHRpbWU6IHByb2Nlc3MudXB0aW1lKCksXG4gICAgICAgIG1lbW9yeVVzYWdlOiBwcm9jZXNzLm1lbW9yeVVzYWdlKClcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBub2RlRW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICAgICAgaXNQcm9kdWN0aW9uOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICBpc0RldmVsb3BtZW50OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICAgICAgaXNEZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcgPT09ICd0cnVlJyB8fCBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJzEnLFxuICAgICAgICBpc0RvY2tlcjogZG9ja2VySW5mby5pc0RvY2tlcixcbiAgICAgICAgZG9ja2VySW5mbzogZG9ja2VySW5mby5pbmZvXG4gICAgICB9LFxuICAgICAgc2VydmVyOiB7XG4gICAgICAgIHN0YXJ0VGltZTogdGhpcy5zdGFydFRpbWUsXG4gICAgICAgIHVwdGltZTogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSxcbiAgICAgICAgbWNwQ29ubmVjdGlvbjogdHJ1ZSAvLyBXZSdyZSBjb25uZWN0ZWQgaWYgdGhpcyBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHZpYSBNQ1BcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uSG9va3M6IHtcbiAgICAgICAgLi4ucGVybWlzc2lvbkhvb2tJbmZvLFxuICAgICAgICBoZWFsdGg6IHBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0dXA6IHN0YXJ0dXBJbmZvLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGJ1aWxkIGluZm8gYXMgdXNlci1mcmllbmRseSBtYXJrZG93blxuICAgKiBTRUNVUklUWSBOT1RFOiBPbmx5IGZvcm1hdHMgc3lzdGVtLWdlbmVyYXRlZCBkYXRhIC0gbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nXG4gICAqIEFsbCBpbnB1dCBkYXRhIGNvbWVzIGZyb20gZ2V0QnVpbGRJbmZvKCkgd2hpY2ggb25seSByZWFkcyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRCdWlsZEluZm8oaW5mbzogQnVpbGRJbmZvKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBsaW5lcy5wdXNoKCcjIPCflKcgQnVpbGQgSW5mb3JtYXRpb25cXG4nKTtcbiAgICBcbiAgICAvLyBQYWNrYWdlIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5OmIFBhY2thZ2UnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTmFtZSoqOiAke2luZm8ucGFja2FnZS5uYW1lfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipWZXJzaW9uKio6ICR7aW5mby5wYWNrYWdlLnZlcnNpb259YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBjb25zdCBpZGVudGl0eVNvdXJjZUxhYmVsID0gaW5mby5zZXNzaW9uU291cmNlID09PSAnZW52J1xuICAgICAgPyAnRXhwbGljaXQgZW52aXJvbm1lbnQnXG4gICAgICA6ICdEZXJpdmVkIGZyb20gd29ya3NwYWNlIGNvbnRleHQnO1xuICAgIGNvbnN0IHNlc3Npb25MaW5lcyA9IFtcbiAgICAgICcjIyDwn6qqIFNlc3Npb24nLFxuICAgICAgYC0gKipTZXNzaW9uIElEKio6ICR7aW5mby5zZXNzaW9uSWR9YCxcbiAgICAgIGAtICoqSWRlbnRpdHkgU291cmNlKio6ICR7aWRlbnRpdHlTb3VyY2VMYWJlbH1gLFxuICAgIF07XG4gICAgaWYgKGluZm8ucnVudGltZVNlc3Npb25JZCAhPT0gaW5mby5zZXNzaW9uSWQpIHtcbiAgICAgIHNlc3Npb25MaW5lcy5zcGxpY2UoMiwgMCwgYC0gKipSdW50aW1lIFNlc3Npb24gSUQqKjogJHtpbmZvLnJ1bnRpbWVTZXNzaW9uSWR9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goLi4uc2Vzc2lvbkxpbmVzLCAnJyk7XG4gICAgXG4gICAgLy8gQnVpbGQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfj5fvuI8gQnVpbGQnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVHlwZSoqOiAke2luZm8uYnVpbGQudHlwZX1gKTtcbiAgICBpZiAoaW5mby5idWlsZC50aW1lc3RhbXApIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipUaW1lc3RhbXAqKjogJHtpbmZvLmJ1aWxkLnRpbWVzdGFtcH1gKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0Q29tbWl0KSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IENvbW1pdCoqOiBcXGAke2luZm8uYnVpbGQuZ2l0Q29tbWl0fVxcYGApO1xuICAgIH1cbiAgICBpZiAoaW5mby5idWlsZC5naXRCcmFuY2gpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipHaXQgQnJhbmNoKio6ICR7aW5mby5idWlsZC5naXRCcmFuY2h9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFJ1bnRpbWUgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfkrsgUnVudGltZScpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOb2RlLmpzKio6ICR7aW5mby5ydW50aW1lLm5vZGVWZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQbGF0Zm9ybSoqOiAke2luZm8ucnVudGltZS5wbGF0Zm9ybX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqQXJjaGl0ZWN0dXJlKio6ICR7aW5mby5ydW50aW1lLmFyY2h9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlByb2Nlc3MgVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5ydW50aW1lLnVwdGltZSl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1lbW9yeSBVc2FnZSoqOiAke3RoaXMuZm9ybWF0TWVtb3J5KGluZm8ucnVudGltZS5tZW1vcnlVc2FnZS5oZWFwVXNlZCl9IC8gJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFRvdGFsKX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBFbnZpcm9ubWVudCBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg4pqZ77iPIEVudmlyb25tZW50Jyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5PREVfRU5WKio6ICR7aW5mby5lbnZpcm9ubWVudC5ub2RlRW52IHx8ICdub3Qgc2V0J31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTW9kZSoqOiAke2luZm8uZW52aXJvbm1lbnQuaXNQcm9kdWN0aW9uID8gJ1Byb2R1Y3Rpb24nIDogaW5mby5lbnZpcm9ubWVudC5pc0RldmVsb3BtZW50ID8gJ0RldmVsb3BtZW50JyA6ICdVbmtub3duJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRGVidWcqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRGVidWcgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipEb2NrZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRG9ja2VyID8gJ1llcycgOiAnTm8nfWApO1xuICAgIGlmIChpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm8pIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipDb250YWluZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm99YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFNlcnZlciBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+agCBTZXJ2ZXInKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqU3RhcnRlZCoqOiAke2luZm8uc2VydmVyLnN0YXJ0VGltZS50b0lTT1N0cmluZygpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipVcHRpbWUqKjogJHt0aGlzLmZvcm1hdFVwdGltZShpbmZvLnNlcnZlci51cHRpbWUgLyAxMDAwKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTUNQIENvbm5lY3Rpb24qKjogJHtpbmZvLnNlcnZlci5tY3BDb25uZWN0aW9uID8gJ+KchSBDb25uZWN0ZWQnIDogJ+KdjCBEaXNjb25uZWN0ZWQnfWApO1xuXG4gICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzKSB7XG4gICAgICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmluc3RhbGxlZEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgY3VycmVudEhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5jdXJyZW50SG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IG5lZWRzUmVwYWlySG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBsYXN0U3RhcnR1cFJlcGFpciA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3RTdGFydHVwUmVwYWlyO1xuICAgICAgY29uc3Qgc3RhcnR1cFJlcGFpcklzc3VlcyA9IGxhc3RTdGFydHVwUmVwYWlyXG4gICAgICAgID8gbGFzdFN0YXJ0dXBSZXBhaXIuaG9zdFJlc3VsdHNcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IHJlc3VsdC5vdXRjb21lID09PSAnbmVlZHNfcmVwYWlyJyB8fCByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJylcbiAgICAgICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5yZXBhaXJFcnJvciA/IGAke3Jlc3VsdC5ob3N0fSAoJHtyZXN1bHQucmVwYWlyRXJyb3J9KWAgOiByZXN1bHQuaG9zdClcbiAgICAgICAgICAuam9pbignOyAnKVxuICAgICAgICA6ICcnO1xuXG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAnJyxcbiAgICAgICAgJyMjIPCflJAgUGVybWlzc2lvbiBIb29rcycsXG4gICAgICAgIGAtICoqSGVhbHRoKio6ICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLnN0YXR1cy50b1VwcGVyQ2FzZSgpfSDigJQgJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5oZWFsdGgubWVzc2FnZX1gLFxuICAgICAgICBgLSAqKkluc3RhbGxlZCBIb3N0cyoqOiAke2luc3RhbGxlZEhvc3RzfWAsXG4gICAgICAgIGAtICoqQ3VycmVudCBBc3NldHMqKjogJHtjdXJyZW50SG9zdHN9YCxcbiAgICAgICAgYC0gKipOZWVkcyBSZXBhaXIqKjogJHtuZWVkc1JlcGFpckhvc3RzfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5mby5wZXJtaXNzaW9uSG9va3MuZGlhZ25vc3RpY3NQYXRoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEaWFnbm9zdGljcyBMb2cqKjogJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5kaWFnbm9zdGljc1BhdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0U3RhcnR1cFJlcGFpcikge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBTdGFydHVwIEF1ZGl0Kio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIuY29tcGxldGVkQXR9ICgke2xhc3RTdGFydHVwUmVwYWlyLmR1cmF0aW9uTXN9bXMpYCxcbiAgICAgICAgICBgLSAqKlN0YXJ0dXAgUmVwYWlycyBBcHBsaWVkKio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIucmVwYWlyZWRDb3VudH1gLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXIgSXNzdWVzKio6ICR7c3RhcnR1cFJlcGFpcklzc3VlcyB8fCAnTm9uZSd9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3REaWFnbm9zdGljKSB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFnbm9zdGljID0gaW5mby5wZXJtaXNzaW9uSG9va3MubGFzdERpYWdub3N0aWM7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNPdXRjb21lID0gbGFzdERpYWdub3N0aWMub3V0Y29tZVxuICAgICAgICAgID8gYCR7bGFzdERpYWdub3N0aWMuZXZlbnR9IC8gJHtsYXN0RGlhZ25vc3RpYy5vdXRjb21lfWBcbiAgICAgICAgICA6IGxhc3REaWFnbm9zdGljLmV2ZW50O1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBEaWFnbm9zdGljIEV2ZW50Kio6ICR7bGFzdERpYWdub3N0aWMudGltZXN0YW1wfSAoJHtkaWFnbm9zdGljT3V0Y29tZX0pYCxcbiAgICAgICAgICBgLSAqKkxhc3QgRGlhZ25vc3RpYyBTdGFnZSoqOiAke2xhc3REaWFnbm9zdGljLnN0YWdlfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgSW5wdXQgQnl0ZXMqKjogJHtsYXN0RGlhZ25vc3RpYy5yYXdJbnB1dExlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgTm9ybWFsaXplZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLm5vcm1hbGl6ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgRW1pdHRlZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLmVtaXR0ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsYXN0RGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGAtICoqTGFzdCBEaWFnbm9zdGljIFJlYXNvbioqOiAke2xhc3REaWFnbm9zdGljLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
@@ -20,6 +20,38 @@ export interface PermissionHookStatus {
20
20
  settingsPath?: string;
21
21
  additionalPaths?: string[];
22
22
  }
23
+ /** Latest JSONL diagnostic event emitted by a local permission hook wrapper. */
24
+ export interface PermissionHookDiagnosticRecord {
25
+ timestamp: string;
26
+ invocationId: string;
27
+ event: string;
28
+ platform: string;
29
+ stage: string;
30
+ outcome?: string;
31
+ reason?: string;
32
+ hookPath?: string;
33
+ diagnosticsLogPath?: string;
34
+ sessionId?: string;
35
+ toolName?: string;
36
+ toolInput?: string;
37
+ rawInput?: string;
38
+ authorityHost?: string;
39
+ authorityMode?: string;
40
+ endpoint?: string;
41
+ port?: string;
42
+ payload?: string;
43
+ response?: string;
44
+ normalizedResponse?: string;
45
+ emittedResponse?: string;
46
+ attempt?: string;
47
+ maxRetries?: string;
48
+ timeoutSeconds?: string;
49
+ curlExit?: string;
50
+ rawInputLength?: number;
51
+ normalizedResponseLength?: number;
52
+ emittedResponseLength?: number;
53
+ responseLength?: number;
54
+ }
23
55
  export interface InstallPermissionHookResult {
24
56
  supported: boolean;
25
57
  installed: boolean;
@@ -43,13 +75,17 @@ export interface ReconcilePermissionHookOptions {
43
75
  sourceScriptPath?: string;
44
76
  autoRepair?: boolean;
45
77
  }
78
+ /** Aggregate health and repair state for all managed local hook hosts. */
46
79
  export interface PermissionHookAuditSummary {
47
80
  installedHosts: string[];
48
81
  currentHosts: string[];
49
82
  repairedHosts: string[];
50
83
  needsRepairHosts: string[];
84
+ diagnosticsPath: string;
85
+ lastDiagnostic: PermissionHookDiagnosticRecord | null;
51
86
  lastStartupRepair: PermissionHookStartupRepairSummary | null;
52
87
  }
88
+ /** Condensed health view surfaced in setup, permissions, and build info. */
53
89
  export interface PermissionHookHealthSummary {
54
90
  status: 'ok' | 'warning' | 'error';
55
91
  message: string;
@@ -61,6 +97,7 @@ export interface PermissionHookStartupRepairHostResult extends PermissionHookSta
61
97
  host: string;
62
98
  outcome: 'current' | 'repaired' | 'needs_repair' | 'not_installed' | 'error';
63
99
  }
100
+ /** Result summary for the most recent startup-time hook asset repair pass. */
64
101
  export interface PermissionHookStartupRepairSummary {
65
102
  startedAt: string;
66
103
  completedAt: string;
@@ -91,6 +128,7 @@ export declare const AUTO_REPAIRABLE_HOOK_HOSTS: readonly ["claude-code", ...("c
91
128
  export declare function isMissingFileError(error: unknown): boolean;
92
129
  export declare function detectIndent(raw: string): number | string;
93
130
  export declare function getPermissionHookScriptPath(homeDir?: string): string;
131
+ export declare function getPermissionHookDiagnosticsPath(homeDir?: string): string;
94
132
  export declare function normalizeHookHost(host: string): string;
95
133
  export declare function readHostSpecificHookStatus(homeDir: string, host: string): PermissionHookStatus;
96
134
  export declare function collectHookMarkerPaths(homeDir: string): Set<string>;
@@ -101,6 +139,7 @@ export declare function getHookWrapperPath(host: string, homeDir?: string): stri
101
139
  export declare function getHookSourcePath(host: string): string;
102
140
  export declare function supportsManagedHookAssets(host: string): boolean;
103
141
  export declare function getPrimaryHookScriptPath(host: string, homeDir?: string): string;
142
+ export declare function readLastPermissionHookDiagnostic(homeDir?: string): Promise<PermissionHookDiagnosticRecord | null>;
104
143
  export declare function getManagedHookAssets(host: string, homeDir?: string, sourceScriptPath?: string): HookAssetDescriptor[];
105
144
  export declare function auditHookAssets(host: string, homeDir?: string, sourceScriptPath?: string): Promise<HookAssetAuditResult>;
106
145
  export declare function getPermissionHookMarkerPath(homeDir?: string, host?: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"permissionHookShared.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookShared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permissionHookShared.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookShared.ts"],"names":[],"mappings":"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"}